From 2f609d4f3eb10aae4343066222385d2fb6554870 Mon Sep 17 00:00:00 2001 From: Bradford Derby Date: Mon, 9 Sep 2024 21:00:08 -0400 Subject: [PATCH 001/320] #2971 added logoImage and featuredProjects to the organization model --- .../migration.sql | 8 ++++ src/backend/src/prisma/schema.prisma | 46 ++++++++++--------- 2 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql diff --git a/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql b/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql new file mode 100644 index 0000000000..fe5771a6b1 --- /dev/null +++ b/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql @@ -0,0 +1,8 @@ +-- AlterTable +ALTER TABLE "Organization" ADD COLUMN "logoImage" TEXT; + +-- AlterTable +ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; + +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 2c7863e013..88d671804c 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -382,16 +382,18 @@ model WBS_Element { } model Project { - projectId String @id @default(uuid()) - wbsElementId String @unique - wbsElement WBS_Element @relation(fields: [wbsElementId], references: [wbsElementId]) - budget Int @default(0) - summary String - workPackages Work_Package[] - carId String - car Car @relation(fields: [carId], references: [carId]) - teams Team[] @relation(name: "assignedBy") - favoritedBy User[] @relation(name: "favoritedBy") + projectId String @id @default(uuid()) + wbsElementId String @unique + wbsElement WBS_Element @relation(fields: [wbsElementId], references: [wbsElementId]) + budget Int @default(0) + summary String + workPackages Work_Package[] + carId String + car Car @relation(fields: [carId], references: [carId]) + teams Team[] @relation(name: "assignedBy") + favoritedBy User[] @relation(name: "favoritedBy") + organizationId String? + organization Organization? @relation(fields: [organizationId], references: [organizationId]) } model Work_Package { @@ -872,6 +874,7 @@ model Organization { description String applyInterestImageId String? @unique exploreAsGuestImageId String? @unique + logoImage String? // Relation references wbsElements WBS_Element[] @@ -893,20 +896,21 @@ model Organization { usefulLinks Link[] FrequentlyAskedQuestions FrequentlyAskedQuestion[] Milestone Milestone[] + featuredProjects Project[] } model FrequentlyAskedQuestion { - faqId String @id @default(uuid()) - question String - answer String - userCreated User @relation(fields: [userCreatedId], references: [userId], name: "frequentlyAskedQuestionCreator") - userCreatedId String - userDeleted User? @relation(fields: [userDeletedId], references: [userId], name: "frequentlyAskedQuestionDeleter") - userDeletedId String? - dateCreated DateTime @default(now()) - dateDeleted DateTime? - organizationId String - organization Organization @relation(fields: [organizationId], references: [organizationId]) + faqId String @id @default(uuid()) + question String + answer String + userCreated User @relation(fields: [userCreatedId], references: [userId], name: "frequentlyAskedQuestionCreator") + userCreatedId String + userDeleted User? @relation(fields: [userDeletedId], references: [userId], name: "frequentlyAskedQuestionDeleter") + userDeletedId String? + dateCreated DateTime @default(now()) + dateDeleted DateTime? + organizationId String + organization Organization @relation(fields: [organizationId], references: [organizationId]) } model Milestone { From 7b2e347d536adb53e09a2820984debf80b6e0a03 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 10 Sep 2024 23:27:08 -0400 Subject: [PATCH 002/320] #2798 Created function to get projects --- src/backend/src/utils/teams.utils.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/backend/src/utils/teams.utils.ts b/src/backend/src/utils/teams.utils.ts index 087ebc37ad..5e9c2586fb 100644 --- a/src/backend/src/utils/teams.utils.ts +++ b/src/backend/src/utils/teams.utils.ts @@ -1,5 +1,8 @@ -import { Prisma, User, Team } from '@prisma/client'; +import { Prisma, User, Team, Project } from '@prisma/client'; +import prisma from '../prisma/prisma'; import { UserWithSettings } from './auth.utils'; +import { TeamQueryArgs, getTeamQueryArgs } from '../prisma-query-args/teams.query-args'; +import { NotFoundException } from './errors.utils'; const teamQueryArgsMembersOnly = Prisma.validator()({ include: { @@ -88,3 +91,23 @@ export const removeUsersFromList = (currentUsers: UserWithId[], usersToRemove: U const userIdsToRemove = usersToRemove.map((user) => user.userId); return currentUsers.filter((user) => !userIdsToRemove.includes(user.userId)); }; + +/** + * Given a team id, produces all of the projects assigned to that team + * @param teamId the id of the team + * @returns array of projects currently assigned to the given team (errors if no team is found) + */ +export const getTeamProjects = async (teamId: string): Promise => { + const team = await prisma.team.findUnique({ + where: { + teamId: teamId + }, + include: { + projects: true + } + }); + if (!team) { + throw new NotFoundException('Team', teamId); + } + return team.projects; +}; From 9b2aeaed927ffaa9d8de631dadc631215638b151 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 10 Sep 2024 23:39:07 -0400 Subject: [PATCH 003/320] #2798 redundent dependencies and linting shorthand --- src/backend/src/utils/teams.utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/src/utils/teams.utils.ts b/src/backend/src/utils/teams.utils.ts index 5e9c2586fb..8fb7c7ce21 100644 --- a/src/backend/src/utils/teams.utils.ts +++ b/src/backend/src/utils/teams.utils.ts @@ -1,7 +1,6 @@ import { Prisma, User, Team, Project } from '@prisma/client'; import prisma from '../prisma/prisma'; import { UserWithSettings } from './auth.utils'; -import { TeamQueryArgs, getTeamQueryArgs } from '../prisma-query-args/teams.query-args'; import { NotFoundException } from './errors.utils'; const teamQueryArgsMembersOnly = Prisma.validator()({ @@ -100,7 +99,7 @@ export const removeUsersFromList = (currentUsers: UserWithId[], usersToRemove: U export const getTeamProjects = async (teamId: string): Promise => { const team = await prisma.team.findUnique({ where: { - teamId: teamId + teamId }, include: { projects: true From 6489aaaf1125e02ce47e3eb3577cc3bb34f49987 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 11 Sep 2024 12:34:30 -0400 Subject: [PATCH 004/320] changed logoImage to logoIMageId in schema --- src/backend/src/prisma/schema.prisma | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 88d671804c..6903ac1bfe 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -874,7 +874,7 @@ model Organization { description String applyInterestImageId String? @unique exploreAsGuestImageId String? @unique - logoImage String? + logoImageId String? // Relation references wbsElements WBS_Element[] From 81a5e9c7e15ea38c842575ac384b7b0d213cb6e6 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 11 Sep 2024 12:44:17 -0400 Subject: [PATCH 005/320] created migration for logo name change --- .../migration.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql diff --git a/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql b/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql new file mode 100644 index 0000000000..2ddd9fa7b6 --- /dev/null +++ b/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql @@ -0,0 +1,9 @@ +/* + Warnings: + + - You are about to drop the column `logoImage` on the `Organization` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "Organization" DROP COLUMN "logoImage", +ADD COLUMN "logoImageId" TEXT; From 5c10c8fb1b0486d10f980e2c4390d6d1b0920d95 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 12 Sep 2024 15:59:50 -0400 Subject: [PATCH 006/320] #2770-added get user tasks endpoint --- .../src/controllers/users.controllers.ts | 12 ++++++++++ src/backend/src/routes/users.routes.ts | 1 + src/backend/src/services/users.services.ts | 23 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index dc2b3d88bf..e20aea4626 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -167,4 +167,16 @@ export default class UsersController { return next(error); } } + + static async getUserTasks(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { organization } = req; + + const userTasks = await UsersService.getUserTasks(userId, organization); + return res.status(200).json(userTasks); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index c9430121a1..1ba26c9452 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -46,5 +46,6 @@ userRouter.post( userRouter.get('/:userId/secure-settings', UsersController.getUserSecureSettings); userRouter.get('/:userId/schedule-settings', UsersController.getUserScheduleSettings); +userRouter.get('/:userId/tasks', UsersController.getUserTasks); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index c77292053b..964acb7d7a 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -36,6 +36,7 @@ import { } from '../prisma-query-args/user.query-args'; import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args'; import authenticatedUserTransformer from '../transformers/auth-user.transformer'; +import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; export default class UsersService { /** @@ -538,4 +539,26 @@ export default class UsersService { return userScheduleSettingsTransformer(newUserScheduleSettings); } + + static async getUserTasks(userId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ where: { userId } }); + if (!requestedUser) throw new NotFoundException('User', userId); + + const tasks = prisma.task.findMany({ + where: { + assignees: { + some: { + userId + } + }, + wbsElement: { + organizationId: organization.organizationId + } + }, + ...getTaskQueryArgs(organization.organizationId) + }); + + if (!tasks) throw new HttpException(404, 'User tasks Not Found'); + return tasks; + } } From 224add3b3c9bd2b1322b30ecef42e707f6e3599c Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Thu, 12 Sep 2024 17:05:11 -0400 Subject: [PATCH 007/320] #2764 setLogo endpoint and tests --- .../controllers/organizations.controller.ts | 15 ++++++++ .../src/routes/organizations.routes.ts | 1 + .../src/services/organizations.services.ts | 29 ++++++++++++++ .../tests/unmocked/organization.test.ts | 38 +++++++++++++++++++ 4 files changed, 83 insertions(+) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 9682ade450..694ebe11b6 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -1,5 +1,6 @@ import { NextFunction, Request, Response } from 'express'; import OrganizationsService from '../services/organizations.services'; +import { HttpException } from '../utils/errors.utils'; export default class OrganizationsController { static async setUsefulLinks(req: Request, res: Response, next: NextFunction) { @@ -51,4 +52,18 @@ export default class OrganizationsController { next(error); } } + + static async setLogoImage(req: Request, res: Response, next: NextFunction) { + try { + const logoFile = req.file || null; + if (!logoFile) { + throw new HttpException(400, 'Invalid or undefined image data'); + } + const updatedOrg = await OrganizationsService.setLogoImage(logoFile, req.currentUser, req.organization); + + return res.status(200).json(updatedOrg); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 0aca2dbfa3..d000f7c594 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -18,4 +18,5 @@ organizationRouter.post( ); organizationRouter.get('/images', OrganizationsController.getOrganizationImages); +organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 689ff6a1bc..afb2067c6f 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -131,4 +131,33 @@ export default class OrganizationsService { exploreAsGuestImage: organization.exploreAsGuestImageId }; } + + /** + * Sets the logo for an organization, User must be admin + * @param logoImage the image which will be uploaded and have its id stored in the org + * @param submitter the user submitting the logo + * @param organization the organization who's logo is being set + * @returns the updated organization + * @throws if the user is not an admin + */ + static async setLogoImage( + logoImage: Express.Multer.File, + submitter: User, + organization: Organization + ): Promise { + if (!(await userHasPermission(submitter.userId, organization.organizationId, isAdmin))) { + throw new AccessDeniedAdminOnlyException('update logo'); + } + + const logoImageData = await uploadFile(logoImage); + + const newOrg = await prisma.organization.update({ + where: { organizationId: organization.organizationId }, + data: { + logoImageId: logoImageData.id + } + }); + + return newOrg; + } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index e8bb3fcac8..a0f73e5212 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -190,4 +190,42 @@ describe('Team Type Tests', () => { expect(images.exploreAsGuestImage).toBe('uploaded-image2.png'); }); }); + + describe('Set Logo', () => { + const file1 = { originalname: 'image1.png' } as Express.Multer.File; + const file2 = { originalname: 'image2.png' } as Express.Multer.File; + it('Fails if user is not an admin', async () => { + await expect( + OrganizationsService.setLogoImage(file1, await createTestUser(wonderwomanGuest, orgId), organization) + ).rejects.toThrow(new AccessDeniedAdminOnlyException('update logo')); + }); + + it('Succeeds and updates the logo', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + (uploadFile as Mock).mockImplementation((file) => { + return Promise.resolve({ id: `uploaded-${file.originalname}` }); + }); + + await OrganizationsService.setLogoImage(file1, testBatman, organization); + + const oldOrganization = await prisma.organization.findUnique({ + where: { + organizationId: orgId + } + }); + + expect(oldOrganization).not.toBeNull(); + expect(oldOrganization?.logoImageId).toBe('uploaded-image1.png'); + + await OrganizationsService.setLogoImage(file2, testBatman, organization); + + const updatedOrganization = await prisma.organization.findUnique({ + where: { + organizationId: orgId + } + }); + + expect(updatedOrganization?.logoImageId).toBe('uploaded-image2.png'); + }); + }); }); From f0da467e0602407132fd8acfa94df751b7eb9f7b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 13 Sep 2024 10:36:09 -0400 Subject: [PATCH 008/320] #2770-more efficient query --- src/backend/src/services/users.services.ts | 25 ++++++---------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 964acb7d7a..1582108b55 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -36,7 +36,8 @@ import { } from '../prisma-query-args/user.query-args'; import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args'; import authenticatedUserTransformer from '../transformers/auth-user.transformer'; -import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; +import { getTaskQueryArgs, TaskQueryArgs } from '../prisma-query-args/tasks.query-args'; +import taskTransformer from '../transformers/tasks.transformer'; export default class UsersService { /** @@ -541,24 +542,12 @@ export default class UsersService { } static async getUserTasks(userId: string, organization: Organization) { - const requestedUser = await prisma.user.findUnique({ where: { userId } }); - if (!requestedUser) throw new NotFoundException('User', userId); - - const tasks = prisma.task.findMany({ - where: { - assignees: { - some: { - userId - } - }, - wbsElement: { - organizationId: organization.organizationId - } - }, - ...getTaskQueryArgs(organization.organizationId) + const requestedUser = await prisma.user.findUnique({ + where: { userId }, + include: { assignedTasks: getTaskQueryArgs(organization.organizationId) } }); + if (!requestedUser) throw new NotFoundException('User', userId); - if (!tasks) throw new HttpException(404, 'User tasks Not Found'); - return tasks; + return requestedUser.assignedTasks.map(taskTransformer); } } From 8c5a705bffd38bf9b519bf487fba3415969e149b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 13 Sep 2024 10:39:15 -0400 Subject: [PATCH 009/320] #2770-unused import --- src/backend/src/services/users.services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 1582108b55..7ac7c47b3c 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -36,7 +36,7 @@ import { } from '../prisma-query-args/user.query-args'; import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args'; import authenticatedUserTransformer from '../transformers/auth-user.transformer'; -import { getTaskQueryArgs, TaskQueryArgs } from '../prisma-query-args/tasks.query-args'; +import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; export default class UsersService { From d99c461fe7029fe465c307ad4f10867f584fa38c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 13 Sep 2024 12:51:00 -0400 Subject: [PATCH 010/320] #2796-Added guest view tab to admin tools --- src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 9cdf7d1ad1..4a68e3cfe6 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -40,6 +40,7 @@ const AdminToolsPage: React.FC = () => { } if (isUserAdmin) { tabs.push({ tabUrlValue: 'recruitment', tabName: 'Recruitment' }); + tabs.push({ tabUrlValue: 'guest-view', tabName: 'Guest View' }); tabs.push({ tabUrlValue: 'miscellaneous', tabName: 'Miscellaneous' }); } @@ -91,6 +92,8 @@ const AdminToolsPage: React.FC = () => { ) : tabIndex === 3 ? ( + ) : tabIndex === 4 ? ( + ) : ( From d347b041d7965e478538452e3eb4ce6c30cfdd2e Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sun, 15 Sep 2024 20:38:11 -0400 Subject: [PATCH 011/320] #2764 naming change and removed null check --- src/backend/src/controllers/organizations.controller.ts | 5 ++--- src/backend/src/services/organizations.services.ts | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 694ebe11b6..9ef594a98c 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -55,11 +55,10 @@ export default class OrganizationsController { static async setLogoImage(req: Request, res: Response, next: NextFunction) { try { - const logoFile = req.file || null; - if (!logoFile) { + if (!req.file) { throw new HttpException(400, 'Invalid or undefined image data'); } - const updatedOrg = await OrganizationsService.setLogoImage(logoFile, req.currentUser, req.organization); + const updatedOrg = await OrganizationsService.setLogoImage(req.file, req.currentUser, req.organization); return res.status(200).json(updatedOrg); } catch (error: unknown) { diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index afb2067c6f..0f5197910e 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -151,13 +151,13 @@ export default class OrganizationsService { const logoImageData = await uploadFile(logoImage); - const newOrg = await prisma.organization.update({ + const updatedOrg = await prisma.organization.update({ where: { organizationId: organization.organizationId }, data: { logoImageId: logoImageData.id } }); - return newOrg; + return updatedOrg; } } From b5d4915cf0e741a036595efa60b713c6943e0005 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Mon, 16 Sep 2024 19:15:29 -0400 Subject: [PATCH 012/320] #2794 Component with button to encourage memberst to go to teams --- .../components/MemberEncouragement.tsx | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx diff --git a/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx new file mode 100644 index 0000000000..285fa7411d --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Box, Alert, Typography, Grid } from '@mui/material'; +import { routes } from '../../../utils/routes'; +import { NERButton } from '../../../components/NERButton'; +import { useHistory } from 'react-router-dom'; + +const MemberEncouragement: React.FC = () => { + const history = useHistory(); + return ( + + + + + + Already a member? + + + Talk to the head of your team to become a member and get added to the team on FinishLine! + + + + { + history.push(routes.TEAMS); + }} + > + See Teams > + + + + + + ); +}; + +export default MemberEncouragement; From b3f28fe074be4b2d80c35cd4cb0b8d24c6f00284 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Sep 2024 10:41:30 -0400 Subject: [PATCH 013/320] #2766-added set featured projects endpoint --- .../controllers/organizations.controller.ts | 11 +++++++ .../src/routes/organizations.routes.ts | 10 +++++- .../src/services/organizations.services.ts | 22 +++++++++++++ src/backend/src/utils/projects.utils.ts | 32 +++++++++++++++++-- 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 9682ade450..e781d2117c 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -51,4 +51,15 @@ export default class OrganizationsController { next(error); } } + + static async setOrganizationFeaturedProjects(req: Request, res: Response, next: NextFunction) { + try { + const { projectIds } = req.body; + const featuredProjects = await OrganizationsService.setFeaturedProjects(projectIds, req.organization, req.currentUser); + + res.status(200).json(featuredProjects); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 0aca2dbfa3..fdb3282939 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -1,7 +1,8 @@ import express from 'express'; -import { linkValidators, validateInputs } from '../utils/validation.utils'; +import { linkValidators, nonEmptyString, validateInputs } from '../utils/validation.utils'; import OrganizationsController from '../controllers/organizations.controller'; import multer, { memoryStorage } from 'multer'; +import { body } from 'express-validator'; const organizationRouter = express.Router(); const upload = multer({ limits: { fileSize: 30000000 }, storage: memoryStorage() }); @@ -18,4 +19,11 @@ organizationRouter.post( ); organizationRouter.get('/images', OrganizationsController.getOrganizationImages); +organizationRouter.post( + '/featured-projects/set', + body('projectIds').isArray(), + nonEmptyString(body('projectIds.*')), + validateInputs, + OrganizationsController.setOrganizationFeaturedProjects +); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 689ff6a1bc..1b8c4db762 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -7,6 +7,7 @@ import { createUsefulLinks } from '../utils/organizations.utils'; import { linkTransformer } from '../transformers/links.transformer'; import { getLinkQueryArgs } from '../prisma-query-args/links.query-args'; import { uploadFile } from '../utils/google-integration.utils'; +import { getProjects } from '../utils/projects.utils'; export default class OrganizationsService { /** @@ -131,4 +132,25 @@ export default class OrganizationsService { exploreAsGuestImage: organization.exploreAsGuestImageId }; } + + static async setFeaturedProjects(projectIds: string[], organization: Organization, submitter: User) { + console.log('IN UTIL', projectIds); + if (!(await userHasPermission(submitter.userId, organization.organizationId, isAdmin))) + throw new AccessDeniedAdminOnlyException('update featured projects'); + + //throws if all projects are not found + const featuredProjects = await getProjects(projectIds, organization.organizationId); + + const updatedOrg = await prisma.organization.update({ + where: { organizationId: organization.organizationId }, + data: { + featuredProjects: { + set: featuredProjects.map((project) => ({ projectId: project.projectId })) + } + }, + include: { featuredProjects: true } + }); + + return updatedOrg; + } } diff --git a/src/backend/src/utils/projects.utils.ts b/src/backend/src/utils/projects.utils.ts index 7256468e7d..4927ab8da5 100644 --- a/src/backend/src/utils/projects.utils.ts +++ b/src/backend/src/utils/projects.utils.ts @@ -1,7 +1,7 @@ -import { WBS_Element_Status } from '@prisma/client'; +import { Project, WBS_Element_Status } from '@prisma/client'; import prisma from '../prisma/prisma'; import { DescriptionBulletPreview, LinkCreateArgs, WbsElementStatus } from 'shared'; -import { DeletedException, NotFoundException } from './errors.utils'; +import { DeletedException, HttpException, NotFoundException } from './errors.utils'; import { ChangeCreateArgs, createChange, createListChanges, getDescriptionBulletChanges } from './changes.utils'; import { DescriptionBulletDestination, addRawDescriptionBullets, editDescriptionBullets } from './description-bullets.utils'; import { linkToChangeListValue, updateLinks } from './links.utils'; @@ -9,6 +9,10 @@ import { getLinkQueryArgs } from '../prisma-query-args/links.query-args'; import { getDescriptionBulletQueryArgs } from '../prisma-query-args/description-bullets.query-args'; import { getProjectQueryArgs } from '../prisma-query-args/projects.query-args'; +export type ProjectWithId = { + projectId: String; +}; + /** * calculate the project's status based on its workpacakges' status * @param proj a given project to be calculated on its status @@ -213,3 +217,27 @@ export const checkMaterialInputs = async ( if (!unit) throw new NotFoundException('Unit', unitName); } }; + +export const getProjects = async (projectIds: string[], organizationId: string) => { + const projects = await prisma.project.findMany({ + where: { projectId: { in: projectIds } }, + ...getProjectQueryArgs(organizationId) + }); + + validateFoundProjects(projects, projectIds); + + return projects; +}; + +/** + * Validates that the projects found in the database match the given projectIds + * @param projects the projects found in the database + * @param projectIds the requested projectIds to retrieve + */ +const validateFoundProjects = (projects: Project[], projectIds: string[]) => { + if (projects.length !== projectIds.length) { + const primsaProjectIds = projects.map((project) => project.projectId); + const missingProjectIds = projectIds.filter((id) => !primsaProjectIds.includes(id)); + throw new HttpException(404, `Projects(s) with the following ids not found: ${missingProjectIds.join(', ')}`); + } +}; From a4a11a09a46fd247f79b62bb49d07e00ca8089d1 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Sep 2024 10:45:10 -0400 Subject: [PATCH 014/320] #2766- removed console log --- src/backend/src/services/organizations.services.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 1b8c4db762..bacbe4c5d4 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -134,7 +134,6 @@ export default class OrganizationsService { } static async setFeaturedProjects(projectIds: string[], organization: Organization, submitter: User) { - console.log('IN UTIL', projectIds); if (!(await userHasPermission(submitter.userId, organization.organizationId, isAdmin))) throw new AccessDeniedAdminOnlyException('update featured projects'); From 82a9d20ef27f8a012b50045a6fb458c3743e0111 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Sep 2024 10:49:44 -0400 Subject: [PATCH 015/320] #2766-added comment to get Projects --- src/backend/src/utils/projects.utils.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/src/utils/projects.utils.ts b/src/backend/src/utils/projects.utils.ts index 4927ab8da5..22becc4e89 100644 --- a/src/backend/src/utils/projects.utils.ts +++ b/src/backend/src/utils/projects.utils.ts @@ -218,6 +218,11 @@ export const checkMaterialInputs = async ( } }; +/** + * Produce a array of primsa formated projectIDs, given the array of Project + * @param projectIds the projectIds to get as users + * @returns projectIds in prisma format + */ export const getProjects = async (projectIds: string[], organizationId: string) => { const projects = await prisma.project.findMany({ where: { projectId: { in: projectIds } }, From 026ff878b2f1d55072ace7b68f5dca0438aef40c Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 17 Sep 2024 14:01:37 -0400 Subject: [PATCH 016/320] #2831 Get organization logo endpoint and tests --- .../controllers/organizations.controller.ts | 9 +++++++ .../src/routes/organizations.routes.ts | 1 + .../src/services/organizations.services.ts | 23 +++++++++++++++- .../tests/unmocked/organization.test.ts | 27 +++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 9ef594a98c..e09ffb9634 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -65,4 +65,13 @@ export default class OrganizationsController { return next(error); } } + + static async getOrganizationLogoImage(req: Request, res: Response, next: NextFunction) { + try { + const logoImageId = await OrganizationsService.getLogoImage(req.organization.organizationId); + res.status(200).json(logoImageId); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index d000f7c594..30f84cfabd 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -19,4 +19,5 @@ organizationRouter.post( organizationRouter.get('/images', OrganizationsController.getOrganizationImages); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); +organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 0f5197910e..cf22324c93 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -1,7 +1,7 @@ import { Organization, User } from '@prisma/client'; import { LinkCreateArgs, isAdmin } from 'shared'; import prisma from '../prisma/prisma'; -import { AccessDeniedAdminOnlyException, NotFoundException } from '../utils/errors.utils'; +import { AccessDeniedAdminOnlyException, HttpException, NotFoundException } from '../utils/errors.utils'; import { userHasPermission } from '../utils/users.utils'; import { createUsefulLinks } from '../utils/organizations.utils'; import { linkTransformer } from '../transformers/links.transformer'; @@ -160,4 +160,25 @@ export default class OrganizationsService { return updatedOrg; } + + /** + * Gets the logo image of the organization + * @param organizationId the id of the organization + * @returns the id of the image + */ + static async getLogoImage(organizationId: string): Promise { + const organization = await prisma.organization.findUnique({ + where: { organizationId } + }); + + if (!organization) { + throw new NotFoundException('Organization', organizationId); + } + + if (!organization.logoImageId) { + throw new HttpException(404, `Organization ${organizationId} does not have a logo image`); + } + + return organization.logoImageId; + } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index a0f73e5212..cdda4c3c3e 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -228,4 +228,31 @@ describe('Team Type Tests', () => { expect(updatedOrganization?.logoImageId).toBe('uploaded-image2.png'); }); }); + + describe('Get Organization Logo', () => { + it('Fails if an organization does not exist', async () => { + await expect(async () => await OrganizationsService.getLogoImage('1')).rejects.toThrow( + new NotFoundException('Organization', '1') + ); + }); + + it('Fails if the organization does not have a logo image', async () => { + await expect(async () => await OrganizationsService.getLogoImage(orgId)).rejects.toThrow( + new HttpException(404, `Organization ${orgId} does not have a logo image`) + ); + }); + + it('Succeeds and gets the image', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await OrganizationsService.setLogoImage( + { originalname: 'image1.png' } as Express.Multer.File, + testBatman, + organization + ); + const image = await OrganizationsService.getLogoImage(orgId); + + expect(image).not.toBeNull(); + expect(image).toBe('uploaded-image1.png'); + }); + }); }); From ec5070092b61b420bb4f189e781511b2d1a34120 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 17 Sep 2024 14:06:58 -0400 Subject: [PATCH 017/320] Revert "#2831 Get organization logo endpoint and tests" This reverts commit 026ff878b2f1d55072ace7b68f5dca0438aef40c. --- .../controllers/organizations.controller.ts | 9 ------- .../src/routes/organizations.routes.ts | 1 - .../src/services/organizations.services.ts | 23 +--------------- .../tests/unmocked/organization.test.ts | 27 ------------------- 4 files changed, 1 insertion(+), 59 deletions(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index e09ffb9634..9ef594a98c 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -65,13 +65,4 @@ export default class OrganizationsController { return next(error); } } - - static async getOrganizationLogoImage(req: Request, res: Response, next: NextFunction) { - try { - const logoImageId = await OrganizationsService.getLogoImage(req.organization.organizationId); - res.status(200).json(logoImageId); - } catch (error: unknown) { - next(error); - } - } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 30f84cfabd..d000f7c594 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -19,5 +19,4 @@ organizationRouter.post( organizationRouter.get('/images', OrganizationsController.getOrganizationImages); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); -organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index cf22324c93..0f5197910e 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -1,7 +1,7 @@ import { Organization, User } from '@prisma/client'; import { LinkCreateArgs, isAdmin } from 'shared'; import prisma from '../prisma/prisma'; -import { AccessDeniedAdminOnlyException, HttpException, NotFoundException } from '../utils/errors.utils'; +import { AccessDeniedAdminOnlyException, NotFoundException } from '../utils/errors.utils'; import { userHasPermission } from '../utils/users.utils'; import { createUsefulLinks } from '../utils/organizations.utils'; import { linkTransformer } from '../transformers/links.transformer'; @@ -160,25 +160,4 @@ export default class OrganizationsService { return updatedOrg; } - - /** - * Gets the logo image of the organization - * @param organizationId the id of the organization - * @returns the id of the image - */ - static async getLogoImage(organizationId: string): Promise { - const organization = await prisma.organization.findUnique({ - where: { organizationId } - }); - - if (!organization) { - throw new NotFoundException('Organization', organizationId); - } - - if (!organization.logoImageId) { - throw new HttpException(404, `Organization ${organizationId} does not have a logo image`); - } - - return organization.logoImageId; - } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index cdda4c3c3e..a0f73e5212 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -228,31 +228,4 @@ describe('Team Type Tests', () => { expect(updatedOrganization?.logoImageId).toBe('uploaded-image2.png'); }); }); - - describe('Get Organization Logo', () => { - it('Fails if an organization does not exist', async () => { - await expect(async () => await OrganizationsService.getLogoImage('1')).rejects.toThrow( - new NotFoundException('Organization', '1') - ); - }); - - it('Fails if the organization does not have a logo image', async () => { - await expect(async () => await OrganizationsService.getLogoImage(orgId)).rejects.toThrow( - new HttpException(404, `Organization ${orgId} does not have a logo image`) - ); - }); - - it('Succeeds and gets the image', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await OrganizationsService.setLogoImage( - { originalname: 'image1.png' } as Express.Multer.File, - testBatman, - organization - ); - const image = await OrganizationsService.getLogoImage(orgId); - - expect(image).not.toBeNull(); - expect(image).toBe('uploaded-image1.png'); - }); - }); }); From 6ebfee64b6abd55131a80dbee2ed2ac63f9962b8 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 17 Sep 2024 14:14:03 -0400 Subject: [PATCH 018/320] "#2831 Get organization logo endpoint and tests" --- .../controllers/organizations.controller.ts | 9 +++++++ .../src/routes/organizations.routes.ts | 1 + .../src/services/organizations.services.ts | 23 +++++++++++++++- .../tests/unmocked/organization.test.ts | 27 +++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 9ef594a98c..e09ffb9634 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -65,4 +65,13 @@ export default class OrganizationsController { return next(error); } } + + static async getOrganizationLogoImage(req: Request, res: Response, next: NextFunction) { + try { + const logoImageId = await OrganizationsService.getLogoImage(req.organization.organizationId); + res.status(200).json(logoImageId); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index d000f7c594..30f84cfabd 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -19,4 +19,5 @@ organizationRouter.post( organizationRouter.get('/images', OrganizationsController.getOrganizationImages); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); +organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 0f5197910e..cf22324c93 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -1,7 +1,7 @@ import { Organization, User } from '@prisma/client'; import { LinkCreateArgs, isAdmin } from 'shared'; import prisma from '../prisma/prisma'; -import { AccessDeniedAdminOnlyException, NotFoundException } from '../utils/errors.utils'; +import { AccessDeniedAdminOnlyException, HttpException, NotFoundException } from '../utils/errors.utils'; import { userHasPermission } from '../utils/users.utils'; import { createUsefulLinks } from '../utils/organizations.utils'; import { linkTransformer } from '../transformers/links.transformer'; @@ -160,4 +160,25 @@ export default class OrganizationsService { return updatedOrg; } + + /** + * Gets the logo image of the organization + * @param organizationId the id of the organization + * @returns the id of the image + */ + static async getLogoImage(organizationId: string): Promise { + const organization = await prisma.organization.findUnique({ + where: { organizationId } + }); + + if (!organization) { + throw new NotFoundException('Organization', organizationId); + } + + if (!organization.logoImageId) { + throw new HttpException(404, `Organization ${organizationId} does not have a logo image`); + } + + return organization.logoImageId; + } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index a0f73e5212..cdda4c3c3e 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -228,4 +228,31 @@ describe('Team Type Tests', () => { expect(updatedOrganization?.logoImageId).toBe('uploaded-image2.png'); }); }); + + describe('Get Organization Logo', () => { + it('Fails if an organization does not exist', async () => { + await expect(async () => await OrganizationsService.getLogoImage('1')).rejects.toThrow( + new NotFoundException('Organization', '1') + ); + }); + + it('Fails if the organization does not have a logo image', async () => { + await expect(async () => await OrganizationsService.getLogoImage(orgId)).rejects.toThrow( + new HttpException(404, `Organization ${orgId} does not have a logo image`) + ); + }); + + it('Succeeds and gets the image', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await OrganizationsService.setLogoImage( + { originalname: 'image1.png' } as Express.Multer.File, + testBatman, + organization + ); + const image = await OrganizationsService.getLogoImage(orgId); + + expect(image).not.toBeNull(); + expect(image).toBe('uploaded-image1.png'); + }); + }); }); From 2a0b1c655387d7d3a0a5ad23be55dc151fc6e2d5 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 17 Sep 2024 16:29:31 -0400 Subject: [PATCH 019/320] #2794 added alert to guest home page --- src/frontend/src/pages/HomePage/GuestHomePage.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 9297a2a008..a003297695 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -3,6 +3,7 @@ import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import ImageWithButton from './components/ImageWithButton'; import emitter from '../../app/EventBus'; +import MemberEncouragement from './components/MemberEncouragement'; interface GuestHomePageProps { user: AuthenticatedUser; @@ -20,6 +21,7 @@ const GuestHomePage = ({ user, setOnMemberHomePage }: GuestHomePageProps) => { {user ? `Welcome, ${user.firstName}!` : 'Welcome, Guest!'} + Date: Wed, 18 Sep 2024 20:58:39 -0400 Subject: [PATCH 020/320] #2767: created featured projects endpoint --- .../controllers/organizations.controller.ts | 9 +++++++++ src/backend/src/routes/organizations.routes.ts | 1 + .../src/services/organizations.services.ts | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 8555c7a62d..feaf00b9df 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -85,4 +85,13 @@ export default class OrganizationsController { next(error); } } + + static async getFeaturedProjects(req: Request, res: Response, next: NextFunction) { + try { + const featuredProjects = await OrganizationsService.getOrganizationFeaturedProjects(req.organization.organizationId); + res.status(200).json(featuredProjects); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 631a3b05ce..9964699677 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -28,4 +28,5 @@ organizationRouter.post( ); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); +organizationRouter.get('/featured-projects', OrganizationsController.getFeaturedProjects); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 666efccbbe..98cdbbc845 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -209,4 +209,22 @@ export default class OrganizationsService { return organization.logoImageId; } + + /** + * Gets the featured projects for the given organization Id + * @param organizationId the organization to get the projects for + * @returns all the featured projects for the organization + */ + static async getOrganizationFeaturedProjects(organizationId: string) { + const organization = await prisma.organization.findUnique({ + where: { organizationId }, + include: { featuredProjects: true } + }); + + if (!organization) { + throw new NotFoundException('Organization', organizationId); + } + + return organization.featuredProjects; + } } From c2cb306c6022d33130951560146383d16764a26a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 21:41:59 -0400 Subject: [PATCH 021/320] #2770-added test --- src/backend/tests/test-utils.ts | 27 ++++++++++++++++++++++- src/backend/tests/unmocked/users.test.ts | 28 ++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/backend/tests/unmocked/users.test.ts diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index cd823bdc73..d6c09a341b 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -12,10 +12,11 @@ import prisma from '../src/prisma/prisma'; import { dbSeedAllUsers } from '../src/prisma/seed-data/users.seed'; import TeamsService from '../src/services/teams.services'; import ReimbursementRequestService from '../src/services/reimbursement-requests.services'; -import { ClubAccount, RoleEnum } from 'shared'; +import { ClubAccount, RoleEnum, TaskPriority, TaskStatus } from 'shared'; import { batmanAppAdmin, batmanScheduleSettings, batmanSecureSettings, batmanSettings } from './test-data/users.test-data'; import { getWorkPackageTemplateQueryArgs } from '../src/prisma-query-args/work-package-template.query-args'; import DesignReviewsService from '../src/services/design-reviews.services'; +import TasksService from '../src/services/tasks.services'; export interface CreateTestUserParams { firstName: string; @@ -414,3 +415,27 @@ export const createTestDesignReview = async () => { const orgId = organization.organizationId; return { dr, organization, orgId }; }; + +export const createTestTask = async (user: User, organization?: Organization) => { + if (!organization) organization = await createTestOrganization(); + const orgId = organization.organizationId; + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const task = await TasksService.createTask( + testBatman, + { + carNumber: 0, + projectNumber: 0, + workPackageNumber: 0 + }, + 'Test task', + 'Test', + new Date(), + TaskPriority.High, + TaskStatus.IN_PROGRESS, + [testBatman.userId], + organization + ); + + if (!task) throw new Error('Failed to create design review'); + return { task, organization, orgId }; +}; diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts new file mode 100644 index 0000000000..941f25137d --- /dev/null +++ b/src/backend/tests/unmocked/users.test.ts @@ -0,0 +1,28 @@ +import { Organization } from '@prisma/client'; +import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; +import { batmanAppAdmin } from '../test-data/users.test-data'; +import UsersService from '../../src/services/users.services'; + +describe('User Tests', () => { + let orgId: string; + let organization: Organization; + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + }); + + afterEach(async () => { + await resetUsers(); + }); + + describe('Get Users Tasks', () => { + it("Succeeds and gets user's assigned tasks", async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const { task } = await createTestTask(testBatman, organization); + + const userTasks = await UsersService.getUserTasks(testBatman.userId, organization); + + expect(userTasks).toStrictEqual([task]); + }); + }); +}); From 13a3f4f78ef53880e26f59f8cd865f939e9007c7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 21:43:33 -0400 Subject: [PATCH 022/320] #2770-changed error message --- src/backend/tests/test-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index d6c09a341b..0ce0450356 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -436,6 +436,6 @@ export const createTestTask = async (user: User, organization?: Organization) => organization ); - if (!task) throw new Error('Failed to create design review'); + if (!task) throw new Error('Failed to create task'); return { task, organization, orgId }; }; From ca0fc03656e6252310629789b7076c36cc44672d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 21:45:41 -0400 Subject: [PATCH 023/320] #2770-use user param --- src/backend/tests/test-utils.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 0ce0450356..92b18bbd49 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -419,9 +419,8 @@ export const createTestDesignReview = async () => { export const createTestTask = async (user: User, organization?: Organization) => { if (!organization) organization = await createTestOrganization(); const orgId = organization.organizationId; - const testBatman = await createTestUser(batmanAppAdmin, orgId); const task = await TasksService.createTask( - testBatman, + user, { carNumber: 0, projectNumber: 0, @@ -432,7 +431,7 @@ export const createTestTask = async (user: User, organization?: Organization) => new Date(), TaskPriority.High, TaskStatus.IN_PROGRESS, - [testBatman.userId], + [user.userId], organization ); From f6932c834badde6d01d1961ff53b9d789c449d8c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 21:51:57 -0400 Subject: [PATCH 024/320] #2770-changed test wbs num --- src/backend/tests/test-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 92b18bbd49..40728dfafa 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -423,7 +423,7 @@ export const createTestTask = async (user: User, organization?: Organization) => user, { carNumber: 0, - projectNumber: 0, + projectNumber: 7, workPackageNumber: 0 }, 'Test task', From 78d505a776b96263ae92292bf3995c714b570c82 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 21:56:47 -0400 Subject: [PATCH 025/320] #2770-created test project --- src/backend/tests/test-utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 40728dfafa..6fac31fd62 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -419,11 +419,12 @@ export const createTestDesignReview = async () => { export const createTestTask = async (user: User, organization?: Organization) => { if (!organization) organization = await createTestOrganization(); const orgId = organization.organizationId; + const project = await createTestProject(user, organization.organizationId); const task = await TasksService.createTask( user, { carNumber: 0, - projectNumber: 7, + projectNumber: 0, workPackageNumber: 0 }, 'Test task', From f785165f8d10d43fb14267e1d21934fde779ced0 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:02:20 -0400 Subject: [PATCH 026/320] #2770-linting errors --- src/backend/tests/test-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 6fac31fd62..a33678b89f 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -419,12 +419,12 @@ export const createTestDesignReview = async () => { export const createTestTask = async (user: User, organization?: Organization) => { if (!organization) organization = await createTestOrganization(); const orgId = organization.organizationId; - const project = await createTestProject(user, organization.organizationId); + await createTestProject(user, organization.organizationId); const task = await TasksService.createTask( user, { carNumber: 0, - projectNumber: 0, + projectNumber: 1, workPackageNumber: 0 }, 'Test task', From d7fafc74534e606b76ec5f133a30fa886e8eb97b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:16:26 -0400 Subject: [PATCH 027/320] #2770- assigned test project to team --- src/backend/tests/test-utils.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index a33678b89f..11a20f82e6 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -17,6 +17,7 @@ import { batmanAppAdmin, batmanScheduleSettings, batmanSecureSettings, batmanSet import { getWorkPackageTemplateQueryArgs } from '../src/prisma-query-args/work-package-template.query-args'; import DesignReviewsService from '../src/services/design-reviews.services'; import TasksService from '../src/services/tasks.services'; +import ProjectsService from '../src/services/projects.services'; export interface CreateTestUserParams { firstName: string; @@ -419,7 +420,22 @@ export const createTestDesignReview = async () => { export const createTestTask = async (user: User, organization?: Organization) => { if (!organization) organization = await createTestOrganization(); const orgId = organization.organizationId; - await createTestProject(user, organization.organizationId); + const team = await TeamsService.createTeam(user, 'Test team', user.userId, 'Test', '', false, organization); + if (!team) throw new Error('Failed to create team'); + const project = await createTestProject(user, organization.organizationId); + if (!project) throw new Error('Failed to create project'); + const projectWithTeam = ProjectsService.setProjectTeam( + user, + { + carNumber: 0, + projectNumber: 1, + workPackageNumber: 0 + }, + team.teamId, + organization + ); + if (!projectWithTeam) throw new Error('Failed to create project with team'); + const task = await TasksService.createTask( user, { From 259cdaf809f45b26d3e71918d2edc38d16297b8b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:20:46 -0400 Subject: [PATCH 028/320] #2770-forgot to await --- src/backend/tests/test-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 11a20f82e6..47279bd39f 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -424,7 +424,7 @@ export const createTestTask = async (user: User, organization?: Organization) => if (!team) throw new Error('Failed to create team'); const project = await createTestProject(user, organization.organizationId); if (!project) throw new Error('Failed to create project'); - const projectWithTeam = ProjectsService.setProjectTeam( + const projectWithTeam = await ProjectsService.setProjectTeam( user, { carNumber: 0, From 13ac9d8c6ae52e44ec68369de74d31a8741c1963 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:25:22 -0400 Subject: [PATCH 029/320] #2770-fixed test --- src/backend/tests/test-utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 47279bd39f..99f2a010e2 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -424,7 +424,7 @@ export const createTestTask = async (user: User, organization?: Organization) => if (!team) throw new Error('Failed to create team'); const project = await createTestProject(user, organization.organizationId); if (!project) throw new Error('Failed to create project'); - const projectWithTeam = await ProjectsService.setProjectTeam( + await ProjectsService.setProjectTeam( user, { carNumber: 0, @@ -434,7 +434,6 @@ export const createTestTask = async (user: User, organization?: Organization) => team.teamId, organization ); - if (!projectWithTeam) throw new Error('Failed to create project with team'); const task = await TasksService.createTask( user, From 7081c6049847598ecc15c1b00aaf229acdfd3d37 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:35:46 -0400 Subject: [PATCH 030/320] #2770-added invalid user id test --- src/backend/tests/unmocked/users.test.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 941f25137d..4feedbd050 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -2,6 +2,7 @@ import { Organization } from '@prisma/client'; import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; +import { NotFoundException } from '../../src/utils/errors.utils'; describe('User Tests', () => { let orgId: string; @@ -15,11 +16,15 @@ describe('User Tests', () => { await resetUsers(); }); - describe('Get Users Tasks', () => { - it("Succeeds and gets user's assigned tasks", async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - const { task } = await createTestTask(testBatman, organization); + describe('Get Users Tasks', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const { task } = await createTestTask(testBatman, organization); + + it('fails on invalid user id', async () => { + expect(UsersService.getUserTasks('1', organization)).rejects.toThrow(new NotFoundException('User', '1')); + }); + it("Succeeds and gets user's assigned tasks", async () => { const userTasks = await UsersService.getUserTasks(testBatman.userId, organization); expect(userTasks).toStrictEqual([task]); From bc54c1e5629a3dc901fecbb70e34ddbd1ec51d33 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:40:00 -0400 Subject: [PATCH 031/320] #2770-fixed test --- src/backend/tests/unmocked/users.test.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 4feedbd050..17a503ae8b 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -16,15 +16,14 @@ describe('User Tests', () => { await resetUsers(); }); - describe('Get Users Tasks', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - const { task } = await createTestTask(testBatman, organization); - + describe('Get Users Tasks', () => { it('fails on invalid user id', async () => { expect(UsersService.getUserTasks('1', organization)).rejects.toThrow(new NotFoundException('User', '1')); }); it("Succeeds and gets user's assigned tasks", async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const { task } = await createTestTask(testBatman, organization); const userTasks = await UsersService.getUserTasks(testBatman.userId, organization); expect(userTasks).toStrictEqual([task]); From c6e51ee3c104543516adace39c9a7c561862ec25 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:41:58 -0400 Subject: [PATCH 032/320] #2770- added await --- src/backend/tests/unmocked/users.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 17a503ae8b..2f43d991f7 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -18,7 +18,7 @@ describe('User Tests', () => { describe('Get Users Tasks', () => { it('fails on invalid user id', async () => { - expect(UsersService.getUserTasks('1', organization)).rejects.toThrow(new NotFoundException('User', '1')); + expect(await UsersService.getUserTasks('1', organization)).rejects.toThrow(new NotFoundException('User', '1')); }); it("Succeeds and gets user's assigned tasks", async () => { From 2b094be84929b94aa8d3914b89ec13a06cd6e43a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:46:12 -0400 Subject: [PATCH 033/320] #2770-await --- src/backend/tests/unmocked/users.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 2f43d991f7..e704de7a9c 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -18,7 +18,9 @@ describe('User Tests', () => { describe('Get Users Tasks', () => { it('fails on invalid user id', async () => { - expect(await UsersService.getUserTasks('1', organization)).rejects.toThrow(new NotFoundException('User', '1')); + expect(async () => await UsersService.getUserTasks('1', organization)).rejects.toThrow( + new NotFoundException('User', '1') + ); }); it("Succeeds and gets user's assigned tasks", async () => { From 1b968c2041628f3360bb5430a076c46c799af584 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Sep 2024 22:50:27 -0400 Subject: [PATCH 034/320] #2770-await assertion --- src/backend/tests/unmocked/users.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index e704de7a9c..9bac5d2404 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -18,7 +18,7 @@ describe('User Tests', () => { describe('Get Users Tasks', () => { it('fails on invalid user id', async () => { - expect(async () => await UsersService.getUserTasks('1', organization)).rejects.toThrow( + await expect(async () => await UsersService.getUserTasks('1', organization)).rejects.toThrow( new NotFoundException('User', '1') ); }); From 1bfe3acc70461d8cf5705a2ec8b59bb6a04c88f4 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 20 Sep 2024 18:57:19 -0400 Subject: [PATCH 035/320] #2801 component to displayer user's team's work packages --- .../src/pages/HomePage/MemberHomePage.tsx | 2 + .../components/TeamWorkPackageDisplay.tsx | 78 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 00f96da519..e6ff35bf00 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -13,6 +13,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; interface MemberHomePageProps { user: AuthenticatedUser; @@ -29,6 +30,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! + diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx new file mode 100644 index 0000000000..8caaa669e1 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -0,0 +1,78 @@ +import WorkPackageCard from './WorkPackageCard'; +import PageBlock from '../../../layouts/PageBlock'; +import { wbsPipe } from '../../../utils/pipes'; +import Box from '@mui/material/Box'; +import { useAllTeams } from '../../../hooks/teams.hooks'; +import { useCurrentUser } from '../../../hooks/users.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { useTheme } from '@mui/material'; + +const TeamWorkPackageDisplay: React.FC = () => { + const theme = useTheme(); + const user = useCurrentUser(); + const { isLoading, isError, data: teams, error } = useAllTeams(); + const myTeams = teams?.filter((team) => { + return ( + team.members.some((member) => member.userId === user.userId) || + team.leads.some((member) => member.userId === user.userId) || + team.head.userId === user.userId + ); + }); + + const workPackages = myTeams + ?.map((team) => { + return team.projects.map((project) => { + return project.workPackages; + }); + }) + .flat(2); + + if (!workPackages) return ; + + if (isLoading || !teams) return ; + + if (isError) return ; + + const fullDisplay = ( + + {workPackages.length === 0 + ? `No work packages` + : workPackages.map((wp) => ( + + + + ))} + + ); + + return ( + + {fullDisplay} + + ); +}; + +export default TeamWorkPackageDisplay; From 44f4ce5f653c0028c8ea02956547c06aae6b948d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Sep 2024 13:08:58 -0400 Subject: [PATCH 036/320] #2771-structure of my task section --- src/backend/src/utils/datetime.utils.ts | 6 ++ src/frontend/src/apis/users.api.ts | 10 ++- src/frontend/src/hooks/users.hooks.ts | 13 +++- .../src/pages/HomePage/MemberHomePage.tsx | 2 + .../src/pages/HomePage/components/MyTasks.tsx | 29 ++++++++ .../HomePage/components/TaskDetailCard.tsx | 73 +++++++++++++++++++ .../HomePage/components/WorkPackageCard.tsx | 2 +- src/frontend/src/utils/task.utils.ts | 14 ++++ src/frontend/src/utils/urls.ts | 2 + 9 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/MyTasks.tsx create mode 100644 src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx diff --git a/src/backend/src/utils/datetime.utils.ts b/src/backend/src/utils/datetime.utils.ts index 9ab3d23ab5..82cf261fff 100644 --- a/src/backend/src/utils/datetime.utils.ts +++ b/src/backend/src/utils/datetime.utils.ts @@ -13,3 +13,9 @@ export const transformDate = (date: Date) => { const day = date.getDate() + 1 < 10 ? `0${date.getDate() + 1}` : (date.getDate() + 1).toString(); return `${date.getFullYear().toString()}-${month}-${day}`; }; + +export const formateDate = (date: Date) => { + const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : (date.getMonth() + 1).toString(); + const day = date.getDate() + 1 < 10 ? `0${date.getDate() + 1}` : (date.getDate() + 1).toString(); + return `${month}/${day}/${date.getFullYear().toString()}`; +}; diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index 44d7a40d70..af9b860f6f 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -7,6 +7,7 @@ import axios from '../utils/axios'; import { Project, SetUserScheduleSettingsPayload, + Task, User, UserScheduleSettings, UserSecureSettings, @@ -21,6 +22,7 @@ import { } from './transformers/users.transformers'; import { AuthenticatedUser, UserSettings } from 'shared'; import { projectTransformer } from './transformers/projects.transformers'; +import { taskTransformer } from './transformers/tasks.transformers'; /** * Fetches all users. @@ -102,7 +104,9 @@ export const getUsersFavoriteProjects = (id: string) => { * @returns the secure settings */ export const getUserSecureSettings = (id: string) => { - return axios.get(apiUrls.userSecureSettings(id)); + return axios.get(apiUrls.userSecureSettings(id), { + transformResponse: (data) => JSON.parse(data).map(taskTransformer) + }); }; /** @@ -141,3 +145,7 @@ export const updateUserScheduleSettings = (settings: SetUserScheduleSettingsPayl export const updateUserRole = (id: string, role: string) => { return axios.post<{ message: string }>(apiUrls.userRoleByUserId(id), { role }); }; + +export const getUserTasks = (id: string) => { + return axios.get(apiUrls.userTasks(id), {}); +}; diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index b0c76b09b9..3bd7feb7df 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -17,7 +17,8 @@ import { getCurrentUserSecureSettings, getUserSecureSettings, getUserScheduleSettings, - updateUserScheduleSettings + updateUserScheduleSettings, + getUserTasks } from '../apis/users.api'; import { User, @@ -28,7 +29,8 @@ import { UserSecureSettings, UserScheduleSettings, UserWithScheduleSettings, - SetUserScheduleSettingsPayload + SetUserScheduleSettingsPayload, + Task } from 'shared'; import { useAuth } from './auth.hooks'; import { useContext } from 'react'; @@ -233,3 +235,10 @@ export const useUpdateUserRole = () => { } ); }; + +export const useUserTasks = (id: string) => { + return useQuery(['users', id, 'tasks'], async () => { + const { data } = await getUserTasks(id); + return data; + }); +}; diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 00f96da519..cd64529b2e 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -13,6 +13,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import MyTasks from './components/MyTasks'; interface MemberHomePageProps { user: AuthenticatedUser; @@ -29,6 +30,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! + diff --git a/src/frontend/src/pages/HomePage/components/MyTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTasks.tsx new file mode 100644 index 0000000000..6f933348ec --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/MyTasks.tsx @@ -0,0 +1,29 @@ +import { Stack } from '@mui/material'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import { useCurrentUser, useUserTasks } from '../../../hooks/users.hooks'; +import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; +import PageBlock from '../../../layouts/PageBlock'; +import TaskDetailCard from './TaskDetailCard'; + +const MyTasks: React.FC = () => { + const currentUser = useCurrentUser(); + const { + data: userTasks, + isLoading: userTasksIsLoading, + error: userTasksError, + isError: userTasksIsError + } = useUserTasks(currentUser.userId); + + if (userTasksIsLoading || !userTasks) return ; + return ( + + + {userTasks.map((task, index) => { + return ; + })} + + + ); +}; + +export default MyTasks; diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx new file mode 100644 index 0000000000..514f4ffa96 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -0,0 +1,73 @@ +import { Card, CardContent, useTheme, Stack, Link, Typography, Box, Chip } from '@mui/material'; +import { Task, wbsPipe, WorkPackage } from 'shared'; +import { Link as RouterLink } from 'react-router-dom'; +import { routes } from '../../../utils/routes'; +import { borderRadius } from '@mui/system'; +import { useSingleWorkPackage } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import { isTaskOverdue, taskPriorityColor } from '../../../utils/task.utils'; +import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; +import { formateDate, transformDate } from '../../../../../backend/src/utils/datetime.utils'; + +interface TaskDetailCardProps { + task: Task; + taskNumber: number; +} + +const TaskDetailCard: React.FC = ({ task, taskNumber }) => { + const theme = useTheme(); + const taskOverdue = isTaskOverdue(task); + return ( + + + + + + + Task #{taskNumber} + + + + {wbsPipe(task.wbsNum)} - + + + + {taskOverdue && } + + + + } label={formateDate(new Date(task.deadline))} size="small" /> + + + + + Notes:
{task.notes} +
+
+
+
+ ); +}; + +export default TaskDetailCard; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 57814b4f3f..5ff2284d4c 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -9,7 +9,7 @@ import { Link, Stack, Typography, - useTheme + useTheme, } from '@mui/material'; import { wbsPipe, WorkPackage } from 'shared'; import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; diff --git a/src/frontend/src/utils/task.utils.ts b/src/frontend/src/utils/task.utils.ts index ab597b785f..bc1e52da76 100644 --- a/src/frontend/src/utils/task.utils.ts +++ b/src/frontend/src/utils/task.utils.ts @@ -68,3 +68,17 @@ export const taskUserToAutocompleteOption = (user: User): { label: string; id: s export const getTaskAssigneeOptions = (teams: TeamPreview[]): User[] => { return teams.map((team) => makeTeamList(team)).flat(); }; + +export const isTaskOverdue = (task: Task) => { + return new Date() > task.deadline; +}; + +export const taskPriorityColor = (task: Task) => { + return task.priority === TaskPriority.Low + ? 'green' + : task.priority === TaskPriority.Medium + ? 'yellow' + : task.priority === TaskPriority.High + ? 'red' + : ''; +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index b8124d84db..c6f4c188ab 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -24,6 +24,7 @@ const userFavoriteProjects = (id: string) => `${usersById(id)}/favorite-projects const userSecureSettings = (id: string) => `${usersById(id)}/secure-settings`; const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings`; const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; +const userTasks = (id: string) => `${usersById(id)}/tasks`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -204,6 +205,7 @@ export const apiUrls = { userSecureSettings, userScheduleSettings, userScheduleSettingsSet, + userTasks, projects, allProjects, From 0d4a5f580f653651c2c2435e5e8911779646cac4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Sep 2024 13:58:24 -0400 Subject: [PATCH 037/320] #2846-separated into different pages --- .../src/pages/HomePage/AdminHomePage.tsx | 32 ++++++++++++ .../src/pages/HomePage/GuestHomePage.tsx | 52 +++++++++---------- src/frontend/src/pages/HomePage/Home.tsx | 17 ++++-- .../src/pages/HomePage/IntroGuestHomePage.tsx | 42 +++++++++++++++ .../src/pages/HomePage/LeadHomePage.tsx | 32 ++++++++++++ .../src/pages/HomePage/MemberHomePage.tsx | 12 +---- src/shared/src/permission-utils.ts | 10 ++++ 7 files changed, 156 insertions(+), 41 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/AdminHomePage.tsx create mode 100644 src/frontend/src/pages/HomePage/IntroGuestHomePage.tsx create mode 100644 src/frontend/src/pages/HomePage/LeadHomePage.tsx diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx new file mode 100644 index 0000000000..4c1bf340f9 --- /dev/null +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -0,0 +1,32 @@ +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import { Typography } from '@mui/material'; +import { useSingleUserSettings } from '../../hooks/users.hooks'; +import LoadingIndicator from '../../components/LoadingIndicator'; +import ErrorPage from '../ErrorPage'; +import PageLayout from '../../components/PageLayout'; +import { AuthenticatedUser } from 'shared'; + +interface AdminHomePageProps { + user: AuthenticatedUser; +} + +const AdminHomePage = ({ user }: AdminHomePageProps) => { + const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); + + if (isLoading || !userSettingsData) return ; + if (isError) return ; + + return ( + + + Welcome, {user.firstName}! + + + ); +}; + +export default AdminHomePage; diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index a003297695..2a6921c13c 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -1,44 +1,42 @@ -import { Typography, Box } from '@mui/material'; +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import { Typography } from '@mui/material'; +import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; +import UsefulLinks from './components/UsefulLinks'; +import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; +import UpcomingDeadlines from './components/UpcomingDeadlines'; +import { useSingleUserSettings } from '../../hooks/users.hooks'; +import LoadingIndicator from '../../components/LoadingIndicator'; +import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import ImageWithButton from './components/ImageWithButton'; -import emitter from '../../app/EventBus'; import MemberEncouragement from './components/MemberEncouragement'; interface GuestHomePageProps { user: AuthenticatedUser; - setOnMemberHomePage: (e: boolean) => void; } -const GuestHomePage = ({ user, setOnMemberHomePage }: GuestHomePageProps) => { - const handleClick = () => { - emitter.emit('memberHomePage', true); - setOnMemberHomePage(true); - }; +const GuestHomePage = ({ user }: GuestHomePageProps) => { + const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); + + if (isLoading || !userSettingsData) return ; + if (isError) return ; return ( - - {user ? `Welcome, ${user.firstName}!` : 'Welcome, Guest!'} + + Welcome, {user.firstName}! - - - {}} - /> - - - + + + + ); }; + export default GuestHomePage; diff --git a/src/frontend/src/pages/HomePage/Home.tsx b/src/frontend/src/pages/HomePage/Home.tsx index 25da7a5979..961430d92e 100644 --- a/src/frontend/src/pages/HomePage/Home.tsx +++ b/src/frontend/src/pages/HomePage/Home.tsx @@ -4,18 +4,27 @@ */ import { useCurrentUser } from '../../hooks/users.hooks'; -import { isGuest } from 'shared'; +import { isAdmin, isGuest, isLead, isMember } from 'shared'; +import IntroGuestHomePage from './IntroGuestHomePage'; import GuestHomePage from './GuestHomePage'; -import MemberHomePage from './MemberHomePage'; import { useState } from 'react'; +import MemberHomePage from './MemberHomePage'; +import LeadHomePage from './LeadHomePage'; +import AdminHomePage from './AdminHomePage'; const Home = () => { const user = useCurrentUser(); const [onMemberHomePage, setOnMemberHomePage] = useState(false); return isGuest(user.role) && !onMemberHomePage ? ( - - ) : ( + + ) : isMember(user.role) ? ( + ) : isLead(user.role) ? ( + + ) : isAdmin(user.role) ? ( + + ) : ( + ); }; diff --git a/src/frontend/src/pages/HomePage/IntroGuestHomePage.tsx b/src/frontend/src/pages/HomePage/IntroGuestHomePage.tsx new file mode 100644 index 0000000000..deed2d767b --- /dev/null +++ b/src/frontend/src/pages/HomePage/IntroGuestHomePage.tsx @@ -0,0 +1,42 @@ +import { Typography, Box } from '@mui/material'; +import PageLayout from '../../components/PageLayout'; +import { AuthenticatedUser } from 'shared'; +import ImageWithButton from './components/ImageWithButton'; +import emitter from '../../app/EventBus'; + +interface IntroGuestHomePageProps { + user: AuthenticatedUser; + setOnMemberHomePage: (e: boolean) => void; +} + +const IntroGuestHomePage = ({ user, setOnMemberHomePage }: IntroGuestHomePageProps) => { + const handleClick = () => { + emitter.emit('memberHomePage', true); + setOnMemberHomePage(true); + }; + + return ( + + + {user ? `Welcome, ${user.firstName}!` : 'Welcome, Guest!'} + + + + {}} + /> + + + + + ); +}; +export default IntroGuestHomePage; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx new file mode 100644 index 0000000000..76929deada --- /dev/null +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -0,0 +1,32 @@ +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import { Typography } from '@mui/material'; +import { useSingleUserSettings } from '../../hooks/users.hooks'; +import LoadingIndicator from '../../components/LoadingIndicator'; +import ErrorPage from '../ErrorPage'; +import PageLayout from '../../components/PageLayout'; +import { AuthenticatedUser } from 'shared'; + +interface LeadHomePageProps { + user: AuthenticatedUser; +} + +const LeadHomePage = ({ user }: LeadHomePageProps) => { + const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); + + if (isLoading || !userSettingsData) return ; + if (isError) return ; + + return ( + + + Welcome, {user.firstName}! + + + ); +}; + +export default LeadHomePage; diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 00f96da519..cc002616af 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -4,21 +4,17 @@ */ import { Typography } from '@mui/material'; -import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; -import UsefulLinks from './components/UsefulLinks'; -import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; -import UpcomingDeadlines from './components/UpcomingDeadlines'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -interface MemberHomePageProps { +interface MemeberHomePageProps { user: AuthenticatedUser; } -const MemberHomePage = ({ user }: MemberHomePageProps) => { +const MemberHomePage = ({ user }: MemeberHomePageProps) => { const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); if (isLoading || !userSettingsData) return ; @@ -29,10 +25,6 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! - - - - ); }; diff --git a/src/shared/src/permission-utils.ts b/src/shared/src/permission-utils.ts index b297f1b558..9eace8a590 100644 --- a/src/shared/src/permission-utils.ts +++ b/src/shared/src/permission-utils.ts @@ -48,4 +48,14 @@ export const isGuest: PermissionCheck = (role?: Role) => { return role === RoleEnum.GUEST; }; +export const isMember: PermissionCheck = (role?: Role) => { + if (!role) return true; + return role === RoleEnum.MEMBER; +}; + +export const isLead: PermissionCheck = (role?: Role) => { + if (!role) return true; + return role === RoleEnum.HEAD || role === RoleEnum.LEADERSHIP; +}; + export type PermissionCheck = (role: Role | undefined) => boolean; From 8acd4360cd270dc1745cd7e81fab9db8835c1f0a Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sun, 22 Sep 2024 22:20:20 -0400 Subject: [PATCH 038/320] 2803 added change requests overview to homepage and refactoed logic into util --- .../ChangeRequestsOverview.tsx | 54 ++-------------- .../src/pages/HomePage/MemberHomePage.tsx | 2 + .../components/UnreviewedChangeRequests.tsx | 44 +++++++++++++ .../src/utils/change-request.utils.ts | 64 ++++++++++++++++++- 4 files changed, 114 insertions(+), 50 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx diff --git a/src/frontend/src/pages/ChangeRequestsPage/ChangeRequestsOverview.tsx b/src/frontend/src/pages/ChangeRequestsPage/ChangeRequestsOverview.tsx index 09def14418..eedf560754 100644 --- a/src/frontend/src/pages/ChangeRequestsPage/ChangeRequestsOverview.tsx +++ b/src/frontend/src/pages/ChangeRequestsPage/ChangeRequestsOverview.tsx @@ -6,12 +6,12 @@ import { useAllChangeRequests } from '../../hooks/change-requests.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import { isLeadership, isHead, ChangeRequest, Project, WorkPackage, equalsWbsNumber } from 'shared'; +import { isLeadership, isHead } from 'shared'; import { useAllProjects } from '../../hooks/projects.hooks'; import { useAllWorkPackages } from '../../hooks/work-packages.hooks'; import { useCurrentUser } from '../../hooks/users.hooks'; -import { makeTeamList } from '../../utils/teams.utils'; import ChangeRequestRow from '../../components/ChangeRequestRow'; +import { getCRsApproved, getCRsToReview, getCRsUnreviewed } from '../../utils/change-request.utils'; const ChangeRequestsOverview: React.FC = () => { const user = useCurrentUser(); @@ -29,53 +29,9 @@ const ChangeRequestsOverview: React.FC = () => { if (projectIsError) return ; if (wpIsError) return ; - // projects whose change requests the user would have to review - const myProjects = projects.filter((project: Project) => { - const projectMemberIds = project.teams.flatMap((team) => makeTeamList(team)).map((user) => user.userId); - return ( - projectMemberIds.includes(user.userId) || - (project.lead && project.lead.userId === user.userId) || - (project.manager && project.manager.userId === user.userId) - ); - }); - - // work packages whose change requests the user would have to review - const myWorkPackages = workPackages.filter( - (wp: WorkPackage) => - (wp.lead ? wp.lead.userId === user.userId : false) || (wp.manager ? wp.manager.userId === user.userId : false) - ); - - // all of the wbs numbers (in x.x.x string format) corresponding to projects and work packages - // whose change requests the user would have to review - const myWbsNumbers = myProjects - .map((project: Project) => project.wbsNum) - .concat(myWorkPackages.map((wp: WorkPackage) => wp.wbsNum)); - - const currentDate = new Date(); - - const crToReview = changeRequests - .filter( - (cr) => - !cr.dateReviewed && - cr.submitter.userId !== user.userId && - (myWbsNumbers.some((wbsNum) => equalsWbsNumber(wbsNum, cr.wbsNum)) || - cr.requestedReviewers.map((user) => user.userId).includes(user.userId)) - ) - .sort((a, b) => b.dateSubmitted.getTime() - a.dateSubmitted.getTime()); - - const crUnreviewed = changeRequests - .filter((cr: ChangeRequest) => !cr.dateReviewed && cr.submitter.userId === user.userId) - .sort((a, b) => b.dateSubmitted.getTime() - a.dateSubmitted.getTime()); - - const crApproved = changeRequests - .filter( - (cr: ChangeRequest) => - cr.dateReviewed && - cr.accepted && - cr.submitter.userId === user.userId && - currentDate.getTime() - cr.dateReviewed.getTime() <= 1000 * 60 * 60 * 24 * 5 - ) - .sort((a, b) => (a.dateReviewed && b.dateReviewed ? b.dateReviewed.getTime() - a.dateReviewed.getTime() : 0)); + const crToReview = getCRsToReview(projects, workPackages, user, changeRequests); + const crUnreviewed = getCRsUnreviewed(user, changeRequests); + const crApproved = getCRsApproved(user, changeRequests); return ( <> diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 00f96da519..d64bca392f 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -13,6 +13,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface MemberHomePageProps { user: AuthenticatedUser; @@ -29,6 +30,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! + diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx new file mode 100644 index 0000000000..def9a5ae54 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -0,0 +1,44 @@ +import { useAllWorkPackages } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import PageBlock from '../../../layouts/PageBlock'; +import ErrorPage from '../../ErrorPage'; +import { useCurrentUser } from '../../../hooks/users.hooks'; +import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; +import { useAllProjects } from '../../../hooks/projects.hooks'; +import { getCRsToReview } from '../../../utils/change-request.utils'; +import Box from '@mui/material/Box'; +import ChangeRequestRow from '../../../components/ChangeRequestRow'; + +const UnreviewedChangeRequests: React.FC = () => { + const user = useCurrentUser(); + const { data: changeRequests, isError: crIsError, isLoading: crIsLoading, error: crError } = useAllChangeRequests(); + const { data: projects, isError: projectIsError, isLoading: projectLoading, error: projectError } = useAllProjects(); + const { data: workPackages, isError: wpIsError, isLoading: wpLoading, error: wpError } = useAllWorkPackages(); + + if (crIsLoading || projectLoading || wpLoading || !changeRequests || !projects || !workPackages) + return ; + if (crIsError) return ; + if (projectIsError) return ; + if (wpIsError) return ; + + const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); + + return ( + + + + + + + ); +}; + +export default UnreviewedChangeRequests; diff --git a/src/frontend/src/utils/change-request.utils.ts b/src/frontend/src/utils/change-request.utils.ts index cef541fe04..3f498f5575 100644 --- a/src/frontend/src/utils/change-request.utils.ts +++ b/src/frontend/src/utils/change-request.utils.ts @@ -3,8 +3,70 @@ * See the LICENSE file in the repository root folder for details. */ -import { StandardChangeRequest } from 'shared'; +import { ChangeRequest, equalsWbsNumber, Project, StandardChangeRequest, User, WorkPackage } from 'shared'; +import { makeTeamList } from './teams.utils'; export const hasProposedChanges = (cr: StandardChangeRequest) => { return cr.workPackageProposedChanges || cr.projectProposedChanges; }; + +export const getCRsToReview = ( + projects: Project[], + workPackages: WorkPackage[], + user: User, + changeRequests: ChangeRequest[] +): ChangeRequest[] => { + // projects whose change requests the user would have to review + const myProjects = projects.filter((project: Project) => { + const projectMemberIds = project.teams.flatMap((team) => makeTeamList(team)).map((user) => user.userId); + return ( + projectMemberIds.includes(user.userId) || + (project.lead && project.lead.userId === user.userId) || + (project.manager && project.manager.userId === user.userId) + ); + }); + + // work packages whose change requests the user would have to review + const myWorkPackages = workPackages.filter( + (wp: WorkPackage) => + (wp.lead ? wp.lead.userId === user.userId : false) || (wp.manager ? wp.manager.userId === user.userId : false) + ); + + // all of the wbs numbers (in x.x.x string format) corresponding to projects and work packages + // whose change requests the user would have to review + const myWbsNumbers = myProjects + .map((project: Project) => project.wbsNum) + .concat(myWorkPackages.map((wp: WorkPackage) => wp.wbsNum)); + const crToReview = changeRequests + .filter( + (cr) => + !cr.dateReviewed && + cr.submitter.userId !== user.userId && + (myWbsNumbers.some((wbsNum) => equalsWbsNumber(wbsNum, cr.wbsNum)) || + cr.requestedReviewers.map((user) => user.userId).includes(user.userId)) + ) + .sort((a, b) => b.dateSubmitted.getTime() - a.dateSubmitted.getTime()); + return crToReview; +}; + +export const getCRsUnreviewed = (user: User, changeRequests: ChangeRequest[]) => { + const crUnreviewed = changeRequests + .filter((cr: ChangeRequest) => !cr.dateReviewed && cr.submitter.userId === user.userId) + .sort((a, b) => b.dateSubmitted.getTime() - a.dateSubmitted.getTime()); + return crUnreviewed; +}; + +export const getCRsApproved = (user: User, changeRequests: ChangeRequest[]) => { + const currentDate = new Date(); + const crApproved = changeRequests + .filter( + (cr: ChangeRequest) => + cr.dateReviewed && + cr.accepted && + cr.submitter.userId === user.userId && + currentDate.getTime() - cr.dateReviewed.getTime() <= 1000 * 60 * 60 * 24 * 5 + ) + .sort((a, b) => (a.dateReviewed && b.dateReviewed ? b.dateReviewed.getTime() - a.dateReviewed.getTime() : 0)); + + return crApproved; +}; From 64df7b65a2352328965d325db11bfbb33d1043c2 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Tue, 24 Sep 2024 20:12:22 -0400 Subject: [PATCH 039/320] #2767 endpoint for featured projects --- src/backend/src/controllers/organizations.controller.ts | 2 +- src/backend/src/routes/organizations.routes.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index feaf00b9df..7a7de6500c 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -86,7 +86,7 @@ export default class OrganizationsController { } } - static async getFeaturedProjects(req: Request, res: Response, next: NextFunction) { + static async getOrganizationFeaturedProjects(req: Request, res: Response, next: NextFunction) { try { const featuredProjects = await OrganizationsService.getOrganizationFeaturedProjects(req.organization.organizationId); res.status(200).json(featuredProjects); diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 9964699677..c600473c0d 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -28,5 +28,5 @@ organizationRouter.post( ); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); -organizationRouter.get('/featured-projects', OrganizationsController.getFeaturedProjects); +organizationRouter.get('/featured-projects', OrganizationsController.getOrganizationFeaturedProjects); export default organizationRouter; From 165a5fcba52548105fe9db4920323a0a2cac9e19 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 24 Sep 2024 20:23:49 -0400 Subject: [PATCH 040/320] #2803 added flexwrap prop to changeRequestRow to all for scrolling --- .../src/components/ChangeRequestRow.tsx | 5 +++-- .../components/UnreviewedChangeRequests.tsx | 19 ++++++------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestRow.tsx b/src/frontend/src/components/ChangeRequestRow.tsx index 654d9d86ad..6e6273594a 100644 --- a/src/frontend/src/components/ChangeRequestRow.tsx +++ b/src/frontend/src/components/ChangeRequestRow.tsx @@ -12,9 +12,10 @@ interface ChangeRequestRowProps { title: string; changeRequests: ChangeRequest[]; noChangeRequestsMessage: string; + flexWrap?: string; } -const ChangeRequestRow: React.FC = ({ title, changeRequests, noChangeRequestsMessage }) => { +const ChangeRequestRow: React.FC = ({ title, changeRequests, noChangeRequestsMessage, flexWrap }) => { const theme = useTheme(); return ( @@ -28,7 +29,7 @@ const ChangeRequestRow: React.FC = ({ title, changeReques sx={{ display: 'flex', flexDirection: 'row', - flexWrap: 'wrap', + flexWrap: flexWrap ? flexWrap : 'wrap', overflow: 'auto', justifyContent: 'flex-start', '&::-webkit-scrollbar': { diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index def9a5ae54..7a1e6c5791 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -6,7 +6,6 @@ import { useCurrentUser } from '../../../hooks/users.hooks'; import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; import { useAllProjects } from '../../../hooks/projects.hooks'; import { getCRsToReview } from '../../../utils/change-request.utils'; -import Box from '@mui/material/Box'; import ChangeRequestRow from '../../../components/ChangeRequestRow'; const UnreviewedChangeRequests: React.FC = () => { @@ -25,18 +24,12 @@ const UnreviewedChangeRequests: React.FC = () => { return ( - - - - + ); }; From 7058fd09233abecc88f1f2f673179cc5808b89fe Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 24 Sep 2024 21:05:50 -0400 Subject: [PATCH 041/320] merged developed --- src/frontend/src/apis/organizations.api.ts | 13 +++++++ src/frontend/src/hooks/organizations.hooks.ts | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/frontend/src/apis/organizations.api.ts create mode 100644 src/frontend/src/hooks/organizations.hooks.ts diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts new file mode 100644 index 0000000000..3eb4fb3756 --- /dev/null +++ b/src/frontend/src/apis/organizations.api.ts @@ -0,0 +1,13 @@ +import axios from '../utils/axios'; +import { Organization } from 'shared'; +import { apiUrls } from '../utils/urls'; + +/** + * Create a design review + * @param payload all info needed to create a design review + */ +export const getCurrentOrganization = async () => { + return axios.get(apiUrls.currentOrganization(), { + transformResponse: (data) => JSON.parse(data) + }); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts new file mode 100644 index 0000000000..48e0c8abc3 --- /dev/null +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -0,0 +1,38 @@ +import { useContext, useState } from 'react'; +import { OrganizationContext } from '../app/AppOrganizationContext'; +import { useQuery } from 'react-query'; +import { Organization } from 'shared'; +import { getCurrentOrganization } from '../apis/organizations.api'; + +interface OrganizationProvider { + organizationId: string; + selectOrganization: (organizationId: string) => void; +} + +export const useProvideOrganization = (): OrganizationProvider => { + const [organizationId, setOrganizationId] = useState(''); + + const selectOrganization = (organizationId: string) => { + setOrganizationId(organizationId); + localStorage.setItem('organizationId', organizationId); + }; + + return { + organizationId, + selectOrganization + }; +}; + +export const useCurrentOrganization = () => { + return useQuery(['organizations'], async () => { + const { data } = await getCurrentOrganization(); + return data; + }); +}; + +// Hook for child components to get the auth object +export const useOrganization = () => { + const context = useContext(OrganizationContext); + if (context === undefined) throw Error('Organization must be used inside of an organizational context.'); + return context; +}; From 02075cae9cff335212d6a98238472f92de6e8661 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 24 Sep 2024 22:08:17 -0400 Subject: [PATCH 042/320] #2849 added set description endpoint for organizations --- .../controllers/organizations.controller.ts | 14 ++++++++ .../src/routes/organizations.routes.ts | 6 ++++ .../src/services/organizations.services.ts | 25 ++++++++++++++ .../tests/unmocked/organization.test.ts | 33 +++++++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 8555c7a62d..c132ada5f9 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -85,4 +85,18 @@ export default class OrganizationsController { next(error); } } + + static async setOrganizationDescription(req: Request, res: Response, next: NextFunction) { + try { + const updatedOrg = await OrganizationsService.setOrganizationDescription( + req.body.description, + req.currentUser, + req.organization + ); + + return res.status(200).json(updatedOrg); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 631a3b05ce..e13a4889b2 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -28,4 +28,10 @@ organizationRouter.post( ); organizationRouter.post('/logo/update', upload.single('logo'), OrganizationsController.setLogoImage); organizationRouter.get('/logo', OrganizationsController.getOrganizationLogoImage); +organizationRouter.post( + '/description/set', + body('description').isString(), + validateInputs, + OrganizationsController.setOrganizationDescription +); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 666efccbbe..cb593c9f7a 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -209,4 +209,29 @@ export default class OrganizationsService { return organization.logoImageId; } + + /** + * + * @param description + * @param submitter + * @param organization + */ + static async setOrganizationDescription( + description: string, + submitter: User, + organization: Organization + ): Promise { + if (!(await userHasPermission(submitter.userId, organization.organizationId, isAdmin))) { + throw new AccessDeniedAdminOnlyException('set description'); + } + const updatedOrg = prisma.organization.update({ + where: { + organizationId: organization.organizationId + }, + data: { + description + } + }); + return updatedOrg; + } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index cdda4c3c3e..2748cdf5ae 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -255,4 +255,37 @@ describe('Team Type Tests', () => { expect(image).toBe('uploaded-image1.png'); }); }); + + describe('Set Organization Description', () => { + it('Fails if user is not an admin', async () => { + await expect( + OrganizationsService.setOrganizationDescription( + 'test description', + await createTestUser(wonderwomanGuest, orgId), + organization + ) + ).rejects.toThrow(new AccessDeniedAdminOnlyException('set description')); + }); + + it('Succeeds and updates the description', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + + const returnedOrganization = await OrganizationsService.setOrganizationDescription( + 'sample description', + testBatman, + organization + ); + + const oldOrganization = await prisma.organization.findUnique({ + where: { + organizationId: orgId + } + }); + + expect(oldOrganization).not.toBeNull(); + expect(oldOrganization?.description).toBe('sample description'); + expect(oldOrganization?.organizationId).toBe(returnedOrganization.organizationId); + expect(oldOrganization?.description).toBe(returnedOrganization.description); + }); + }); }); From e327fd1fbb2122331f19e7af835164abf4e14ce0 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Tue, 24 Sep 2024 22:25:28 -0400 Subject: [PATCH 043/320] #2767 added tests for get featured projects --- .../tests/unmocked/organization.test.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index cdda4c3c3e..3e835a11ac 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -1,13 +1,14 @@ import { LinkCreateArgs } from 'shared'; import { AccessDeniedAdminOnlyException, HttpException, NotFoundException } from '../../src/utils/errors.utils'; import { batmanAppAdmin, wonderwomanGuest } from '../test-data/users.test-data'; -import { createTestLinkType, createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import { createTestLinkType, createTestOrganization, createTestProject, createTestUser, resetUsers } from '../test-utils'; import prisma from '../../src/prisma/prisma'; import { testLink1 } from '../test-data/organizations.test-data'; import { uploadFile } from '../../src/utils/google-integration.utils'; import { Mock, vi } from 'vitest'; import OrganizationsService from '../../src/services/organizations.services'; import { Organization } from '@prisma/client'; +import exp from 'constants'; vi.mock('../../src/utils/google-integration.utils', () => ({ uploadFile: vi.fn() @@ -167,6 +168,27 @@ describe('Team Type Tests', () => { }); }); + describe('Get all featured projects', () => { + it('Fails if an organizaion does not exist', async () => { + await expect(async () => await OrganizationsService.getOrganizationFeaturedProjects('1')).rejects.toThrow( + new NotFoundException('Organization', '1') + ); + }); + + it('Succeeds and gets featured projects', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const testProject1 = await createTestProject(testBatman, orgId); + + await OrganizationsService.setFeaturedProjects([testProject1.projectId], organization, testBatman); + + const projects = await OrganizationsService.getOrganizationFeaturedProjects(orgId); + + expect(projects).not.toBeNull(); + expect(projects.length).toBe(1); + expect(projects[0].projectId).toBe(testProject1.projectId); + }); + }); + describe('Get Organization Images', () => { it('Fails if an organization does not exist', async () => { await expect(async () => await OrganizationsService.getOrganizationImages('1')).rejects.toThrow( From 4f4fe673f7857b19ce3d692863e7702c917a3b7b Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Tue, 24 Sep 2024 22:42:37 -0400 Subject: [PATCH 044/320] #2767 prettier --- src/backend/tests/unmocked/organization.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index 3e835a11ac..f0eaac5e96 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -180,7 +180,7 @@ describe('Team Type Tests', () => { const testProject1 = await createTestProject(testBatman, orgId); await OrganizationsService.setFeaturedProjects([testProject1.projectId], organization, testBatman); - + const projects = await OrganizationsService.getOrganizationFeaturedProjects(orgId); expect(projects).not.toBeNull(); From ccbaace153182ef391fdc3935c11a269e470b5fc Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Wed, 25 Sep 2024 10:53:37 -0400 Subject: [PATCH 045/320] #2849 added comments to service function --- src/backend/src/services/organizations.services.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index cb593c9f7a..5821b912fe 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -211,10 +211,11 @@ export default class OrganizationsService { } /** - * - * @param description - * @param submitter - * @param organization + * Sets the description of a given organization. + * @param description the new description + * @param submitter the user making the change (must be admin) + * @param organization the organization whos description is changing + * @throws if the user is not an admin */ static async setOrganizationDescription( description: string, From 6613f6eaac3c273c3f243eb1ed6cdd385d14d3d6 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 25 Sep 2024 13:04:39 -0400 Subject: [PATCH 046/320] #2846-removed render welcome tests --- src/frontend/src/tests/pages/HomePage/Home.test.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/frontend/src/tests/pages/HomePage/Home.test.tsx b/src/frontend/src/tests/pages/HomePage/Home.test.tsx index 5f1c3c9f03..8483694184 100644 --- a/src/frontend/src/tests/pages/HomePage/Home.test.tsx +++ b/src/frontend/src/tests/pages/HomePage/Home.test.tsx @@ -59,12 +59,4 @@ describe('home component', () => { }); afterAll(() => vi.clearAllMocks()); - - it('renders welcome', () => { - renderComponent(); - expect(screen.getByText(`Welcome, ${exampleAdminUser.firstName}!`)).toBeInTheDocument(); - expect(screen.getByText('useful-links')).toBeInTheDocument(); - expect(screen.getByText('upcoming-deadlines')).toBeInTheDocument(); - expect(screen.getByText('work-packages-by-timeline-status')).toBeInTheDocument(); - }); }); From 5d5121f6d31b3423c3c7c5edf5055eb128e20e0a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 25 Sep 2024 13:07:35 -0400 Subject: [PATCH 047/320] #2770-added jsdoc --- src/backend/src/services/users.services.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 7ac7c47b3c..a6348a04af 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -541,6 +541,12 @@ export default class UsersService { return userScheduleSettingsTransformer(newUserScheduleSettings); } + /** + * Get's a user's assigned tasks + * @param userId the id of the user who's tasks are being returned + * @param organization the user's organization + * @returns a list of the user's assigned tasks + */ static async getUserTasks(userId: string, organization: Organization) { const requestedUser = await prisma.user.findUnique({ where: { userId }, From 6c4c02a914f80b740f935bf94a1ce10fd569b3bb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 25 Sep 2024 13:14:08 -0400 Subject: [PATCH 048/320] #2846-removed fome tests --- .../src/tests/pages/HomePage/Home.test.tsx | 62 ------------------- 1 file changed, 62 deletions(-) delete mode 100644 src/frontend/src/tests/pages/HomePage/Home.test.tsx diff --git a/src/frontend/src/tests/pages/HomePage/Home.test.tsx b/src/frontend/src/tests/pages/HomePage/Home.test.tsx deleted file mode 100644 index 8483694184..0000000000 --- a/src/frontend/src/tests/pages/HomePage/Home.test.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of NER's FinishLine and licensed under GNU AGPLv3. - * See the LICENSE file in the repository root folder for details. - */ - -import { render, screen, routerWrapperBuilder } from '../../test-support/test-utils'; -import { routes } from '../../../utils/routes'; -import Home from '../../../pages/HomePage/Home'; -import * as authHooks from '../../../hooks/auth.hooks'; -import * as userHooks from '../../../hooks/users.hooks'; -import { exampleAdminUser } from '../../test-support/test-data/users.stub'; -import { mockAuth } from '../../test-support/test-data/test-utils.stub'; -import { mockUseSingleUserSettings } from '../../test-support/mock-hooks'; - -vi.mock('../../../pages/HomePage/components/UsefulLinks', () => { - return { - __esModule: true, - default: () => { - return
useful-links
; - } - }; -}); - -vi.mock('../../../pages/HomePage/components/UpcomingDeadlines', () => { - return { - __esModule: true, - default: () => { - return
upcoming-deadlines
; - } - }; -}); - -vi.mock('../../../pages/HomePage/components/WorkPackagesByTimelineStatus', () => { - return { - __esModule: true, - default: () => { - return
work-packages-by-timeline-status
; - } - }; -}); - -/** - * Sets up the component under test with the desired values and renders it. - */ -const renderComponent = () => { - const RouterWrapper = routerWrapperBuilder({ path: routes.HOME, route: routes.HOME }); - return render( - - - - ); -}; - -describe('home component', () => { - beforeEach(() => { - vi.spyOn(authHooks, 'useAuth').mockReturnValue(mockAuth(false, exampleAdminUser)); - vi.spyOn(userHooks, 'useCurrentUser').mockReturnValue(exampleAdminUser); - vi.spyOn(userHooks, 'useSingleUserSettings').mockReturnValue(mockUseSingleUserSettings()); - }); - - afterAll(() => vi.clearAllMocks()); -}); From c8d78db8e376bdaeb22d5dadf812c872b914e341 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 25 Sep 2024 18:50:59 -0400 Subject: [PATCH 049/320] #2767 linting error --- src/backend/tests/unmocked/organization.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index f0eaac5e96..e5c360e4e6 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -8,7 +8,6 @@ import { uploadFile } from '../../src/utils/google-integration.utils'; import { Mock, vi } from 'vitest'; import OrganizationsService from '../../src/services/organizations.services'; import { Organization } from '@prisma/client'; -import exp from 'constants'; vi.mock('../../src/utils/google-integration.utils', () => ({ uploadFile: vi.fn() From 0f47472d95fef99df686b4cc76802f934166984f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 25 Sep 2024 19:55:31 -0400 Subject: [PATCH 050/320] #2771-added tool tip --- .../src/services/work-packages.services.ts | 3 + .../HomePage/components/TaskDetailCard.tsx | 137 +++++++++++------- src/frontend/src/utils/task.utils.ts | 8 +- 3 files changed, 93 insertions(+), 55 deletions(-) diff --git a/src/backend/src/services/work-packages.services.ts b/src/backend/src/services/work-packages.services.ts index 820f33f55f..9784265d8f 100644 --- a/src/backend/src/services/work-packages.services.ts +++ b/src/backend/src/services/work-packages.services.ts @@ -79,9 +79,11 @@ export default class WorkPackagesService { * @throws if the work package with the desired WBS number is not found, is deleted or is not part of the given organization */ static async getSingleWorkPackage(parsedWbs: WbsNumber, organization: Organization): Promise { + console.log('SERVICE'); if (!isWorkPackage(parsedWbs)) { throw new HttpException(404, 'WBS Number ' + wbsPipe(parsedWbs) + ' is a not a work package WBS#'); } + console.log('PASSED CHECK'); const wp = await prisma.work_Package.findFirst({ where: { @@ -100,6 +102,7 @@ export default class WorkPackagesService { 'Work Package', `${parsedWbs.carNumber}.${parsedWbs.projectNumber}.${parsedWbs.workPackageNumber}` ); + console.log('FOUND WP'); if (wp.wbsElement.dateDeleted) throw new DeletedException('Work Package', wp.wbsElementId); diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 514f4ffa96..09c212bfd7 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -1,72 +1,107 @@ import { Card, CardContent, useTheme, Stack, Link, Typography, Box, Chip } from '@mui/material'; -import { Task, wbsPipe, WorkPackage } from 'shared'; +import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; +import { Task, wbsPipe } from 'shared'; import { Link as RouterLink } from 'react-router-dom'; import { routes } from '../../../utils/routes'; -import { borderRadius } from '@mui/system'; -import { useSingleWorkPackage } from '../../../hooks/work-packages.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; import { isTaskOverdue, taskPriorityColor } from '../../../utils/task.utils'; import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; -import { formateDate, transformDate } from '../../../../../backend/src/utils/datetime.utils'; +import { formateDate } from '../../../../../backend/src/utils/datetime.utils'; +import { useState } from 'react'; +import WarningAmberIcon from '@mui/icons-material/WarningAmber'; +import { styled } from '@mui/material/styles'; +import { useSingleWorkPackage } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; interface TaskDetailCardProps { task: Task; taskNumber: number; } +const NERToolTip = styled(({ className, ...props }: TooltipProps) => ( + +))(() => ({ + [`& .${tooltipClasses.arrow}`]: { + color: 'red' + }, + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: 'red' + } +})); + const TaskDetailCard: React.FC = ({ task, taskNumber }) => { const theme = useTheme(); const taskOverdue = isTaskOverdue(task); + const [hover, setHover] = useState(false); + const { data: wp, isLoading, isError, error } = useSingleWorkPackage(task.wbsNum); + + if (isLoading || !wp) return ; + if (isError) return ; return ( - + + Task #{taskNumber} is Overdue! + + } + open={hover} + placement="right" + arrow > - - - - - - Task #{taskNumber} - - - - {wbsPipe(task.wbsNum)} - + setHover(true)} + onMouseLeave={() => setHover(false)} + sx={{ + minWidth: 'fit-content', + mr: 3, + background: theme.palette.background.default, + border: hover ? '1px solid red' : undefined + }} + > + + + + + + Task #{taskNumber} - + + + {wbsPipe(task.wbsNum)} - {wp.name} + + + + {taskOverdue && } + + + + } label={formateDate(new Date(task.deadline))} size="small" /> - {taskOverdue && } - - - - } label={formateDate(new Date(task.deadline))} size="small" /> - - - - - Notes:
{task.notes} -
-
-
-
+
+ + + Notes:
{task.notes} +
+
+ + + ); }; diff --git a/src/frontend/src/utils/task.utils.ts b/src/frontend/src/utils/task.utils.ts index bc1e52da76..a077098c8d 100644 --- a/src/frontend/src/utils/task.utils.ts +++ b/src/frontend/src/utils/task.utils.ts @@ -70,15 +70,15 @@ export const getTaskAssigneeOptions = (teams: TeamPreview[]): User[] => { }; export const isTaskOverdue = (task: Task) => { - return new Date() > task.deadline; + return new Date() > new Date(task.deadline); }; export const taskPriorityColor = (task: Task) => { return task.priority === TaskPriority.Low - ? 'green' + ? '#1CAC19' : task.priority === TaskPriority.Medium - ? 'yellow' + ? '#ffc700' : task.priority === TaskPriority.High - ? 'red' + ? '#EF4345' : ''; }; From b017daca28972d3387cfd9a4be15fb04b658bcaa Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 28 Sep 2024 13:31:23 -0400 Subject: [PATCH 051/320] #2849 formatting fixes --- src/backend/src/controllers/organizations.controller.ts | 2 +- src/backend/src/services/organizations.services.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/src/controllers/organizations.controller.ts b/src/backend/src/controllers/organizations.controller.ts index 66a02d31b0..6c2323cdc3 100644 --- a/src/backend/src/controllers/organizations.controller.ts +++ b/src/backend/src/controllers/organizations.controller.ts @@ -108,7 +108,7 @@ export default class OrganizationsController { return next(error); } } - + static async getOrganizationFeaturedProjects(req: Request, res: Response, next: NextFunction) { try { const featuredProjects = await OrganizationsService.getOrganizationFeaturedProjects(req.organization.organizationId); diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index df8f68d5c4..8a85eebc70 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -254,7 +254,8 @@ export default class OrganizationsService { } }); return updatedOrg; - } + } + /** * Gets the featured projects for the given organization Id * @param organizationId the organization to get the projects for From 3416670111641c2422847460cfa41f7ecee7f6da Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 20:25:03 -0400 Subject: [PATCH 052/320] #2771-completed task card --- .../src/services/work-packages.services.ts | 3 -- src/frontend/src/components/PageLayout.tsx | 2 + .../src/pages/HomePage/MemberHomePage.tsx | 16 ++++--- .../HomePage/components/CompleteDisplay.tsx | 20 ++++++++ .../src/pages/HomePage/components/MyTasks.tsx | 48 +++++++++++++++---- .../components/ScrollablePageBlock.tsx | 46 ++++++++++++++++++ .../HomePage/components/TaskDetailCard.tsx | 46 ++++++++++++------ src/frontend/src/utils/datetime.utils.ts | 4 ++ src/frontend/src/utils/task.utils.ts | 4 -- 9 files changed, 150 insertions(+), 39 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx create mode 100644 src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx diff --git a/src/backend/src/services/work-packages.services.ts b/src/backend/src/services/work-packages.services.ts index 9784265d8f..820f33f55f 100644 --- a/src/backend/src/services/work-packages.services.ts +++ b/src/backend/src/services/work-packages.services.ts @@ -79,11 +79,9 @@ export default class WorkPackagesService { * @throws if the work package with the desired WBS number is not found, is deleted or is not part of the given organization */ static async getSingleWorkPackage(parsedWbs: WbsNumber, organization: Organization): Promise { - console.log('SERVICE'); if (!isWorkPackage(parsedWbs)) { throw new HttpException(404, 'WBS Number ' + wbsPipe(parsedWbs) + ' is a not a work package WBS#'); } - console.log('PASSED CHECK'); const wp = await prisma.work_Package.findFirst({ where: { @@ -102,7 +100,6 @@ export default class WorkPackagesService { 'Work Package', `${parsedWbs.carNumber}.${parsedWbs.projectNumber}.${parsedWbs.workPackageNumber}` ); - console.log('FOUND WP'); if (wp.wbsElement.dateDeleted) throw new DeletedException('Work Package', wp.wbsElementId); diff --git a/src/frontend/src/components/PageLayout.tsx b/src/frontend/src/components/PageLayout.tsx index 861e363e5e..c4fb24d7db 100644 --- a/src/frontend/src/components/PageLayout.tsx +++ b/src/frontend/src/components/PageLayout.tsx @@ -20,6 +20,8 @@ interface PageLayoutProps { stickyHeader?: boolean; } +export const PAGE_GRID_HEIGHT = 85; + const PageLayout: React.FC = ({ children, title, diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index cd64529b2e..ccef6a323c 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; import UsefulLinks from './components/UsefulLinks'; import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; @@ -11,7 +11,7 @@ import UpcomingDeadlines from './components/UpcomingDeadlines'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MyTasks from './components/MyTasks'; @@ -30,11 +30,13 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx b/src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx new file mode 100644 index 0000000000..25b9b3bb4d --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx @@ -0,0 +1,20 @@ +import { Stack, Typography } from '@mui/material'; +import React from 'react'; + +interface CompleteDisplayProps { + icon: React.ReactNode; + heading: String; + message: String; +} + +const CompleteDisplay: React.FC = ({ icon, heading, message }) => { + return ( + + {icon} + {heading} + {message} + + ); +}; + +export default CompleteDisplay; diff --git a/src/frontend/src/pages/HomePage/components/MyTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTasks.tsx index 6f933348ec..a021babe2a 100644 --- a/src/frontend/src/pages/HomePage/components/MyTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTasks.tsx @@ -1,12 +1,35 @@ -import { Stack } from '@mui/material'; +import { Box, Stack } from '@mui/material'; import LoadingIndicator from '../../../components/LoadingIndicator'; import { useCurrentUser, useUserTasks } from '../../../hooks/users.hooks'; -import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; -import PageBlock from '../../../layouts/PageBlock'; import TaskDetailCard from './TaskDetailCard'; +import ErrorPage from '../../ErrorPage'; +import CompleteDisplay from './CompleteDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import ScrollablePageBlock from './ScrollablePageBlock'; + +const NoTasksDisplay: React.FC = () => { + return ( + + } + heading={"You're all caught up!"} + message={"You've completed all of your assigned tasks!"} + /> + + ); +}; const MyTasks: React.FC = () => { const currentUser = useCurrentUser(); + const { data: userTasks, isLoading: userTasksIsLoading, @@ -15,14 +38,19 @@ const MyTasks: React.FC = () => { } = useUserTasks(currentUser.userId); if (userTasksIsLoading || !userTasks) return ; + if (userTasksIsError) return ; return ( - - - {userTasks.map((task, index) => { - return ; - })} - - + + {userTasks.length === 0 ? ( + + ) : ( + + {userTasks.map((task, index) => { + return ; + })} + + )} + ); }; diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx new file mode 100644 index 0000000000..efed4ebcd3 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -0,0 +1,46 @@ +import { Card, CardContent, Typography, useTheme } from '@mui/material'; +import React from 'react'; +import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; + +interface ScrollablePageBlockProps { + children: React.ReactNode; + title?: String; +} + +const ScrollablePageBlock: React.FC = ({ children, title }) => { + const theme = useTheme(); + return ( + + + {title && ( + + {title} + + )} + {children} + + + ); +}; + +export default ScrollablePageBlock; diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 09c212bfd7..20e9e2ed7a 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -3,7 +3,7 @@ import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; import { Task, wbsPipe } from 'shared'; import { Link as RouterLink } from 'react-router-dom'; import { routes } from '../../../utils/routes'; -import { isTaskOverdue, taskPriorityColor } from '../../../utils/task.utils'; +import { taskPriorityColor } from '../../../utils/task.utils'; import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; import { formateDate } from '../../../../../backend/src/utils/datetime.utils'; import { useState } from 'react'; @@ -12,6 +12,8 @@ import { styled } from '@mui/material/styles'; import { useSingleWorkPackage } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; +import { useSingleProject } from '../../../hooks/projects.hooks'; +import { daysOverdue } from '../../../utils/datetime.utils'; interface TaskDetailCardProps { task: Task; @@ -20,32 +22,36 @@ interface TaskDetailCardProps { const NERToolTip = styled(({ className, ...props }: TooltipProps) => ( -))(() => ({ +))(({ theme }) => ({ [`& .${tooltipClasses.arrow}`]: { - color: 'red' + color: theme.palette.error.dark }, [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: 'red' + backgroundColor: theme.palette.error.dark } })); const TaskDetailCard: React.FC = ({ task, taskNumber }) => { const theme = useTheme(); - const taskOverdue = isTaskOverdue(task); + const taskDaysOverdue = daysOverdue(new Date(task.deadline)); + const taskOverdue = taskDaysOverdue > 0; const [hover, setHover] = useState(false); - const { data: wp, isLoading, isError, error } = useSingleWorkPackage(task.wbsNum); + const { data: project, isLoading, isError, error } = useSingleProject(task.wbsNum); - if (isLoading || !wp) return ; + if (isLoading || !project) return ; if (isError) return ; + return ( - Task #{taskNumber} is Overdue! + + Task #{taskNumber} is {taskDaysOverdue} Days Overdue! + } - open={hover} + open={taskOverdue && hover} placement="right" arrow > @@ -57,23 +63,33 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => minWidth: 'fit-content', mr: 3, background: theme.palette.background.default, - border: hover ? '1px solid red' : undefined + border: taskOverdue && hover ? '1px solid red' : undefined }} > - - Task #{taskNumber} - + + + Task #{taskNumber} + + {taskOverdue && ( + + )} + - {wbsPipe(task.wbsNum)} - {wp.name} + {wbsPipe(task.wbsNum)} - {project.name} - {taskOverdue && } { const day = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate().toString(); return `${date.getFullYear().toString()}/${month}/${day}`; }; + +export const daysOverdue = (deadline: Date) => { + return Math.round((new Date().getTime() - deadline.getTime()) / (1000 * 60 * 60 * 24)); +}; diff --git a/src/frontend/src/utils/task.utils.ts b/src/frontend/src/utils/task.utils.ts index a077098c8d..4227302b82 100644 --- a/src/frontend/src/utils/task.utils.ts +++ b/src/frontend/src/utils/task.utils.ts @@ -69,10 +69,6 @@ export const getTaskAssigneeOptions = (teams: TeamPreview[]): User[] => { return teams.map((team) => makeTeamList(team)).flat(); }; -export const isTaskOverdue = (task: Task) => { - return new Date() > new Date(task.deadline); -}; - export const taskPriorityColor = (task: Task) => { return task.priority === TaskPriority.Low ? '#1CAC19' From 617ac35fc8d8a3705b9aacee4f46b210d04bd5fe Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 20:41:00 -0400 Subject: [PATCH 053/320] #2771-removed unused imports --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index ccef6a323c..96c71e3058 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -4,10 +4,6 @@ */ import { Box, Grid, Typography } from '@mui/material'; -import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; -import UsefulLinks from './components/UsefulLinks'; -import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; -import UpcomingDeadlines from './components/UpcomingDeadlines'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; From dbd1720ce26ddee5706d603c374ea25bdf692a9c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 20:51:13 -0400 Subject: [PATCH 054/320] #2771-fixed mistakes --- src/frontend/src/apis/users.api.ts | 8 ++++---- .../src/pages/HomePage/components/WorkPackageCard.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index af9b860f6f..ad61536ece 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -104,9 +104,7 @@ export const getUsersFavoriteProjects = (id: string) => { * @returns the secure settings */ export const getUserSecureSettings = (id: string) => { - return axios.get(apiUrls.userSecureSettings(id), { - transformResponse: (data) => JSON.parse(data).map(taskTransformer) - }); + return axios.get(apiUrls.userSecureSettings(id)); }; /** @@ -147,5 +145,7 @@ export const updateUserRole = (id: string, role: string) => { }; export const getUserTasks = (id: string) => { - return axios.get(apiUrls.userTasks(id), {}); + return axios.get(apiUrls.userTasks(id), { + transformResponse: (data) => JSON.parse(data).map(taskTransformer) + }); }; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 5ff2284d4c..57814b4f3f 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -9,7 +9,7 @@ import { Link, Stack, Typography, - useTheme, + useTheme } from '@mui/material'; import { wbsPipe, WorkPackage } from 'shared'; import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; From 03e7a65e543ef08fc3783e19919e0ad724089947 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 20:54:58 -0400 Subject: [PATCH 055/320] #2771-made small screen larger --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 96c71e3058..aae181a953 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -28,7 +28,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { - + From b4211386e9515432b024f36771fcfe666d0fe1fb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 21:37:04 -0400 Subject: [PATCH 056/320] #2771-unused imports --- src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 20e9e2ed7a..8e71fe6b71 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -9,7 +9,6 @@ import { formateDate } from '../../../../../backend/src/utils/datetime.utils'; import { useState } from 'react'; import WarningAmberIcon from '@mui/icons-material/WarningAmber'; import { styled } from '@mui/material/styles'; -import { useSingleWorkPackage } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { useSingleProject } from '../../../hooks/projects.hooks'; From 300a3862ac8f70ae243e74fede2559bc1825b776 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 1 Oct 2024 21:38:53 -0400 Subject: [PATCH 057/320] #2846-fixed typo --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index cc002616af..34853b53d1 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -10,11 +10,11 @@ import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -interface MemeberHomePageProps { +interface MemberHomePageProps { user: AuthenticatedUser; } -const MemberHomePage = ({ user }: MemeberHomePageProps) => { +const MemberHomePage = ({ user }: MemberHomePageProps) => { const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); if (isLoading || !userSettingsData) return ; From b0c3ecba6390f81ed00fac49861732237925b573 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 3 Oct 2024 18:59:37 -0400 Subject: [PATCH 058/320] #2768-set up guest view tab --- src/frontend/src/apis/organizations.api.ts | 6 ++ src/frontend/src/hooks/organizations.hooks.ts | 20 ++++- .../pages/AdminToolsPage/AdminToolsPage.tsx | 6 +- .../EditGuestView/EditDescription.tsx | 52 ++++++++++++ .../EditDescriptionFormModal.tsx | 79 +++++++++++++++++++ src/frontend/src/utils/urls.ts | 2 + 6 files changed, 162 insertions(+), 3 deletions(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 3eb4fb3756..baed4c9621 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -11,3 +11,9 @@ export const getCurrentOrganization = async () => { transformResponse: (data) => JSON.parse(data) }); }; + +export const setOrganizationDescription = async (description: string) => { + return axios.post(apiUrls.organizationsSetDescription(), { + description + }); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 48e0c8abc3..3e0d3ff638 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -1,8 +1,8 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; -import { useQuery } from 'react-query'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization } from 'shared'; -import { getCurrentOrganization } from '../apis/organizations.api'; +import { getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; @@ -36,3 +36,19 @@ export const useOrganization = () => { if (context === undefined) throw Error('Organization must be used inside of an organizational context.'); return context; }; + +export const useSetOrganizationDescription = () => { + const queryClient = useQueryClient(); + return useMutation( + ['organizations', 'description'], + async (description: string) => { + const { data } = await setOrganizationDescription(description); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['organizations']); + } + } + ); +}; diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 4a68e3cfe6..24b4c94269 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -18,6 +18,8 @@ import NERTabs from '../../components/Tabs'; import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; +import EditDescription from './EditGuestView/EditDescription'; +import { useCurrentOrganization } from '../../hooks/organizations.hooks'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); @@ -93,7 +95,9 @@ const AdminToolsPage: React.FC = () => { ) : tabIndex === 3 ? ( ) : tabIndex === 4 ? ( - + + + ) : ( diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx new file mode 100644 index 0000000000..30ccefe274 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -0,0 +1,52 @@ +import { Box, Grid, TextField, Typography } from '@mui/material'; +import React, { useState } from 'react'; +import { useCurrentOrganization, useSetOrganizationDescription } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { NERButton } from '../../../components/NERButton'; +import EditDescriptionFormModal, { EditDescriptionInput } from './EditDescriptionFormModal'; + +const EditDescription: React.FC = () => { + const [showModal, setShowModal] = useState(false); + const { data: organization, isLoading, isError, error } = useCurrentOrganization(); + const { mutateAsync: setOrganizationDescription } = useSetOrganizationDescription(); + + const onSubmit = async (formInput: EditDescriptionInput) => { + console.log('SUBMITTING'); + setShowModal(false); + await setOrganizationDescription(formInput.description); + }; + + const handleClose = () => { + setShowModal(false); + }; + + if (isLoading || !organization) return ; + if (isError) return ; + + return ( + + + + {organization.name} Description + + + + + + setShowModal(true)}> + Update + + + + + + ); +}; + +export default EditDescription; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx new file mode 100644 index 0000000000..0050e54ccf --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx @@ -0,0 +1,79 @@ +import React from 'react'; +import * as yup from 'yup'; +import { Controller, useForm } from 'react-hook-form'; +import { yupResolver } from '@hookform/resolvers/yup'; +import NERFormModal from '../../../components/NERFormModal'; +import { FormControl, FormLabel, TextField } from '@mui/material'; + +const schema = yup.object().shape({ + description: yup.string() +}); + +export interface EditDescriptionInput { + description: string; +} + +interface EditDescriptionFormModalProps { + originalDescription: string; + modalShow: boolean; + onHide: () => void; + onSubmit: (data: EditDescriptionInput) => Promise; + onReset?: () => void; +} + +const EditDescriptionFormModal: React.FC = ({ + modalShow, + onHide, + onSubmit, + originalDescription, + onReset +}) => { + const { + handleSubmit, + control, + formState: { errors }, + reset + } = useForm({ + resolver: yupResolver(schema), + defaultValues: { + description: originalDescription + } + }); + + return ( + { + if (onReset) onReset(); + reset(); + }} + > +
{ + e.preventDefault(); + e.stopPropagation(); + handleSubmit(onSubmit)(e); + }} + > + + Title + ( + + )} + /> + +
+
+ ); +}; + +export default EditDescriptionFormModal; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 94561cf1a8..ec4831a5fb 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -173,6 +173,7 @@ const organizations = () => `${API_URL}/organizations`; const currentOrganization = () => `${organizations()}/current`; const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; +const organizationsSetDescription = () => `${organizations()}/description/set`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -328,6 +329,7 @@ export const apiUrls = { currentOrganization, organizationsUsefulLinks, organizationsSetUsefulLinks, + organizationsSetDescription, cars, carsCreate, From 6e2b76004afe2c274d67eddc4abfbb9cb5679d6a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 4 Oct 2024 10:10:27 -0400 Subject: [PATCH 059/320] #2771-added task title and fixed naming issues --- src/frontend/src/hooks/users.hooks.ts | 11 ++++++++--- ...{CompleteDisplay.tsx => EmptyPageBlockDisplay.tsx} | 6 +++--- .../src/pages/HomePage/components/MyTasks.tsx | 4 ++-- .../src/pages/HomePage/components/TaskDetailCard.tsx | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) rename src/frontend/src/pages/HomePage/components/{CompleteDisplay.tsx => EmptyPageBlockDisplay.tsx} (68%) diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index 3bd7feb7df..a967d29d41 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -236,9 +236,14 @@ export const useUpdateUserRole = () => { ); }; -export const useUserTasks = (id: string) => { - return useQuery(['users', id, 'tasks'], async () => { - const { data } = await getUserTasks(id); +/** + * Custom React Hook to get the user's assigned tasks + * @param userId user to get assigned tasks of + * @returns user's assigned task + */ +export const useUserTasks = (userId: string) => { + return useQuery(['users', userId, 'tasks'], async () => { + const { data } = await getUserTasks(userId); return data; }); }; diff --git a/src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx similarity index 68% rename from src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx rename to src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx index 25b9b3bb4d..49a43145f5 100644 --- a/src/frontend/src/pages/HomePage/components/CompleteDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx @@ -1,13 +1,13 @@ import { Stack, Typography } from '@mui/material'; import React from 'react'; -interface CompleteDisplayProps { +interface EmptyPageBlockDisplayProps { icon: React.ReactNode; heading: String; message: String; } -const CompleteDisplay: React.FC = ({ icon, heading, message }) => { +const EmptyPageBlockDisplay: React.FC = ({ icon, heading, message }) => { return ( {icon} @@ -17,4 +17,4 @@ const CompleteDisplay: React.FC = ({ icon, heading, messag ); }; -export default CompleteDisplay; +export default EmptyPageBlockDisplay; diff --git a/src/frontend/src/pages/HomePage/components/MyTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTasks.tsx index a021babe2a..12d2a4f8f0 100644 --- a/src/frontend/src/pages/HomePage/components/MyTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTasks.tsx @@ -3,7 +3,7 @@ import LoadingIndicator from '../../../components/LoadingIndicator'; import { useCurrentUser, useUserTasks } from '../../../hooks/users.hooks'; import TaskDetailCard from './TaskDetailCard'; import ErrorPage from '../../ErrorPage'; -import CompleteDisplay from './CompleteDisplay'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; import ScrollablePageBlock from './ScrollablePageBlock'; @@ -18,7 +18,7 @@ const NoTasksDisplay: React.FC = () => { alignItems: 'center' }} > - } heading={"You're all caught up!"} message={"You've completed all of your assigned tasks!"} diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 8e71fe6b71..528958d022 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -71,7 +71,7 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => - Task #{taskNumber} + Task #{taskNumber} - {task.title} {taskOverdue && ( Date: Fri, 4 Oct 2024 10:13:06 -0400 Subject: [PATCH 060/320] 2771-fixed format date --- src/backend/src/utils/datetime.utils.ts | 6 ------ .../src/pages/HomePage/components/TaskDetailCard.tsx | 5 ++--- src/frontend/src/utils/datetime.utils.ts | 6 ++++++ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/backend/src/utils/datetime.utils.ts b/src/backend/src/utils/datetime.utils.ts index 82cf261fff..9ab3d23ab5 100644 --- a/src/backend/src/utils/datetime.utils.ts +++ b/src/backend/src/utils/datetime.utils.ts @@ -13,9 +13,3 @@ export const transformDate = (date: Date) => { const day = date.getDate() + 1 < 10 ? `0${date.getDate() + 1}` : (date.getDate() + 1).toString(); return `${date.getFullYear().toString()}-${month}-${day}`; }; - -export const formateDate = (date: Date) => { - const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : (date.getMonth() + 1).toString(); - const day = date.getDate() + 1 < 10 ? `0${date.getDate() + 1}` : (date.getDate() + 1).toString(); - return `${month}/${day}/${date.getFullYear().toString()}`; -}; diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 528958d022..66a323b852 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -5,14 +5,13 @@ import { Link as RouterLink } from 'react-router-dom'; import { routes } from '../../../utils/routes'; import { taskPriorityColor } from '../../../utils/task.utils'; import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; -import { formateDate } from '../../../../../backend/src/utils/datetime.utils'; import { useState } from 'react'; import WarningAmberIcon from '@mui/icons-material/WarningAmber'; import { styled } from '@mui/material/styles'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { useSingleProject } from '../../../hooks/projects.hooks'; -import { daysOverdue } from '../../../utils/datetime.utils'; +import { daysOverdue, formatDate } from '../../../utils/datetime.utils'; interface TaskDetailCardProps { task: Task; @@ -99,7 +98,7 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => label={task.priority} size="small" /> - } label={formateDate(new Date(task.deadline))} size="small" /> + } label={formatDate(new Date(task.deadline))} size="small" />
{ return `${date.getFullYear().toString()}/${month}/${day}`; }; +export const formatDate = (date: Date) => { + const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : (date.getMonth() + 1).toString(); + const day = date.getDate() + 1 < 10 ? `0${date.getDate() + 1}` : (date.getDate() + 1).toString(); + return `${month}/${day}/${date.getFullYear().toString()}`; +}; + export const daysOverdue = (deadline: Date) => { return Math.round((new Date().getTime() - deadline.getTime()) / (1000 * 60 * 60 * 24)); }; From b60025b756325bf36890833d758e4ebf8c999e72 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 6 Oct 2024 16:25:44 -0400 Subject: [PATCH 061/320] #2768-added admin tool to edit description --- src/frontend/src/hooks/organizations.hooks.ts | 1 + .../EditGuestView/EditDescription.tsx | 61 +++++++++++++------ .../EditDescriptionFormModal.tsx | 19 +++++- 3 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 3e0d3ff638..6002f1ba41 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -43,6 +43,7 @@ export const useSetOrganizationDescription = () => { ['organizations', 'description'], async (description: string) => { const { data } = await setOrganizationDescription(description); + queryClient.invalidateQueries(['organizations']); return data; }, { diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx index 30ccefe274..45611c204c 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -1,44 +1,69 @@ -import { Box, Grid, TextField, Typography } from '@mui/material'; +import { Box, TextField, Typography } from '@mui/material'; import React, { useState } from 'react'; import { useCurrentOrganization, useSetOrganizationDescription } from '../../../hooks/organizations.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { NERButton } from '../../../components/NERButton'; import EditDescriptionFormModal, { EditDescriptionInput } from './EditDescriptionFormModal'; +import { useToast } from '../../../hooks/toasts.hooks'; const EditDescription: React.FC = () => { const [showModal, setShowModal] = useState(false); const { data: organization, isLoading, isError, error } = useCurrentOrganization(); - const { mutateAsync: setOrganizationDescription } = useSetOrganizationDescription(); + const { + mutateAsync: setOrganizationDescription, + isLoading: mutateIsLoading, + isError: mutateIsError, + error: mutateError + } = useSetOrganizationDescription(); + const toast = useToast(); - const onSubmit = async (formInput: EditDescriptionInput) => { - console.log('SUBMITTING'); + const handleClose = () => { setShowModal(false); - await setOrganizationDescription(formInput.description); }; - const handleClose = () => { - setShowModal(false); + const onSubmit = async (formInput: EditDescriptionInput) => { + try { + await setOrganizationDescription(formInput.description); + toast.success('Description updated successfully!'); + } catch (error: unknown) { + if (error instanceof Error) { + toast.error(error.message); + } + } + handleClose(); }; - if (isLoading || !organization) return ; + if (isLoading || mutateIsLoading || !organization) return ; if (isError) return ; + if (mutateIsError) return ; return ( - - - {organization.name} Description - - - - - + {organization.name} Description + + + setShowModal(true)}> Update - - + + = ({ } = useForm({ resolver: yupResolver(schema), defaultValues: { - description: originalDescription + description: originalDescription ?? '' } }); @@ -45,6 +45,7 @@ const EditDescriptionFormModal: React.FC = ({ open={modalShow} onHide={onHide} title="Edit Description" + formId="edit-organization-description" handleUseFormSubmit={handleSubmit} onFormSubmit={onSubmit} submitText="Save" @@ -58,6 +59,10 @@ const EditDescriptionFormModal: React.FC = ({ e.preventDefault(); e.stopPropagation(); handleSubmit(onSubmit)(e); + reset(); + }} + onKeyPress={(e) => { + e.key === 'Enter' && e.preventDefault(); }} > @@ -67,7 +72,17 @@ const EditDescriptionFormModal: React.FC = ({ control={control} rules={{ required: true }} render={({ field: { onChange, value } }) => ( - + )} /> From 5199094bb9c1cbddfd03547df42e42fe346f66ad Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 6 Oct 2024 16:37:29 -0400 Subject: [PATCH 062/320] #2768-unused import --- src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 24b4c94269..04856d5265 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -19,7 +19,6 @@ import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; import EditDescription from './EditGuestView/EditDescription'; -import { useCurrentOrganization } from '../../hooks/organizations.hooks'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); From 0374846c8985bbe25e3d961e59fecc6a00f2bb59 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 8 Oct 2024 20:53:05 -0400 Subject: [PATCH 063/320] #2803 added component to home pages --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 ++ src/frontend/src/pages/HomePage/LeadHomePage.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..61c6a2b6b0 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 76929deada..581025367b 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! + ); }; From c066c54095bc38bd1d8ff9d67f91b01f94e5854a Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 12 Oct 2024 20:06:40 -0400 Subject: [PATCH 064/320] #2803 linting fix --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 566b78a777..34853b53d1 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface MemberHomePageProps { user: AuthenticatedUser; From 1e972e8664ee0a6f54db9768da3655be70ad5b62 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 12 Oct 2024 20:39:13 -0400 Subject: [PATCH 065/320] #2801 linting fix --- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 569c74c6a6..e481ad59d2 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; interface LeadHomePageProps { user: AuthenticatedUser; From 9ab76b2ef4140ec92c6d263dbdca1a76edb8cfad Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 12 Oct 2024 20:51:22 -0400 Subject: [PATCH 066/320] #2809 work package selection logic and basic implementation --- .../prisma-query-args/auth-user.query-args.ts | 7 +- .../src/transformers/auth-user.transformer.ts | 5 +- .../src/pages/HomePage/AdminHomePage.tsx | 2 + .../src/pages/HomePage/LeadHomePage.tsx | 2 + .../components/WorkPackagesSelectionView.tsx | 118 ++++++++++++++++++ src/frontend/src/utils/work-package.utils.ts | 17 ++- src/shared/src/types/user-types.ts | 3 + 7 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx diff --git a/src/backend/src/prisma-query-args/auth-user.query-args.ts b/src/backend/src/prisma-query-args/auth-user.query-args.ts index f99144f234..0c6db7bd94 100644 --- a/src/backend/src/prisma-query-args/auth-user.query-args.ts +++ b/src/backend/src/prisma-query-args/auth-user.query-args.ts @@ -1,4 +1,5 @@ import { Prisma } from '@prisma/client'; +import { getTeamQueryArgs } from './teams.query-args'; export type AuthUserQueryArgs = ReturnType; @@ -9,13 +10,15 @@ export const getAuthUserQueryArgs = (organizationId: string) => teamsAsHead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, organizations: true, teamsAsLead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, teamsAsMember: { where: { diff --git a/src/backend/src/transformers/auth-user.transformer.ts b/src/backend/src/transformers/auth-user.transformer.ts index ed49204c54..57ab1585c4 100644 --- a/src/backend/src/transformers/auth-user.transformer.ts +++ b/src/backend/src/transformers/auth-user.transformer.ts @@ -6,6 +6,7 @@ import { isAuthUserOnFinance } from '../utils/reimbursement-requests.utils'; import { Prisma } from '@prisma/client'; +import teamTransformer from './teams.transformer'; const authenticatedUserTransformer = ( user: Prisma.UserGetPayload, @@ -26,7 +27,9 @@ const authenticatedUserTransformer = ( isAtLeastFinanceLead: isAuthUserAtLeastLeadForFinance(user), changeRequestsToReviewId: user.changeRequestsToReview.map((changeRequest) => changeRequest.crId), organizations: user.organizations.map((organization) => organization.organizationId), - currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId) + currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId), + teamsAsHeadId: user.teamsAsHead.map(teamTransformer), + teamsAsLeadId: user.teamsAsLead.map(teamTransformer) }; }; diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..963d1b5ff9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 76929deada..ecbd68ab5d 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx new file mode 100644 index 0000000000..ad65048b9e --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -0,0 +1,118 @@ +import { wbsPipe, WorkPackage } from 'shared'; +import { Box, MenuItem, Select, useTheme, SelectChangeEvent } from '@mui/material'; +import { + getInProgressWorkPackages, + getOverdueWorkPackages, + getUpcomingWorkPackages +} from '../../../utils/work-package.utils'; +import { useCurrentUser } from '../../../hooks/users.hooks'; +import PageBlock from '../../../layouts/PageBlock'; +import WorkPackageCard from './WorkPackageCard'; +import { useEffect, useState } from 'react'; + +const WorkPackagesSelectionView: React.FC = () => { + const user = useCurrentUser(); + const theme = useTheme(); + + enum WPGroup { + upcoming = 'upcoming', + inProgress = 'inProgress', + overdue = 'overdue' + } + const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(WPGroup.upcoming); + + const setCookie = (name: string, value: string, days: number) => { + const date = new Date(); + date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); + const expires = 'expires=' + date.toUTCString(); + document.cookie = `${name}=${value}; ${expires}; path=/`; + }; + + useEffect(() => { + const value = `; ${document.cookie}`; + const parts = value.split(`; wpGroup=`); + let savedGroup; + if (parts.length === 2) { + savedGroup = parts.pop()?.split(';').shift(); + } + if (savedGroup) { + setCurrentDisplayedWPs(savedGroup as WPGroup); + } + }, []); + + if (!user.teamAsHeadId) { + throw new Error('rwge4rwa'); + } + + const relevantWPs = user.teamsAsHeadId.map((team) => team.projects.map((project) => project.workPackages)).flat(2); + + const upcomingWPs: WorkPackage[] = getUpcomingWorkPackages(relevantWPs); + const inProgressWPs: WorkPackage[] = getInProgressWorkPackages(relevantWPs); + const overdueWPs: WorkPackage[] = getOverdueWorkPackages(relevantWPs); + + const handleChange = (event: SelectChangeEvent) => { + const value = event.target.value as WPGroup; + setCookie('wpGroup', value, 7); + setCurrentDisplayedWPs(value); + }; + + const getWorkPackages = (key: WPGroup): WorkPackage[] => { + switch (key) { + case WPGroup.upcoming: + return upcomingWPs; + case WPGroup.inProgress: + return inProgressWPs; + case WPGroup.overdue: + return overdueWPs; + } + }; + + const workPackagesDisplay = (workPackages: WorkPackage[]) => ( + + {workPackages.length === 0 + ? `No work packages` + : workPackages.map((wp) => ( + + + + ))} + + ); + + return ( + + + + {workPackagesDisplay(getWorkPackages(currentDisplayedWPs))} + + + ); +}; + +export default WorkPackagesSelectionView; diff --git a/src/frontend/src/utils/work-package.utils.ts b/src/frontend/src/utils/work-package.utils.ts index 8a631082f5..582fbbc428 100644 --- a/src/frontend/src/utils/work-package.utils.ts +++ b/src/frontend/src/utils/work-package.utils.ts @@ -18,5 +18,20 @@ export const getTitleFromFormType = (formType: WPFormType, wbsElement: WbsElemen * @returns a list of work packages that are overdue. */ export const getOverdueWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { - return wpList.filter((wp) => wp.status !== WbsElementStatus.Complete && wp.endDate < new Date()); + return wpList.filter((wp) => wp.status !== WbsElementStatus.Complete && new Date(wp.endDate) <= new Date()); +}; + +export const getUpcomingWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { + return wpList.filter( + (wp) => + wp.status === WbsElementStatus.Inactive && + //start date is within 2 weeks + wp.startDate < new Date(new Date().getTime() + 14 * 24 * 60 * 60 * 1000) && + //start date is in the future + wp.startDate > new Date() + ); +}; + +export const getInProgressWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { + return wpList.filter((wp) => wp.status === WbsElementStatus.Active && wp.endDate >= new Date()); }; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 1a95a46542..79ca6c9c16 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -4,6 +4,7 @@ */ import { AvailabilityCreateArgs } from './design-review-types'; +import { Team } from './team-types'; export interface User { userId: string; @@ -64,6 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; + teamsAsHeadId: Team[]; + teamsAsLeadId: Team[]; } export interface UserSettings { From d8793faff9d5e9a62ea45bd5c85199edd906ba00 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 13 Oct 2024 15:22:55 -0400 Subject: [PATCH 067/320] #2771-added members to seed --- src/backend/src/prisma/seed.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index 5a583c2e38..b6170fb65f 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -176,11 +176,11 @@ const performSeed: () => Promise = async () => { const glen = await createUser(dbSeedAllUsers.glen, RoleEnum.LEADERSHIP, organizationId); const shane = await createUser(dbSeedAllUsers.shane, RoleEnum.LEADERSHIP, organizationId); const june = await createUser(dbSeedAllUsers.june, RoleEnum.LEADERSHIP, organizationId); - const kevin = await createUser(dbSeedAllUsers.kevin, RoleEnum.LEADERSHIP, organizationId); - const norbury = await createUser(dbSeedAllUsers.norbury, RoleEnum.LEADERSHIP, organizationId); - const carr = await createUser(dbSeedAllUsers.carr, RoleEnum.LEADERSHIP, organizationId); - const trang = await createUser(dbSeedAllUsers.trang, RoleEnum.LEADERSHIP, organizationId); - const regina = await createUser(dbSeedAllUsers.regina, RoleEnum.LEADERSHIP, organizationId); + const kevin = await createUser(dbSeedAllUsers.kevin, RoleEnum.MEMBER, organizationId); + const norbury = await createUser(dbSeedAllUsers.norbury, RoleEnum.MEMBER, organizationId); + const carr = await createUser(dbSeedAllUsers.carr, RoleEnum.MEMBER, organizationId); + const trang = await createUser(dbSeedAllUsers.trang, RoleEnum.MEMBER, organizationId); + const regina = await createUser(dbSeedAllUsers.regina, RoleEnum.MEMBER, organizationId); await createUser(dbSeedAllUsers.spongebob, RoleEnum.GUEST, organizationId); await UsersService.updateUserRole(cyborg.userId, thomasEmrax, 'APP_ADMIN', ner); From 856af5394ffee18bf3ca5da0d6685468fdac0aa1 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 16 Oct 2024 18:47:48 -0400 Subject: [PATCH 068/320] #2797-featured projects section --- src/frontend/src/apis/organizations.api.ts | 8 +- src/frontend/src/hooks/organizations.hooks.ts | 11 +- .../src/pages/HomePage/MemberHomePage.tsx | 2 + .../HomePage/components/FeaturedProjects.tsx | 60 + .../components/FeaturedProjectsCard.tsx | 75 + src/frontend/src/utils/urls.ts | 2 + yarn.lock | 2223 +++++++++-------- 7 files changed, 1290 insertions(+), 1091 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx create mode 100644 src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 3eb4fb3756..ae77ea9f5d 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -1,5 +1,5 @@ import axios from '../utils/axios'; -import { Organization } from 'shared'; +import { Organization, Project } from 'shared'; import { apiUrls } from '../utils/urls'; /** @@ -11,3 +11,9 @@ export const getCurrentOrganization = async () => { transformResponse: (data) => JSON.parse(data) }); }; + +export const getCurrentFeaturedProject =async () => { + return axios.get(apiUrls.organizationsFeaturedProjects(), { + transformResponse: (data) => JSON.parse(data) + }) +} diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 48e0c8abc3..c133d54873 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -1,8 +1,8 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useQuery } from 'react-query'; -import { Organization } from 'shared'; -import { getCurrentOrganization } from '../apis/organizations.api'; +import { Organization, Project } from 'shared'; +import { getCurrentFeaturedProject, getCurrentOrganization } from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; @@ -30,6 +30,13 @@ export const useCurrentOrganization = () => { }); }; +export const useFeaturedProjects = () => { + return useQuery(['organizations', 'featured-projects'], async () => { + const { data } = await getCurrentFeaturedProject(); + return data; + }); +}; + // Hook for child components to get the auth object export const useOrganization = () => { const context = useContext(OrganizationContext); diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 00f96da519..40abb4c2f3 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -13,6 +13,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import FeaturedProjects from './components/FeaturedProjects' interface MemberHomePageProps { user: AuthenticatedUser; @@ -33,6 +34,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { + ); }; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx new file mode 100644 index 0000000000..37405841ca --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -0,0 +1,60 @@ +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import PageBlock from '../../../layouts/PageBlock'; +import FeaturedProjectsCard from './FeaturedProjectsCard'; +import { useFeaturedProjects } from '../../../hooks/organizations.hooks'; +import { Typography, useTheme } from '@mui/material'; +import ErrorPage from '../../ErrorPage'; +import Box from '@mui/material/Box'; +import { wbsPipe } from 'shared'; +import LoadingIndicator from '../../../components/LoadingIndicator'; + +const FeaturedProjects: React.FC = () => { + const featuredProjects = useFeaturedProjects(); + const theme = useTheme(); + + if (featuredProjects.isError) { + return ; + } + + const fullDisplay = ( + + {featuredProjects.data?.length === 0 ? ( + No Featured Projects + ) : ( + featuredProjects.data?.map((p) => ) + )} + + ); + + return ( + + {featuredProjects.isLoading ? : fullDisplay} + + ); +}; + +export default FeaturedProjects; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx new file mode 100644 index 0000000000..6e34f08ed8 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx @@ -0,0 +1,75 @@ +import { Construction, Work } from '@mui/icons-material'; +import { + Box, + Card, + CardContent, + Chip, + CircularProgress, + CircularProgressProps, + Link, + Stack, + Typography, + useTheme +} from '@mui/material'; +import { wbsPipe, Project } from 'shared'; +import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; +import { routes } from '../../../utils/routes'; +import { Link as RouterLink } from 'react-router-dom'; + +export const CircularProgressWithLabel = (props: CircularProgressProps & { value: number }) => { + return ( + + +
+ {`${Math.round(props.value)}%`} +
+
+ ); +}; + +const FeaturedProjectsCard = ({ p }: { p: Project }) => { + const theme = useTheme(); + return ( + + + + + + + {projectWbsPipe(p.wbsNum)} - {p.teams} + + + + + {wbsPipe(p.wbsNum)} - {p.name} + + + + {datePipe(p.startDate) + ' ⟝ ' + p.duration + ' wks ⟞ ' + datePipe(p.endDate)} + + + + + } label={fullNamePipe(p.lead)} size="medium" /> + } label={fullNamePipe(p.manager)} size="medium" /> + + + + ); +}; + +export default FeaturedProjectsCard; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 94561cf1a8..e61c1a039f 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -173,6 +173,7 @@ const organizations = () => `${API_URL}/organizations`; const currentOrganization = () => `${organizations()}/current`; const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; +const organizationsFeaturedProjects = () => `${organizations()}/featured-projects` /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -328,6 +329,7 @@ export const apiUrls = { currentOrganization, organizationsUsefulLinks, organizationsSetUsefulLinks, + organizationsFeaturedProjects, cars, carsCreate, diff --git a/yarn.lock b/yarn.lock index 6586f5c64b..9c82018100 100644 --- a/yarn.lock +++ b/yarn.lock @@ -50,10 +50,10 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/compat-data@npm:7.24.7" - checksum: 1fc276825dd434fe044877367dfac84171328e75a8483a6976aa28bf833b32367e90ee6df25bdd97c287d1aa8019757adcccac9153de70b1932c0d243a978ae9 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/compat-data@npm:7.25.4" + checksum: b12a91d27c3731a4b0bdc9312a50b1911f41f7f728aaf0d4b32486e2257fd2cb2d3ea1a295e98449600c48f2c7883a3196ca77cda1cef7d97a10c2e83d037974 languageName: node linkType: hard @@ -81,32 +81,32 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.24.5, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": - version: 7.24.7 - resolution: "@babel/core@npm:7.24.7" +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.25.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.24.7 - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helpers": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/template": ^7.24.7 - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-module-transforms": ^7.25.2 + "@babel/helpers": ^7.25.0 + "@babel/parser": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.2 + "@babel/types": ^7.25.2 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 017497e2a1b4683a885219eef7d2aee83c1c0cf353506b2e180b73540ec28841d8ef1ea1837fa69f8c561574b24ddd72f04764b27b87afedfe0a07299ccef24d + checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a languageName: node linkType: hard "@babel/eslint-parser@npm:^7.16.3": - version: 7.24.7 - resolution: "@babel/eslint-parser@npm:7.24.7" + version: 7.25.1 + resolution: "@babel/eslint-parser@npm:7.25.1" dependencies: "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 eslint-visitor-keys: ^2.1.0 @@ -114,19 +114,19 @@ __metadata: peerDependencies: "@babel/core": ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - checksum: 0e08ccecfe48cf9dacd96fb46747014b9c3683882ae6886a17a666533f0d5e99b61e31e3992ffee0efc67d805ae8be9b2a6342ce5d66a36de8d99d88c9a244a0 + checksum: 73207b7e84a58bd6560d29f11cf5c6f9d64a01b9299d4d0a145423a028ea4c402be2fd09228647fdbec14b65a07d4138e751468fd33d9a9363c9698582fa80b5 languageName: node linkType: hard -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/generator@npm:7.24.7" +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/generator@npm:7.25.6" dependencies: - "@babel/types": ^7.24.7 + "@babel/types": ^7.25.6 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^2.5.1 - checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b + checksum: b55975cd664f5602304d868bb34f4ee3bed6f5c7ce8132cd92ff27a46a53a119def28a182d91992e86f75db904f63094a81247703c4dc96e4db0c03fd04bcd68 languageName: node linkType: hard @@ -149,52 +149,50 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-compilation-targets@npm:7.24.7" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" dependencies: - "@babel/compat-data": ^7.24.7 - "@babel/helper-validator-option": ^7.24.7 - browserslist: ^4.22.2 + "@babel/compat-data": ^7.25.2 + "@babel/helper-validator-option": ^7.24.8 + browserslist: ^4.23.1 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: dfc88bc35e223ade796c7267901728217c665adc5bc2e158f7b0ae850de14f1b7941bec4fe5950ae46236023cfbdeddd9c747c276acf9b39ca31f8dd97dc6cc6 + checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0, @babel/helper-create-class-features-plugin@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.8 "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/helper-replace-supers": ^7.24.7 + "@babel/helper-replace-supers": ^7.25.0 "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/traverse": ^7.25.4 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 371a181a1717a9b0cebc97727c8ea9ca6afa34029476a684b6030f9d1ad94dcdafd7de175da10b63ae3ba79e4e82404db8ed968ebf264b768f097e5d64faab71 + checksum: 4544ebda4516eb25efdebd47ca024bd7bdb1eb6e7cc3ad89688c8ef8e889734c2f4411ed78981899c641394f013f246f2af63d92a0e9270f6c453309b4cb89ba languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 regexpu-core: ^5.3.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 17c59fa222af50f643946eca940ce1d474ff2da1f4afed2312687ab9d708ebbb8c9372754ddbdf44b6e21ead88b8fc144644f3a7b63ccb886de002458cef3974 + checksum: df55fdc6a1f3090dd37d91347df52d9322d52affa239543808dc142f8fe35e6787e67d8612337668198fac85826fafa9e6772e6c28b7d249ec94e6fafae5da6e languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": +"@babel/helper-define-polyfill-provider@npm:^0.6.2": version: 0.6.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" dependencies: @@ -209,41 +207,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-environment-visitor@npm:7.24.7" - dependencies: - "@babel/types": ^7.24.7 - checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-function-name@npm:7.24.7" - dependencies: - "@babel/template": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-hoist-variables@npm:7.24.7" +"@babel/helper-member-expression-to-functions@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" dependencies: - "@babel/types": ^7.24.7 - checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7" - dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 9fecf412f85fa23b7cf55d19eb69de39f8240426a028b141c9df2aed8cfedf20b3ec3318d40312eb7a3dec9eea792828ce0d590e0ff62da3da532482f537192c + "@babel/traverse": ^7.24.8 + "@babel/types": ^7.24.8 + checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc languageName: node linkType: hard @@ -257,18 +227,17 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-transforms@npm:7.24.7" +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 "@babel/helper-module-imports": ^7.24.7 "@babel/helper-simple-access": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.2 peerDependencies: "@babel/core": ^7.0.0 - checksum: ddff3b41c2667876b4e4e73d961168f48a5ec9560c95c8c2d109e6221f9ca36c6f90c6317eb7a47f2a3c99419c356e529a86b79174cad0d4f7a61960866b88ca + checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 languageName: node linkType: hard @@ -281,36 +250,36 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/helper-plugin-utils@npm:7.24.7" - checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7" +"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-wrap-function": ^7.24.7 + "@babel/helper-wrap-function": ^7.25.0 + "@babel/traverse": ^7.25.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: bab7be178f875350f22a2cb9248f67fe3a8a8128db77a25607096ca7599fd972bc7049fb11ed9e95b45a3f1dd1fac3846a3279f9cbac16f337ecb0e6ca76e1fc + checksum: 47f3065e43fe9d6128ddb4291ffb9cf031935379265fd13de972b5f241943121f7583efb69cd2e1ecf39e3d0f76f047547d56c3fcc2c853b326fad5465da0bd7 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-replace-supers@npm:7.24.7" +"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-replace-supers@npm:7.25.0" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.8 "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/traverse": ^7.25.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2bf0d113355c60d86a04e930812d36f5691f26c82d4ec1739e5ec0a4c982c9113dad3167f7c74f888a96328bd5e696372232406d8200e5979e6e0dc2af5e7c76 + checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8 languageName: node linkType: hard @@ -334,19 +303,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-split-export-declaration@npm:7.24.7" - dependencies: - "@babel/types": ^7.24.7 - checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-string-parser@npm:7.24.7" - checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce languageName: node linkType: hard @@ -357,32 +317,31 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-option@npm:7.24.7" - checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e +"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-wrap-function@npm:7.24.7" +"@babel/helper-wrap-function@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-wrap-function@npm:7.25.0" dependencies: - "@babel/helper-function-name": ^7.24.7 - "@babel/template": ^7.24.7 - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 085bf130ed08670336e3976f5841ae44e3e10001131632e22ef234659341978d2fd37e65785f59b6cb1745481347fc3bce84b33a685cacb0a297afbe1d2b03af + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 0095b4741704066d1687f9bbd5370bb88c733919e4275e49615f70c180208148ff5f24ab58d186ce92f8f5d28eab034ec6617e9264590cc4744c75302857629c languageName: node linkType: hard -"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helpers@npm:7.24.7" +"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.25.0": + version: 7.25.6 + resolution: "@babel/helpers@npm:7.25.6" dependencies: - "@babel/template": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 934da58098a3670ca7f9f42425b9c44d0ca4f8fad815c0f51d89fc7b64c5e0b4c7d5fec038599de691229ada737edeaf72fad3eba8e16dd5842e8ea447f76b66 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 + checksum: 5a548999db82049a5f7ac6de57576b4ed0d386ce07d058151698836ed411eae6230db12535487caeebb68a2ffc964491e8aead62364a5132ab0ae20e8b68e19f languageName: node linkType: hard @@ -398,35 +357,48 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.7.0": - version: 7.24.7 - resolution: "@babel/parser@npm:7.24.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6, @babel/parser@npm:^7.7.0": + version: 7.25.6 + resolution: "@babel/parser@npm:7.25.6" + dependencies: + "@babel/types": ^7.25.6 bin: parser: ./bin/babel-parser.js - checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6 + checksum: 85b237ded09ee43cc984493c35f3b1ff8a83e8dbbb8026b8132e692db6567acc5a1659ec928e4baa25499ddd840d7dae9dee3062be7108fe23ec5f94a8066b1e languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 68d315642b53af143aa17a71eb976cf431b51339aee584e29514a462b81c998636dd54219c2713b5f13e1df89eaf130dfab59683f9116825608708c81696b96c + checksum: d3dba60f360defe70eb43e35a1b17ea9dd4a99e734249e15be3d5c288019644f96f88d7ff51990118fda0845b4ad50f6d869e0382232b1d8b054d113d4eea7e2 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.7" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0 - checksum: 7eb4e7ce5e3d6db4b0fdbdfaaa301c2e58f38a7ee39d5a4259a1fda61a612e83d3e4bc90fc36fb0345baf57e1e1a071e0caffeb80218623ad163f2fdc2e53a54 + checksum: fd56d1e6435f2c008ca9050ea906ff7eedcbec43f532f2bf2e7e905d8bf75bf5e4295ea9593f060394e2c8e45737266ccbf718050bad2dd7be4e7613c60d1b5b + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 13ed301b108d85867d64226bbc4032b07dd1a23aab68e9e32452c4fe3930f2198bb65bdae9c262c4104bd5e45647bc1830d25d43d356ee9a137edd8d5fab8350 languageName: node linkType: hard @@ -443,15 +415,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.7" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 8324d458db57060590942c7c2e9603880d07718ccb6450ec935105b8bd3c4393c4b8ada88e178c232258d91f33ffdcf2b1043d54e07a86989e50667ee100a32e + checksum: c8d08b8d6cc71451ad2a50cf7db72ab5b41c1e5e2e4d56cf6837a25a61270abd682c6b8881ab025f11a552d2024b3780519bb051459ebb71c27aed13d9917663 languageName: node linkType: hard @@ -574,7 +546,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -641,28 +613,28 @@ __metadata: linkType: hard "@babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" + version: 7.25.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c4d67be4eb1d4637e361477dbe01f5b392b037d17c1f861cfa0faa120030e137aab90a9237931b8040fd31d1e5d159e11866fa1165f78beef7a3be876a391a17 + checksum: b3b251ace9f184c2d6369cde686ff01581050cb0796f2ff00ff4021f31cf86270b347df09579f2c0996e999e37e1dddafacec42ed1ef6aae21a265aff947e792 languageName: node linkType: hard "@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + version: 7.25.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 590dbb5d1a15264f74670b427b8d18527672c3d6c91d7bae7e65f80fd810edbc83d90e68065088644cbad3f2457ed265a54a9956fb789fcb9a5b521822b3a275 + checksum: 3b0928e73e42346e8a65760a3ff853c87ad693cdf11bb335a23e895e0b5b1f0601118521b3aff2a6946488a580a63afb6a5b5686153a7678b4dff0e4e4604dd7 languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -695,7 +667,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -717,7 +689,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -772,7 +744,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -784,13 +756,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 56fe84f3044ecbf038977281648db6b63bd1301f2fff6595820dc10ee276c1d1586919d48d52a8d497ecae32c958be38f42c1c8d174dc58aad856c516dc5b35a + checksum: 9b89b8930cd5983f64251d75c9fcdc17a8dc73837d6de12220ff972888ecff4054a6467cf0c423cad242aa96c0f0564a39a0823073728cc02239b80d13f02230 languageName: node linkType: hard @@ -817,17 +789,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.7" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" dependencies: - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-remap-async-to-generator": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-remap-async-to-generator": ^7.25.0 "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/traverse": ^7.25.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 112e3b18f9c496ebc01209fc27f0b41a3669c479c7bc44f7249383172b432ebaae1e523caa7c6ecbd2d0d7adcb7e5769fe2798f8cb01c08cd57232d1bb6d8ad4 + checksum: 4235444735a1946f8766fe56564a8134c2c36c73e6cf83b3f2ed5624ebc84ff5979506a6a5b39acdb23aa09d442a6af471710ed408ccce533a2c4d2990b9df6a languageName: node linkType: hard @@ -855,26 +827,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7" +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 039206155533600f079f3a455f85888dd7d4970ff7ffa85ef44760f4f5acb9f19c9d848cc1fec1b9bdbc0dfec9e8a080b90d0ab66ad2bdc7138b5ca4ba96e61c + checksum: b1a8f932f69ad2a47ae3e02b4cedd2a876bfc2ac9cf72a503fd706cdc87272646fe9eed81e068c0fc639647033de29f7fa0c21cddd1da0026f83dbaac97316a8 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" +"@babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.25.4 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1348d7ce74da38ba52ea85b3b4289a6a86913748569ef92ef0cff30702a9eb849e5eaf59f1c6f3517059aa68115fb3067e389735dccacca39add4e2b0c67e291 + checksum: b73f7d968639c6c2dfc13f4c5a8fe45cefd260f0faa7890ae12e65d41211072544ff5e128c8b61a86887b29ffd3df8422dbdfbf61648488e71d4bb599c41f4a5 languageName: node linkType: hard @@ -891,21 +863,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-classes@npm:7.24.7" +"@babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-classes@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-replace-supers": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/traverse": ^7.25.4 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f01cb31143730d425681e9816020cbb519c7ddb3b6ca308dfaf2821eda5699a746637fc6bf19811e2fb42cfdf8b00a21b31c754da83771a5c280077925677354 + checksum: 0bf20e46eeb691bd60cee5d1b01950fc37accec88018ecace25099f7c8d8509c1ac54d11b8caf9f2157c6945969520642a3bc421159c1a14e80224dc9a7611de languageName: node linkType: hard @@ -921,14 +891,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.7" +"@babel/plugin-transform-destructuring@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b9637b27faf9d24a8119bc5a1f98a2f47c69e6441bd8fc71163500be316253a72173308a93122bcf27d8d314ace43344c976f7291cf6376767f408350c8149d4 + checksum: 0b4bd3d608979a1e5bd97d9d42acd5ad405c7fffa61efac4c7afd8e86ea6c2d91ab2d94b6a98d63919571363fe76e0b03c4ff161f0f60241b895842596e4a999 languageName: node linkType: hard @@ -955,6 +925,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 608d6b0e77341189508880fd1a9f605a38d0803dd6f678ea3920ab181b17b377f6d5221ae8cf0104c7a044d30d4ddb0366bd064447695671d78457a656bb264f + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" @@ -992,14 +974,14 @@ __metadata: linkType: hard "@babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.24.7 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.7" + version: 7.25.2 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.2" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 "@babel/plugin-syntax-flow": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 260bd95b1a90ff4af11bf8e21e6dd35b1b7863daffb12a5b2018e2806fec033a7883114dc5f0b67d594ca93fe6f2c9894944c865dd2c51affb7da0f9a6473872 + checksum: 9f7b96cbd374077eaf04b59e468976d2e89ec353807d7ac28f129f686945447df92aeb5b60acf906f3ec0f9ebef5d9f88735c7aa39af97033a6ab96c79c9a909 languageName: node linkType: hard @@ -1015,16 +997,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-function-name@npm:7.24.7" +"@babel/plugin-transform-function-name@npm:^7.25.1": + version: 7.25.1 + resolution: "@babel/plugin-transform-function-name@npm:7.25.1" dependencies: - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-compilation-targets": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8eb1a67894a124910b5a67630bed4307757504381f39f0fb5cf82afc7ae8647dbc03b256d13865b73a749b9071b68e9fb8a28cef2369917b4299ebb93fd66146 + checksum: 743f3ea03bbc5a90944849d5a880b6bd9243dddbde581a46952da76e53a0b74c1e2424133fe8129d7a152c1f8c872bcd27e0b6728d7caadabd1afa7bb892e1e0 languageName: node linkType: hard @@ -1040,14 +1022,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-literals@npm:7.24.7" +"@babel/plugin-transform-literals@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/plugin-transform-literals@npm:7.25.2" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3c075cc093a3dd9e294b8b7d6656e65f889e7ca2179ca27978dcd65b4dc4885ebbfb327408d7d8f483c55547deed00ba840956196f3ac8a3c3d2308a330a8c23 + checksum: 70c9bb40e377a306bd8f500899fb72127e527517914466e95dc6bb53fa7a0f51479db244a54a771b5780fc1eab488fedd706669bf11097b81a23c81ab7423eb1 languageName: node linkType: hard @@ -1086,30 +1068,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7" +"@babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" dependencies: - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-module-transforms": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 "@babel/helper-simple-access": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bfda2a0297197ed342e2a02e5f9847a489a3ae40a4a7d7f00f4aeb8544a85e9006e0c5271c8f61f39bc97975ef2717b5594cf9486694377a53433162909d64c1 + checksum: a4cf95b1639c33382064b44558f73ee5fac023f2a94d16e549d2bb55ceebd5cbc10fcddd505d08cd5bc97f5a64af9fd155512358b7dcf7b1a0082e8945cf21c5 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.7" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" dependencies: - "@babel/helper-hoist-variables": ^7.24.7 - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-module-transforms": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8af7a9db2929991d82cfdf41fb175dee344274d39b39122f8c35f24b5d682f98368e3d8f5130401298bd21412df21d416a7d8b33b59c334fae3d3c762118b1d8 + checksum: fe673bec08564e491847324bb80a1e6edfb229f5c37e58a094d51e95306e7b098e1d130fc43e992d22debd93b9beac74441ffc3f6ea5d78f6b2535896efa0728 languageName: node linkType: hard @@ -1221,16 +1203,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7" +"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 877e7ce9097d475132c7f4d1244de50bb2fd37993dc4580c735f18f8cbc49282f6e77752821bcad5ca9d3528412d2c8a7ee0aa7ca71bb680ff82648e7a5fed25 + checksum: 45e55e3a2fffb89002d3f89aef59c141610f23b60eee41e047380bffc40290b59f64fc649aa7ec5281f73d41b2065410d788acc6afaad2a9f44cad6e8af04442 languageName: node linkType: hard @@ -1245,15 +1227,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" +"@babel/plugin-transform-private-methods@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.25.4 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c151548e34909be2adcceb224d8fdd70bafa393bc1559a600906f3f647317575bf40db670470934a360e90ee8084ef36dffa34ec25d387d414afd841e74cf3fe + checksum: cb1dabfc03e2977990263d65bc8f43a9037dffbb5d9a5f825c00d05447ff68015099408c1531d9dd88f18a41a90f5062dc48f3a1d52b415d2d2ee4827dedff09 languageName: node linkType: hard @@ -1283,13 +1265,13 @@ __metadata: linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.12.1": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.7" + version: 7.25.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.25.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 15a50645d5bd5139a65a57cc1ca8d731921bf4b3d453ed14150760a16891bdd8c0d6e870a85e3a580a00686415732fd74ff2c669a823e641a6124ac9489d8ed4 + checksum: 6126abf8bc3980c1e27fd217f8b2f226b20cce9be300eaf9d30548556dd1e906b7daa4580d9ae1dae35eb5ed5c98e7222e0cb91efb0a232d05aae5875dcfe55c languageName: node linkType: hard @@ -1315,7 +1297,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": +"@babel/plugin-transform-react-jsx-self@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" dependencies: @@ -1326,7 +1308,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": +"@babel/plugin-transform-react-jsx-source@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" dependencies: @@ -1338,17 +1320,17 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.24.7" + version: 7.25.2 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.2" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 "@babel/plugin-syntax-jsx": ^7.24.7 - "@babel/types": ^7.24.7 + "@babel/types": ^7.25.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ddfe494eb4b6ad567ebf0c029246df55d006512b1eb4beead73427b83af2e7e91b6d6e6954e275a92c81a5111d1e6e1fb4a62fdfc6f77c847cc7581650a7c452 + checksum: 44fbde046385916de19a88d77fed9121c6cc6e25b9cdc38a43d8e514a9b18cf391ed3de25e7d6a8996d3fe4c298e395edf856ee20efffaab3b70f8ce225fffa4 languageName: node linkType: hard @@ -1388,18 +1370,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.24.7 - resolution: "@babel/plugin-transform-runtime@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-transform-runtime@npm:7.25.4" dependencies: "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.1 + babel-plugin-polyfill-corejs3: ^0.10.6 babel-plugin-polyfill-regenerator: ^0.6.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 98bcbbdc833d5c451189a6325f88820fe92973e119c59ce74bf28681cf4687c8280decb55b6c47f22e98c3973ae3a13521c4f51855a2b8577b230ecb1b4ca5b4 + checksum: 40ea3519840c1b2062fc53dd0e4ce2b37cd43995bfc8bbb741f1985622138fbfd873307217692d7bf3ab0629faf0ce277e302e8446673fddaf470d3e07dd0fb2 languageName: node linkType: hard @@ -1448,28 +1430,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7" +"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6bd16b9347614d44187d8f8ee23ebd7be30dabf3632eed5ff0415f35a482e827de220527089eae9cdfb75e85aa72db0e141ebc2247c4b1187c1abcdacdc34895 + checksum: 8663a8e7347cedf181001d99c88cf794b6598c3d82f324098510fe8fb8bd22113995526a77aa35a3cc5d70ffd0617a59dd0d10311a9bf0e1a3a7d3e59b900c00 languageName: node linkType: hard "@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-typescript@npm:7.24.7" + version: 7.25.2 + resolution: "@babel/plugin-transform-typescript@npm:7.25.2" dependencies: "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 "@babel/plugin-syntax-typescript": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6b367d1e3d6bdbe438878a76436fc6903e2b4fd7c31fa036d43865570d282679ec3f7c0306399851f2866a9b36686a0ea8c343df3750f70d427f1fe20ca54310 + checksum: b0267128d93560a4350919f7230a3b497e20fb8611d9f04bb3560d6b38877305ccad4c40903160263361c6930a84dbcb5b21b8ea923531bda51f67bffdc2dd0b languageName: node linkType: hard @@ -1508,30 +1491,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-regexp-features-plugin": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 peerDependencies: "@babel/core": ^7.0.0 - checksum: 08a2844914f33dacd2ce1ab021ce8c1cc35dc6568521a746d8bf29c21571ee5be78787b454231c4bb3526cbbe280f1893223c82726cec5df2be5dae0a3b51837 + checksum: 6d1a7e9fdde4ffc9a81c0e3f261b96a9a0dfe65da282ec96fe63b36c597a7389feac638f1df2a8a4f8c9128337bba8e984f934e9f19077930f33abf1926759ea languageName: node linkType: hard "@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4": - version: 7.24.7 - resolution: "@babel/preset-env@npm:7.24.7" - dependencies: - "@babel/compat-data": ^7.24.7 - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-validator-option": ^7.24.7 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.7 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.7 + version: 7.25.4 + resolution: "@babel/preset-env@npm:7.25.4" + dependencies: + "@babel/compat-data": ^7.25.4 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-validator-option": ^7.24.8 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.3 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.0 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.0 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.7 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.0 "@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 @@ -1552,29 +1536,30 @@ __metadata: "@babel/plugin-syntax-top-level-await": ^7.14.5 "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 "@babel/plugin-transform-arrow-functions": ^7.24.7 - "@babel/plugin-transform-async-generator-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 "@babel/plugin-transform-async-to-generator": ^7.24.7 "@babel/plugin-transform-block-scoped-functions": ^7.24.7 - "@babel/plugin-transform-block-scoping": ^7.24.7 - "@babel/plugin-transform-class-properties": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 "@babel/plugin-transform-class-static-block": ^7.24.7 - "@babel/plugin-transform-classes": ^7.24.7 + "@babel/plugin-transform-classes": ^7.25.4 "@babel/plugin-transform-computed-properties": ^7.24.7 - "@babel/plugin-transform-destructuring": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 "@babel/plugin-transform-dotall-regex": ^7.24.7 "@babel/plugin-transform-duplicate-keys": ^7.24.7 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.0 "@babel/plugin-transform-dynamic-import": ^7.24.7 "@babel/plugin-transform-exponentiation-operator": ^7.24.7 "@babel/plugin-transform-export-namespace-from": ^7.24.7 "@babel/plugin-transform-for-of": ^7.24.7 - "@babel/plugin-transform-function-name": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 "@babel/plugin-transform-json-strings": ^7.24.7 - "@babel/plugin-transform-literals": ^7.24.7 + "@babel/plugin-transform-literals": ^7.25.2 "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 "@babel/plugin-transform-member-expression-literals": ^7.24.7 "@babel/plugin-transform-modules-amd": ^7.24.7 - "@babel/plugin-transform-modules-commonjs": ^7.24.7 - "@babel/plugin-transform-modules-systemjs": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-modules-systemjs": ^7.25.0 "@babel/plugin-transform-modules-umd": ^7.24.7 "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 "@babel/plugin-transform-new-target": ^7.24.7 @@ -1583,9 +1568,9 @@ __metadata: "@babel/plugin-transform-object-rest-spread": ^7.24.7 "@babel/plugin-transform-object-super": ^7.24.7 "@babel/plugin-transform-optional-catch-binding": ^7.24.7 - "@babel/plugin-transform-optional-chaining": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 "@babel/plugin-transform-parameters": ^7.24.7 - "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.25.4 "@babel/plugin-transform-private-property-in-object": ^7.24.7 "@babel/plugin-transform-property-literals": ^7.24.7 "@babel/plugin-transform-regenerator": ^7.24.7 @@ -1594,20 +1579,20 @@ __metadata: "@babel/plugin-transform-spread": ^7.24.7 "@babel/plugin-transform-sticky-regex": ^7.24.7 "@babel/plugin-transform-template-literals": ^7.24.7 - "@babel/plugin-transform-typeof-symbol": ^7.24.7 + "@babel/plugin-transform-typeof-symbol": ^7.24.8 "@babel/plugin-transform-unicode-escapes": ^7.24.7 "@babel/plugin-transform-unicode-property-regex": ^7.24.7 "@babel/plugin-transform-unicode-regex": ^7.24.7 - "@babel/plugin-transform-unicode-sets-regex": ^7.24.7 + "@babel/plugin-transform-unicode-sets-regex": ^7.25.4 "@babel/preset-modules": 0.1.6-no-external-plugins babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.4 + babel-plugin-polyfill-corejs3: ^0.10.6 babel-plugin-polyfill-regenerator: ^0.6.1 - core-js-compat: ^3.31.0 + core-js-compat: ^3.37.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1a82c883c7404359b19b7436d0aab05f8dd4e89e8b1f7de127cc65d0ff6a9b1c345211d9c038f5b6e8f93d26f091fa9c73812d82851026ab4ec93f5ed0f0d675 + checksum: 752be43f0b78a2eefe5007076aed3d21b505e1c09d134b61e7de8838f1bbb1e7af81023d39adb14b6eae23727fb5a9fd23f8115a44df043319be22319be17913 languageName: node linkType: hard @@ -1663,61 +1648,58 @@ __metadata: linkType: hard "@babel/runtime-corejs3@npm:^7.10.2": - version: 7.24.7 - resolution: "@babel/runtime-corejs3@npm:7.24.7" + version: 7.25.6 + resolution: "@babel/runtime-corejs3@npm:7.25.6" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: fb5cae960a2d4cbcb2144059dfa9dbe5530d027fa210a5bc37c67c3014226c32390f221320066124872f3d6c4830af17a19da09c10ab114da9b6fa8ab4377cea + checksum: 54d60c4eadfb58420dc88fb5bbba97910bb08bac316085ea74ee40584b56a9d9c1fb0f608862b8fef71c05837aaac9c2ed19504adfd72011f9740fe5d57733ae languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.24.6, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.24.7 - resolution: "@babel/runtime@npm:7.24.7" +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.24.6, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.25.6 + resolution: "@babel/runtime@npm:7.25.6" dependencies: regenerator-runtime: ^0.14.0 - checksum: d17f29eed6f848ac15cdf4202a910b741facfb0419a9d79e5c7fa37df6362fc3227f1cc2e248cc6db5e53ddffb4caa6686c488e6e80ce3d29c36a4e74c8734ea + checksum: ee1a69d3ac7802803f5ee6a96e652b78b8addc28c6a38c725a4ad7d61a059d9e6cb9f6550ed2f63cce67a1bd82e0b1ef66a1079d895be6bfb536a5cfbd9ccc32 languageName: node linkType: hard -"@babel/template@npm:^7.10.4, @babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": - version: 7.24.7 - resolution: "@babel/template@npm:7.24.7" +"@babel/template@npm:^7.10.4, @babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" dependencies: "@babel/code-frame": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9 + "@babel/parser": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b languageName: node linkType: hard -"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.7.0": - version: 7.24.7 - resolution: "@babel/traverse@npm:7.24.7" +"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4, @babel/traverse@npm:^7.7.0": + version: 7.25.6 + resolution: "@babel/traverse@npm:7.25.6" dependencies: "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.24.7 - "@babel/helper-environment-visitor": ^7.24.7 - "@babel/helper-function-name": ^7.24.7 - "@babel/helper-hoist-variables": ^7.24.7 - "@babel/helper-split-export-declaration": ^7.24.7 - "@babel/parser": ^7.24.7 - "@babel/types": ^7.24.7 + "@babel/generator": ^7.25.6 + "@babel/parser": ^7.25.6 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 debug: ^4.3.1 globals: ^11.1.0 - checksum: 7cd366afe9e7ee77e493779fdf24f67bf5595247289364f4689e29688572505eaeb886d7a8f20ebb9c29fc2de7d0895e4ff9e203e78e39ac67239724d45aa83b + checksum: 11ee47269aa4356f2d6633a05b9af73405b5ed72c09378daf644289b686ef852035a6ac9aa410f601991993c6bbf72006795b5478283b78eb1ca77874ada7737 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": - version: 7.24.7 - resolution: "@babel/types@npm:7.24.7" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": + version: 7.25.6 + resolution: "@babel/types@npm:7.25.6" dependencies: - "@babel/helper-string-parser": ^7.24.7 + "@babel/helper-string-parser": ^7.24.8 "@babel/helper-validator-identifier": ^7.24.7 to-fast-properties: ^2.0.0 - checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8 + checksum: 9b2f84ff3f874ad05b0b9bf06862c56f478b65781801f82296b4cc01bee39e79c20a7c0a06959fed0ee582c8267e1cb21638318655c5e070b0287242a844d1c9 languageName: node linkType: hard @@ -1763,149 +1745,149 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/babel-plugin@npm:11.11.0" +"@emotion/babel-plugin@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/babel-plugin@npm:11.12.0" dependencies: "@babel/helper-module-imports": ^7.16.7 "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/serialize": ^1.1.2 + "@emotion/hash": ^0.9.2 + "@emotion/memoize": ^0.9.0 + "@emotion/serialize": ^1.2.0 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 - checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 + checksum: b5d4b3dfe97e6763794a42b5c3a027a560caa1aa6dcaf05c18e5969691368dd08245c077bad7397dcc720b53d29caeaaec1888121e68cfd9ab02ff52f6fef662 languageName: node linkType: hard -"@emotion/cache@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/cache@npm:11.11.0" +"@emotion/cache@npm:^11.11.0, @emotion/cache@npm:^11.13.0": + version: 11.13.1 + resolution: "@emotion/cache@npm:11.13.1" dependencies: - "@emotion/memoize": ^0.8.1 - "@emotion/sheet": ^1.2.2 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 + "@emotion/memoize": ^0.9.0 + "@emotion/sheet": ^1.4.0 + "@emotion/utils": ^1.4.0 + "@emotion/weak-memoize": ^0.4.0 stylis: 4.2.0 - checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 + checksum: 94b161786a03a08a1e30257478fad9a9be1ac8585ddca0c6410d7411fd474fc8b0d6d1167d7d15bdb012d1fd8a1220ac2bbc79501ad9b292b83c17da0874d7de languageName: node linkType: hard -"@emotion/hash@npm:^0.9.1": - version: 0.9.1 - resolution: "@emotion/hash@npm:0.9.1" - checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 +"@emotion/hash@npm:^0.9.2": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/is-prop-valid@npm:1.2.2" +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" dependencies: - "@emotion/memoize": ^0.8.1 - checksum: 61f6b128ea62b9f76b47955057d5d86fcbe2a6989d2cd1e583daac592901a950475a37d049b9f7a7c6aa8758a33b408735db759fdedfd1f629df0f85ab60ea25 + "@emotion/memoize": ^0.9.0 + checksum: fe6549d54f389e1a17cb02d832af7ee85fb6ea126fc18d02ca47216e8ff19332c1983f4a0ba68602cfcd3b325ffd4ebf0b2d0c6270f1e7e6fe3fca4ba7741e1a languageName: node linkType: hard -"@emotion/memoize@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/memoize@npm:0.8.1" - checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 +"@emotion/memoize@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/memoize@npm:0.9.0" + checksum: 038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 languageName: node linkType: hard "@emotion/react@npm:^11.10.4": - version: 11.11.4 - resolution: "@emotion/react@npm:11.11.4" + version: 11.13.3 + resolution: "@emotion/react@npm:11.13.3" dependencies: "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/cache": ^11.11.0 - "@emotion/serialize": ^1.1.3 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/cache": ^11.13.0 + "@emotion/serialize": ^1.3.1 + "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 + "@emotion/utils": ^1.4.0 + "@emotion/weak-memoize": ^0.4.0 hoist-non-react-statics: ^3.3.1 peerDependencies: react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 6abaa7a05c5e1db31bffca7ac79169f5456990022cbb3794e6903221536609a60420f2b4888dd3f84e9634a304e394130cb88dc32c243a1dedc263e50da329f8 + checksum: 0b58374bf28de914b49881f0060acfb908989869ebab63a2287773fc5e91a39f15552632b03d376c3e9835c5b4f23a5ebac8b0963b29af164d46c0a77ac928f0 languageName: node linkType: hard -"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": - version: 1.1.4 - resolution: "@emotion/serialize@npm:1.1.4" +"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": + version: 1.3.2 + resolution: "@emotion/serialize@npm:1.3.2" dependencies: - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/unitless": ^0.8.1 - "@emotion/utils": ^1.2.1 + "@emotion/hash": ^0.9.2 + "@emotion/memoize": ^0.9.0 + "@emotion/unitless": ^0.10.0 + "@emotion/utils": ^1.4.1 csstype: ^3.0.2 - checksum: 71b99f816a9c1d61a87c62cf4928da3894bb62213f3aff38b1ea9790b3368f084af98a3e5453b5055c2f36a7d70318d2fa9955b7b5676c2065b868062375df39 + checksum: 8051bafe32459e1aecf716cdb66a22b090060806104cca89d4e664893b56878d3e9bb94a4657df9b7b3fd183700a9be72f7144c959ddcbd3cf7b330206919237 languageName: node linkType: hard -"@emotion/sheet@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/sheet@npm:1.2.2" - checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe +"@emotion/sheet@npm:^1.4.0": + version: 1.4.0 + resolution: "@emotion/sheet@npm:1.4.0" + checksum: eeb1212e3289db8e083e72e7e401cd6d1a84deece87e9ce184f7b96b9b5dbd6f070a89057255a6ff14d9865c3ce31f27c39248a053e4cdd875540359042586b4 languageName: node linkType: hard "@emotion/styled@npm:^11.10.4": - version: 11.11.5 - resolution: "@emotion/styled@npm:11.11.5" + version: 11.13.0 + resolution: "@emotion/styled@npm:11.13.0" dependencies: "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/is-prop-valid": ^1.2.2 - "@emotion/serialize": ^1.1.4 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 + "@emotion/babel-plugin": ^11.12.0 + "@emotion/is-prop-valid": ^1.3.0 + "@emotion/serialize": ^1.3.0 + "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 + "@emotion/utils": ^1.4.0 peerDependencies: "@emotion/react": ^11.0.0-rc.0 react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: ad5fc42d00e8aa9597f6d9665986036d5ebe0e8f8155af6d95831c5e8fb2319fb837724e6c5cd59e5346f14c3263711b7ce7271d34688e974d1f32ffeecb37ba + checksum: f5b951059418f57bc8ea32b238afb25965ece3314f2ffd1b14ce049ba3c066a424990dfbfabbf57bb88e044eaa80bf19f620ac988adda3d2fc483177be6da05e languageName: node linkType: hard -"@emotion/unitless@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/unitless@npm:0.8.1" - checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 +"@emotion/unitless@npm:^0.10.0": + version: 0.10.0 + resolution: "@emotion/unitless@npm:0.10.0" + checksum: d79346df31a933e6d33518e92636afeb603ce043f3857d0a39a2ac78a09ef0be8bedff40130930cb25df1beeee12d96ee38613963886fa377c681a89970b787c languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": - version: 1.0.1 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": + version: 1.1.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" peerDependencies: react: ">=16.8.0" - checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 + checksum: 63665191773b27de66807c53b90091ef0d10d5161381f62726cfceecfe1d8c944f18594b8021805fc81575b64246fd5ab9c75d60efabec92f940c1c410530949 languageName: node linkType: hard -"@emotion/utils@npm:^1.2.1": - version: 1.2.1 - resolution: "@emotion/utils@npm:1.2.1" - checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 +"@emotion/utils@npm:^1.4.0, @emotion/utils@npm:^1.4.1": + version: 1.4.1 + resolution: "@emotion/utils@npm:1.4.1" + checksum: 088f6844c735981f53c84a76101cf261422301e7895cb37fea6a47e7950247ffa8ca174ca2a15d9b29a47f0fa831b432017ca7683bccbb5cfd78dda82743d856 languageName: node linkType: hard -"@emotion/weak-memoize@npm:^0.3.1": - version: 0.3.1 - resolution: "@emotion/weak-memoize@npm:0.3.1" - checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 +"@emotion/weak-memoize@npm:^0.4.0": + version: 0.4.0 + resolution: "@emotion/weak-memoize@npm:0.4.0" + checksum: db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 languageName: node linkType: hard @@ -2082,9 +2064,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.4.0": - version: 4.10.1 - resolution: "@eslint-community/regexpp@npm:4.10.1" - checksum: 1e04bc366fb8152c9266258cd25e3fded102f1d212a9476928e3cb98c48be645df6d676728d1c596053992fb9134879fe0de23c9460035b342cceb22d3af1776 + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 6986685529d30e33c2640973c3d8e7ddd31bef3cc8cb10ad54ddc1dea12680779a2c23a45562aa1462c488137a3570e672d122fac7da22d82294382d915cec70 languageName: node linkType: hard @@ -2105,41 +2087,41 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^1.0.0": - version: 1.6.2 - resolution: "@floating-ui/core@npm:1.6.2" +"@floating-ui/core@npm:^1.6.0": + version: 1.6.8 + resolution: "@floating-ui/core@npm:1.6.8" dependencies: - "@floating-ui/utils": ^0.2.0 - checksum: a161b2c8e14b6e185960ec19398f4b893ef3cd6620d535c348c1dc877fb4ffc9f701eb7156f6a30a89b7826093ba28ea223fc2fd1996c0b2464741208725ac8f + "@floating-ui/utils": ^0.2.8 + checksum: 82faa6ea9d57e466779324e51308d6d49c098fb9d184a08d9bb7f4fad83f08cc070fc491f8d56f0cad44a16215fb43f9f829524288413e6c33afcb17303698de languageName: node linkType: hard "@floating-ui/dom@npm:^1.0.0": - version: 1.6.5 - resolution: "@floating-ui/dom@npm:1.6.5" + version: 1.6.11 + resolution: "@floating-ui/dom@npm:1.6.11" dependencies: - "@floating-ui/core": ^1.0.0 - "@floating-ui/utils": ^0.2.0 - checksum: 767295173cfc9024b2187b65d3c1a0c8d8596a1f827d57c86288e52edf91b41508b3679643e24e0ef9f522d86aab59ef97354b456b39be4f6f5159d819cc807d + "@floating-ui/core": ^1.6.0 + "@floating-ui/utils": ^0.2.8 + checksum: d6413759abd06a541edfad829c45313f930310fe76a3322e74a00eb655e283db33fe3e65b5265c4072eb54db7447e11225acd355a9a02cabd1d1b0d5fc8fc21d languageName: node linkType: hard "@floating-ui/react-dom@npm:^2.0.8": - version: 2.1.0 - resolution: "@floating-ui/react-dom@npm:2.1.0" + version: 2.1.2 + resolution: "@floating-ui/react-dom@npm:2.1.2" dependencies: "@floating-ui/dom": ^1.0.0 peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 371ab3b14627026c637f4a2b8ca3dbfb7f67f1d51e74af5448b8e5bc76b8ccf30fed5e66d855f1ac1a6de28d79acc6dffcbcca4744a327a5e8d47f3515b0b52a + checksum: 25bb031686e23062ed4222a8946e76b3f9021d40a48437bd747233c4964a766204b8a55f34fa8b259839af96e60db7c6e3714d81f1de06914294f90e86ffbc48 languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.0": - version: 0.2.2 - resolution: "@floating-ui/utils@npm:0.2.2" - checksum: 3d8d46fd1b071c98e10d374e2dcf54d1eb9de0aa75ed2b994c9132ebf6f783f896f979053be71450bdb6d60021120cfc24d25a5c84ebb3db0994080e13d9762f +"@floating-ui/utils@npm:^0.2.8": + version: 0.2.8 + resolution: "@floating-ui/utils@npm:0.2.8" + checksum: deb98bba017c4e073c7ad5740d4dec33a4d3e0942d412e677ac0504f3dade15a68fc6fd164d43c93c0bb0bcc5dc5015c1f4080dfb1a6161140fe660624f7c875 languageName: node linkType: hard @@ -2565,10 +2547,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec languageName: node linkType: hard @@ -2618,28 +2600,6 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-beta.40": - version: 5.0.0-beta.40 - resolution: "@mui/base@npm:5.0.0-beta.40" - 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 - 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 - checksum: 9c084ee67de372411a71af5eca9a5367db9f5bce57bb43973629c522760fe64fa2a43d2934dccd24d6dcbcd0ed399c5fc5c461226c86104f5767de1c9b8deba2 - languageName: node - linkType: hard - "@mui/base@npm:^5.0.0-beta.22": version: 5.0.0-dev.20240529-082515-213b5e33ab resolution: "@mui/base@npm:5.0.0-dev.20240529-082515-213b5e33ab" @@ -2662,16 +2622,16 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.15.19": - version: 5.15.19 - resolution: "@mui/core-downloads-tracker@npm:5.15.19" - checksum: 32dd442d72a4cf4abea0e5c0a325707c3f8aba16b7b40ed674da2c068ed10d686f1941240e527407d685e00ed12931c331d99265e1ed570630c856ffbe291c23 +"@mui/core-downloads-tracker@npm:^5.16.7": + version: 5.16.7 + resolution: "@mui/core-downloads-tracker@npm:5.16.7" + checksum: b65c48ba2bf6bba6435ba9f2d6c33db0c8a85b3ff7599136a9682b72205bec76470ab5ed5e6e625d5bd012ed9bcbc641ed677548be80d217c9fb5d0435567062 languageName: node linkType: hard "@mui/icons-material@npm:^5.10.3": - version: 5.15.19 - resolution: "@mui/icons-material@npm:5.15.19" + version: 5.16.7 + resolution: "@mui/icons-material@npm:5.16.7" dependencies: "@babel/runtime": ^7.23.9 peerDependencies: @@ -2681,25 +2641,25 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 365d9e93bef6cd19b7c8862ee926e2afd96c815df0c777670cca6e9c348f1fc0178ad0e060684c34f6953bb8a1a5f87648ff0a129ec23a9664964dbe0a8d2026 + checksum: a875f2837897d79a83173d80461e06ab090b64d08913d26433cf2cbeb8e7c7456468632a7aa495d722718f09111a8043255777d73b4dfbe9e0f863a170fc7190 languageName: node linkType: hard "@mui/material@npm:^5.10.3": - version: 5.15.19 - resolution: "@mui/material@npm:5.15.19" + version: 5.16.7 + resolution: "@mui/material@npm:5.16.7" dependencies: "@babel/runtime": ^7.23.9 - "@mui/base": 5.0.0-beta.40 - "@mui/core-downloads-tracker": ^5.15.19 - "@mui/system": ^5.15.15 - "@mui/types": ^7.2.14 - "@mui/utils": ^5.15.14 + "@mui/core-downloads-tracker": ^5.16.7 + "@mui/system": ^5.16.7 + "@mui/types": ^7.2.15 + "@mui/utils": ^5.16.6 + "@popperjs/core": ^2.11.8 "@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-is: ^18.3.1 react-transition-group: ^4.4.5 peerDependencies: "@emotion/react": ^11.5.0 @@ -2714,16 +2674,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 001095973c5d8581c97b05bca888d9aae51876684c9bcf7e1841635287c225ac9af94ca13a8baaa410f60b16b1ebb3003efa85a008d7338e23c12272cbf29ecb + checksum: 5057b48c3ce554247de9a8f675bda9bbda079bc83a696c500525f3ebbd63315a44f1c2a7c83c2025dbd02d2722892e397a0af10c1219d45f6534e41d91a43cc0 languageName: node linkType: hard -"@mui/private-theming@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/private-theming@npm:5.15.14" +"@mui/private-theming@npm:^5.16.6": + version: 5.16.6 + resolution: "@mui/private-theming@npm:5.16.6" dependencies: "@babel/runtime": ^7.23.9 - "@mui/utils": ^5.15.14 + "@mui/utils": ^5.16.6 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -2731,13 +2691,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 1b1ef54e8281c9b13fcc58f4c39682efc610946a68402283c19fcfbce8a7d7a231d61b536d6df9bf7a59a1426591bd403a453a59eb8efb9689437fb58554dc8c + checksum: 314ba598ab17cd425a36e4cab677ed26fe0939b23e53120da77cfbc3be6dada5428fa8e2a55cb697417599a4e3abfee6d4711de0a7318b9fb2c3a822b2d5b5a8 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/styled-engine@npm:5.15.14" +"@mui/styled-engine@npm:^5.16.6": + version: 5.16.6 + resolution: "@mui/styled-engine@npm:5.16.6" dependencies: "@babel/runtime": ^7.23.9 "@emotion/cache": ^11.11.0 @@ -2752,19 +2712,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 23b45c859a4f0d2b10933d06a6082c0ff093f7b6d8d32a2bfe3a6e515fe46d7a38ca9e7150d45c025a2e98d963bae9a5991d131cf4748b62670075ef0fa321ed + checksum: 604f83b91801945336db211a8273061132668d01e9f456c30bb811a3b49cc5786b8b7dd8e0b5b89de15f6209abc900d9e679d3ae7a4651a6df45e323b6ed95c5 languageName: node linkType: hard -"@mui/system@npm:^5.10.16, @mui/system@npm:^5.15.15": - version: 5.15.15 - resolution: "@mui/system@npm:5.15.15" +"@mui/system@npm:^5.10.16, @mui/system@npm:^5.16.7": + version: 5.16.7 + resolution: "@mui/system@npm:5.16.7" 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 + "@mui/private-theming": ^5.16.6 + "@mui/styled-engine": ^5.16.6 + "@mui/types": ^7.2.15 + "@mui/utils": ^5.16.6 clsx: ^2.1.0 csstype: ^3.1.3 prop-types: ^15.8.1 @@ -2780,55 +2740,59 @@ __metadata: optional: true "@types/react": optional: true - checksum: 9ca96d5f66b2a9d6471909cc98c671eea5ec0a6d58a7ec071073b9e5200b95c3f017f0ca5cc946abc7f83074bd11830ca18f5e30bc98e25cd6ca217bd1b3a26f + checksum: 86cc11d062645b6742328178ca3a9e2aa2c6d064a559e4fb8c6c6bb8251794959b9dad385f9508fdcab2ae2764503c80f7c3d4f6eb1e0e8aa649f28d4f59133b languageName: node linkType: hard -"@mui/types@npm:^7.2.14, @mui/types@npm:^7.2.14-dev.20240529-082515-213b5e33ab": - version: 7.2.14 - resolution: "@mui/types@npm:7.2.14" +"@mui/types@npm:^7.2.14-dev.20240529-082515-213b5e33ab, @mui/types@npm:^7.2.15, @mui/types@npm:^7.2.17": + version: 7.2.17 + resolution: "@mui/types@npm:7.2.17" peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 615c9f9110933157f5d3c4fee69d6e70b98fc0d9ebc3b63079b6a1e23e6b389748687a25ab4ac15b56166fc228885da87c3929503b41fa322cfdee0f6d411206 + checksum: 21b7f7639f05663f4ba9baa75f8a3f2fbb1e675e0fa4a4ef3b97acdcb81b6290c04b5515d2ae719e8ed2397bbe379f9fb665c74b209a2181fcccd2f83483dd85 languageName: node linkType: hard -"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/utils@npm:5.15.14" +"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.16.6": + version: 5.16.6 + resolution: "@mui/utils@npm:5.16.6" dependencies: "@babel/runtime": ^7.23.9 - "@types/prop-types": ^15.7.11 + "@mui/types": ^7.2.15 + "@types/prop-types": ^15.7.12 + clsx: ^2.1.1 prop-types: ^15.8.1 - react-is: ^18.2.0 + react-is: ^18.3.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 36543ba7e3b65fb3219ed27e8f1455aff15b47a74c9b642c63e60774e22baa6492a196079e72bcfa5a570421dab32160398f892110bd444428bcf8b266b11893 + checksum: 6f8068f07f60a842fcb2e2540eecbd9c5f04df695bcc427184720e8ae138ae689fefd3c20147ab7c76e809ede6e10f5e08d1c34cd3a8b09bd22d2020a666a96f languageName: node linkType: hard "@mui/utils@npm:^6.0.0-dev.20240529-082515-213b5e33ab": - version: 6.0.0-dev.20240529-082515-213b5e33ab - resolution: "@mui/utils@npm:6.0.0-dev.20240529-082515-213b5e33ab" + version: 6.1.1 + resolution: "@mui/utils@npm:6.1.1" dependencies: - "@babel/runtime": ^7.24.6 + "@babel/runtime": ^7.25.6 + "@mui/types": ^7.2.17 "@types/prop-types": ^15.7.12 + clsx: ^2.1.1 prop-types: ^15.8.1 - react-is: ^18.2.0 + react-is: ^18.3.1 peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 6869a031b5f725933e3f028c6efc7890a42601ec7b8498edc396fd9a93d8eeff8726b696ceaada1b89aa55a00a00d6371ebb5d144a3926e5429356edc806c8e0 + checksum: 1f8b9d8a71fdabfe7adaf18d2d24b480dce250ad4b9491cc51e1fa503804332fb733c212cfb8601bb4e193f91f635f5b06c378c17c5e91d602033ea319ca3e74 languageName: node linkType: hard @@ -2851,8 +2815,8 @@ __metadata: linkType: hard "@mui/x-date-pickers@npm:^6.19.4": - version: 6.20.1 - resolution: "@mui/x-date-pickers@npm:6.20.1" + version: 6.20.2 + resolution: "@mui/x-date-pickers@npm:6.20.2" dependencies: "@babel/runtime": ^7.23.2 "@mui/base": ^5.0.0-beta.22 @@ -2894,7 +2858,7 @@ __metadata: optional: true moment-jalaali: optional: true - checksum: bffd715cd2e5d6449627aa25fa58563deb632abce771f137b2bfa66a3806e82c0da63acfea8986bbf22112d0600dcd5268c99dcbf002960c21bad3c276fd5b2b + checksum: 0447b911ea0d78d4ee2080827bc075d8c1ed4764bd289d6bf65ee2ff870ac8ef72daef8a1858ccf27aad6c296cfece5455f6834a2d18a2c8e719518cd5464a0b languageName: node linkType: hard @@ -3052,60 +3016,60 @@ __metadata: linkType: hard "@prisma/client@npm:^5.7.1": - version: 5.15.0 - resolution: "@prisma/client@npm:5.15.0" + version: 5.20.0 + resolution: "@prisma/client@npm:5.20.0" peerDependencies: prisma: "*" peerDependenciesMeta: prisma: optional: true - checksum: 1ecb1e6a0db6e38b5d510f4764cd3531c85302c7a7e514d4d78a60504b24d08434b3bb3831045d64f4b1fc220ce8618822a2222e4a332b489619cd6d17c13e8c + checksum: fecac7883b6e910abb68b27017c35a5d493d4fd40b721246f57acf3ee79f6b131851b45ab3240bb1f42efe98a33ab6877d7fa37026983f514685c32b117f573c languageName: node linkType: hard -"@prisma/debug@npm:5.15.0": - version: 5.15.0 - resolution: "@prisma/debug@npm:5.15.0" - checksum: 3189f558c7f3550451d20aa5f347ff015e4e85e4edffd0adc7c9688c73d7433cf1bf5e0401d4dbaef79a0c66e9b18fcc0ecb50712d83a7b4722605ddaef44d12 +"@prisma/debug@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/debug@npm:5.20.0" + checksum: ed26dd90501799b0e50c61a2478bb9fbfd9ab85bc3aa9a0fb82ed69ae52b6e454d4acd75c10b16a10b7766c39da199a3702fd0d88c40ef8a8c00d85666f9f40d languageName: node linkType: hard -"@prisma/engines-version@npm:5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022": - version: 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 - resolution: "@prisma/engines-version@npm:5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022" - checksum: c669a0087da307228783739c7aa394c9077a7b171d36627b8599bc4cefbbd2733681b32ea42f88fc9b3dab64ad91ee2004ea693a3dcb91e7d82955d8ef4445ad +"@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284": + version: 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 + resolution: "@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284" + checksum: df30ecc59bec0fcd6c2d6de343fcc84f01e9aabc8886bc1f71fe527ca84737e898d0dc4d80d63a1582e9a20c5ca72d5b355988640632100710dd17713c568089 languageName: node linkType: hard -"@prisma/engines@npm:5.15.0": - version: 5.15.0 - resolution: "@prisma/engines@npm:5.15.0" +"@prisma/engines@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/engines@npm:5.20.0" dependencies: - "@prisma/debug": 5.15.0 - "@prisma/engines-version": 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 - "@prisma/fetch-engine": 5.15.0 - "@prisma/get-platform": 5.15.0 - checksum: b386b4a34ce5dc6c6d9b556b02dc1a8e079a706ce1faf4445860a1abf7f934d84aa3c7c6de40495b89a7382594767bc3b1b3af5a6baede354a7493732655af60 + "@prisma/debug": 5.20.0 + "@prisma/engines-version": 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 + "@prisma/fetch-engine": 5.20.0 + "@prisma/get-platform": 5.20.0 + checksum: fbb51533dfd884a24e95a01ccf0a954f4b33d2c382bcd0832f02e4ecdfccb6ba5c40ad222e6e3c9c9d77f80cc3018914644b0735d5f449cd5fe4726d09efeab5 languageName: node linkType: hard -"@prisma/fetch-engine@npm:5.15.0": - version: 5.15.0 - resolution: "@prisma/fetch-engine@npm:5.15.0" +"@prisma/fetch-engine@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/fetch-engine@npm:5.20.0" dependencies: - "@prisma/debug": 5.15.0 - "@prisma/engines-version": 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 - "@prisma/get-platform": 5.15.0 - checksum: 133c9578ec52b723d8664e0aef1de1340a5712ca4d9f65cb99b3393c795b8e858db0d16f02b9e7a3f798d9b81b73de443e9bff7d4509fe66cc9145ac972665b2 + "@prisma/debug": 5.20.0 + "@prisma/engines-version": 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 + "@prisma/get-platform": 5.20.0 + checksum: 51d83fbcca538645cabb9995d654fc10e72381c16b3babd329a1b405bfcb5f35a0c1ecd28fe6ec4b89e8984f934b91dbd7549a0d153bbea8fdf09f3a28c308c9 languageName: node linkType: hard -"@prisma/get-platform@npm:5.15.0": - version: 5.15.0 - resolution: "@prisma/get-platform@npm:5.15.0" +"@prisma/get-platform@npm:5.20.0": + version: 5.20.0 + resolution: "@prisma/get-platform@npm:5.20.0" dependencies: - "@prisma/debug": 5.15.0 - checksum: 18358b490e1fdbb44a9b4e8b77eec1b5e428c0d71460042663e6de1809c95afdfddfac4a80d6c6a1efecb4f086d7e32a881fe02e38aa8c7ca3590fbe9240dde5 + "@prisma/debug": 5.20.0 + checksum: 9bbad9c21ba8943fb18df69bf1504cf8276b1893e9ce8a000ffcde27f6d5ad7c323871b8586cf5cb7cbff9a698337a6d6d1fb34824aee198cd4141877fb6e0b5 languageName: node linkType: hard @@ -3149,10 +3113,17 @@ __metadata: languageName: node linkType: hard +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.1.0": - version: 1.10.3 - resolution: "@rushstack/eslint-patch@npm:1.10.3" - checksum: 1042779367ee102576a3c132f052d718d7111fee9f815758a72b21e8145620f7d3403c14fcde3b4cfa1cbc14b08b8519151ff77d0f353bf647f0a0a16eafdef5 + version: 1.10.4 + resolution: "@rushstack/eslint-patch@npm:1.10.4" + checksum: ec17ac954ed01e9c714e29ae00da29099234a71615d6f61f2da5c7beeef283f5619132114faf9481cb1ca7b4417aed74c05a54d416e4d8facc189bb216d49066 languageName: node linkType: hard @@ -3198,28 +3169,28 @@ __metadata: linkType: hard "@slack/types@npm:^2.11.0": - version: 2.12.0 - resolution: "@slack/types@npm:2.12.0" - checksum: 490e92f93163aac46bb0e1df8d94e577c61b47efe72e6e4981b34145acbff84cd83fdab067dd72377944e46f07410407bb460f8525ee0990d5743b40704720bc + version: 2.14.0 + resolution: "@slack/types@npm:2.14.0" + checksum: fbef74d50d0de8f16125f7178bd2e664a69eeefd827b09c6f78153957278fc4400049685c756076e7dbcabd04c22730ac783bcc5d36fd588c7749d35f02c2afd languageName: node linkType: hard "@slack/web-api@npm:^6.7.2": - version: 6.12.0 - resolution: "@slack/web-api@npm:6.12.0" + version: 6.13.0 + resolution: "@slack/web-api@npm:6.13.0" dependencies: "@slack/logger": ^3.0.0 "@slack/types": ^2.11.0 "@types/is-stream": ^1.1.0 "@types/node": ">=12.0.0" - axios: ^1.6.5 + axios: ^1.7.4 eventemitter3: ^3.1.0 form-data: ^2.5.0 is-electron: 2.2.2 is-stream: ^1.1.0 p-queue: ^6.6.1 p-retry: ^4.0.0 - checksum: d0cc16a2981167f3780a07542b4c88d31fc836a743de04e52e9f8fe8a82281781103f8821b3db5aa9de55471b6e550f044e767dbf482045865bd713b90fddd65 + checksum: 77f0d506bbb011ae43d322e5152e8b1ec2b88aa01256da6b3c9ff8ce106d2284f887cad2d9f044e0fe34dc865d60f2bce1c6bb5c4117150ff71a7ef341f5dfeb languageName: node linkType: hard @@ -3568,10 +3539,17 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:^4.3.5": - version: 4.3.16 - resolution: "@types/chai@npm:4.3.16" - checksum: bb5f52d1b70534ed8b4bf74bd248add003ffe1156303802ea367331607c06b494da885ffbc2b674a66b4f90c9ee88759790a5f243879f6759f124f22328f5e95 +"@types/chai@npm:*": + version: 5.0.0 + resolution: "@types/chai@npm:5.0.0" + checksum: ae3d63d8e84b4fc7fce5b0e68d0000834e709e19378e569c9ab97503a1b38f582ff69db6299528a849ec336954690a905225cb0dd9648d823c291f53ae93b458 + languageName: node + linkType: hard + +"@types/chai@npm:^4.3.5": + version: 4.3.20 + resolution: "@types/chai@npm:4.3.20" + checksum: 7c5b0c9148f1a844a8d16cb1e16c64f2e7749cab2b8284155b9e494a6b34054846e22fb2b38df6b290f9bf57e6beebb2e121940c5896bc086ad7bab7ed429f06 languageName: node linkType: hard @@ -3645,9 +3623,9 @@ __metadata: linkType: hard "@types/estree@npm:*": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 languageName: node linkType: hard @@ -3669,14 +3647,26 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:^4.17.33": - version: 4.19.3 - resolution: "@types/express-serve-static-core@npm:4.19.3" + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" "@types/send": "*" - checksum: fff38a7f43baeb6a62380682d39846c9d92047e0dce1737d76ebd944528619abc18addc4f0548bf43dbf4514090a1bd5140ba36695024656f941a87424b8ed7d + checksum: b0576eddc2d25ccdf10e68ba09598b87a4d7b2ad04a81dc847cb39fe56beb0b6a5cc017b1e00aa0060cb3b38e700384ce96d291a116a0f1e54895564a104aae9 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^5.0.0": + version: 5.0.0 + resolution: "@types/express-serve-static-core@npm:5.0.0" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: d4e2abfc961a908098290958e43a077504ef669f3ef3c49e871932453d2281e86f5d483ae99ec3aaecd13ada0b18025a99ad5413577660587570c4e21d91c263 languageName: node linkType: hard @@ -3689,7 +3679,19 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.6": +"@types/express@npm:*": + version: 5.0.0 + resolution: "@types/express@npm:5.0.0" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^5.0.0 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: ef68d8e2b7593c930093b1e79bf4df15413773508c9acd6a1a933ed7017f2a4892a8d128b2222d7eab9a3fa43181067a378c2600d9258bd7ae917f170e962df4 + languageName: node + linkType: hard + +"@types/express@npm:^4.17.6": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -3802,12 +3804,12 @@ __metadata: linkType: hard "@types/jest@npm:*": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" + version: 29.5.13 + resolution: "@types/jest@npm:29.5.13" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c + checksum: 875ac23c2398cdcf22aa56c6ba24560f11d2afda226d4fa23936322dde6202f9fdbd2b91602af51c27ecba223d9fc3c1e33c9df7e47b3bf0e2aefc6baf13ce53 languageName: node linkType: hard @@ -3852,9 +3854,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.175": - version: 4.17.4 - resolution: "@types/lodash@npm:4.17.4" - checksum: 268e652fd52d49189f155bc89b49bd4535aa44f0b6b0ed9ce7e50318307bda58147c49539d2047f39ca37cf5b5ea38dfb801d0dbcdbc8b019c95c1afc346b05a + version: 4.17.9 + resolution: "@types/lodash@npm:4.17.9" + checksum: 6d1bf3e77f0a54d97532755a74260d402d8972259c5451b74612c16cb983b73e0760e5bfe4f9e68ab15051511c867812b40715a01f9805afe6bc36c7dd676378 languageName: node linkType: hard @@ -3896,20 +3898,20 @@ __metadata: linkType: hard "@types/multer@npm:^1.4.7": - version: 1.4.11 - resolution: "@types/multer@npm:1.4.11" + version: 1.4.12 + resolution: "@types/multer@npm:1.4.12" dependencies: "@types/express": "*" - checksum: 3d80b2acdfbc9f3e9027d4467e948925810b67e5622a3017f42f58a3598d34b25376890801e55d0c03973ccc34573abf5218af334e8292ec455832f4ade3e5f5 + checksum: 719cacf88ec83ed77e250e45bee830fd7a505323825efa2a2c1144f5f3d7d36e67408ec988e571bcbaa571e0c214b5ede42d57ebb0f9b453a5eb8faba8ff12d0 languageName: node linkType: hard "@types/node@npm:*, @types/node@npm:>=12.0.0": - version: 20.14.2 - resolution: "@types/node@npm:20.14.2" + version: 22.7.4 + resolution: "@types/node@npm:22.7.4" dependencies: - undici-types: ~5.26.4 - checksum: 265362479b8f3b50fcd1e3f9e9af6121feb01a478dff0335ae67cccc3babfe45d0f12209d3d350595eebd7e67471762697b877c380513f8e5d27a238fa50c805 + undici-types: ~6.19.2 + checksum: a3f4154147639369aed08fe6f8d62eff637cf87b187bb252d7bbccdc82884626007af424b08a653c53f2182adfa0340001b4888cb7cbb942cef351210fc742a5 languageName: node linkType: hard @@ -3921,11 +3923,11 @@ __metadata: linkType: hard "@types/nodemailer@npm:^6.4.0": - version: 6.4.15 - resolution: "@types/nodemailer@npm:6.4.15" + version: 6.4.16 + resolution: "@types/nodemailer@npm:6.4.16" dependencies: "@types/node": "*" - checksum: f6f9a2f8a669703ecc3ca6359c12345b16f6b2e5691b93c406b9af7de639c02092ec00133526e6fecd8c60d884890a7cd0f967d8e64bedab46d5c3d8be0882d7 + checksum: ef34226b7b69a474a9b9b4681bcfb2461540aed92c54995b934f8072e28deff72aadd4c71522f6825938346048cfec077c69f18cfc2a3ec9f7432db11e5667a3 languageName: node linkType: hard @@ -3950,10 +3952,10 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11, @types/prop-types@npm:^15.7.12": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12": + version: 15.7.13 + resolution: "@types/prop-types@npm:15.7.13" + checksum: 8935cad87c683c665d09a055919d617fe951cb3b2d5c00544e3a913f861a2bd8d2145b51c9aa6d2457d19f3107ab40784c40205e757232f6a80cc8b1c815513c languageName: node linkType: hard @@ -3965,9 +3967,9 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 + version: 6.9.16 + resolution: "@types/qs@npm:6.9.16" + checksum: 2e8918150c12735630f7ee16b770c72949274938c30306025f68aaf977227f41fe0c698ed93db1099e04916d582ac5a1faf7e3c7061c8d885d9169f59a184b6c languageName: node linkType: hard @@ -4027,11 +4029,11 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.4.10, @types/react-transition-group@npm:^4.4.8": - version: 4.4.10 - resolution: "@types/react-transition-group@npm:4.4.10" + version: 4.4.11 + resolution: "@types/react-transition-group@npm:4.4.11" dependencies: "@types/react": "*" - checksum: fe2ea11f70251e9f79f368e198c18fd469b1d4f1e1d44e4365845b44e15974b0ec925100036f449b023b0ca3480a82725c5f0a73040e282ad32ec7b0def9b57c + checksum: a6e3b2e4363cb019e256ae4f19dadf9d7eb199da1a5e4109bbbf6a132821884044d332e9c74b520b1e5321a7f545502443fd1ce0b18649c8b510fa4220b0e5c2 languageName: node linkType: hard @@ -4090,11 +4092,11 @@ __metadata: linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.7 - resolution: "@types/set-cookie-parser@npm:2.4.7" + version: 2.4.10 + resolution: "@types/set-cookie-parser@npm:2.4.10" dependencies: "@types/node": "*" - checksum: 01ef803e24b8cd33e49fe7463f32a562da45ce3f960381b90cccf67ea71b1830d2273df044255b040069c0a92ea25b4bf21c39ac2f85b50c01818ded5e918554 + checksum: 105cc90c7d7deeb344858f720b58bd137356586545ac00d1a448e050bfcc0f385553ff26bc9c674bd8c2e953a458149eadb1945ee3d1eee81e6c0656236ebc0a languageName: node linkType: hard @@ -4113,13 +4115,14 @@ __metadata: linkType: hard "@types/superagent@npm:*": - version: 8.1.7 - resolution: "@types/superagent@npm:8.1.7" + version: 8.1.9 + resolution: "@types/superagent@npm:8.1.9" dependencies: "@types/cookiejar": ^2.1.5 "@types/methods": ^1.1.4 "@types/node": "*" - checksum: 8f80c72bd1cc9a9295a2e1e8a7a8de9bef09348db63f33cc4f61e457917662064ab86ce013f28249c34d7239d9a4415c1a597dc70d4391b2ad83b338a63a3b73 + form-data: ^4.0.0 + checksum: 530d8c2e87706315c82c8c9696500c40621de3353bc54ea9b104947f3530243abf54d0a49a6ae219d4947606a102ceb94bedfc43b9cc49f74069a18cbb3be8e2 languageName: node linkType: hard @@ -4158,9 +4161,9 @@ __metadata: linkType: hard "@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e languageName: node linkType: hard @@ -4183,8 +4186,8 @@ __metadata: linkType: hard "@types/webpack@npm:^4.41.8": - version: 4.41.38 - resolution: "@types/webpack@npm:4.41.38" + version: 4.41.39 + resolution: "@types/webpack@npm:4.41.39" dependencies: "@types/node": "*" "@types/tapable": ^1 @@ -4192,7 +4195,7 @@ __metadata: "@types/webpack-sources": "*" anymatch: ^3.0.0 source-map: ^0.6.0 - checksum: d3de65993ef3a7621f75548c2f6f509e8f87f586032238e999743d6067030655c67e38ec5f8b32e04fa5276c83bdfb7a761773bce0e6f28605da87e3fc388e3e + checksum: 97a934fc89f1c62aa1ffccc9377c25aef108b46938b0062369d17373b5393eade9151fa087f2d65930f272625728c850790102d449b08c2e7f2d5046d825ef34 languageName: node linkType: hard @@ -4213,11 +4216,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" dependencies: "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 languageName: node linkType: hard @@ -4604,17 +4607,17 @@ __metadata: linkType: hard "@vitejs/plugin-react@npm:^4.0.0": - version: 4.3.0 - resolution: "@vitejs/plugin-react@npm:4.3.0" + version: 4.3.2 + resolution: "@vitejs/plugin-react@npm:4.3.2" dependencies: - "@babel/core": ^7.24.5 - "@babel/plugin-transform-react-jsx-self": ^7.24.5 - "@babel/plugin-transform-react-jsx-source": ^7.24.1 + "@babel/core": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 "@types/babel__core": ^7.20.5 react-refresh: ^0.14.2 peerDependencies: vite: ^4.2.0 || ^5.0.0 - checksum: e4642c081e74e701fc07f03f505b44eb428d7105461b8026e7364ecd30dcf7785126bf272767a3bc36899b6abe85479af444612ef6d09509d9bc7d6025cac925 + checksum: 6bd3f8ec4a5c1f9f2970217d6a7291fafb41b7760f7761b982b6835c8f9cd3874cea9eb3b6659aa75c511954fcec7707116ea32042854b1be47902ebbb781794 languageName: node linkType: hard @@ -4931,9 +4934,11 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: ^8.11.0 + checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c languageName: node linkType: hard @@ -4955,12 +4960,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" bin: acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 languageName: node linkType: hard @@ -5047,14 +5052,14 @@ __metadata: linkType: hard "ajv@npm:^8.0.1": - version: 8.16.0 - resolution: "ajv@npm:8.16.0" + version: 8.17.1 + resolution: "ajv@npm:8.17.1" 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 - checksum: bdf3d4c9f1d11e220850051ef4cd89346e951cfb933d6d41be36d45053c1092af1523ee6c62525cce567355caf0a4f4c19a08a93851649c1fa32b4a39b7c4858 + checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 languageName: node linkType: hard @@ -5119,9 +5124,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac languageName: node linkType: hard @@ -5214,7 +5219,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3": +"aria-query@npm:5.1.3, aria-query@npm:~5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -5233,12 +5238,10 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: ^2.0.3 - checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 +"aria-query@npm:^5.0.0": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: d971175c85c10df0f6d14adfe6f1292409196114ab3c62f238e208b53103686f46cc70695a4f775b73bc65f6a09b6a092fd963c4f3a5a7d690c8fc5094925717 languageName: node linkType: hard @@ -5294,7 +5297,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -5352,7 +5355,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3": +"array.prototype.findlastindex@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" dependencies: @@ -5405,19 +5408,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.3": +"array.prototype.tosorted@npm:^1.1.4": version: 1.1.4 resolution: "array.prototype.tosorted@npm:1.1.4" dependencies: @@ -5581,10 +5572,10 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:=4.7.0": - version: 4.7.0 - resolution: "axe-core@npm:4.7.0" - checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a +"axe-core@npm:^4.10.0": + version: 4.10.0 + resolution: "axe-core@npm:4.10.0" + checksum: 7eca827fd8d98d7e4b561df65437be608155c613d8f262ae9e4a6ade02c156c7362dcbc3f71b4b526edce686f7c686280236bcff1d6725e2ef8327def72a8c41 languageName: node linkType: hard @@ -5598,23 +5589,21 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.6.5": - version: 1.7.2 - resolution: "axios@npm:1.7.2" +"axios@npm:^1.7.4": + version: 1.7.7 + resolution: "axios@npm:1.7.7" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: e457e2b0ab748504621f6fa6609074ac08c824bf0881592209dfa15098ece7e88495300e02cd22ba50b3468fd712fe687e629dcb03d6a3f6a51989727405aedf + checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe languageName: node linkType: hard -"axobject-query@npm:^3.2.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" - dependencies: - dequal: ^2.0.3 - checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 +"axobject-query@npm:^4.1.0": + version: 4.1.0 + resolution: "axobject-query@npm:4.1.0" + checksum: 7d1e87bf0aa7ae7a76cd39ab627b7c48fda3dc40181303d9adce4ba1d5b5ce73b5e5403ee6626ec8e91090448c887294d6144e24b6741a976f5be9347e3ae1df languageName: node linkType: hard @@ -5735,15 +5724,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": - version: 0.10.4 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" +"babel-plugin-polyfill-corejs3@npm:^0.10.6": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.1 - core-js-compat: ^3.36.1 + "@babel/helper-define-polyfill-provider": ^0.6.2 + core-js-compat: ^3.38.0 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd + checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 languageName: node linkType: hard @@ -5783,24 +5772,27 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" 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-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.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.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-top-level-await": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b languageName: node linkType: hard @@ -6025,16 +6017,16 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": +"bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard -"body-parser@npm:1.20.2, body-parser@npm:^1.19.0": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" +"body-parser@npm:1.20.3, body-parser@npm:^1.19.0": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" dependencies: bytes: 3.1.2 content-type: ~1.0.5 @@ -6044,11 +6036,11 @@ __metadata: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d languageName: node linkType: hard @@ -6197,12 +6189,13 @@ __metadata: linkType: hard "browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" + version: 4.1.1 + resolution: "browserify-rsa@npm:4.1.1" dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + bn.js: ^5.2.1 + randombytes: ^2.1.0 + safe-buffer: ^5.2.1 + checksum: 2628508646331791c29312bbf274c076a237437a17178ea9bdc75c577fb4164a0da0b137deaadf6ade623701332377c5c2ceb0ff6f991c744a576e790ec95852 languageName: node linkType: hard @@ -6247,17 +6240,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" +"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": + version: 4.24.0 + resolution: "browserslist@npm:4.24.0" dependencies: - caniuse-lite: ^1.0.30001587 - electron-to-chromium: ^1.4.668 - node-releases: ^2.0.14 - update-browserslist-db: ^1.0.13 + caniuse-lite: ^1.0.30001663 + electron-to-chromium: ^1.5.28 + node-releases: ^2.0.18 + update-browserslist-db: ^1.1.0 bin: browserslist: cli.js - checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def + checksum: de200d3eb8d6ed819dad99719099a28fb6ebeb88016a5ac42fbdc11607e910c236a84ca1b0bbf232477d4b88ab64e8ab6aa67557cdd40a73ca9c2834f92ccce0 languageName: node linkType: hard @@ -6433,8 +6426,8 @@ __metadata: linkType: hard "cacache@npm:^18.0.0": - version: 18.0.3 - resolution: "cacache@npm:18.0.3" + version: 18.0.4 + resolution: "cacache@npm:18.0.4" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 @@ -6448,7 +6441,7 @@ __metadata: ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 - checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 languageName: node linkType: hard @@ -6550,10 +6543,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001629 - resolution: "caniuse-lite@npm:1.0.30001629" - checksum: c5e646e1b309b2a70b01499e0f0fca3a54bc111212f121b32614fe925b8f24ff6c1832a4306ddadf35678fbb11a6a97f953be07ccdc96bce5b530a4f84f40c45 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001663": + version: 1.0.30001664 + resolution: "caniuse-lite@npm:1.0.30001664" + checksum: cee25b4ea8a84779b7c9a60c1f9e304f6d99b79ef622b25fbc7873b4e55e8722a1091dd6c8b77bd7723e9f26a84b4a820a50a864989dd477e7ee51dc30461dca languageName: node linkType: hard @@ -6585,8 +6578,8 @@ __metadata: linkType: hard "chai@npm:^4.3.7": - version: 4.4.1 - resolution: "chai@npm:4.4.1" + version: 4.5.0 + resolution: "chai@npm:4.5.0" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.3 @@ -6594,8 +6587,8 @@ __metadata: get-func-name: ^2.0.2 loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.0.8 - checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e + type-detect: ^4.1.0 + checksum: 70e5a8418a39e577e66a441cc0ce4f71fd551a650a71de30dd4e3e31e75ed1f5aa7119cf4baf4a2cb5e85c0c6befdb4d8a05811fad8738c1a6f3aa6a23803821 languageName: node linkType: hard @@ -6724,25 +6717,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d - languageName: node - linkType: hard - "chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" @@ -6766,6 +6740,34 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.1 + resolution: "chokidar@npm:4.0.1" + dependencies: + readdirp: ^4.0.1 + checksum: 193da9786b0422a895d59c7552195d15c6c636e6a2293ae43d09e34e243e24ccd02d693f007c767846a65abbeae5fea6bfacb8fc2ddec4ea4d397620d552010d + languageName: node + linkType: hard + "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -7309,19 +7311,19 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": - version: 3.37.1 - resolution: "core-js-compat@npm:3.37.1" +"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": + version: 3.38.1 + resolution: "core-js-compat@npm:3.38.1" dependencies: - browserslist: ^4.23.0 - checksum: 5e7430329358bced08c30950512d2081aea0a5652b4c5892cbb3c4a6db05b0d3893a191a955162a07fdb5f4fe74e61b6429fdb503f54e062336d76e43c9555d9 + browserslist: ^4.23.3 + checksum: a0a5673bcd59f588f0cd0b59cdacd4712b82909738a87406d334dd412eb3d273ae72b275bdd8e8fef63fca9ef12b42ed651be139c7c44c8a1acb423c8906992e languageName: node linkType: hard "core-js-pure@npm:^3.30.2": - version: 3.37.1 - resolution: "core-js-pure@npm:3.37.1" - checksum: a13a40e3951975cffef12a0933d3dbf1ecedbf9821e1ec8024884b587744951ad30e3762a86bcb8e2a18fdd4b8d7c8971b2391605329799fc04e1fc1e1397dc1 + version: 3.38.1 + resolution: "core-js-pure@npm:3.38.1" + checksum: 95ca2e75df371571b0d41cba81e1f6335a2ba1f080e80f8edfa124ad3041880fe72e10f2144527a700a3d993dbf9f7cada3e04a927a66604bc49d0c4951567fb languageName: node linkType: hard @@ -7333,9 +7335,9 @@ __metadata: linkType: hard "core-js@npm:^3.6.5": - version: 3.37.1 - resolution: "core-js@npm:3.37.1" - checksum: 2d58a5c599f05c3e04abc8bc5e64b88eb17d914c0f552f670fb800afa74ec54b4fcc7f231ad6bd45badaf62c0fb0ce30e6fe89cedb6bb6d54e6f19115c3c17ff + version: 3.38.1 + resolution: "core-js@npm:3.38.1" + checksum: 55703c2f6fcd537e47a5cc83e9dc9884efef61861bbefb4a96a8c95e87956db980ce314628465dd49f14e626c5e633b9e3433f3e4a1f628404a14da420eb2556 languageName: node linkType: hard @@ -7897,9 +7899,9 @@ __metadata: linkType: hard "dayjs@npm:^1.11.10": - version: 1.11.11 - resolution: "dayjs@npm:1.11.11" - checksum: 84788275aad8a87fee4f1ce4be08861df29687aae6b7b43dd65350118a37dda56772a3902f802cb2dc651dfed447a5a8df62d88f0fb900dba8333e411190a5d5 + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: f388db88a6aa93956c1f6121644e783391c7b738b73dbc54485578736565c8931bdfba4bb94e9b1535c6e509c97d5deb918bbe1ae6b34358d994de735055cca9 languageName: node linkType: hard @@ -7920,14 +7922,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.5 - resolution: "debug@npm:4.3.5" + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: 2.1.2 + ms: ^2.1.3 peerDependenciesMeta: supports-color: optional: true - checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160 languageName: node linkType: hard @@ -8136,13 +8138,6 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - "des.js@npm:^1.0.0": version: 1.1.0 resolution: "des.js@npm:1.1.0" @@ -8485,16 +8480,16 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.668": - version: 1.4.796 - resolution: "electron-to-chromium@npm:1.4.796" - checksum: 29829ba285b2bb765e3abb82023b006f1d214333d045ab434b2c6be964c5ce0a761e992bd9eab09f51ac2b31712a5b003ed34cf891a627bf80f37e79ccddd6ac +"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.28": + version: 1.5.30 + resolution: "electron-to-chromium@npm:1.5.30" + checksum: b1a9003d32b7ef2075580941e868e1ba9a5b57e8e8e6b7a26462dea830c194d26906a00c92366b41e09bb794ff37ae73865b5c25cbe1f96ae931fc3faf6ded64 languageName: node linkType: hard "elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": - version: 6.5.5 - resolution: "elliptic@npm:6.5.5" + version: 6.5.7 + resolution: "elliptic@npm:6.5.7" dependencies: bn.js: ^4.11.9 brorand: ^1.1.0 @@ -8503,7 +8498,7 @@ __metadata: inherits: ^2.0.4 minimalistic-assert: ^1.0.1 minimalistic-crypto-utils: ^1.0.1 - checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb + checksum: af0ffddffdbc2fea4eeec74388cd73e62ed5a0eac6711568fb28071566319785df529c968b0bf1250ba4bc628e074b2d64c54a633e034aa6f0c6b152ceb49ab8 languageName: node linkType: hard @@ -8549,6 +8544,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -8638,7 +8640,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -8732,7 +8734,7 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.19": +"es-iterator-helpers@npm:^1.0.19": version: 1.0.19 resolution: "es-iterator-helpers@npm:1.0.19" dependencies: @@ -9118,10 +9120,10 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.0.2, escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 +"escalade@npm:^3.0.2, escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e languageName: node linkType: hard @@ -9262,15 +9264,15 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" +"eslint-module-utils@npm:^2.9.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" dependencies: debug: ^3.2.7 peerDependenciesMeta: eslint: optional: true - checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d + checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180 languageName: node linkType: hard @@ -9312,29 +9314,30 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.22.1, eslint-plugin-import@npm:^2.25.3": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" + version: 2.30.0 + resolution: "eslint-plugin-import@npm:2.30.0" dependencies: - array-includes: ^3.1.7 - array.prototype.findlastindex: ^1.2.3 + "@rtsao/scc": ^1.1.0 + array-includes: ^3.1.8 + array.prototype.findlastindex: ^1.2.5 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 + eslint-module-utils: ^2.9.0 + hasown: ^2.0.2 + is-core-module: ^2.15.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 + object.fromentries: ^2.0.8 + object.groupby: ^1.0.3 + object.values: ^1.2.0 semver: ^6.3.1 tsconfig-paths: ^3.15.0 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c + checksum: 0ec1ad69c0d22f15bc4a49ee97ae757e4adfc3181996f2c4a1ed4d5028bd99bab38e7623e58ef4477ba1db8425f441e4e986367125273efa4c5f7ad2c4467a9a languageName: node linkType: hard @@ -9371,28 +9374,28 @@ __metadata: linkType: hard "eslint-plugin-jsx-a11y@npm:^6.3.1, eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.8.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" + version: 6.10.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.0" dependencies: - "@babel/runtime": ^7.23.2 - aria-query: ^5.3.0 - array-includes: ^3.1.7 + aria-query: ~5.1.3 + array-includes: ^3.1.8 array.prototype.flatmap: ^1.3.2 ast-types-flow: ^0.0.8 - axe-core: =4.7.0 - axobject-query: ^3.2.1 + axe-core: ^4.10.0 + axobject-query: ^4.1.0 damerau-levenshtein: ^1.0.8 emoji-regex: ^9.2.2 - es-iterator-helpers: ^1.0.15 - hasown: ^2.0.0 + es-iterator-helpers: ^1.0.19 + hasown: ^2.0.2 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 + object.fromentries: ^2.0.8 + safe-regex-test: ^1.0.3 + string.prototype.includes: ^2.0.0 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + checksum: 1009deca12ddbe3624586bc5fc3534ca98d00a5841a2563cb6abd9339b984f0a99075dc2a703a517f4087eb84d659c87e60beda17645883de2ba1d86f2b20c96 languageName: node linkType: hard @@ -9421,30 +9424,30 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.21.5, eslint-plugin-react@npm:^7.27.1": - version: 7.34.2 - resolution: "eslint-plugin-react@npm:7.34.2" + version: 7.37.1 + resolution: "eslint-plugin-react@npm:7.37.1" dependencies: array-includes: ^3.1.8 array.prototype.findlast: ^1.2.5 array.prototype.flatmap: ^1.3.2 - array.prototype.toreversed: ^1.1.2 - array.prototype.tosorted: ^1.1.3 + array.prototype.tosorted: ^1.1.4 doctrine: ^2.1.0 es-iterator-helpers: ^1.0.19 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.8 object.fromentries: ^2.0.8 - object.hasown: ^1.1.4 object.values: ^1.2.0 prop-types: ^15.8.1 resolve: ^2.0.0-next.5 semver: ^6.3.1 string.prototype.matchall: ^4.0.11 + string.prototype.repeat: ^1.0.0 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: aed331239f3a64fcd884380534ece4b8716f1eca4899c8636d04306879e6b4e7339e28e427bdd571d372b78b713025e0767e5f5b5486a8d19bff82616ebe8959 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 22d1bdf0dd4cdbf8c57ce563c58d43c5f5e1da0b08d27d0a69d7126d9e8afcb74a5befae97dab4019b4c6029ae617b6a0af1709cb9e0439d5757b01b392d2ca7 languageName: node linkType: hard @@ -9642,11 +9645,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -9859,13 +9862,13 @@ __metadata: linkType: hard "express-jwt@npm:^7.7.5": - version: 7.7.7 - resolution: "express-jwt@npm:7.7.7" + version: 7.7.8 + resolution: "express-jwt@npm:7.7.8" dependencies: "@types/jsonwebtoken": ^8.5.8 express-unless: ^2.1.3 - jsonwebtoken: ^8.5.1 - checksum: b3aec510ce490cd8d449604c82ce1debf9b8c215fb0220f78d07e86c555fb06ca93b4199da135c00e62bb98c67a47fac8c1fdcc6ea74f2047f4e2defbc4578fe + jsonwebtoken: ^9.0.2 + checksum: 88ea57e7c033bafd5918cdbddd67f469a3e70f9ae3c5c973b370ef0b9f86e3499ea132fb15d9ecdddcc97d8305dec1f759a1fdf4dfc8a1a9e6642e166188e28b languageName: node linkType: hard @@ -9887,41 +9890,41 @@ __metadata: linkType: hard "express@npm:^4.17.1": - version: 4.19.2 - resolution: "express@npm:4.19.2" + version: 4.21.0 + resolution: "express@npm:4.21.0" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 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 + encodeurl: ~2.0.0 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: ~2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 + checksum: 1c5212993f665809c249bf00ab550b989d1365a5b9171cdfaa26d93ee2ef10cd8add520861ec8d5da74b3194d8374e1d9d53e85ef69b89fd9c4196b87045a5d4 languageName: node linkType: hard @@ -10042,6 +10045,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.2 + resolution: "fast-uri@npm:3.0.2" + checksum: ca00aadc84e0ab93a8a1700c386bc7cbeb49f47d9801083c258444eed31221fdf864d68fb48ea8acd7c512bf046b53c09e3aafd6d4bdb9449ed21be29d8d6f75 + languageName: node + linkType: hard + "fastparse@npm:^1.1.2": version: 1.1.2 resolution: "fastparse@npm:1.1.2" @@ -10155,18 +10165,18 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" dependencies: debug: 2.6.9 - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 on-finished: 2.4.1 parseurl: ~1.3.3 statuses: 2.0.1 unpipe: ~1.0.0 - checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4 languageName: node linkType: hard @@ -10281,12 +10291,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + checksum: 859e2bacc7a54506f2bf9aacb10d165df78c8c1b0ceb8023f966621b233717dab56e8d08baadc3ad3b9db58af290413d585c999694b7c146aaf2616340c3d2a6 languageName: node linkType: hard @@ -10307,12 +10317,12 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 languageName: node linkType: hard @@ -10540,6 +10550,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:2.3.3, fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@npm:^1.2.7": version: 1.2.13 resolution: "fsevents@npm:1.2.13" @@ -10551,12 +10571,11 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": +"fsevents@patch:fsevents@2.3.3#~builtin, fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.3 - resolution: "fsevents@npm:2.3.3" + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard @@ -10571,15 +10590,6 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -10587,7 +10597,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -10739,17 +10749,18 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.1 - resolution: "glob@npm:10.4.1" + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: ^3.1.0 jackspeak: ^3.1.2 minimatch: ^9.0.4 minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 path-scurry: ^1.11.1 bin: glob: dist/esm/bin.mjs - checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a languageName: node linkType: hard @@ -10930,9 +10941,9 @@ __metadata: linkType: hard "graphql@npm:^16.3.0": - version: 16.8.1 - resolution: "graphql@npm:16.8.1" - checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 + version: 16.9.0 + resolution: "graphql@npm:16.9.0" + checksum: 8cb3d54100e9227310383ce7f791ca48d12f15ed9f2021f23f8735f1121aafe4e5e611a853081dd935ce221724ea1ae4638faef5d2921fb1ad7c26b5f46611e9 languageName: node linkType: hard @@ -11433,12 +11444,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" dependencies: agent-base: ^7.0.2 debug: 4 - checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 languageName: node linkType: hard @@ -11521,9 +11532,9 @@ __metadata: linkType: hard "ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be languageName: node linkType: hard @@ -11535,9 +11546,9 @@ __metadata: linkType: hard "immutable@npm:^4.0.0": - version: 4.3.6 - resolution: "immutable@npm:4.3.6" - checksum: 3afd020be988ec9ba42c1e585b88858970beba91332ac04ac11446722c7e5da03d5956f5049806573d29dfee25f69262297cb7f3bd6b16fc83a175a0176c6c2a + version: 4.3.7 + resolution: "immutable@npm:4.3.7" + checksum: 1c50eb053bb300796551604afff554066f041aa8e15926cf98f6d11d9736b62ad12531c06515dd96375258653878b4736f8051cd20b640f5f976d09fa640e3ec languageName: node linkType: hard @@ -11592,14 +11603,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 languageName: node linkType: hard @@ -11910,12 +11921,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" +"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + hasown: ^2.0.2 + checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 languageName: node linkType: hard @@ -12499,15 +12510,15 @@ __metadata: linkType: hard "jackspeak@npm:^3.1.2": - version: 3.4.0 - resolution: "jackspeak@npm:3.4.0" + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 350f6f311018bb175ffbe736b19c26ac0b134bb5a17a638169e89594eb0c24ab1c658ab3a2fda24ff63b3b19292e1a5ec19d2255bc526df704e8168d392bef85 + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 languageName: node linkType: hard @@ -13402,6 +13413,24 @@ __metadata: languageName: node linkType: hard +"jsonwebtoken@npm:^9.0.2": + version: 9.0.2 + resolution: "jsonwebtoken@npm:9.0.2" + 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: ^7.5.4 + checksum: fc739a6a8b33f1974f9772dca7f8493ca8df4cc31c5a09dcfdb7cff77447dcf22f4236fb2774ef3fe50df0abeb8e1c6f4c41eba82f500a804ab101e2fbc9d61a + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -13786,9 +13815,9 @@ __metadata: linkType: hard "loglevel@npm:^1.6.8": - version: 1.9.1 - resolution: "loglevel@npm:1.9.1" - checksum: e1c8586108c4d566122e91f8a79c8df728920e3a714875affa5120566761a24077ec8ec9e5fc388b022e39fc411ec6e090cde1b5775871241b045139771eeb06 + version: 1.9.2 + resolution: "loglevel@npm:1.9.2" + checksum: 896c67b90a507bfcfc1e9a4daa7bf789a441dd70d95cd13b998d6dd46233a3bfadfb8fadb07250432bbfb53bf61e95f2520f9b11f9d3175cc460e5c251eca0af languageName: node linkType: hard @@ -13822,9 +13851,9 @@ __metadata: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.2 - resolution: "lru-cache@npm:10.2.2" - checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a languageName: node linkType: hard @@ -13865,11 +13894,11 @@ __metadata: linkType: hard "magic-string@npm:^0.30.0": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" dependencies: - "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 + "@jridgewell/sourcemap-codec": ^1.5.0 + checksum: e041649453c9a3f31d2e731fc10e38604d50e20d3585cd48bc7713a6e2e1a3ad3012105929ca15750d59d0a3f1904405e4b95a23b7e69dc256db3c277a73a3ca languageName: node linkType: hard @@ -14074,10 +14103,10 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 languageName: node linkType: hard @@ -14141,12 +14170,12 @@ __metadata: linkType: hard "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: braces: ^3.0.3 picomatch: ^2.3.1 - checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 languageName: node linkType: hard @@ -14169,13 +14198,20 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": +"mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f languageName: node linkType: hard +"mime-db@npm:>= 1.43.0 < 2": + version: 1.53.0 + resolution: "mime-db@npm:1.53.0" + checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb + languageName: node + linkType: hard + "mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -14264,11 +14300,11 @@ __metadata: linkType: hard "minimatch@npm:^9.0.4": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: ^2.0.1 - checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 languageName: node linkType: hard @@ -14427,7 +14463,7 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.4.0, mlly@npm:^1.7.0": +"mlly@npm:^1.4.0, mlly@npm:^1.7.1": version: 1.7.1 resolution: "mlly@npm:1.7.1" dependencies: @@ -14460,14 +14496,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -14551,11 +14580,11 @@ __metadata: linkType: hard "nan@npm:^2.12.1": - version: 2.19.0 - resolution: "nan@npm:2.19.0" + version: 2.20.0 + resolution: "nan@npm:2.20.0" dependencies: node-gyp: latest - checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600 + checksum: eb09286e6c238a3582db4d88c875db73e9b5ab35f60306090acd2f3acae21696c9b653368b4a0e32abcef64ee304a923d6223acaddd16169e5eaaf5c508fb533 languageName: node linkType: hard @@ -14693,8 +14722,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 @@ -14702,13 +14731,13 @@ __metadata: graceful-fs: ^4.2.6 make-fetch-happen: ^13.0.0 nopt: ^7.0.0 - proc-log: ^3.0.0 + proc-log: ^4.1.0 semver: ^7.3.5 - tar: ^6.1.2 + tar: ^6.2.1 which: ^4.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f languageName: node linkType: hard @@ -14771,17 +14800,17 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3 languageName: node linkType: hard "nodemailer@npm:^6.9.1": - version: 6.9.13 - resolution: "nodemailer@npm:6.9.13" - checksum: 1b591ef480be2ff69480127cbff819e6593b1ef263b6f920e1a4e83e40280582daf7a14a809ef92f9828e2a70bdb3ce22b11924e209f2afe4975f9ff37e08e9d + version: 6.9.15 + resolution: "nodemailer@npm:6.9.15" + checksum: 2d975f5c60f84acde52d79d43287c70197fe94bde4a731682f306e9636a148c49de29a5dd92ce7dc5aac068a148cd91da3401ede80f8f52b9f2bc00439f36ced languageName: node linkType: hard @@ -14914,9 +14943,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.10 - resolution: "nwsapi@npm:2.2.10" - checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f + version: 2.2.13 + resolution: "nwsapi@npm:2.2.13" + checksum: d34fb7838517c3c7e8cc824e443275b08b57f6a025a860693d18c56ddcfd176e32df9bf0ae7f5a95c7a32981501caa1f9fda31b59f28aa72a4b9d01f573a8e6b languageName: node linkType: hard @@ -14939,9 +14968,9 @@ __metadata: linkType: hard "object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: 9f850b3c045db60e0e97746e809ee4090d6ce62195af17dd1e9438ac761394a7d8ec4f7906559aea5424eaf61e35d3e53feded2ccd5f62fcc7d9670d3c8eb353 languageName: node linkType: hard @@ -14983,7 +15012,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.0, object.entries@npm:^1.1.7, object.entries@npm:^1.1.8": +"object.entries@npm:^1.1.0, object.entries@npm:^1.1.8": version: 1.1.8 resolution: "object.entries@npm:1.1.8" dependencies: @@ -14994,7 +15023,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -15021,7 +15050,7 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.1": +"object.groupby@npm:^1.0.3": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" dependencies: @@ -15032,17 +15061,6 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.4": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" - dependencies: - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 - languageName: node - linkType: hard - "object.pick@npm:^1.3.0": version: 1.3.0 resolution: "object.pick@npm:1.3.0" @@ -15052,7 +15070,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": +"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -15202,9 +15220,9 @@ __metadata: linkType: hard "outvariant@npm:^1.2.1, outvariant@npm:^1.3.0": - version: 1.4.2 - resolution: "outvariant@npm:1.4.2" - checksum: 5d9e2b3edb1cc8be9cbfc1c8c97e8b05137c4384bbfc56e0a465de26c5d2f023e65732ddcda9d46599b06d667fbc0de32c30d2ecd11f6f3f43bcf8ce0d320918 + version: 1.4.3 + resolution: "outvariant@npm:1.4.3" + checksum: 4a3551fb2b45309e585eebf88bad094dbe56ac6d3a28d59dd2e4050b431aa2beb6097a0763fce3cd82ca0f077026f380a9b60fffc306aaf430141421e7a7b6ed languageName: node linkType: hard @@ -15328,6 +15346,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "pako@npm:^1.0.10, pako@npm:^1.0.11, pako@npm:^1.0.6, pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -15529,26 +15554,26 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce +"path-to-regexp@npm:0.1.10": + version: 0.1.10 + resolution: "path-to-regexp@npm:0.1.10" + checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c languageName: node linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" dependencies: isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + checksum: 5b2ac9cab2a9f82effd30a35164b20998b18d99d96608281dd2cab6e66c0e4536187970369b185ab21d3815da1ecb7dcb2d5f97a4bf0ee6e31a9612299fca147 languageName: node linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.2.2 - resolution: "path-to-regexp@npm:6.2.2" - checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: eca78602e6434a1b6799d511d375ec044e8d7e28f5a48aa5c28d57d8152fb52f3fc62fb1cfc5dfa2198e1f041c2a82ed14043d75740a2fe60e91b5089a153250 languageName: node linkType: hard @@ -15612,10 +15637,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: a64d653d3a188119ff45781dfcdaeedd7625583f45280aea33fcb032c7a0d3959f2368f9b192ad5e8aade75b74dbd954ffe3106c158509a45e4c18ab379a2acd languageName: node linkType: hard @@ -15689,13 +15714,13 @@ __metadata: linkType: hard "pkg-types@npm:^1.1.1": - version: 1.1.1 - resolution: "pkg-types@npm:1.1.1" + version: 1.2.0 + resolution: "pkg-types@npm:1.2.0" dependencies: confbox: ^0.1.7 - mlly: ^1.7.0 + mlly: ^1.7.1 pathe: ^1.1.2 - checksum: 78ee49eea8c03802ffbdc79dfb6a741f905a4053453280cd2f1149850523fdaf46d39ecb88c2c2f757cceb9883f234bb0e56371084b5895632bdb00ef0f7298f + checksum: c9ea31be8c7bf0b760c075d5e39f71d90fcebee316e49688345e9095d520ed766f3bfd560227e3f3c28639399a0641a27193eef60c4802d89cb414e21240bbb5 languageName: node linkType: hard @@ -16513,12 +16538,12 @@ __metadata: linkType: hard "postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2": - version: 6.1.0 - resolution: "postcss-selector-parser@npm:6.1.0" + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 449f614e6706421be307d8638183c61ba45bc3b460fe3815df8971dbb4d59c4087181940d879daee4a7a2daf3d86e915db1cce0c006dd68ca75b4087079273bd + checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84 languageName: node linkType: hard @@ -16613,13 +16638,13 @@ __metadata: linkType: hard "postcss@npm:^8.1.0, postcss@npm:^8.4.26, postcss@npm:^8.4.27": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" + version: 8.4.47 + resolution: "postcss@npm:8.4.47" dependencies: nanoid: ^3.3.7 - picocolors: ^1.0.0 - source-map-js: ^1.2.0 - checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + picocolors: ^1.1.0 + source-map-js: ^1.2.1 + checksum: f78440a9d8f97431dd2ab1ab8e1de64f12f3eff38a3d8d4a33919b96c381046a314658d2de213a5fa5eb296b656de76a3ec269fdea27f16d5ab465b916a0f52c languageName: node linkType: hard @@ -16726,24 +16751,21 @@ __metadata: linkType: hard "prisma@npm:^5.7.1": - version: 5.15.0 - resolution: "prisma@npm:5.15.0" + version: 5.20.0 + resolution: "prisma@npm:5.20.0" dependencies: - "@prisma/engines": 5.15.0 + "@prisma/engines": 5.20.0 + fsevents: 2.3.3 + dependenciesMeta: + fsevents: + optional: true bin: prisma: build/index.js - checksum: e780334771f0d64a4f9187013b137676ba9f767a162127f53b11f2955bc457f6250da22e0b31f7a2bf171a911cbd194d28c5a96a688d4ef07fe5bbbf014c807f - languageName: node - linkType: hard - -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + checksum: 792349b6e40a2f8586bc0a21249990621b556056a1a1e45274a999b8ff317ed3111dabf3175c392688c5e154c330343a4f658961040ffa7d6de41475eb36f744 languageName: node linkType: hard -"proc-log@npm:^4.2.0": +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc @@ -16907,12 +16929,12 @@ __metadata: linkType: hard "pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" + version: 3.0.2 + resolution: "pump@npm:3.0.2" dependencies: end-of-stream: ^1.1.0 once: ^1.3.1 - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f languageName: node linkType: hard @@ -16948,21 +16970,12 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 - languageName: node - linkType: hard - -"qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.7.0": - version: 6.12.1 - resolution: "qs@npm:6.12.1" +"qs@npm:6.13.0, qs@npm:^6.11.0, qs@npm:^6.12.3, qs@npm:^6.7.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: side-channel: ^1.0.6 - checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 + checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 languageName: node linkType: hard @@ -17176,12 +17189,12 @@ __metadata: linkType: hard "react-google-charts@npm:^4.0.0": - version: 4.0.1 - resolution: "react-google-charts@npm:4.0.1" + version: 4.0.7 + resolution: "react-google-charts@npm:4.0.7" peerDependencies: react: ">=16.3.0" react-dom: ">=16.3.0" - checksum: 874a552b07cc67d6b830718dd5e71055c46fbd0c7a12bca14078c0744111d8fead833e36a16bd0b0ea5c26f6cff0eb84b4b6de62845c945b3c47c6cc75233f9d + checksum: 73b7765aad8adee94a93d3e01f2a81ccc096d95ae555946307cd7be826b8b8bc056757d4602b4ff27c9e5ce3196dbb8136f5f30a49719783eba9bd7710c9d482 languageName: node linkType: hard @@ -17223,11 +17236,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.34.0": - version: 7.51.5 - resolution: "react-hook-form@npm:7.51.5" + version: 7.53.0 + resolution: "react-hook-form@npm:7.53.0" peerDependencies: - react: ^16.8.0 || ^17 || ^18 - checksum: 6b6a56b6520ddb68d491e2f07791538aa611c13fcd76052a499ba10bdaf7f77f4a5f7191e6ca9d9ab0af739bf07171c6e8d97f6c4da06f576aa74caed71828f1 + react: ^16.8.0 || ^17 || ^18 || ^19 + checksum: 84d67fb79bad03d0aa809b5e411d97fb081fc13cd2b6d063a988f81f6fbef8545463e05360afa9d8d58fff19f08fa919930dcdc98a9e68bf74048c9f63e10ad5 languageName: node linkType: hard @@ -17245,7 +17258,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.2.0": +"react-is@npm:^18.0.0, react-is@npm:^18.3.1": version: 18.3.1 resolution: "react-is@npm:18.3.1" checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 @@ -17588,6 +17601,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.0.1 + resolution: "readdirp@npm:4.0.1" + checksum: b39747defe52922c2478874ffbb1fd0bececa7b3170466a5bc770795dd5296a309598990cbd809732079b2363e989d0008b8e91cfbac7b726f68c1947db2d31c + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -17641,11 +17661,11 @@ __metadata: linkType: hard "regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: ^1.4.2 - checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf + checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 languageName: node linkType: hard @@ -18157,8 +18177,8 @@ __metadata: linkType: hard "rollup@npm:^3.25.2, rollup@npm:^3.27.1": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" + version: 3.29.5 + resolution: "rollup@npm:3.29.5" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -18166,7 +18186,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e + checksum: 6f8304e58ac8170a715e61e46c4aa674b2ae2587ed2a712dab58f72e5e54803ae40b485fbe6b3e6a694f4c8f7a59ab936ccf9f6b686c7cfd1f1970fa9ecadf1a languageName: node linkType: hard @@ -18325,15 +18345,15 @@ __metadata: linkType: hard "sass@npm:^1.54.0": - version: 1.77.4 - resolution: "sass@npm:1.77.4" + version: 1.79.4 + resolution: "sass@npm:1.79.4" dependencies: - chokidar: ">=3.0.0 <4.0.0" + chokidar: ^4.0.0 immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 415d76960e35d78310ffc33bc61fdb2b35a54bb2823dfc4eff50eee960096dacc210d7ef7ae6695120e1a4f005f269719c34d58c77c54ff7787516bda6a89e55 + checksum: c6da5642894f5ff6627861cd39d595f83e02f05255519a1c50873705ca1f8a6b9065a5c4456fb876552bba5b3024ad1424db00ee6ab12e66fe3be0acf48d5d21 languageName: node linkType: hard @@ -18429,12 +18449,12 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3": - version: 7.6.2 - resolution: "semver@npm:7.6.2" +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.3 + resolution: "semver@npm:7.6.3" bin: semver: bin/semver.js - checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 languageName: node linkType: hard @@ -18456,9 +18476,9 @@ __metadata: languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" dependencies: debug: 2.6.9 depd: 2.0.0 @@ -18473,7 +18493,7 @@ __metadata: on-finished: 2.4.1 range-parser: ~1.2.1 statuses: 2.0.1 - checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f languageName: node linkType: hard @@ -18521,15 +18541,15 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" dependencies: - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 parseurl: ~1.3.3 - send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + send: 0.19.0 + checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 languageName: node linkType: hard @@ -18541,9 +18561,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.6.0 - resolution: "set-cookie-parser@npm:2.6.0" - checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 + version: 2.7.0 + resolution: "set-cookie-parser@npm:2.7.0" + checksum: 1eed43d7b284b727b4e7d35e324a74c493469265488b0c8f464f5224186e7dbbdd1cb35c8822053581f807a10b930a628144041ad453db06548945c61d5a834f languageName: node linkType: hard @@ -18828,17 +18848,17 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" dependencies: agent-base: ^7.1.1 debug: ^4.3.4 - socks: ^2.7.1 - checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + socks: ^2.8.3 + checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 languageName: node linkType: hard -"socks@npm:^2.7.1": +"socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -18864,10 +18884,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b languageName: node linkType: hard @@ -18971,9 +18991,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.18 - resolution: "spdx-license-ids@npm:3.0.18" - checksum: 457825df5dd1fc0135b0bb848c896143f70945cc2da148afc71c73ed0837d1d651f809006e406d82109c9dd71a8cb39785a3604815fe46bc0548e9d3976f6b69 + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 languageName: node linkType: hard @@ -19246,6 +19266,16 @@ __metadata: languageName: node linkType: hard +"string.prototype.includes@npm:^2.0.0": + version: 2.0.0 + resolution: "string.prototype.includes@npm:2.0.0" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: cf413e7f603b0414b65fdf1e7e3670ba85fd992b31c7eadfbdd9a484b86d265f0260431e7558cdb44a318dcadd1da8442b7bb8193b9ddd0aea3c376d2a559859 + languageName: node + linkType: hard + "string.prototype.matchall@npm:^4.0.11": version: 4.0.11 resolution: "string.prototype.matchall@npm:4.0.11" @@ -19266,6 +19296,16 @@ __metadata: languageName: node linkType: hard +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -19630,7 +19670,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -19692,8 +19732,8 @@ __metadata: linkType: hard "terser-webpack-plugin@npm:^1.4.3": - version: 1.4.5 - resolution: "terser-webpack-plugin@npm:1.4.5" + version: 1.4.6 + resolution: "terser-webpack-plugin@npm:1.4.6" dependencies: cacache: ^12.0.2 find-cache-dir: ^2.1.0 @@ -19706,7 +19746,7 @@ __metadata: worker-farm: ^1.7.0 peerDependencies: webpack: ^4.0.0 - checksum: 02aada80927d3c8105d69cb00384d307b73aed67d180db5d20023a8d649149f3803ad50f9cd2ef9eb2622005de87e677198ecc5088f51422bfac5d4d57472d0e + checksum: 8b6c84df929383032edb25c949781dc55dc31ff85dda9ede25af49357077f615f0065101fcc567cd9c801c8cb1f158ce441fb193c18c6127d04a809a1e7d0d2b languageName: node linkType: hard @@ -19724,8 +19764,8 @@ __metadata: linkType: hard "terser@npm:^5.3.4": - version: 5.31.1 - resolution: "terser@npm:5.31.1" + version: 5.34.1 + resolution: "terser@npm:5.34.1" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -19733,7 +19773,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 6ab57e62e9cd690dc99b3d0ee2e07289cd3408109a950c7118bf39e32851a5bf08b67fe19e0ac43a5a98813792ac78101bf25e5aa524f05ae8bb4e0131d0feef + checksum: 19a6710e17ff3f20d3b0661090640a572ce5ff6f2e95c731bb5a9eb1dcc1fe563cd0f1e4a22cde89b2717667336252bc2adb8894bdfbec6d1996b3e70b44f365 languageName: node linkType: hard @@ -19817,9 +19857,9 @@ __metadata: linkType: hard "tinybench@npm:^2.5.0": - version: 2.8.0 - resolution: "tinybench@npm:2.8.0" - checksum: 024a307c6a71f6e2903e110952457ee3dfa606093b45d7f49efcfd01d452650e099474080677ff650b0fd76b49074425ac68ff2a70561699a78515a278bf0862 + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 languageName: node linkType: hard @@ -20092,9 +20132,9 @@ __metadata: linkType: hard "tslib@npm:^2.0.3, tslib@npm:^2.1.0": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 1606d5c89f88d466889def78653f3aab0f88692e80bb2066d090ca6112ae250ec1cfa9dbfaab0d17b60da15a4186e8ec4d893801c67896b277c17374e36e1d28 languageName: node linkType: hard @@ -20134,13 +20174,20 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 3b32f873cd02bc7001b00a61502b7ddc4b49278aabe68d652f732e1b5d768c072de0bc734b427abf59d0520a5f19a2e07309ab921ef02018fa1cb4af155cdb37 + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -20338,9 +20385,9 @@ __metadata: linkType: hard "ufo@npm:^1.5.3": - version: 1.5.3 - resolution: "ufo@npm:1.5.3" - checksum: 2f54fa543b2e689cc4ab341fe2194937afe37c5ee43cd782e6ecc184e36859e84d4197a43ae4cd6e9a56f793ca7c5b950dfff3f16fadaeef9b6b88b05c88c8ef + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: f244703b7d4f9f0df4f9af23921241ab73410b591f4e5b39c23e3147f3159b139a4b1fb5903189c306129f7a16b55995dac0008e0fbae88a37c3e58cbc34d833 languageName: node linkType: hard @@ -20370,17 +20417,17 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 languageName: node linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 languageName: node linkType: hard @@ -20395,9 +20442,9 @@ __metadata: linkType: hard "unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae languageName: node linkType: hard @@ -20613,17 +20660,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.13": - version: 1.0.16 - resolution: "update-browserslist-db@npm:1.0.16" +"update-browserslist-db@npm:^1.1.0": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" dependencies: - escalade: ^3.1.2 - picocolors: ^1.0.1 + escalade: ^3.2.0 + picocolors: ^1.1.0 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 51b1f7189c9ea5925c80154b0a6fd3ec36106d07858d8f69826427d8edb4735d1801512c69eade38ba0814d7407d11f400d74440bbf3da0309f3d788017f35b2 + checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e languageName: node linkType: hard @@ -20645,7 +20692,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": +"uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -20696,12 +20743,12 @@ __metadata: linkType: hard "url@npm:^0.11.0": - version: 0.11.3 - resolution: "url@npm:0.11.3" + version: 0.11.4 + resolution: "url@npm:0.11.4" dependencies: punycode: ^1.4.1 - qs: ^6.11.2 - checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e + qs: ^6.12.3 + checksum: c25e587723d343d5d4248892393bfa5039ded9c2c07095a9d005bc64b7cb8956d623c0d8da8d1a28f71986a7a8d80fc2e9f9cf84235e48fa435a5cb4451062c6 languageName: node linkType: hard @@ -20973,8 +21020,8 @@ __metadata: linkType: hard "vite@npm:^3.0.0 || ^4.0.0": - version: 4.5.3 - resolution: "vite@npm:4.5.3" + version: 4.5.5 + resolution: "vite@npm:4.5.5" dependencies: esbuild: ^0.18.10 fsevents: ~2.3.2 @@ -21008,7 +21055,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c + checksum: 300c5f39c83b22413dfdc84f72e9ba979bf4004e4d939409eea1470b116626294495b09e2bd73fae387a254b79988c8d54ceb281f9515120a0eda179c33b216e languageName: node linkType: hard @@ -21402,11 +21449,11 @@ __metadata: linkType: hard "which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" + version: 1.1.4 + resolution: "which-builtin-type@npm:1.1.4" dependencies: - function.prototype.name: ^1.1.5 - has-tostringtag: ^1.0.0 + function.prototype.name: ^1.1.6 + has-tostringtag: ^1.0.2 is-async-function: ^2.0.0 is-date-object: ^1.0.5 is-finalizationregistry: ^1.0.2 @@ -21415,13 +21462,13 @@ __metadata: 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 - checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + which-collection: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: 1f413025250072534de2a2ee25139a24d477512b532b05c85fb9aa05aef04c6e1ca8e2668acf971b777e602721dbdec4b9d6a4f37c6b9ff8f026ad030352707f languageName: node linkType: hard -"which-collection@npm:^1.0.1": +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -21440,7 +21487,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -21487,14 +21534,14 @@ __metadata: linkType: hard "why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" dependencies: siginfo: ^2.0.0 stackback: 0.0.2 bin: why-is-node-running: cli.js - checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb languageName: node linkType: hard @@ -21774,17 +21821,17 @@ __metadata: linkType: hard "ws@npm:^6.2.1": - version: 6.2.2 - resolution: "ws@npm:6.2.2" + version: 6.2.3 + resolution: "ws@npm:6.2.3" dependencies: async-limiter: ~1.0.0 - checksum: aec3154ec51477c094ac2cb5946a156e17561a581fa27005cbf22c53ac57f8d4e5f791dd4bbba6a488602cb28778c8ab7df06251d590507c3c550fd8ebeee949 + checksum: bbc96ff5628832d80669a88fd117487bf070492dfaa50df77fa442a2b119792e772f4365521e0a8e025c0d51173c54fa91adab165c11b8e0674685fdd36844a5 languageName: node linkType: hard "ws@npm:^7.4.6": - version: 7.5.9 - resolution: "ws@npm:7.5.9" + version: 7.5.10 + resolution: "ws@npm:7.5.10" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21793,7 +21840,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb languageName: node linkType: hard @@ -21954,9 +22001,9 @@ __metadata: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c languageName: node linkType: hard From 6aac22d7eebe3dd3cca51d8fbcbe57b6d1d873f3 Mon Sep 17 00:00:00 2001 From: vdema Date: Wed, 16 Oct 2024 20:14:09 -0400 Subject: [PATCH 069/320] #2793: Created the Guest Organization Info Component --- .../src/pages/HomePage/GuestHomePage.tsx | 2 + .../components/GuestOrganizationInfo.tsx | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 2a6921c13c..7618f16fd4 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -14,6 +14,7 @@ import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; +import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface GuestHomePageProps { user: AuthenticatedUser; @@ -30,6 +31,7 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { Welcome, {user.firstName}! + diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx new file mode 100644 index 0000000000..95b073bf5b --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -0,0 +1,59 @@ +import { Box, Button, Typography } from '@mui/material'; +import { Grid } from '@mui/material'; +import { useCurrentOrganization, useOrganization } from '../../../hooks/organizations.hooks'; +import React from 'react'; +import { useAllUsefulLinks } from '../../../hooks/projects.hooks'; +import { NERButton } from '../../../components/NERButton'; +import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; + +interface GuestOrganizationInfoButtonProps { + href?: string; + buttonText: string; +} + +const NERGuestButton: React.FC = ({ href, buttonText }) => { + return ( + + + + + {buttonText} + + + + ); +}; + +const GuestOrganizationInfo = () => { + const organizationName = useCurrentOrganization().data?.name; + const organizationDescription = useCurrentOrganization().data?.description; + const usefulLinks = useAllUsefulLinks().data; + + return ( + + + FinishLine by {organizationName} + + {organizationDescription} + + + + + + + + + + ); +}; + +export default GuestOrganizationInfo; From 2281494a62e2296cdd63456befa17fa02c25c391 Mon Sep 17 00:00:00 2001 From: vdema Date: Wed, 16 Oct 2024 20:34:05 -0400 Subject: [PATCH 070/320] #2793: Fixed Linting Check Issues --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 95b073bf5b..f5ca00fd49 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,8 +1,7 @@ -import { Box, Button, Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import { Grid } from '@mui/material'; -import { useCurrentOrganization, useOrganization } from '../../../hooks/organizations.hooks'; +import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; -import { useAllUsefulLinks } from '../../../hooks/projects.hooks'; import { NERButton } from '../../../components/NERButton'; import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; @@ -27,7 +26,6 @@ const NERGuestButton: React.FC = ({ href, butt const GuestOrganizationInfo = () => { const organizationName = useCurrentOrganization().data?.name; const organizationDescription = useCurrentOrganization().data?.description; - const usefulLinks = useAllUsefulLinks().data; return ( Date: Mon, 21 Oct 2024 11:29:29 -0400 Subject: [PATCH 071/320] #2768-removed modal and created edit --- .../EditGuestView/EditDescription.tsx | 85 +++++++------ .../EditDescriptionFormModal.tsx | 119 +++++++++--------- .../TaskList/TaskFormModal.tsx | 2 +- 3 files changed, 110 insertions(+), 96 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx index 45611c204c..25bfdc6b78 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -1,4 +1,4 @@ -import { Box, TextField, Typography } from '@mui/material'; +import { Box, Card, TextField, Typography, useTheme } from '@mui/material'; import React, { useState } from 'react'; import { useCurrentOrganization, useSetOrganizationDescription } from '../../../hooks/organizations.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; @@ -8,18 +8,14 @@ import EditDescriptionFormModal, { EditDescriptionInput } from './EditDescriptio import { useToast } from '../../../hooks/toasts.hooks'; const EditDescription: React.FC = () => { - const [showModal, setShowModal] = useState(false); + const [isEditMode, setIsEditMode] = useState(false); + const theme = useTheme(); const { data: organization, isLoading, isError, error } = useCurrentOrganization(); - const { - mutateAsync: setOrganizationDescription, - isLoading: mutateIsLoading, - isError: mutateIsError, - error: mutateError - } = useSetOrganizationDescription(); + const { mutateAsync: setOrganizationDescription, isLoading: mutateIsLoading } = useSetOrganizationDescription(); const toast = useToast(); const handleClose = () => { - setShowModal(false); + setIsEditMode(false); }; const onSubmit = async (formInput: EditDescriptionInput) => { @@ -36,41 +32,52 @@ const EditDescription: React.FC = () => { if (isLoading || mutateIsLoading || !organization) return ; if (isError) return ; - if (mutateIsError) return ; return ( - + {organization.name} Description - - - - setShowModal(true)}> - Update - + ) : ( + + + + setIsEditMode(true)}> + Update + + - - - + )} + ); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx index 94c5ec6e89..14c49282ad 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionFormModal.tsx @@ -1,9 +1,11 @@ import React from 'react'; import * as yup from 'yup'; -import { Controller, useForm } from 'react-hook-form'; +import { Controller, set, useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; -import NERFormModal from '../../../components/NERFormModal'; -import { FormControl, FormLabel, TextField } from '@mui/material'; +import { Box, FormControl, FormLabel, TextField, Typography } from '@mui/material'; +import { Organization } from 'shared'; +import NERFailButton from '../../../components/NERFailButton'; +import NERSuccessButton from '../../../components/NERSuccessButton'; const schema = yup.object().shape({ description: yup.string() @@ -14,19 +16,17 @@ export interface EditDescriptionInput { } interface EditDescriptionFormModalProps { - originalDescription: string; - modalShow: boolean; + organization: Organization; + onSubmit: (formInput: EditDescriptionInput) => Promise; onHide: () => void; - onSubmit: (data: EditDescriptionInput) => Promise; - onReset?: () => void; + isEditMode: boolean; } const EditDescriptionFormModal: React.FC = ({ - modalShow, - onHide, + organization, onSubmit, - originalDescription, - onReset + onHide, + isEditMode }) => { const { handleSubmit, @@ -36,58 +36,65 @@ const EditDescriptionFormModal: React.FC = ({ } = useForm({ resolver: yupResolver(schema), defaultValues: { - description: originalDescription ?? '' + description: organization.description ?? '' } }); + const onSubmitWrapper = async (data: EditDescriptionInput) => { + await onSubmit(data); + reset(); + }; + + const onHideWrapper = () => { + onHide(); + reset(); + }; + return ( - { - if (onReset) onReset(); +
{ + e.preventDefault(); + e.stopPropagation(); + handleSubmit(onSubmit)(e); reset(); }} + onKeyPress={(e) => { + e.key === 'Enter' && e.preventDefault(); + }} > - { - e.preventDefault(); - e.stopPropagation(); - handleSubmit(onSubmit)(e); - reset(); - }} - onKeyPress={(e) => { - e.key === 'Enter' && e.preventDefault(); - }} - > - - Title - ( - - )} - /> - -
-
+ + ( + + )} + /> + + {isEditMode && ( + + + Cancel + + + Save + + + )} + ); }; diff --git a/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx b/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx index ef652d9e77..23b0a5354a 100644 --- a/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx +++ b/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx @@ -43,7 +43,7 @@ const TaskFormModal: React.FC = ({ task, onSubmit, modalShow handleSubmit, control, formState: { errors }, - reset + reset, } = useForm({ resolver: yupResolver(schema), defaultValues: { From 70aed873c302b346e24fd9edbb27255ad2032ef2 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 21 Oct 2024 14:59:41 -0400 Subject: [PATCH 072/320] #2768-changed name of component --- .../AdminToolsPage/EditGuestView/EditDescription.tsx | 9 ++------- ...scriptionFormModal.tsx => EditDescriptionForm.tsx} | 11 +++-------- 2 files changed, 5 insertions(+), 15 deletions(-) rename src/frontend/src/pages/AdminToolsPage/EditGuestView/{EditDescriptionFormModal.tsx => EditDescriptionForm.tsx} (91%) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx index 25bfdc6b78..aa587287b1 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -4,7 +4,7 @@ import { useCurrentOrganization, useSetOrganizationDescription } from '../../../ import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { NERButton } from '../../../components/NERButton'; -import EditDescriptionFormModal, { EditDescriptionInput } from './EditDescriptionFormModal'; +import EditDescriptionForm, { EditDescriptionInput } from './EditDescriptionForm'; import { useToast } from '../../../hooks/toasts.hooks'; const EditDescription: React.FC = () => { @@ -47,12 +47,7 @@ const EditDescription: React.FC = () => { > {organization.name} Description {isEditMode ? ( - + ) : ( Promise; onHide: () => void; isEditMode: boolean; } -const EditDescriptionFormModal: React.FC = ({ - organization, - onSubmit, - onHide, - isEditMode -}) => { +const EditDescriptionForm: React.FC = ({ organization, onSubmit, onHide, isEditMode }) => { const { handleSubmit, control, @@ -98,4 +93,4 @@ const EditDescriptionFormModal: React.FC = ({ ); }; -export default EditDescriptionFormModal; +export default EditDescriptionForm; From c6e20237736b2d7fa9c4f3b41d77aaddfc2a0353 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 21 Oct 2024 15:08:23 -0400 Subject: [PATCH 073/320] #2768-added word count --- .../EditGuestView/EditDescriptionForm.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx index 575f061a45..bd27c0093b 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx @@ -1,9 +1,9 @@ import React from 'react'; import * as yup from 'yup'; -import { Controller, set, useForm } from 'react-hook-form'; +import { Controller, useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; -import { Box, FormControl, FormLabel, TextField, Typography } from '@mui/material'; -import { Organization } from 'shared'; +import { Box, FormControl, TextField } from '@mui/material'; +import { countWords, isUnderWordCount, Organization } from 'shared'; import NERFailButton from '../../../components/NERFailButton'; import NERSuccessButton from '../../../components/NERSuccessButton'; @@ -64,7 +64,18 @@ const EditDescriptionForm: React.FC = ({ organization, control={control} rules={{ required: true }} render={({ field: { onChange, value } }) => ( - + )} /> From 6c07f237c6e4a2dc82f4d31d419d2955308f5665 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 21 Oct 2024 15:11:39 -0400 Subject: [PATCH 074/320] #2768 fixed checks --- .../AdminToolsPage/EditGuestView/EditDescriptionForm.tsx | 7 +------ .../ProjectViewContainer/TaskList/TaskFormModal.tsx | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx index bd27c0093b..696d716d5e 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx @@ -23,12 +23,7 @@ interface EditDescriptionFormProps { } const EditDescriptionForm: React.FC = ({ organization, onSubmit, onHide, isEditMode }) => { - const { - handleSubmit, - control, - formState: { errors }, - reset - } = useForm({ + const { handleSubmit, control, reset } = useForm({ resolver: yupResolver(schema), defaultValues: { description: organization.description ?? '' diff --git a/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx b/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx index 23b0a5354a..ef652d9e77 100644 --- a/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx +++ b/src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal.tsx @@ -43,7 +43,7 @@ const TaskFormModal: React.FC = ({ task, onSubmit, modalShow handleSubmit, control, formState: { errors }, - reset, + reset } = useForm({ resolver: yupResolver(schema), defaultValues: { From 423ed6ccf09735b8c136afdf91795f3428abaf0a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 21 Oct 2024 16:45:50 -0400 Subject: [PATCH 075/320] #2768-made card outlined --- .../src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx index aa587287b1..43d55acb69 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -44,6 +44,7 @@ const EditDescription: React.FC = () => { variant: 'outlined' }) }} + variant={isEditMode ? 'outlined' : undefined} > {organization.name} Description {isEditMode ? ( From a9925d40ae34d75dca163552af559d1668b24ebd Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 22 Oct 2024 09:20:02 -0400 Subject: [PATCH 076/320] #2768-added spacing and fixed shifting --- .../pages/AdminToolsPage/EditGuestView/EditDescription.tsx | 5 ++++- .../AdminToolsPage/EditGuestView/EditDescriptionForm.tsx | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx index 43d55acb69..06e44ac673 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescription.tsx @@ -41,12 +41,15 @@ const EditDescription: React.FC = () => { padding: 2, ...(isEditMode && { background: theme.palette.background.paper, + padding: 1.9, variant: 'outlined' }) }} variant={isEditMode ? 'outlined' : undefined} > - {organization.name} Description + + {organization.name} Description + {isEditMode ? ( ) : ( diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx index 696d716d5e..048a24180d 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditDescriptionForm.tsx @@ -77,7 +77,6 @@ const EditDescriptionForm: React.FC = ({ organization, {isEditMode && ( Date: Tue, 22 Oct 2024 20:14:23 -0400 Subject: [PATCH 077/320] #2793: Fixed Button Mapping, Error Handling, and Icons --- .../components/GuestOrganizationInfo.tsx | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index f5ca00fd49..9f47396eeb 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -4,10 +4,14 @@ import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; import { NERButton } from '../../../components/NERButton'; import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; +import { useAllLinkTypes, useAllUsefulLinks } from '../../../hooks/projects.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; interface GuestOrganizationInfoButtonProps { href?: string; buttonText: string; + iconName: string; } const NERGuestButton: React.FC = ({ href, buttonText }) => { @@ -24,8 +28,20 @@ const NERGuestButton: React.FC = ({ href, butt }; const GuestOrganizationInfo = () => { - const organizationName = useCurrentOrganization().data?.name; - const organizationDescription = useCurrentOrganization().data?.description; + const { data: organization, isLoading, isError, error } = useCurrentOrganization(); + const { + data: usefulLinks, + isLoading: usefulLinksIsLoading, + isError: usefulLinksIsError, + error: usefulLinksError + } = useAllUsefulLinks(); + const { data: linkTypes, isLoading: linkTypesIsLoading } = useAllLinkTypes(); + + if (isLoading) return ; + if (isError) return ; + + if (!usefulLinks || usefulLinksIsLoading || !linkTypes || linkTypesIsLoading) return ; + if (usefulLinksIsError) return ; return ( { }} > - FinishLine by {organizationName} + FinishLine by {organization?.name} - {organizationDescription} + {organization?.description} - - - - - - + {usefulLinks.map((link) => ( + + ))} ); From c0cde54591237f6d62494b355a98436b1af5b50a Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Tue, 22 Oct 2024 20:53:22 -0400 Subject: [PATCH 078/320] #2797-set up featured projects --- src/backend/src/prisma/seed.ts | 10 +-- .../src/services/organizations.services.ts | 1 + .../HomePage/components/FeaturedProjects.tsx | 71 +++++++++---------- .../components/FeaturedProjectsCard.tsx | 60 ++++++---------- 4 files changed, 64 insertions(+), 78 deletions(-) diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index 5a583c2e38..244cabe8b4 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -428,7 +428,7 @@ const performSeed: () => Promise = async () => { */ /** Project 1 */ - const { projectWbsNumber: project1WbsNumber } = await seedProject( + const { projectWbsNumber: project1WbsNumber, projectId: project1Id } = await seedProject( thomasEmrax, changeRequest1.crId, fergus.wbsElement.carNumber, @@ -456,7 +456,7 @@ const performSeed: () => Promise = async () => { ); /** Project 2 */ - const { projectWbsNumber: project2WbsNumber } = await seedProject( + const { projectWbsNumber: project2WbsNumber, projectId: project2Id } = await seedProject( thomasEmrax, changeRequest1.crId, fergus.wbsElement.carNumber, @@ -484,7 +484,7 @@ const performSeed: () => Promise = async () => { ); /** Project 3 */ - const { projectWbsNumber: project3WbsNumber } = await seedProject( + const { projectWbsNumber: project3WbsNumber, projectId: project3Id } = await seedProject( thomasEmrax, changeRequest1.crId, fergus.wbsElement.carNumber, @@ -512,7 +512,7 @@ const performSeed: () => Promise = async () => { ); /** Project 4 */ - const { projectWbsNumber: project4WbsNumber } = await seedProject( + const { projectWbsNumber: project4WbsNumber, projectId: project4Id } = await seedProject( thomasEmrax, changeRequest1.crId, fergus.wbsElement.carNumber, @@ -1869,6 +1869,8 @@ const performSeed: () => Promise = async () => { ner ); + await OrganizationsService.setFeaturedProjects([project1Id, project2Id, project3Id, project4Id], ner, batman); + await OrganizationsService.setUsefulLinks(batman, organizationId, [ { linkId: '1', diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 1e882d1c8f..6b5c1e2535 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -8,6 +8,7 @@ import { linkTransformer } from '../transformers/links.transformer'; import { getLinkQueryArgs } from '../prisma-query-args/links.query-args'; import { uploadFile } from '../utils/google-integration.utils'; import { getProjects } from '../utils/projects.utils'; +import { getProjectQueryArgs } from '../prisma-query-args/projects.query-args'; export default class OrganizationsService { /** diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index 37405841ca..cdfa8658a5 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -13,48 +13,47 @@ import { wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; const FeaturedProjects: React.FC = () => { - const featuredProjects = useFeaturedProjects(); + const { data: featuredProjects, isLoading, isError, error } = useFeaturedProjects(); const theme = useTheme(); - if (featuredProjects.isError) { - return ; - } + if (isLoading || !featuredProjects) return ; + if (isError) return ; + console.log(featuredProjects[0]); const fullDisplay = ( - - {featuredProjects.data?.length === 0 ? ( - No Featured Projects - ) : ( - featuredProjects.data?.map((p) => ) - )} - - ); - - return ( - - {featuredProjects.isLoading ? : fullDisplay} + + + {featuredProjects.length === 0 ? ( + No Featured Projects + ) : ( + <> + //featuredProjects.map((p) => ) + )} + ); + + return fullDisplay; }; export default FeaturedProjects; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx index 6e34f08ed8..5cb3844451 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx @@ -1,40 +1,15 @@ import { Construction, Work } from '@mui/icons-material'; -import { - Box, - Card, - CardContent, - Chip, - CircularProgress, - CircularProgressProps, - Link, - Stack, - Typography, - useTheme -} from '@mui/material'; +import { Box, Card, CardContent, Chip, Link, Stack, Typography, useTheme } from '@mui/material'; import { wbsPipe, Project } from 'shared'; import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; -export const CircularProgressWithLabel = (props: CircularProgressProps & { value: number }) => { - return ( - - -
- {`${Math.round(props.value)}%`} -
-
- ); -}; - -const FeaturedProjectsCard = ({ p }: { p: Project }) => { +interface ProjectCardProps { + project: Project; +} +// remove the collapseable part +const FeaturedProjectsCard: React.FC = ({ project }) => { const theme = useTheme(); return ( { - - {projectWbsPipe(p.wbsNum)} - {p.teams} + + {projectWbsPipe(project.wbsNum)} - {project.teams} - + - {wbsPipe(p.wbsNum)} - {p.name} + {wbsPipe(project.wbsNum)} - {project.name} - {datePipe(p.startDate) + ' ⟝ ' + p.duration + ' wks ⟞ ' + datePipe(p.endDate)} + {datePipe(project.startDate) + ' ⟝ ' + project.duration + ' wks ⟞ ' + datePipe(project.endDate)} - } label={fullNamePipe(p.lead)} size="medium" /> - } label={fullNamePipe(p.manager)} size="medium" /> + } + label={fullNamePipe(project.lead)} + size="medium" + /> + } label={fullNamePipe(project.manager)} size="medium" />
From 123781796318b288f325eb4a0db80d00740a0ebe Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 23 Oct 2024 12:50:24 -0400 Subject: [PATCH 079/320] #2805-updated auth user to have teams --- src/backend/src/prisma-query-args/auth-user.query-args.ts | 7 +++++-- src/backend/src/transformers/auth-user.transformer.ts | 5 ++++- src/shared/src/types/user-types.ts | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/backend/src/prisma-query-args/auth-user.query-args.ts b/src/backend/src/prisma-query-args/auth-user.query-args.ts index f99144f234..0c6db7bd94 100644 --- a/src/backend/src/prisma-query-args/auth-user.query-args.ts +++ b/src/backend/src/prisma-query-args/auth-user.query-args.ts @@ -1,4 +1,5 @@ import { Prisma } from '@prisma/client'; +import { getTeamQueryArgs } from './teams.query-args'; export type AuthUserQueryArgs = ReturnType; @@ -9,13 +10,15 @@ export const getAuthUserQueryArgs = (organizationId: string) => teamsAsHead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, organizations: true, teamsAsLead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, teamsAsMember: { where: { diff --git a/src/backend/src/transformers/auth-user.transformer.ts b/src/backend/src/transformers/auth-user.transformer.ts index ed49204c54..57ab1585c4 100644 --- a/src/backend/src/transformers/auth-user.transformer.ts +++ b/src/backend/src/transformers/auth-user.transformer.ts @@ -6,6 +6,7 @@ import { isAuthUserOnFinance } from '../utils/reimbursement-requests.utils'; import { Prisma } from '@prisma/client'; +import teamTransformer from './teams.transformer'; const authenticatedUserTransformer = ( user: Prisma.UserGetPayload, @@ -26,7 +27,9 @@ const authenticatedUserTransformer = ( isAtLeastFinanceLead: isAuthUserAtLeastLeadForFinance(user), changeRequestsToReviewId: user.changeRequestsToReview.map((changeRequest) => changeRequest.crId), organizations: user.organizations.map((organization) => organization.organizationId), - currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId) + currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId), + teamsAsHeadId: user.teamsAsHead.map(teamTransformer), + teamsAsLeadId: user.teamsAsLead.map(teamTransformer) }; }; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 1a95a46542..79ca6c9c16 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -4,6 +4,7 @@ */ import { AvailabilityCreateArgs } from './design-review-types'; +import { Team } from './team-types'; export interface User { userId: string; @@ -64,6 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; + teamsAsHeadId: Team[]; + teamsAsLeadId: Team[]; } export interface UserSettings { From e68e5aebf1ee65c53a036026b1a7b37c14f35865 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 26 Oct 2024 10:29:03 -0400 Subject: [PATCH 080/320] set up teams task section --- .../src/transformers/auth-user.transformer.ts | 4 +- .../src/pages/HomePage/LeadHomePage.tsx | 12 ++- .../components/MyTeamsOverdueTasks.tsx | 62 ++++++++++++++++ .../HomePage/components/TeamTaskCard.tsx | 74 +++++++++++++++++++ src/shared/src/types/user-types.ts | 4 +- 5 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx create mode 100644 src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx diff --git a/src/backend/src/transformers/auth-user.transformer.ts b/src/backend/src/transformers/auth-user.transformer.ts index 57ab1585c4..06bab93740 100644 --- a/src/backend/src/transformers/auth-user.transformer.ts +++ b/src/backend/src/transformers/auth-user.transformer.ts @@ -28,8 +28,8 @@ const authenticatedUserTransformer = ( changeRequestsToReviewId: user.changeRequestsToReview.map((changeRequest) => changeRequest.crId), organizations: user.organizations.map((organization) => organization.organizationId), currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId), - teamsAsHeadId: user.teamsAsHead.map(teamTransformer), - teamsAsLeadId: user.teamsAsLead.map(teamTransformer) + teamsAsHead: user.teamsAsHead.map(teamTransformer), + teamsAsLead: user.teamsAsLead.map(teamTransformer) }; }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 76929deada..a8f97fb977 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -3,12 +3,13 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,13 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx new file mode 100644 index 0000000000..af50181a5c --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -0,0 +1,62 @@ +import React, { useEffect, useState } from 'react'; +import ScrollablePageBlock from './ScrollablePageBlock'; +import { AuthenticatedUser, Task, User } from 'shared'; +import { useUserTasks } from '../../../hooks/users.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import TeamTaskCard from './TeamTaskCard'; +import { Stack } from '@mui/material'; +import { daysOverdue } from '../../../utils/datetime.utils'; + +interface MyTeamsOverdueTasksProps { + user: AuthenticatedUser; +} + +interface IndividualTaskCardsProps { + member: User; + overdueTasks: Set; + setOverdueTasks: (overdueTasks: Set) => void; +} + +const IndividualTaskCard: React.FC = ({ member, overdueTasks, setOverdueTasks }) => { + const { data: tasks, isLoading, isError, error } = useUserTasks(member.userId); + + if (isLoading || !tasks) return ; + if (isError) return ; + + const individualOverdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); + setOverdueTasks(individualOverdueTasks); + return ( + + {[...individualOverdueTasks.difference(overdueTasks)].map((task, index) => ( + + ))} + + ); +}; + +const MyTeamsOverdueTasks: React.FC = ({ user }) => { + const [overdueTasks, setOverdueTasks] = useState>(new Set()); + const teamsAsHead = user.teamsAsHead ?? []; + const teamsAsLead = user.teamsAsLead ?? []; + const teamsAsLeadership = teamsAsHead.concat(teamsAsLead); + // converting to set for no duplicate members + const allMembers = new Set(teamsAsLeadership.map((team) => team.members).flat()); + + const handleOverdueTasks = (overdueTasks: Set) => { + setOverdueTasks((prevOverdueTasks) => { + const allOverdueTasks = new Set([...prevOverdueTasks, ...overdueTasks]); + return allOverdueTasks; + }); + }; + + return ( + + {[...allMembers].map((member) => ( + + ))} + + ); +}; + +export default MyTeamsOverdueTasks; diff --git a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx new file mode 100644 index 0000000000..7b2b00de29 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx @@ -0,0 +1,74 @@ +import { Box, Card, CardContent, Chip, Link, Stack, Typography } from '@mui/material'; +import { Link as RouterLink } from 'react-router-dom'; +import { useTheme } from '@mui/system'; +import React from 'react'; +import { Task, wbsPipe } from 'shared'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { useSingleProject } from '../../../hooks/projects.hooks'; +import { routes } from '../../../utils/routes'; +import { fullNamePipe } from '../../../utils/pipes'; +import PeopleAltIcon from '@mui/icons-material/PeopleAlt'; +import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; +import { taskPriorityColor } from '../../../utils/task.utils'; +import { formatDate } from '../../../utils/datetime.utils'; + +interface TeamTaskCardProps { + task: Task; + taskNumber: number; +} + +const TeamTaskCard: React.FC = ({ task, taskNumber }) => { + const theme = useTheme(); + const { data: project, isLoading, isError, error } = useSingleProject(task.wbsNum); + if (isLoading || !project) return ; + if (isError) return ; + + return ( + + + + + + Task #{taskNumber} - {task.title} + + + + {wbsPipe(task.wbsNum)} - {project.name} + + + + + {task.assignees.map(fullNamePipe).join(', ')} + + + + + } label={formatDate(new Date(task.deadline))} size="medium" /> + + + + + ); +}; + +export default TeamTaskCard; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 79ca6c9c16..2dc8fbb205 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -65,8 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; - teamsAsHeadId: Team[]; - teamsAsLeadId: Team[]; + teamsAsHead?: Team[]; + teamsAsLead?: Team[]; } export interface UserSettings { From b0a59b83936f3bac55aede5422e46a916bce9724 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 26 Oct 2024 17:49:18 -0400 Subject: [PATCH 081/320] fixed error checking and changed pageBlock to Card --- .../components/TeamWorkPackageDisplay.tsx | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 8caaa669e1..56677b2f31 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -1,17 +1,21 @@ import WorkPackageCard from './WorkPackageCard'; -import PageBlock from '../../../layouts/PageBlock'; import { wbsPipe } from '../../../utils/pipes'; import Box from '@mui/material/Box'; import { useAllTeams } from '../../../hooks/teams.hooks'; import { useCurrentUser } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; -import { useTheme } from '@mui/material'; +import { Card, CardContent, Typography, useTheme } from '@mui/material'; const TeamWorkPackageDisplay: React.FC = () => { const theme = useTheme(); const user = useCurrentUser(); const { isLoading, isError, data: teams, error } = useAllTeams(); + + if (isLoading || !teams) return ; + + if (isError) return ; + const myTeams = teams?.filter((team) => { return ( team.members.some((member) => member.userId === user.userId) || @@ -28,49 +32,45 @@ const TeamWorkPackageDisplay: React.FC = () => { }) .flat(2); - if (!workPackages) return ; - - if (isLoading || !teams) return ; - - if (isError) return ; - - const fullDisplay = ( - - {workPackages.length === 0 - ? `No work packages` - : workPackages.map((wp) => ( - - - - ))} - - ); - return ( - - {fullDisplay} + + + + + {`My Team's Work Packages (${workPackages.length})`} + + {workPackages.length === 0 + ? `No work packages` + : workPackages.map((wp) => ( + + + + ))} + + ); }; From 1ed554f727f15fd380deb9b0aebc708825f636ac Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 26 Oct 2024 18:07:54 -0400 Subject: [PATCH 082/320] changed flexwrap prop to boolean --- src/frontend/src/components/ChangeRequestRow.tsx | 4 ++-- .../pages/HomePage/components/UnreviewedChangeRequests.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestRow.tsx b/src/frontend/src/components/ChangeRequestRow.tsx index 6e6273594a..55522cb70f 100644 --- a/src/frontend/src/components/ChangeRequestRow.tsx +++ b/src/frontend/src/components/ChangeRequestRow.tsx @@ -12,7 +12,7 @@ interface ChangeRequestRowProps { title: string; changeRequests: ChangeRequest[]; noChangeRequestsMessage: string; - flexWrap?: string; + flexWrap?: boolean; } const ChangeRequestRow: React.FC = ({ title, changeRequests, noChangeRequestsMessage, flexWrap }) => { @@ -29,7 +29,7 @@ const ChangeRequestRow: React.FC = ({ title, changeReques sx={{ display: 'flex', flexDirection: 'row', - flexWrap: flexWrap ? flexWrap : 'wrap', + flexWrap: flexWrap ? 'wrap' : 'nowrap', overflow: 'auto', justifyContent: 'flex-start', '&::-webkit-scrollbar': { diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 7a1e6c5791..a2a1e15d8c 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -28,7 +28,7 @@ const UnreviewedChangeRequests: React.FC = () => { title="My Unreviewed Change Requests" changeRequests={crsToReview} noChangeRequestsMessage="No unreviewed change requests" - flexWrap="nowrap" + flexWrap={false} /> ); From 7d6c419177a8662aa67f9665b0b79ab04a33711a Mon Sep 17 00:00:00 2001 From: vdema Date: Sat, 26 Oct 2024 18:59:09 -0400 Subject: [PATCH 083/320] #2793: Fixed text wrapping in the buttons --- .../src/pages/HomePage/AdminHomePage.tsx | 2 + .../components/GuestOrganizationInfo.tsx | 45 ++++++++++--------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..85f63e1508 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 9f47396eeb..36a73bb593 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,4 +1,4 @@ -import { Box, Typography } from '@mui/material'; +import { Box, Card, Typography, useTheme } from '@mui/material'; import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; @@ -7,6 +7,7 @@ import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; import { useAllLinkTypes, useAllUsefulLinks } from '../../../hooks/projects.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; +import { Stack } from '@mui/system'; interface GuestOrganizationInfoButtonProps { href?: string; @@ -19,7 +20,7 @@ const NERGuestButton: React.FC = ({ href, butt - + {buttonText} @@ -28,6 +29,7 @@ const NERGuestButton: React.FC = ({ href, butt }; const GuestOrganizationInfo = () => { + const theme = useTheme(); const { data: organization, isLoading, isError, error } = useCurrentOrganization(); const { data: usefulLinks, @@ -44,31 +46,30 @@ const GuestOrganizationInfo = () => { if (usefulLinksIsError) return ; return ( - - - FinishLine by {organization?.name} - - {organization?.description} - - {usefulLinks.map((link) => ( - - ))} - - + + FinishLine by {organization?.name} + {organization?.description} + + {usefulLinks.map((link) => ( + + ))} + + + ); }; From bdf8f925d969da550856bb10ddacd19b1c5d21a3 Mon Sep 17 00:00:00 2001 From: vdema Date: Sat, 26 Oct 2024 18:59:44 -0400 Subject: [PATCH 084/320] #2793: Remove GuestOrganizationInfo from Admin Page --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 85f63e1508..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -26,7 +25,6 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - ); }; From 95cea410619de1e521c681a2f752d080f59f2712 Mon Sep 17 00:00:00 2001 From: vdema Date: Sat, 26 Oct 2024 19:01:30 -0400 Subject: [PATCH 085/320] #2793: Removed the Box import from GuestOrganizationInfo --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 36a73bb593..487fa27b62 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,4 +1,4 @@ -import { Box, Card, Typography, useTheme } from '@mui/material'; +import { Card, Typography, useTheme } from '@mui/material'; import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; From 1ff212fdfd3acc706b43cbf35518fdc0f14151cb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 14:28:08 -0400 Subject: [PATCH 086/320] #2801-fixed linting errors --- .../src/pages/HomePage/components/TeamWorkPackageDisplay.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index c7167cf0ed..8cc7a535b2 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -5,11 +5,9 @@ import { useAllTeams } from '../../../hooks/teams.hooks'; import { useCurrentUser } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; -import { Card, CardContent, Typography, useTheme } from '@mui/material'; import ScrollablePageBlock from './ScrollablePageBlock'; const TeamWorkPackageDisplay: React.FC = () => { - const theme = useTheme(); const user = useCurrentUser(); const { isLoading, isError, data: teams, error } = useAllTeams(); From 83666f03bd2ddcda6eb0bb195d534627d9317929 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 14:28:24 -0400 Subject: [PATCH 087/320] #2801-fixed linting errors --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 3f614f07ae..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; interface AdminHomePageProps { user: AuthenticatedUser; From 727aba52516ced2eb258ad2a9bbeb5e7c848b15a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 19:45:25 -0400 Subject: [PATCH 088/320] #2803-used scrollable page block --- src/frontend/src/components/ChangeRequestRow.tsx | 3 ++- .../components/UnreviewedChangeRequests.tsx | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestRow.tsx b/src/frontend/src/components/ChangeRequestRow.tsx index 6e6273594a..cef39bc3b9 100644 --- a/src/frontend/src/components/ChangeRequestRow.tsx +++ b/src/frontend/src/components/ChangeRequestRow.tsx @@ -42,7 +42,8 @@ const ChangeRequestRow: React.FC = ({ title, changeReques backgroundColor: theme.palette.divider, borderRadius: '20px', border: '6px solid transparent', - backgroundClip: 'content-box' + backgroundClip: 'content-box', + background: theme.palette.background.paper } }} data-testid={title + 'crRow'} diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 7a1e6c5791..739df52691 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -1,12 +1,12 @@ import { useAllWorkPackages } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; -import PageBlock from '../../../layouts/PageBlock'; import ErrorPage from '../../ErrorPage'; import { useCurrentUser } from '../../../hooks/users.hooks'; import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; import { useAllProjects } from '../../../hooks/projects.hooks'; import { getCRsToReview } from '../../../utils/change-request.utils'; import ChangeRequestRow from '../../../components/ChangeRequestRow'; +import ScrollablePageBlock from './ScrollablePageBlock'; const UnreviewedChangeRequests: React.FC = () => { const user = useCurrentUser(); @@ -16,21 +16,21 @@ const UnreviewedChangeRequests: React.FC = () => { if (crIsLoading || projectLoading || wpLoading || !changeRequests || !projects || !workPackages) return ; - if (crIsError) return ; - if (projectIsError) return ; - if (wpIsError) return ; + if (crIsError) return ; + if (projectIsError) return ; + if (wpIsError) return ; const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); return ( - + - + ); }; From c2eaaafb2722d98f0f3abeadd82de47c4ca6f41d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 19:58:11 -0400 Subject: [PATCH 089/320] #2793-removed other components on guest page --- src/frontend/src/pages/HomePage/GuestHomePage.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 7618f16fd4..81c5d15f3c 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -33,10 +33,6 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { - - - - ); }; From 19ec76a2f087158462873724eb2522c0b261b935 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 19:58:53 -0400 Subject: [PATCH 090/320] #2793-unused imports --- src/frontend/src/pages/HomePage/GuestHomePage.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 81c5d15f3c..77fe338093 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -4,10 +4,6 @@ */ import { Typography } from '@mui/material'; -import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; -import UsefulLinks from './components/UsefulLinks'; -import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; -import UpcomingDeadlines from './components/UpcomingDeadlines'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; From 4e5909756c007ba81b853fa4c0dc8bc800b30d7d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 27 Oct 2024 20:25:09 -0400 Subject: [PATCH 091/320] #2805-fixed format --- .../HomePage/components/MyTeamsOverdueTasks.tsx | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index af50181a5c..1884874633 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -18,7 +18,7 @@ interface IndividualTaskCardsProps { setOverdueTasks: (overdueTasks: Set) => void; } -const IndividualTaskCard: React.FC = ({ member, overdueTasks, setOverdueTasks }) => { +const IndividualTaskCards: React.FC = ({ member, overdueTasks, setOverdueTasks }) => { const { data: tasks, isLoading, isError, error } = useUserTasks(member.userId); if (isLoading || !tasks) return ; @@ -39,21 +39,13 @@ const MyTeamsOverdueTasks: React.FC = ({ user }) => { const [overdueTasks, setOverdueTasks] = useState>(new Set()); const teamsAsHead = user.teamsAsHead ?? []; const teamsAsLead = user.teamsAsLead ?? []; - const teamsAsLeadership = teamsAsHead.concat(teamsAsLead); + const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; // converting to set for no duplicate members const allMembers = new Set(teamsAsLeadership.map((team) => team.members).flat()); - - const handleOverdueTasks = (overdueTasks: Set) => { - setOverdueTasks((prevOverdueTasks) => { - const allOverdueTasks = new Set([...prevOverdueTasks, ...overdueTasks]); - return allOverdueTasks; - }); - }; - return ( {[...allMembers].map((member) => ( - + ))} ); From 1d66403cb7b337ebb63c18c1bd6424a8795635ff Mon Sep 17 00:00:00 2001 From: vdema Date: Mon, 28 Oct 2024 17:53:09 -0400 Subject: [PATCH 092/320] #2793: Fixed icons and other small fixes --- .../components/GuestOrganizationInfo.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 487fa27b62..603c7b8d86 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -3,7 +3,7 @@ import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; import { NERButton } from '../../../components/NERButton'; -import InfoRoundedIcon from '@mui/icons-material/InfoRounded'; +import * as Icons from '@mui/icons-material'; import { useAllLinkTypes, useAllUsefulLinks } from '../../../hooks/projects.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; @@ -15,12 +15,14 @@ interface GuestOrganizationInfoButtonProps { iconName: string; } -const NERGuestButton: React.FC = ({ href, buttonText }) => { +const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { + const IconComponent = Icons[iconName] || Icons['Info']; + return ( - - - + + + {buttonText} @@ -50,13 +52,13 @@ const GuestOrganizationInfo = () => { sx={{ padding: 2, bgcolor: theme.palette.background.paper, - borderRadius: '1rem', + borderRadius: '1', marginTop: 5 }} variant="outlined" > - FinishLine by {organization?.name} + {organization?.name} {organization?.description} {usefulLinks.map((link) => ( From f2d43b1503e40900f9d756bb6c472ed05659e234 Mon Sep 17 00:00:00 2001 From: vdema Date: Mon, 28 Oct 2024 18:11:47 -0400 Subject: [PATCH 093/320] #2793: Fixed Icon rendering --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 603c7b8d86..1b57747bcd 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -16,7 +16,7 @@ interface GuestOrganizationInfoButtonProps { } const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { - const IconComponent = Icons[iconName] || Icons['Info']; + const IconComponent = Icons[iconName as keyof typeof Icons] || Icons['Info']; return ( From c01f7a9b803a0766053f0d82477bc6ba1a97ef65 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Mon, 28 Oct 2024 21:32:20 -0400 Subject: [PATCH 094/320] displaying team name --- .vscode/launch.json | 15 +++++++++++++++ .../src/services/organizations.services.ts | 5 +++-- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 ++ .../HomePage/components/FeaturedProjects.tsx | 3 +-- .../HomePage/components/FeaturedProjectsCard.tsx | 2 +- 5 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..2ba986f6f1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 463ea02558..c4ce91668b 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -9,6 +9,7 @@ import { getLinkQueryArgs } from '../prisma-query-args/links.query-args'; import { uploadFile } from '../utils/google-integration.utils'; import { getProjects } from '../utils/projects.utils'; import { getProjectQueryArgs } from '../prisma-query-args/projects.query-args'; +import projectTransformer from '../transformers/projects.transformer'; export default class OrganizationsService { /** @@ -265,13 +266,13 @@ export default class OrganizationsService { static async getOrganizationFeaturedProjects(organizationId: string) { const organization = await prisma.organization.findUnique({ where: { organizationId }, - include: { featuredProjects: true } + include: { featuredProjects: getProjectQueryArgs(organizationId) } }); if (!organization) { throw new NotFoundException('Organization', organizationId); } - return organization.featuredProjects; + return organization.featuredProjects.map(projectTransformer); } } diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..ce630a83b1 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import FeaturedProjects from './components/FeaturedProjects'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index cdfa8658a5..221dfde359 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -46,8 +46,7 @@ const FeaturedProjects: React.FC = () => { {featuredProjects.length === 0 ? ( No Featured Projects ) : ( - <> - //featuredProjects.map((p) => ) + featuredProjects.map((p) => ) )} diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx index 5cb3844451..92962a7bcb 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx @@ -29,7 +29,7 @@ const FeaturedProjectsCard: React.FC = ({ project }) => { component={RouterLink} to={`${routes.PROJECTS}/${projectWbsPipe(project.wbsNum)}`} > - {projectWbsPipe(project.wbsNum)} - {project.teams} + {projectWbsPipe(project.wbsNum)} - {project.teams.map((project) => project.teamName)} From 0f4c6b4f5747764b410480f4a88c9562c03f66a7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 28 Oct 2024 22:13:14 -0400 Subject: [PATCH 095/320] #2821-getting all overdue work packages --- .../src/transformers/auth-user.transformer.ts | 4 +- .../src/pages/HomePage/AdminHomePage.tsx | 2 + .../src/pages/HomePage/LeadHomePage.tsx | 2 + .../components/OverdueWorkPackages.tsx | 57 +++++++++++++++++++ src/shared/src/types/user-types.ts | 4 +- 5 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx diff --git a/src/backend/src/transformers/auth-user.transformer.ts b/src/backend/src/transformers/auth-user.transformer.ts index 57ab1585c4..06bab93740 100644 --- a/src/backend/src/transformers/auth-user.transformer.ts +++ b/src/backend/src/transformers/auth-user.transformer.ts @@ -28,8 +28,8 @@ const authenticatedUserTransformer = ( changeRequestsToReviewId: user.changeRequestsToReview.map((changeRequest) => changeRequest.crId), organizations: user.organizations.map((organization) => organization.organizationId), currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId), - teamsAsHeadId: user.teamsAsHead.map(teamTransformer), - teamsAsLeadId: user.teamsAsLead.map(teamTransformer) + teamsAsHead: user.teamsAsHead.map(teamTransformer), + teamsAsLead: user.teamsAsLead.map(teamTransformer) }; }; diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..3b6ce04523 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import OverdueWorkPackages from './components/OverdueWorkPackages'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 76929deada..a0fd09864a 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import OverdueWorkPackages from './components/OverdueWorkPackages'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx new file mode 100644 index 0000000000..0669d99ea0 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx @@ -0,0 +1,57 @@ +import React from 'react'; +import { AuthenticatedUser, isAdmin, Team, WorkPackage } from 'shared'; +import ScrollablePageBlock from './ScrollablePageBlock'; +import { Box, Stack, useTheme } from '@mui/material'; +import WorkPackageCard from './WorkPackageCard'; +import { useAllWorkPackages, useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { daysOverdue } from '../../../utils/datetime.utils'; + +interface OverdueWorkPackagesViewProps { + workPackages: WorkPackage[]; +} + +interface OverdueWorkPackagesProps { + user: AuthenticatedUser; +} + +const getAllWbsNumFromTeams = (teams: Team[]) => { + const projects = teams.map((team) => team.projects).flat(); + const workPackages = projects.map((project) => project.workPackages).flat(); + return workPackages.map((wp) => wp.wbsNum); +}; + +const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { + return ( + + + {workPackages.map((wp) => ( + + ))} + + + ); +}; + +const OverdueWorkPackages: React.FC = ({ user }) => { + const teamsAsLeadership = [...user.teamsAsHead, ...user.teamsAsLead]; + const { data: allWps, isLoading: isLoadingAllWps, isError: isErrorAllWps, error: errorAllWps } = useAllWorkPackages(); + const { + data: teamWps, + isLoading: isLoadingTeamWps, + isError: isErrorTeamWps, + error: errorTeamWps + } = useGetManyWorkPackages(getAllWbsNumFromTeams(teamsAsLeadership)); + + if (isLoadingAllWps || isLoadingTeamWps || !allWps || !teamWps) return ; + if (isErrorAllWps) return ; + if (isErrorTeamWps) return ; + + const displayedWps = isAdmin(user.role) ? allWps : teamWps; + const overdueWps = displayedWps.filter((wp) => daysOverdue(wp.endDate) > 0); + + return ; +}; + +export default OverdueWorkPackages; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 79ca6c9c16..80d16f2537 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -65,8 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; - teamsAsHeadId: Team[]; - teamsAsLeadId: Team[]; + teamsAsHead: Team[]; + teamsAsLead: Team[]; } export interface UserSettings { From 232f6d4edd448d0f20856f95ae3959c79d778371 Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 29 Oct 2024 00:17:28 -0400 Subject: [PATCH 096/320] #2793: Fixed the icon --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 1b57747bcd..3859ce911e 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,4 +1,4 @@ -import { Card, Typography, useTheme } from '@mui/material'; +import { Card, Icon, SvgIcon, Typography, useTheme } from '@mui/material'; import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; @@ -16,12 +16,11 @@ interface GuestOrganizationInfoButtonProps { } const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { - const IconComponent = Icons[iconName as keyof typeof Icons] || Icons['Info']; return ( - + {iconName} {buttonText} From d11a6a976d9fdb27dbe98073e1033df49c24444c Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 29 Oct 2024 00:23:06 -0400 Subject: [PATCH 097/320] #2793: Removed unnecessary imports --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 3859ce911e..773e278368 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,9 +1,8 @@ -import { Card, Icon, SvgIcon, Typography, useTheme } from '@mui/material'; +import { Card, Icon, Typography, useTheme } from '@mui/material'; import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; import { NERButton } from '../../../components/NERButton'; -import * as Icons from '@mui/icons-material'; import { useAllLinkTypes, useAllUsefulLinks } from '../../../hooks/projects.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; @@ -16,7 +15,6 @@ interface GuestOrganizationInfoButtonProps { } const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { - return ( From 2ada8efffd49111f57980ed58690bd246c870c20 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 09:56:05 -0400 Subject: [PATCH 098/320] #2793-check for undefined org --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 773e278368..55a63f689a 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -38,7 +38,7 @@ const GuestOrganizationInfo = () => { } = useAllUsefulLinks(); const { data: linkTypes, isLoading: linkTypesIsLoading } = useAllLinkTypes(); - if (isLoading) return ; + if (isLoading || !organization) return ; if (isError) return ; if (!usefulLinks || usefulLinksIsLoading || !linkTypes || linkTypesIsLoading) return ; @@ -55,8 +55,8 @@ const GuestOrganizationInfo = () => { variant="outlined" > - {organization?.name} - {organization?.description} + {organization.name} + {organization.description} {usefulLinks.map((link) => ( Date: Tue, 29 Oct 2024 13:47:19 -0400 Subject: [PATCH 099/320] Set up get many user tasks endpoint --- .../src/controllers/users.controllers.ts | 11 ++++++++++ src/backend/src/routes/users.routes.ts | 7 +++++++ src/backend/src/services/users.services.ts | 9 +++++++++ src/backend/tests/unmocked/users.test.ts | 20 ++++++++++++++++++- 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index e20aea4626..eb5d19e602 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -179,4 +179,15 @@ export default class UsersController { return next(error); } } + + static async getManyUserTasks(req: Request, res: Response, next: NextFunction) { + try { + const { userIds } = req.body; + + const tasks = await UsersService.getManyUserTasks(userIds, req.organization); + return res.status(200).json(tasks); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 1ba26c9452..2f95201f6f 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -47,5 +47,12 @@ userRouter.post( userRouter.get('/:userId/secure-settings', UsersController.getUserSecureSettings); userRouter.get('/:userId/schedule-settings', UsersController.getUserScheduleSettings); userRouter.get('/:userId/tasks', UsersController.getUserTasks); +userRouter.post( + '/tasks/get-many', + body('userIds').isArray(), + nonEmptyString(body('userIds.*')), + validateInputs, + UsersController.getManyUserTasks +); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index a6348a04af..8066b9b8dd 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -556,4 +556,13 @@ export default class UsersService { return requestedUser.assignedTasks.map(taskTransformer); } + + static async getManyUserTasks(userIds: string[], organization: Organization) { + const tasksPromises = userIds.map(async (userId) => { + return UsersService.getUserTasks(userId, organization); + }); + + const resolvedTasks = await Promise.all(tasksPromises); + return resolvedTasks; + } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 9bac5d2404..2d1741cec9 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -1,6 +1,6 @@ import { Organization } from '@prisma/client'; import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; -import { batmanAppAdmin } from '../test-data/users.test-data'; +import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; @@ -31,4 +31,22 @@ describe('User Tests', () => { expect(userTasks).toStrictEqual([task]); }); }); + + describe('Get Many Users Tasks', () => { + it('fails on invalid user id', async () => { + await expect(async () => await UsersService.getManyUserTasks(['1'], organization)).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + it("Succeeds and gets all user' tasks in the list", async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const testClarkKent = await createTestUser(supermanAdmin, orgId); + const { task: batmanTask } = await createTestTask(testBatman, organization); + const { task: clarkKentTask } = await createTestTask(testClarkKent, organization); + const userTasks = await UsersService.getManyUserTasks([testBatman.userId, testClarkKent.userId], organization); + + expect(userTasks).toStrictEqual([batmanTask, clarkKentTask]); + }); + }); }); From c20d1c9bb029c46f9b61e237b60ee4865d23e518 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 13:54:28 -0400 Subject: [PATCH 100/320] flattened tasks --- src/backend/src/controllers/users.controllers.ts | 3 ++- src/backend/src/services/users.services.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index eb5d19e602..5cfa740368 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -1,6 +1,7 @@ import { NextFunction, Request, Response } from 'express'; import UsersService from '../services/users.services'; import { AccessDeniedException } from '../utils/errors.utils'; +import { Task } from 'shared'; export default class UsersController { static async getAllUsers(_req: Request, res: Response, next: NextFunction) { @@ -184,7 +185,7 @@ export default class UsersController { try { const { userIds } = req.body; - const tasks = await UsersService.getManyUserTasks(userIds, req.organization); + const tasks: Task[] = await UsersService.getManyUserTasks(userIds, req.organization); return res.status(200).json(tasks); } catch (error: unknown) { return next(error); diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 8066b9b8dd..f97e2fc820 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -563,6 +563,6 @@ export default class UsersService { }); const resolvedTasks = await Promise.all(tasksPromises); - return resolvedTasks; + return resolvedTasks.flat(); } } From be30762e461a54cf0f98fdffcb91f1bf325390ad Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 14:02:38 -0400 Subject: [PATCH 101/320] #2805-added use many user tasks hook --- src/frontend/src/apis/users.api.ts | 10 ++++++++++ src/frontend/src/hooks/users.hooks.ts | 10 +++++++++- src/frontend/src/utils/urls.ts | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index ad61536ece..afa5ea00f6 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -149,3 +149,13 @@ export const getUserTasks = (id: string) => { transformResponse: (data) => JSON.parse(data).map(taskTransformer) }); }; + +export const getManyUserTasks = (userIds: string[]) => { + return axios.post( + apiUrls.manyUserTasks(), + { userIds }, + { + transformResponse: (data) => JSON.parse(data).map(taskTransformer) + } + ); +}; diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index a967d29d41..96db083a9b 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -18,7 +18,8 @@ import { getUserSecureSettings, getUserScheduleSettings, updateUserScheduleSettings, - getUserTasks + getUserTasks, + getManyUserTasks } from '../apis/users.api'; import { User, @@ -247,3 +248,10 @@ export const useUserTasks = (userId: string) => { return data; }); }; + +export const useManyUserTasks = (userIds: string[]) => { + return useQuery(['users', userIds, 'tasks'], async () => { + const { data } = await getManyUserTasks(userIds); + return data; + }); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index a890cd6d74..ee12d7ea2d 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -25,6 +25,7 @@ const userSecureSettings = (id: string) => `${usersById(id)}/secure-settings`; const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings`; const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; +const manyUserTasks = () => `${users()}/tasks/get-many`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -207,6 +208,7 @@ export const apiUrls = { userScheduleSettings, userScheduleSettingsSet, userTasks, + manyUserTasks, projects, allProjects, From c9e1af9141bd63cbe21b21110629f7c54c011a89 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 14:15:16 -0400 Subject: [PATCH 102/320] #2805-refactored team's overdue tasks section --- .../components/MyTeamsOverdueTasks.tsx | 40 ++++++------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index 1884874633..048d21085d 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react'; import ScrollablePageBlock from './ScrollablePageBlock'; import { AuthenticatedUser, Task, User } from 'shared'; -import { useUserTasks } from '../../../hooks/users.hooks'; +import { useManyUserTasks, useUserTasks } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import TeamTaskCard from './TeamTaskCard'; @@ -12,41 +12,25 @@ interface MyTeamsOverdueTasksProps { user: AuthenticatedUser; } -interface IndividualTaskCardsProps { - member: User; - overdueTasks: Set; - setOverdueTasks: (overdueTasks: Set) => void; -} - -const IndividualTaskCards: React.FC = ({ member, overdueTasks, setOverdueTasks }) => { - const { data: tasks, isLoading, isError, error } = useUserTasks(member.userId); - - if (isLoading || !tasks) return ; - if (isError) return ; - - const individualOverdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); - setOverdueTasks(individualOverdueTasks); - return ( - - {[...individualOverdueTasks.difference(overdueTasks)].map((task, index) => ( - - ))} - - ); -}; - const MyTeamsOverdueTasks: React.FC = ({ user }) => { - const [overdueTasks, setOverdueTasks] = useState>(new Set()); const teamsAsHead = user.teamsAsHead ?? []; const teamsAsLead = user.teamsAsLead ?? []; const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; // converting to set for no duplicate members const allMembers = new Set(teamsAsLeadership.map((team) => team.members).flat()); + const { data: tasks, isLoading, isError, error } = useManyUserTasks([...allMembers].map((member) => member.userId)); + + if (isLoading || !tasks) return ; + if (isError) return ; + + const overdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); return ( - {[...allMembers].map((member) => ( - - ))} + + {[...overdueTasks].map((task, index) => ( + + ))} + ); }; From 39615d5d11919cf6b4928c8fefbd5f170152c6fb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 13:47:19 -0400 Subject: [PATCH 103/320] #2897 Set up get many user tasks endpoint --- .../src/controllers/users.controllers.ts | 11 ++++++++++ src/backend/src/routes/users.routes.ts | 7 +++++++ src/backend/src/services/users.services.ts | 9 +++++++++ src/backend/tests/unmocked/users.test.ts | 20 ++++++++++++++++++- 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index e20aea4626..eb5d19e602 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -179,4 +179,15 @@ export default class UsersController { return next(error); } } + + static async getManyUserTasks(req: Request, res: Response, next: NextFunction) { + try { + const { userIds } = req.body; + + const tasks = await UsersService.getManyUserTasks(userIds, req.organization); + return res.status(200).json(tasks); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 1ba26c9452..2f95201f6f 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -47,5 +47,12 @@ userRouter.post( userRouter.get('/:userId/secure-settings', UsersController.getUserSecureSettings); userRouter.get('/:userId/schedule-settings', UsersController.getUserScheduleSettings); userRouter.get('/:userId/tasks', UsersController.getUserTasks); +userRouter.post( + '/tasks/get-many', + body('userIds').isArray(), + nonEmptyString(body('userIds.*')), + validateInputs, + UsersController.getManyUserTasks +); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index a6348a04af..8066b9b8dd 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -556,4 +556,13 @@ export default class UsersService { return requestedUser.assignedTasks.map(taskTransformer); } + + static async getManyUserTasks(userIds: string[], organization: Organization) { + const tasksPromises = userIds.map(async (userId) => { + return UsersService.getUserTasks(userId, organization); + }); + + const resolvedTasks = await Promise.all(tasksPromises); + return resolvedTasks; + } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 9bac5d2404..2d1741cec9 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -1,6 +1,6 @@ import { Organization } from '@prisma/client'; import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; -import { batmanAppAdmin } from '../test-data/users.test-data'; +import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; @@ -31,4 +31,22 @@ describe('User Tests', () => { expect(userTasks).toStrictEqual([task]); }); }); + + describe('Get Many Users Tasks', () => { + it('fails on invalid user id', async () => { + await expect(async () => await UsersService.getManyUserTasks(['1'], organization)).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + it("Succeeds and gets all user' tasks in the list", async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const testClarkKent = await createTestUser(supermanAdmin, orgId); + const { task: batmanTask } = await createTestTask(testBatman, organization); + const { task: clarkKentTask } = await createTestTask(testClarkKent, organization); + const userTasks = await UsersService.getManyUserTasks([testBatman.userId, testClarkKent.userId], organization); + + expect(userTasks).toStrictEqual([batmanTask, clarkKentTask]); + }); + }); }); From b7f1864f06a048f74f182083100811706a75ff7f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 13:54:28 -0400 Subject: [PATCH 104/320] #2897-flattened tasks --- src/backend/src/controllers/users.controllers.ts | 3 ++- src/backend/src/services/users.services.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index eb5d19e602..5cfa740368 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -1,6 +1,7 @@ import { NextFunction, Request, Response } from 'express'; import UsersService from '../services/users.services'; import { AccessDeniedException } from '../utils/errors.utils'; +import { Task } from 'shared'; export default class UsersController { static async getAllUsers(_req: Request, res: Response, next: NextFunction) { @@ -184,7 +185,7 @@ export default class UsersController { try { const { userIds } = req.body; - const tasks = await UsersService.getManyUserTasks(userIds, req.organization); + const tasks: Task[] = await UsersService.getManyUserTasks(userIds, req.organization); return res.status(200).json(tasks); } catch (error: unknown) { return next(error); diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 8066b9b8dd..f97e2fc820 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -563,6 +563,6 @@ export default class UsersService { }); const resolvedTasks = await Promise.all(tasksPromises); - return resolvedTasks; + return resolvedTasks.flat(); } } From 3fb1158c47b884f55de6a213856681af7e550dea Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 16:44:19 -0400 Subject: [PATCH 105/320] #2897-added java docs and fixed test --- src/backend/src/services/users.services.ts | 6 ++++++ src/backend/tests/unmocked/users.test.ts | 25 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index f97e2fc820..4c7d2b4007 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -557,6 +557,12 @@ export default class UsersService { return requestedUser.assignedTasks.map(taskTransformer); } + /** + * Get all tasks from a list of userIds + * @param userIds list of users to get the tasks from + * @param organization the users' organization + * @returns a list of tasks of the given users + */ static async getManyUserTasks(userIds: string[], organization: Organization) { const tasksPromises = userIds.map(async (userId) => { return UsersService.getUserTasks(userId, organization); diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 2d1741cec9..50a73e9e3d 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,6 +3,7 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; +import TeamsService from '../../src/services/teams.services'; describe('User Tests', () => { let orgId: string; @@ -25,7 +26,16 @@ describe('User Tests', () => { it("Succeeds and gets user's assigned tasks", async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); - const { task } = await createTestTask(testBatman, organization); + const testTeam = await TeamsService.createTeam( + testBatman, + 'Test Task team', + testBatman.userId, + 'Test', + '', + false, + organization + ); + const { task } = await createTestTask(testBatman, testTeam, organization); const userTasks = await UsersService.getUserTasks(testBatman.userId, organization); expect(userTasks).toStrictEqual([task]); @@ -42,8 +52,17 @@ describe('User Tests', () => { it("Succeeds and gets all user' tasks in the list", async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); const testClarkKent = await createTestUser(supermanAdmin, orgId); - const { task: batmanTask } = await createTestTask(testBatman, organization); - const { task: clarkKentTask } = await createTestTask(testClarkKent, organization); + const testTeam = await TeamsService.createTeam( + testBatman, + 'Many Tasks Test team', + testBatman.userId, + 'Test', + '', + false, + organization + ); + const { task: batmanTask } = await createTestTask(testBatman, testTeam, organization); + const { task: clarkKentTask } = await createTestTask(testClarkKent, testTeam, organization); const userTasks = await UsersService.getManyUserTasks([testBatman.userId, testClarkKent.userId], organization); expect(userTasks).toStrictEqual([batmanTask, clarkKentTask]); From ece039e958b473988280fdfac5d653c495a5d446 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 16:46:37 -0400 Subject: [PATCH 106/320] #2768-added javadocs --- src/frontend/src/hooks/organizations.hooks.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 6002f1ba41..852da2ba9f 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -37,6 +37,10 @@ export const useOrganization = () => { return context; }; +/** + * Custom React Hook to set the description of an organization + * @returns the updated organization + */ export const useSetOrganizationDescription = () => { const queryClient = useQueryClient(); return useMutation( From 01c9e7ad604fd3f0a677cba8624ca839106482f4 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Tue, 29 Oct 2024 20:52:37 -0400 Subject: [PATCH 107/320] linting --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index b288a89e5e..aae181a953 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import FeaturedProjects from './components/FeaturedProjects' import MyTasks from './components/MyTasks'; interface MemberHomePageProps { From a5502dab8f7ef40c113c55c74eb31913e7a31e29 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 29 Oct 2024 21:18:47 -0400 Subject: [PATCH 108/320] using scrollable page block --- .../src/components/ChangeRequestRow.tsx | 5 +-- .../components/ScrollablePageBlock.tsx | 39 ++++++++++++------- .../components/UnreviewedChangeRequests.tsx | 17 ++++---- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestRow.tsx b/src/frontend/src/components/ChangeRequestRow.tsx index 09aa3046e0..5edaaf3b11 100644 --- a/src/frontend/src/components/ChangeRequestRow.tsx +++ b/src/frontend/src/components/ChangeRequestRow.tsx @@ -12,10 +12,9 @@ interface ChangeRequestRowProps { title: string; changeRequests: ChangeRequest[]; noChangeRequestsMessage: string; - flexWrap?: boolean; } -const ChangeRequestRow: React.FC = ({ title, changeRequests, noChangeRequestsMessage, flexWrap }) => { +const ChangeRequestRow: React.FC = ({ title, changeRequests, noChangeRequestsMessage }) => { const theme = useTheme(); return ( @@ -29,7 +28,7 @@ const ChangeRequestRow: React.FC = ({ title, changeReques sx={{ display: 'flex', flexDirection: 'row', - flexWrap: flexWrap ? 'wrap' : 'nowrap', + flexWrap: 'nowrap', overflow: 'auto', justifyContent: 'flex-start', '&::-webkit-scrollbar': { diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index efed4ebcd3..36a733cfaf 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,30 +1,19 @@ import { Card, CardContent, Typography, useTheme } from '@mui/material'; import React from 'react'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; +import { Stack } from '@mui/system'; interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; + horizontal?: boolean; } -const ScrollablePageBlock: React.FC = ({ children, title }) => { +const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { const theme = useTheme(); return ( = ({ children, tit {title} )} - {children} + + {children} + ); diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 8e64f8ff4e..4f021908b3 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -5,8 +5,9 @@ import { useCurrentUser } from '../../../hooks/users.hooks'; import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; import { useAllProjects } from '../../../hooks/projects.hooks'; import { getCRsToReview } from '../../../utils/change-request.utils'; -import ChangeRequestRow from '../../../components/ChangeRequestRow'; import ScrollablePageBlock from './ScrollablePageBlock'; +import { ChangeRequest } from 'shared'; +import ChangeRequestDetailCard from '../../../components/ChangeRequestDetailCard'; const UnreviewedChangeRequests: React.FC = () => { const user = useCurrentUser(); @@ -22,14 +23,14 @@ const UnreviewedChangeRequests: React.FC = () => { const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); + const title = + crsToReview.length === 0 ? 'No unreviewed change requests' : `My Unreviewed Change Requests (${crsToReview.length})`; + return ( - - + + {crsToReview.map((cr: ChangeRequest) => ( + + ))} ); }; From 411e47b35a5f9113061053f96d07b20725f3fe22 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 22:14:21 -0400 Subject: [PATCH 109/320] #2897-fixed test --- src/backend/tests/unmocked/users.test.ts | 30 ++++-------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 50a73e9e3d..fd24cfe99f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,7 +3,6 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; -import TeamsService from '../../src/services/teams.services'; describe('User Tests', () => { let orgId: string; @@ -26,16 +25,8 @@ describe('User Tests', () => { it("Succeeds and gets user's assigned tasks", async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); - const testTeam = await TeamsService.createTeam( - testBatman, - 'Test Task team', - testBatman.userId, - 'Test', - '', - false, - organization - ); - const { task } = await createTestTask(testBatman, testTeam, organization); + + const { task } = await createTestTask(testBatman, organization); const userTasks = await UsersService.getUserTasks(testBatman.userId, organization); expect(userTasks).toStrictEqual([task]); @@ -51,21 +42,10 @@ describe('User Tests', () => { it("Succeeds and gets all user' tasks in the list", async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); - const testClarkKent = await createTestUser(supermanAdmin, orgId); - const testTeam = await TeamsService.createTeam( - testBatman, - 'Many Tasks Test team', - testBatman.userId, - 'Test', - '', - false, - organization - ); - const { task: batmanTask } = await createTestTask(testBatman, testTeam, organization); - const { task: clarkKentTask } = await createTestTask(testClarkKent, testTeam, organization); - const userTasks = await UsersService.getManyUserTasks([testBatman.userId, testClarkKent.userId], organization); + const { task: batmanTask } = await createTestTask(testBatman, organization); + const userTasks = await UsersService.getManyUserTasks([testBatman.userId, testBatman.userId], organization); - expect(userTasks).toStrictEqual([batmanTask, clarkKentTask]); + expect(userTasks).toStrictEqual([batmanTask, batmanTask]); }); }); }); From d347a3e0c7dc74f57f2621031eea564e2633e8f7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 29 Oct 2024 22:20:16 -0400 Subject: [PATCH 110/320] #2897-unused import --- src/backend/tests/unmocked/users.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index fd24cfe99f..c13a0c857f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -1,6 +1,6 @@ import { Organization } from '@prisma/client'; import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; -import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; +import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; From cf98f8f85ae2775eebc6f2ce4cf5f069783d01de Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 31 Oct 2024 11:29:50 -0400 Subject: [PATCH 111/320] #2797-fixed test issues --- src/backend/tests/unmocked/organization.test.ts | 2 +- src/frontend/src/apis/organizations.api.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index bdd0eb566a..0ddf67b2f6 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -200,7 +200,7 @@ describe('Organization Tests', () => { expect(projects).not.toBeNull(); expect(projects.length).toBe(1); - expect(projects[0].projectId).toBe(testProject1.projectId); + expect(projects[0].id).toBe(testProject1.organizationId); }); }); diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index ae77ea9f5d..e3d89c2bca 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -12,8 +12,8 @@ export const getCurrentOrganization = async () => { }); }; -export const getCurrentFeaturedProject =async () => { +export const getCurrentFeaturedProject = async () => { return axios.get(apiUrls.organizationsFeaturedProjects(), { transformResponse: (data) => JSON.parse(data) - }) -} + }); +}; From c6925d996f884fe732dbcd8e6c7c56f5b9768eea Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 31 Oct 2024 12:20:09 -0400 Subject: [PATCH 112/320] updated to just scrollable page block --- .../components/ScrollablePageBlock.tsx | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index efed4ebcd3..36a733cfaf 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,30 +1,19 @@ import { Card, CardContent, Typography, useTheme } from '@mui/material'; import React from 'react'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; +import { Stack } from '@mui/system'; interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; + horizontal?: boolean; } -const ScrollablePageBlock: React.FC = ({ children, title }) => { +const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { const theme = useTheme(); return ( = ({ children, tit {title} )} - {children} + + {children} + ); From 53efdd5a5c1092be1261ef85b50eba607c821708 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 31 Oct 2024 15:12:15 -0400 Subject: [PATCH 113/320] #2797-moved to guest home page --- .../src/pages/HomePage/AdminHomePage.tsx | 2 - .../src/pages/HomePage/GuestHomePage.tsx | 10 +---- .../HomePage/components/FeaturedProjects.tsx | 43 ++++--------------- 3 files changed, 11 insertions(+), 44 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index ce630a83b1..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import FeaturedProjects from './components/FeaturedProjects'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -26,7 +25,6 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - ); }; diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 2a6921c13c..236389e2de 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -4,16 +4,13 @@ */ import { Typography } from '@mui/material'; -import OverdueWorkPackageAlerts from './components/OverdueWorkPackageAlerts'; -import UsefulLinks from './components/UsefulLinks'; -import WorkPackagesByTimelineStatus from './components/WorkPackagesByTimelineStatus'; -import UpcomingDeadlines from './components/UpcomingDeadlines'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; +import FeaturedProjects from './components/FeaturedProjects'; interface GuestHomePageProps { user: AuthenticatedUser; @@ -31,10 +28,7 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { Welcome, {user.firstName}! - - - - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index 221dfde359..04994978ac 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -3,53 +3,28 @@ * See the LICENSE file in the repository root folder for details. */ -import PageBlock from '../../../layouts/PageBlock'; import FeaturedProjectsCard from './FeaturedProjectsCard'; import { useFeaturedProjects } from '../../../hooks/organizations.hooks'; -import { Typography, useTheme } from '@mui/material'; +import { Typography } from '@mui/material'; import ErrorPage from '../../ErrorPage'; -import Box from '@mui/material/Box'; import { wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; +import ScrollablePageBlock from './ScrollablePageBlock'; const FeaturedProjects: React.FC = () => { const { data: featuredProjects, isLoading, isError, error } = useFeaturedProjects(); - const theme = useTheme(); if (isLoading || !featuredProjects) return ; if (isError) return ; - console.log(featuredProjects[0]); const fullDisplay = ( - - - {featuredProjects.length === 0 ? ( - No Featured Projects - ) : ( - featuredProjects.map((p) => ) - )} - - + + {featuredProjects.length === 0 ? ( + No Featured Projects + ) : ( + featuredProjects.map((p) => ) + )} + ); return fullDisplay; From 31aee48f91bc81ea24dc7d24decd9162bfb0e66c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 3 Nov 2024 12:44:58 -0500 Subject: [PATCH 114/320] #2805-created my team's overdue tasks --- .../src/pages/HomePage/AdminHomePage.tsx | 1 + .../components/MyTeamsOverdueTasks.tsx | 41 +++++++--- .../components/ScrollablePageBlock.tsx | 78 ++++++++++++------- 3 files changed, 85 insertions(+), 35 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..b53ab7251a 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import MyTasks from './components/MyTasks'; interface AdminHomePageProps { user: AuthenticatedUser; diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index 048d21085d..3036d1d7aa 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -1,17 +1,39 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import ScrollablePageBlock from './ScrollablePageBlock'; -import { AuthenticatedUser, Task, User } from 'shared'; -import { useManyUserTasks, useUserTasks } from '../../../hooks/users.hooks'; +import { AuthenticatedUser } from 'shared'; +import { useManyUserTasks } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import TeamTaskCard from './TeamTaskCard'; -import { Stack } from '@mui/material'; +import { Box } from '@mui/material'; import { daysOverdue } from '../../../utils/datetime.utils'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; interface MyTeamsOverdueTasksProps { user: AuthenticatedUser; } +const NoOverudeTeamTaskDisplay: React.FC = () => { + return ( + + } + heading={"You're team is all caught up!"} + message={"You're team has no overdue tasks!"} + /> + + ); +}; + const MyTeamsOverdueTasks: React.FC = ({ user }) => { const teamsAsHead = user.teamsAsHead ?? []; const teamsAsLead = user.teamsAsLead ?? []; @@ -24,13 +46,14 @@ const MyTeamsOverdueTasks: React.FC = ({ user }) => { if (isError) return ; const overdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); + return ( - - {[...overdueTasks].map((task, index) => ( - - ))} - + {overdueTasks.size === 0 ? ( + + ) : ( + [...overdueTasks].map((task, index) => ) + )} ); }; diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 36a733cfaf..c98efc153a 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,20 +1,62 @@ -import { Card, CardContent, Typography, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import React from 'react'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; -import { Stack } from '@mui/system'; interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; horizontal?: boolean; + height?: number; } -const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { +const HorizontalScrollablePageBlock: React.FC = ({ children }) => { + const theme = useTheme(); + return ( + + {children} + + ); +}; + +const ScrollablePageBlock: React.FC = ({ children, title, horizontal, height }) => { const theme = useTheme(); return ( = ({ children, tit {title} )} - - {children} - + + {horizontal ? ( + {children} + ) : ( + {children} + )} ); }; - export default ScrollablePageBlock; From 814d5978fc7196e66a153ebc4dcdc165ad9f600a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 3 Nov 2024 12:46:35 -0500 Subject: [PATCH 115/320] #2805 unused import --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index b53ab7251a..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import MyTasks from './components/MyTasks'; interface AdminHomePageProps { user: AuthenticatedUser; From 37fcca159b1efe0a0b10d4bb69587340af2bc1bc Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 3 Nov 2024 17:32:12 -0500 Subject: [PATCH 116/320] #2797-prettier and tests --- src/backend/tests/unmocked/organization.test.ts | 2 +- src/frontend/src/utils/urls.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index 0ddf67b2f6..cbcc802ae7 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -200,7 +200,7 @@ describe('Organization Tests', () => { expect(projects).not.toBeNull(); expect(projects.length).toBe(1); - expect(projects[0].id).toBe(testProject1.organizationId); + expect(projects[0]).toBe(testProject1); }); }); diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index f44fadd5bf..81bd4562ea 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -174,7 +174,7 @@ const organizations = () => `${API_URL}/organizations`; const currentOrganization = () => `${organizations()}/current`; const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; -const organizationsFeaturedProjects = () => `${organizations()}/featured-projects` +const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; From 97ee1ecb5e3753cfb68f1c83bbcdde98ff0a1b73 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Sun, 3 Nov 2024 18:31:17 -0500 Subject: [PATCH 117/320] #2797 fixed test --- src/backend/src/prisma/seed.ts | 2 +- src/backend/tests/unmocked/organization.test.ts | 2 +- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index 41e39803a2..a30e502baf 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1869,7 +1869,7 @@ const performSeed: () => Promise = async () => { ner ); - await OrganizationsService.setFeaturedProjects([project1Id, project2Id, project3Id, project4Id], ner, batman); + await OrganizationsService.setFeaturedProjects([project1Id, project2Id, project3Id, project4Id], ner, thomasEmrax); await OrganizationsService.setUsefulLinks(batman, organizationId, [ { diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index cbcc802ae7..2c0affdff9 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -200,7 +200,7 @@ describe('Organization Tests', () => { expect(projects).not.toBeNull(); expect(projects.length).toBe(1); - expect(projects[0]).toBe(testProject1); + expect(projects[0].id).toBe(testProject1.projectId); }); }); diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..ce630a83b1 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import FeaturedProjects from './components/FeaturedProjects'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; From 3b6ce94be95cd291929cfbebfcea2423ed92755d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 4 Nov 2024 14:37:01 -0500 Subject: [PATCH 118/320] #2805-fixed page block and finished team tasks --- .../components/MyTeamsOverdueTasks.tsx | 6 +- .../components/ScrollablePageBlock.tsx | 90 +++++++------------ 2 files changed, 35 insertions(+), 61 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index 3036d1d7aa..215929efcc 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -14,11 +14,11 @@ interface MyTeamsOverdueTasksProps { user: AuthenticatedUser; } -const NoOverudeTeamTaskDisplay: React.FC = () => { +const NoOverdueTeamTaskDisplay: React.FC = () => { return ( = ({ user }) => { return ( {overdueTasks.size === 0 ? ( - + ) : ( [...overdueTasks].map((task, index) => ) )} diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index c98efc153a..5b8f85ead0 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,4 +1,4 @@ -import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import { Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import React from 'react'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; @@ -6,74 +6,48 @@ interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; horizontal?: boolean; - height?: number; } -const HorizontalScrollablePageBlock: React.FC = ({ children }) => { - const theme = useTheme(); - return ( - - {children} - - ); -}; - -const ScrollablePageBlock: React.FC = ({ children, title, horizontal, height }) => { +const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { const theme = useTheme(); return ( - - {title && ( - - {title} - - )} - - {horizontal ? ( - {children} - ) : ( - {children} - )} + {title && ( + + {title} + + )} + + + {children} + ); From f2c515b3ebc924d6fdd0d082460560928ef097b7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 4 Nov 2024 15:39:13 -0500 Subject: [PATCH 119/320] #2805-unused import --- src/backend/tests/unmocked/users.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index fd24cfe99f..c13a0c857f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -1,6 +1,6 @@ import { Organization } from '@prisma/client'; import { createTestOrganization, createTestTask, createTestUser, resetUsers } from '../test-utils'; -import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; +import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; From f8fc5adb3dadc3ea8f9ebbebeb1e127b09661c4b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 5 Nov 2024 09:51:46 -0500 Subject: [PATCH 120/320] #2805-structure of page block --- .../components/OverdueWorkPackages.tsx | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx index 0669d99ea0..bfc3fe746d 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx @@ -1,12 +1,12 @@ import React from 'react'; import { AuthenticatedUser, isAdmin, Team, WorkPackage } from 'shared'; -import ScrollablePageBlock from './ScrollablePageBlock'; -import { Box, Stack, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import WorkPackageCard from './WorkPackageCard'; import { useAllWorkPackages, useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { daysOverdue } from '../../../utils/datetime.utils'; +import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; interface OverdueWorkPackagesViewProps { workPackages: WorkPackage[]; @@ -23,14 +23,56 @@ const getAllWbsNumFromTeams = (teams: Team[]) => { }; const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { + const theme = useTheme(); return ( - - - {workPackages.map((wp) => ( - - ))} - - + + + Overdue Work Packages + + + + + {workPackages.map((wp) => ( + + ))} + + + + ); }; From afab59ad838cb923cc7b2a350b1fb2ccf38b684b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 09:55:21 -0500 Subject: [PATCH 121/320] #2821-Working overdue wps section --- .../src/pages/HomePage/AdminHomePage.tsx | 10 ++++- .../components/OverdueWorkPackages.tsx | 42 +++++++++++++++---- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 3b6ce04523..6d7f1c6b0b 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -26,7 +26,13 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx index bfc3fe746d..f6a227c9ff 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx @@ -7,6 +7,8 @@ import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { daysOverdue } from '../../../utils/datetime.utils'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; interface OverdueWorkPackagesViewProps { workPackages: WorkPackage[]; @@ -16,6 +18,16 @@ interface OverdueWorkPackagesProps { user: AuthenticatedUser; } +const NoOverdueWPsDisplay: React.FC = () => { + return ( + } + heading={'Great Job Team!'} + message={'Your team has no overdue work packages!'} + /> + ); +}; + const getAllWbsNumFromTeams = (teams: Team[]) => { const projects = teams.map((team) => team.projects).flat(); const workPackages = projects.map((project) => project.workPackages).flat(); @@ -24,13 +36,18 @@ const getAllWbsNumFromTeams = (teams: Team[]) => { const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { const theme = useTheme(); + const isEmpty = workPackages.length === 0; return ( - + = ({ workP borderColor: theme.palette.primary.main }} > - Overdue Work Packages + + Overdue Work Packages + = ({ workP }} variant="outlined" > - - - {workPackages.map((wp) => ( - - ))} + + + {isEmpty ? : workPackages.map((wp) => )} From 609fb805c21f941b5ecfcb7a86b7a69d2cada57f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 10:04:05 -0500 Subject: [PATCH 122/320] #2821-optional teams as head --- src/shared/src/types/user-types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 80d16f2537..2dc8fbb205 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -65,8 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; - teamsAsHead: Team[]; - teamsAsLead: Team[]; + teamsAsHead?: Team[]; + teamsAsLead?: Team[]; } export interface UserSettings { From 15ec8feaadafd6429be2b85dfa62892a5a5f315e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 10:10:02 -0500 Subject: [PATCH 123/320] #2821- check for undefined --- .../src/pages/HomePage/components/OverdueWorkPackages.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx index f6a227c9ff..fb9f5f801d 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx @@ -101,7 +101,9 @@ const OverdueWorkPackagesView: React.FC = ({ workP }; const OverdueWorkPackages: React.FC = ({ user }) => { - const teamsAsLeadership = [...user.teamsAsHead, ...user.teamsAsLead]; + const teamsAsHead = user.teamsAsHead ?? []; + const teamsAsLead = user.teamsAsLead ?? []; + const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; const { data: allWps, isLoading: isLoadingAllWps, isError: isErrorAllWps, error: errorAllWps } = useAllWorkPackages(); const { data: teamWps, From d9fc40ed40360453a1781b00222757fe672d4d22 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 13:15:04 -0500 Subject: [PATCH 124/320] #2801-added empty page block component --- .../prisma-query-args/auth-user.query-args.ts | 7 ++- .../src/transformers/auth-user.transformer.ts | 5 +- .../src/pages/HomePage/LeadHomePage.tsx | 2 +- .../components/TeamWorkPackageDisplay.tsx | 62 ++++++++++++------- src/shared/src/types/user-types.ts | 3 + 5 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/backend/src/prisma-query-args/auth-user.query-args.ts b/src/backend/src/prisma-query-args/auth-user.query-args.ts index f99144f234..0c6db7bd94 100644 --- a/src/backend/src/prisma-query-args/auth-user.query-args.ts +++ b/src/backend/src/prisma-query-args/auth-user.query-args.ts @@ -1,4 +1,5 @@ import { Prisma } from '@prisma/client'; +import { getTeamQueryArgs } from './teams.query-args'; export type AuthUserQueryArgs = ReturnType; @@ -9,13 +10,15 @@ export const getAuthUserQueryArgs = (organizationId: string) => teamsAsHead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, organizations: true, teamsAsLead: { where: { organizationId - } + }, + ...getTeamQueryArgs(organizationId) }, teamsAsMember: { where: { diff --git a/src/backend/src/transformers/auth-user.transformer.ts b/src/backend/src/transformers/auth-user.transformer.ts index ed49204c54..06bab93740 100644 --- a/src/backend/src/transformers/auth-user.transformer.ts +++ b/src/backend/src/transformers/auth-user.transformer.ts @@ -6,6 +6,7 @@ import { isAuthUserOnFinance } from '../utils/reimbursement-requests.utils'; import { Prisma } from '@prisma/client'; +import teamTransformer from './teams.transformer'; const authenticatedUserTransformer = ( user: Prisma.UserGetPayload, @@ -26,7 +27,9 @@ const authenticatedUserTransformer = ( isAtLeastFinanceLead: isAuthUserAtLeastLeadForFinance(user), changeRequestsToReviewId: user.changeRequestsToReview.map((changeRequest) => changeRequest.crId), organizations: user.organizations.map((organization) => organization.organizationId), - currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId) + currentOrganization: user.organizations.find((organization) => organization.organizationId === organizationId), + teamsAsHead: user.teamsAsHead.map(teamTransformer), + teamsAsLead: user.teamsAsLead.map(teamTransformer) }; }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index e481ad59d2..8b7912f437 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -26,7 +26,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 8cc7a535b2..fd8c16689a 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -6,25 +6,41 @@ import { useCurrentUser } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import ScrollablePageBlock from './ScrollablePageBlock'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import { AuthenticatedUser } from 'shared'; -const TeamWorkPackageDisplay: React.FC = () => { - const user = useCurrentUser(); - const { isLoading, isError, data: teams, error } = useAllTeams(); +interface TeamWorkPackageDisplayProps { + user: AuthenticatedUser; +} - if (isLoading || !teams) return ; - - if (isError) return ; +const NoTeamWorkPackagesDisplay: React.FC = () => { + return ( + + } + heading={"You're team is all caught up!"} + message={'There are no work packages assigned to your team!'} + /> + + ); +}; - const myTeams = teams?.filter((team) => { - return ( - team.members.some((member) => member.userId === user.userId) || - team.leads.some((member) => member.userId === user.userId) || - team.head.userId === user.userId - ); - }); +const TeamWorkPackageDisplay: React.FC = ({ user }) => { + const teamsAsHead = user.teamsAsHead ?? []; + const teamsAsLead = user.teamsAsLead ?? []; + const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; - const workPackages = myTeams - ?.map((team) => { + const workPackages = teamsAsLeadership + .map((team) => { return team.projects.map((project) => { return project.workPackages; }); @@ -33,13 +49,15 @@ const TeamWorkPackageDisplay: React.FC = () => { return ( - {workPackages.length === 0 - ? `No work packages` - : workPackages.map((wp) => ( - - - - ))} + {workPackages.length === 0 ? ( + + ) : ( + workPackages.map((wp) => ( + + + + )) + )} ); }; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 1a95a46542..2dc8fbb205 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -4,6 +4,7 @@ */ import { AvailabilityCreateArgs } from './design-review-types'; +import { Team } from './team-types'; export interface User { userId: string; @@ -64,6 +65,8 @@ export interface AuthenticatedUser { isAtLeastFinanceLead?: boolean; organizations: string[]; currentOrganization?: OrganizationPreview; + teamsAsHead?: Team[]; + teamsAsLead?: Team[]; } export interface UserSettings { From d59a59a4c5908afeaa1e712fd565aeea60eb6a2e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 13:44:55 -0500 Subject: [PATCH 125/320] #2801-removed duplicates --- .../components/TeamWorkPackageDisplay.tsx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index fd8c16689a..84cb1e3140 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -39,21 +39,24 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) const teamsAsLead = user.teamsAsLead ?? []; const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; - const workPackages = teamsAsLeadership - .map((team) => { - return team.projects.map((project) => { - return project.workPackages; - }); - }) - .flat(2); + // converting to set to remove duplicates + const workPackages = new Set( + teamsAsLeadership + .map((team) => { + return team.projects.map((project) => { + return project.workPackages; + }); + }) + .flat(2) + ); return ( - - {workPackages.length === 0 ? ( + + {workPackages.size === 0 ? ( ) : ( - workPackages.map((wp) => ( - + [...workPackages].map((wp) => ( + )) From c5cfe5faeafe4ea9ce0467410c8a925218a45104 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 13:45:50 -0500 Subject: [PATCH 126/320] #2801-removed from member home page --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 11cb6ef89b..34986e735e 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -32,9 +32,6 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { - - -
From 90194772c13ccc58547f5cefa4c6df367ac5d78b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 13:46:30 -0500 Subject: [PATCH 127/320] #2801-unused imports --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 1 - .../src/pages/HomePage/components/TeamWorkPackageDisplay.tsx | 4 ---- 2 files changed, 5 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 34986e735e..822f1b53ef 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -10,7 +10,6 @@ import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MyTasks from './components/MyTasks'; -import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; interface MemberHomePageProps { user: AuthenticatedUser; diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 84cb1e3140..e3a86e84b8 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -1,10 +1,6 @@ import WorkPackageCard from './WorkPackageCard'; import { wbsPipe } from '../../../utils/pipes'; import Box from '@mui/material/Box'; -import { useAllTeams } from '../../../hooks/teams.hooks'; -import { useCurrentUser } from '../../../hooks/users.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; -import ErrorPage from '../../ErrorPage'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; From b520efd4f3a3754cf39aa682b3ff17259d9a0ece Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 6 Nov 2024 13:57:38 -0500 Subject: [PATCH 128/320] #2797-fixed-some-pr-issues --- .../src/pages/HomePage/AdminHomePage.tsx | 1 - .../HomePage/components/FeaturedProjects.tsx | 26 ++++++++++++++++++- .../components/FeaturedProjectsCard.tsx | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index ce630a83b1..3beab7ea9f 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -26,7 +26,6 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - ); }; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index 04994978ac..43e5bc5b30 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -10,6 +10,30 @@ import ErrorPage from '../../ErrorPage'; import { wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ScrollablePageBlock from './ScrollablePageBlock'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import { Box } from '@mui/material'; +import { Error } from '@mui/icons-material'; + +const NoTasksDisplay: React.FC = () => { + return ( + + } + heading={'No Featured Projects'} + message={'There are no Featured Projects to Display'} + /> + + ); +}; const FeaturedProjects: React.FC = () => { const { data: featuredProjects, isLoading, isError, error } = useFeaturedProjects(); @@ -20,7 +44,7 @@ const FeaturedProjects: React.FC = () => { const fullDisplay = ( {featuredProjects.length === 0 ? ( - No Featured Projects + ) : ( featuredProjects.map((p) => ) )} diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx index 92962a7bcb..2de9f39073 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx @@ -8,7 +8,7 @@ import { Link as RouterLink } from 'react-router-dom'; interface ProjectCardProps { project: Project; } -// remove the collapseable part + const FeaturedProjectsCard: React.FC = ({ project }) => { const theme = useTheme(); return ( From 66b07e33d87dc83b507c7d4854012594e27b38ce Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 13:58:53 -0500 Subject: [PATCH 129/320] #2801-set up grid --- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 12 +++++++++--- .../HomePage/components/TeamWorkPackageDisplay.tsx | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 8b7912f437..cdcf1b6aee 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -3,11 +3,11 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; @@ -26,7 +26,13 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index e3a86e84b8..26b9417065 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -14,7 +14,7 @@ const NoTeamWorkPackagesDisplay: React.FC = () => { return ( = ({ user }) return ( - {workPackages.size === 0 ? ( + {workPackages.size === 2 ? ( ) : ( [...workPackages].map((wp) => ( From b1a43e7bd200009eff5d028cf17f2173031592b3 Mon Sep 17 00:00:00 2001 From: Jesse Garcia <148027431+jessegarcia1@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:30:16 -0500 Subject: [PATCH 130/320] Deleted .vscode/launch.json --- .vscode/launch.json | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 2ba986f6f1..0000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "chrome", - "request": "launch", - "name": "Launch Chrome against localhost", - "url": "http://localhost:8080", - "webRoot": "${workspaceFolder}" - } - ] -} \ No newline at end of file From a698edbfe0c519b80a2cd4970c0df421d809ff24 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 6 Nov 2024 15:31:18 -0500 Subject: [PATCH 131/320] #2797-linting and fixed yarn.lock --- .../src/pages/HomePage/AdminHomePage.tsx | 1 - .../HomePage/components/FeaturedProjects.tsx | 1 - yarn.lock | 3974 +++++++---------- 3 files changed, 1643 insertions(+), 2333 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 3beab7ea9f..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import FeaturedProjects from './components/FeaturedProjects'; interface AdminHomePageProps { user: AuthenticatedUser; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index 43e5bc5b30..ad1bbe7471 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -5,7 +5,6 @@ import FeaturedProjectsCard from './FeaturedProjectsCard'; import { useFeaturedProjects } from '../../../hooks/organizations.hooks'; -import { Typography } from '@mui/material'; import ErrorPage from '../../ErrorPage'; import { wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; diff --git a/yarn.lock b/yarn.lock index 9c82018100..563831aede 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,10 +5,17 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@adobe/css-tools@npm:^4.0.1": - version: 4.4.0 - resolution: "@adobe/css-tools@npm:4.4.0" - checksum: 1f08fb49bf17fc7f2d1a86d3e739f29ca80063d28168307f1b0a962ef37501c5667271f6771966578897f2e94e43c4770fd802728a6e6495b812da54112d506a + version: 4.3.3 + resolution: "@adobe/css-tools@npm:4.3.3" + checksum: d21f3786b84911fee59c995a146644a85c98692979097b26484ffa9e442fb1a92ccd68ce984e3e7cf8d5933c3560fbc0ad3e3cd1de50b9a723d1c012e793bbcb languageName: node linkType: hard @@ -40,20 +47,20 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.5.5": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.5.5": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" dependencies: - "@babel/highlight": ^7.24.7 + "@babel/highlight": ^7.24.2 picocolors: ^1.0.0 - checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 + checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: b12a91d27c3731a4b0bdc9312a50b1911f41f7f728aaf0d4b32486e2257fd2cb2d3ea1a295e98449600c48f2c7883a3196ca77cda1cef7d97a10c2e83d037974 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/compat-data@npm:7.24.4" + checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4 languageName: node linkType: hard @@ -81,118 +88,105 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.25.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.23.5, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": + version: 7.24.4 + resolution: "@babel/core@npm:7.24.4" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.0 - "@babel/helper-compilation-targets": ^7.25.2 - "@babel/helper-module-transforms": ^7.25.2 - "@babel/helpers": ^7.25.0 - "@babel/parser": ^7.25.0 - "@babel/template": ^7.25.0 - "@babel/traverse": ^7.25.2 - "@babel/types": ^7.25.2 + "@babel/code-frame": ^7.24.2 + "@babel/generator": ^7.24.4 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helpers": ^7.24.4 + "@babel/parser": ^7.24.4 + "@babel/template": ^7.24.0 + "@babel/traverse": ^7.24.1 + "@babel/types": ^7.24.0 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a - languageName: node - linkType: hard - -"@babel/eslint-parser@npm:^7.16.3": - version: 7.25.1 - resolution: "@babel/eslint-parser@npm:7.25.1" - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint-visitor-keys: ^2.1.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - checksum: 73207b7e84a58bd6560d29f11cf5c6f9d64a01b9299d4d0a145423a028ea4c402be2fd09228647fdbec14b65a07d4138e751468fd33d9a9363c9698582fa80b5 + checksum: 15ecad7581f3329995956ba461961b1af7bed48901f14fe962ccd3217edca60049e9e6ad4ce48134618397e6c90230168c842e2c28e47ef1f16c97dbbf663c61 languageName: node linkType: hard -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/generator@npm:7.25.6" +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.24.1, @babel/generator@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/generator@npm:7.24.4" dependencies: - "@babel/types": ^7.25.6 + "@babel/types": ^7.24.0 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^2.5.1 - checksum: b55975cd664f5602304d868bb34f4ee3bed6f5c7ce8132cd92ff27a46a53a119def28a182d91992e86f75db904f63094a81247703c4dc96e4db0c03fd04bcd68 + checksum: 1b6146c31386c9df3eb594a2c36b5c98da4f67f7c06edb3d68a442b92516b21bb5ba3ad7dbe0058fe76625ed24d66923e15c95b0df75ef1907d4068921a699b8 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" +"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" dependencies: - "@babel/types": ^7.24.7 - checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 71a6158a9fdebffb82fdc400d5555ba8f2e370cea81a0d578155877bdc4db7d5252b75c43b2fdf3f72b3f68348891f99bd35ae315542daad1b7ace8322b1abcb + "@babel/types": ^7.22.15 + checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: - "@babel/compat-data": ^7.25.2 - "@babel/helper-validator-option": ^7.24.8 - browserslist: ^4.23.1 + "@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 - checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 + checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0, @babel/helper-create-class-features-plugin@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-member-expression-to-functions": ^7.24.8 - "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/helper-replace-supers": ^7.25.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/traverse": ^7.25.4 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-member-expression-to-functions": ^7.23.0 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.24.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 4544ebda4516eb25efdebd47ca024bd7bdb1eb6e7cc3ad89688c8ef8e889734c2f4411ed78981899c641394f013f246f2af63d92a0e9270f6c453309b4cb89ba + checksum: 75b0a51ae1f7232932559779b78711c271404d02d069156d1bd9a7982c165c5134058d2ec2d8b5f2e42026ee4f52ba2a30c86a7aa3bce6b5fd0991eb721abc8c languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-annotate-as-pure": ^7.22.5 regexpu-core: ^5.3.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: df55fdc6a1f3090dd37d91347df52d9322d52affa239543808dc142f8fe35e6787e67d8612337668198fac85826fafa9e6772e6c28b7d249ec94e6fafae5da6e + checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.2": +"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": version: 0.6.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" dependencies: @@ -207,223 +201,243 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" dependencies: - "@babel/traverse": ^7.24.8 - "@babel/types": ^7.24.8 - checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 + "@babel/types": ^7.24.0 + checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-simple-access": ^7.24.7 - "@babel/helper-validator-identifier": ^7.24.7 - "@babel/traverse": ^7.25.2 + "@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 peerDependencies: "@babel/core": ^7.0.0 - checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 + checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" dependencies: - "@babel/types": ^7.24.7 - checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3 + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/helper-plugin-utils@npm:7.24.0" + checksum: e2baa0eede34d2fa2265947042aa84d444aa48dc51e9feedea55b67fc1bc3ab051387e18b33ca7748285a6061390831ab82f8a2c767d08470b93500ec727e9b9 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" +"@babel/helper-remap-async-to-generator@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-wrap-function": ^7.25.0 - "@babel/traverse": ^7.25.0 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-wrap-function": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 47f3065e43fe9d6128ddb4291ffb9cf031935379265fd13de972b5f241943121f7583efb69cd2e1ecf39e3d0f76f047547d56c3fcc2c853b326fad5465da0bd7 + checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-replace-supers@npm:7.25.0" +"@babel/helper-replace-supers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-replace-supers@npm:7.24.1" dependencies: - "@babel/helper-member-expression-to-functions": ^7.24.8 - "@babel/helper-optimise-call-expression": ^7.24.7 - "@babel/traverse": ^7.25.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.23.0 + "@babel/helper-optimise-call-expression": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8 + checksum: c04182c34a3195c6396de2f2945f86cb60daa94ca7392db09bd8b0d4e7a15b02fbe1947c70f6062c87eadaea6d7135207129efa35cf458ea0987bab8c0f02d5a languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" dependencies: - "@babel/traverse": ^7.24.7 - "@babel/types": ^7.24.7 - checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407 + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.24.1 + resolution: "@babel/helper-string-parser@npm:7.24.1" + checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-wrap-function@npm:7.25.0" +"@babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-wrap-function@npm:7.22.20" dependencies: - "@babel/template": ^7.25.0 - "@babel/traverse": ^7.25.0 - "@babel/types": ^7.25.0 - checksum: 0095b4741704066d1687f9bbd5370bb88c733919e4275e49615f70c180208148ff5f24ab58d186ce92f8f5d28eab034ec6617e9264590cc4744c75302857629c + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.15 + "@babel/types": ^7.22.19 + checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca languageName: node linkType: hard -"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.25.0": - version: 7.25.6 - resolution: "@babel/helpers@npm:7.25.6" +"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/helpers@npm:7.24.4" dependencies: - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.6 - checksum: 5a548999db82049a5f7ac6de57576b4ed0d386ce07d058151698836ed411eae6230db12535487caeebb68a2ffc964491e8aead62364a5132ab0ae20e8b68e19f + "@babel/template": ^7.24.0 + "@babel/traverse": ^7.24.1 + "@babel/types": ^7.24.0 + checksum: ecd2dc0b3b32e24b97fa3bcda432dd3235b77c2be1e16eafc35b8ef8f6c461faa99796a8bc2431a408c98b4aabfd572c160e2b67ecea4c5c9dd3a8314a97994a languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/highlight@npm:7.24.2" dependencies: - "@babel/helper-validator-identifier": ^7.24.7 + "@babel/helper-validator-identifier": ^7.22.20 chalk: ^2.4.2 js-tokens: ^4.0.0 picocolors: ^1.0.0 - checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + checksum: 5f17b131cc3ebf3ab285a62cf98a404aef1bd71a6be045e748f8d5bf66d6a6e1aefd62f5972c84369472e8d9f22a614c58a89cd331eb60b7ba965b31b1bbeaf5 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6, @babel/parser@npm:^7.7.0": - version: 7.25.6 - resolution: "@babel/parser@npm:7.25.6" - dependencies: - "@babel/types": ^7.25.6 +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.7.0": + version: 7.24.4 + resolution: "@babel/parser@npm:7.24.4" bin: parser: ./bin/babel-parser.js - checksum: 85b237ded09ee43cc984493c35f3b1ff8a83e8dbbb8026b8132e692db6567acc5a1659ec928e4baa25499ddd840d7dae9dee3062be7108fe23ec5f94a8066b1e - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" - dependencies: - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/traverse": ^7.25.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d3dba60f360defe70eb43e35a1b17ea9dd4a99e734249e15be3d5c288019644f96f88d7ff51990118fda0845b4ad50f6d869e0382232b1d8b054d113d4eea7e2 + checksum: 94c9e3e592894cd6fc57c519f4e06b65463df9be5f01739bb0d0bfce7ffcf99b3c2fdadd44dc59cc858ba2739ce6e469813a941c2f2dfacf333a3b2c9c5c8465 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.4" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: fd56d1e6435f2c008ca9050ea906ff7eedcbec43f532f2bf2e7e905d8bf75bf5e4295ea9593f060394e2c8e45737266ccbf718050bad2dd7be4e7613c60d1b5b + checksum: 0be3f41b1b865d7a4ed1a432337be48de67989d0b4e47def34a05097a804b6fc193115f97c954fd757339e0b80030ecf1d0a3d3fd6e7e91718644de0a5aae3d3 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 13ed301b108d85867d64226bbc4032b07dd1a23aab68e9e32452c4fe3930f2198bb65bdae9c262c4104bd5e45647bc1830d25d43d356ee9a137edd8d5fab8350 + checksum: ec5fddc8db6de0e0082a883f21141d6f4f9f9f0bc190d662a732b5e9a506aae5d7d2337049a1bf055d7cb7add6f128036db6d4f47de5e9ac1be29e043c8b7ca8 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/plugin-transform-optional-chaining": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.24.1 peerDependencies: "@babel/core": ^7.13.0 - checksum: 07b92878ac58a98ea1fdf6a8b4ec3413ba4fa66924e28b694d63ec5b84463123fbf4d7153b56cf3cedfef4a3482c082fe3243c04f8fb2c041b32b0e29b4a9e21 + checksum: e18235463e716ac2443938aaec3c18b40c417a1746fba0fa4c26cf4d71326b76ef26c002081ab1b445abfae98e063d561519aa55672dddc1ef80b3940211ffbb languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/traverse": ^7.25.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: c8d08b8d6cc71451ad2a50cf7db72ab5b41c1e5e2e4d56cf6837a25a61270abd682c6b8881ab025f11a552d2024b3780519bb051459ebb71c27aed13d9917663 + checksum: b5e5889ce5ef51e813e3063cd548f55eb3c88e925c3c08913f334e15d62496861e538ae52a3974e0c56a3044ed8fd5033faea67a64814324af56edc9865b7359 languageName: node linkType: hard @@ -440,15 +454,15 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.24.7 - resolution: "@babel/plugin-proposal-decorators@npm:7.24.7" + version: 7.24.1 + resolution: "@babel/plugin-proposal-decorators@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/plugin-syntax-decorators": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.24.1 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/plugin-syntax-decorators": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 75aa5ff5537d5ff77f0e52eb161a2f67c7d2bfd8f2000be710dedb1dd238b43ce53d2f734f84bda95b3f013b69de126403f84167f4eddb1d35e8f26257ee07c8 + checksum: b9375c64656bf9ae6d2eeb965c40823e6447f0f4594979d037231884c0f3a92af97172087f35a05e90b8ca0ccb47551b013998e85853c1c634d47b341f4deece languageName: node linkType: hard @@ -546,7 +560,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13": +"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -568,14 +582,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-decorators@npm:7.24.7" +"@babel/plugin-syntax-decorators@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-decorators@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: dc303bcc1f5df61638f1eddc69dd55e65574bd43d8a4a098d3589f5a742e93a4ca3a173967b34eb95e4eaa994799b4c72bfed8688036e43c634be7f24db01ac5 + checksum: 5933fdb1d8d2c0b4b80621ad65dacd4e1ccd836041557c2ddc4cb4c1f46a347fa72977fc519695a801c9cca8b9aaf90d7895ddd52cb4e510fbef5b9f03cb9568 languageName: node linkType: hard @@ -601,40 +615,40 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-flow@npm:7.24.7" +"@babel/plugin-syntax-flow@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-flow@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 43b78b5fcdedb2a6d80c3d02a1a564fbfde86b73b442d616a8f318f673caa6ce0151513af5a00fcae42a512f144e70ef259d368b9537ee35d40336a6c895a7d4 + checksum: 87dfe32f3a3ea77941034fb2a39fdfc9ea18a994b8df40c3659a11c8787b2bc5adea029259c4eafc03cd35f11628f6533aa2a06381db7fcbe3b2cc3c2a2bb54f languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.25.6 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" +"@babel/plugin-syntax-import-assertions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b3b251ace9f184c2d6369cde686ff01581050cb0796f2ff00ff4021f31cf86270b347df09579f2c0996e999e37e1dddafacec42ed1ef6aae21a265aff947e792 + checksum: 2a463928a63b62052e9fb8f8b0018aa11a926e94f32c168260ae012afe864875c6176c6eb361e13f300542c31316dad791b08a5b8ed92436a3095c7a0e4fce65 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.25.6 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6" +"@babel/plugin-syntax-import-attributes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3b0928e73e42346e8a65760a3ff853c87ad693cdf11bb335a23e895e0b5b1f0601118521b3aff2a6946488a580a63afb6a5b5686153a7678b4dff0e4e4604dd7 + checksum: 87c8aa4a5ef931313f956871b27f2c051556f627b97ed21e9a5890ca4906b222d89062a956cde459816f5e0dec185ff128d7243d3fdc389504522acb88f0464e languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4": +"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -656,18 +670,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" +"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 + checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0 languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -689,7 +703,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -744,7 +758,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -755,14 +769,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.7": - version: 7.25.4 - resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" +"@babel/plugin-syntax-typescript@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9b89b8930cd5983f64251d75c9fcdc17a8dc73837d6de12220ff972888ecff4054a6467cf0c423cad242aa96c0f0564a39a0823073728cc02239b80d13f02230 + checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda languageName: node linkType: hard @@ -778,752 +792,740 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" +"@babel/plugin-transform-arrow-functions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 707c209b5331c7dc79bd326128c6a6640dbd62a78da1653c844db20c4f36bf7b68454f1bc4d2d051b3fde9136fa291f276ec03a071bb00ee653069ff82f91010 + checksum: 58f9aa9b0de8382f8cfa3f1f1d40b69d98cd2f52340e2391733d0af745fdddda650ba392e509bc056157c880a2f52834a38ab2c5aa5569af8c61bb6ecbf45f34 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" +"@babel/plugin-transform-async-generator-functions@npm:^7.24.3": + version: 7.24.3 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-remap-async-to-generator": ^7.25.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-remap-async-to-generator": ^7.22.20 "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/traverse": ^7.25.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4235444735a1946f8766fe56564a8134c2c36c73e6cf83b3f2ed5624ebc84ff5979506a6a5b39acdb23aa09d442a6af471710ed408ccce533a2c4d2990b9df6a + checksum: 309af02610be65d937664435adb432a32d9b6eb42bb3d3232c377d27fbc57014774d931665a5bfdaff3d1841b72659e0ad7adcef84b709f251cb0b8444f19214 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" +"@babel/plugin-transform-async-to-generator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" dependencies: - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-remap-async-to-generator": ^7.24.7 + "@babel/helper-module-imports": ^7.24.1 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-remap-async-to-generator": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 13704fb3b83effc868db2b71bfb2c77b895c56cb891954fc362e95e200afd523313b0e7cf04ce02f45b05e76017c5b5fa8070c92613727a35131bb542c253a36 + checksum: 429004a6596aa5c9e707b604156f49a146f8d029e31a3152b1649c0b56425264fda5fd38e5db1ddaeb33c3fe45c97dc8078d7abfafe3542a979b49f229801135 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 249cdcbff4e778b177245f9652b014ea4f3cd245d83297f10a7bf6d97790074089aa62bcde8c08eb299c5e68f2faed346b587d3ebac44d625ba9a83a4ee27028 + checksum: d8e18bd57b156da1cd4d3c1780ab9ea03afed56c6824ca8e6e74f67959d7989a0e953ec370fe9b417759314f2eef30c8c437395ce63ada2e26c2f469e4704f82 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" +"@babel/plugin-transform-block-scoping@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/plugin-transform-block-scoping@npm:7.24.4" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b1a8f932f69ad2a47ae3e02b4cedd2a876bfc2ac9cf72a503fd706cdc87272646fe9eed81e068c0fc639647033de29f7fa0c21cddd1da0026f83dbaac97316a8 + checksum: 5229ffe1c55744b96f791521e2876b01ed05c81df67488a7453ce66c2faceb9d1d653089ce6f0abf512752e15e9acac0e75a797a860f24e05b4d36497c7c3183 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" +"@babel/plugin-transform-class-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.25.4 - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-create-class-features-plugin": ^7.24.1 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b73f7d968639c6c2dfc13f4c5a8fe45cefd260f0faa7890ae12e65d41211072544ff5e128c8b61a86887b29ffd3df8422dbdfbf61648488e71d4bb599c41f4a5 + checksum: 95779e9eef0c0638b9631c297d48aee53ffdbb2b1b5221bf40d7eccd566a8e34f859ff3571f8f20b9159b67f1bff7d7dc81da191c15d69fbae5a645197eae7e0 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" +"@babel/plugin-transform-class-static-block@npm:^7.24.4": + version: 7.24.4 + resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.24.4 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-class-static-block": ^7.14.5 peerDependencies: "@babel/core": ^7.12.0 - checksum: 324049263504f18416f1c3e24033baebfafd05480fdd885c8ebe6f2b415b0fc8e0b98d719360f9e30743cc78ac387fabc0b3c6606d2b54135756ffb92963b382 + checksum: 3b1db3308b57ba21d47772a9f183804234c23fd64c9ca40915d2d65c5dc7a48b49a6de16b8b90b7a354eacbb51232a862f0fca3dbd23e27d34641f511decddab languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-classes@npm:7.25.4" +"@babel/plugin-transform-classes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-classes@npm:7.24.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-compilation-targets": ^7.25.2 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-replace-supers": ^7.25.0 - "@babel/traverse": ^7.25.4 + "@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.24.0 + "@babel/helper-replace-supers": ^7.24.1 + "@babel/helper-split-export-declaration": ^7.22.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0bf20e46eeb691bd60cee5d1b01950fc37accec88018ecace25099f7c8d8509c1ac54d11b8caf9f2157c6945969520642a3bc421159c1a14e80224dc9a7611de + checksum: e5337e707d731c9f4dcc107d09c9a99b90786bc0da6a250165919587ed818818f6cae2bbcceea880abef975c0411715c0c7f3f361ecd1526bf2eaca5ad26bb00 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" +"@babel/plugin-transform-computed-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/template": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/template": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0cf8c1b1e4ea57dec8d4612460d84fd4cdbf71a7499bb61ee34632cf89018a59eee818ffca88a8d99ee7057c20a4257044d7d463fda6daef9bf1db9fa81563cb + checksum: f2832bcf100a70f348facbb395873318ef5b9ee4b0fb4104a420d9daaeb6003cc2ecc12fd8083dd2e4a7c2da873272ad73ff94de4497125a0cf473294ef9664e languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" +"@babel/plugin-transform-destructuring@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0b4bd3d608979a1e5bd97d9d42acd5ad405c7fffa61efac4c7afd8e86ea6c2d91ab2d94b6a98d63919571363fe76e0b03c4ff161f0f60241b895842596e4a999 + checksum: 994fd3c513e40b8f1bdfdd7104ebdcef7c6a11a4e380086074496f586db3ac04cba0ae70babb820df6363b6700747b0556f6860783e046ace7c741a22f49ec5b languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" +"@babel/plugin-transform-dotall-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 67b10fc6abb1f61f0e765288eb4c6d63d1d0f9fc0660e69f6f2170c56fa16bc74e49857afc644beda112b41771cd90cf52df0940d11e97e52617c77c7dcff171 + checksum: 7f623d25b6f213b94ebc1754e9e31c1077c8e288626d8b7bfa76a97b067ce80ddcd0ede402a546706c65002c0ccf45cd5ec621511c2668eed31ebcabe8391d35 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d1da2ff85ecb56a63f4ccfd9dc9ae69400d85f0dadf44ecddd9e71c6e5c7a9178e74e3a9637555f415a2bb14551e563f09f98534ab54f53d25e8439fdde6ba2d + checksum: a3b07c07cee441e185858a9bb9739bb72643173c18bf5f9f949dd2d4784ca124e56b01d0a270790fb1ff0cf75d436075db0a2b643fb4285ff9a21df9e8dc6284 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" +"@babel/plugin-transform-dynamic-import@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.0 - "@babel/helper-plugin-utils": ^7.24.8 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 608d6b0e77341189508880fd1a9f605a38d0803dd6f678ea3920ab181b17b377f6d5221ae8cf0104c7a044d30d4ddb0366bd064447695671d78457a656bb264f - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-dynamic-import": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 776509ff62ab40c12be814a342fc56a5cc09b91fb63032b2633414b635875fd7da03734657be0f6db2891fe6e3033b75d5ddb6f2baabd1a02e4443754a785002 + checksum: 59fc561ee40b1a69f969c12c6c5fac206226d6642213985a569dd0f99f8e41c0f4eaedebd36936c255444a8335079842274c42a975a433beadb436d4c5abb79b languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 23c84a23eb56589fdd35a3540f9a1190615be069110a2270865223c03aee3ba4e0fc68fe14850800cf36f0712b26e4964d3026235261f58f0405a29fe8dac9b1 + checksum: f90841fe1a1e9f680b4209121d3e2992f923e85efcd322b26e5901c180ef44ff727fb89790803a23fac49af34c1ce2e480018027c22b4573b615512ac5b6fc50 languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3bd3a10038f10ae0dea1ee42137f3edcf7036b5e9e570a0d1cbd0865f03658990c6c2d84fa2475f87a754e7dc5b46766c16f7ce5c9b32c3040150b6a21233a80 + checksum: bc710ac231919df9555331885748385c11c5e695d7271824fe56fba51dd637d48d3e5cd52e1c69f2b1a384fbbb41552572bc1ca3a2285ee29571f002e9bb2421 languageName: node linkType: hard "@babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.25.2 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.2" + version: 7.24.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/plugin-syntax-flow": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/plugin-syntax-flow": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9f7b96cbd374077eaf04b59e468976d2e89ec353807d7ac28f129f686945447df92aeb5b60acf906f3ec0f9ebef5d9f88735c7aa39af97033a6ab96c79c9a909 + checksum: 83faac90c934e15a8fe813d90cbfdf8aa2cb2cc9108f55e4a1ecda1c3097735af6a0b6623057f059153b572bc1dd088aeb2ff24217e9de82ad2390ab1210d01b languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-for-of@npm:7.24.7" +"@babel/plugin-transform-for-of@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-for-of@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a53b42dc93ab4b7d1ebd3c695b52be22b3d592f6a3dbdb3dc2fea2c8e0a7e1508fe919864c455cde552aec44ce7518625fccbb70c7063373ca228d884f4f49ea + checksum: 990adde96ea1766ed6008c006c7040127bef59066533bb2977b246ea4a596fe450a528d1881a0db5f894deaf1b81654dfb494b19ad405b369be942738aa9c364 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.1": - version: 7.25.1 - resolution: "@babel/plugin-transform-function-name@npm:7.25.1" +"@babel/plugin-transform-function-name@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-function-name@npm:7.24.1" dependencies: - "@babel/helper-compilation-targets": ^7.24.8 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/traverse": ^7.25.1 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 743f3ea03bbc5a90944849d5a880b6bd9243dddbde581a46952da76e53a0b74c1e2424133fe8129d7a152c1f8c872bcd27e0b6728d7caadabd1afa7bb892e1e0 + checksum: 31eb3c75297dda7265f78eba627c446f2324e30ec0124a645ccc3e9f341254aaa40d6787bd62b2280d77c0a5c9fbfce1da2c200ef7c7f8e0a1b16a8eb3644c6f languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" +"@babel/plugin-transform-json-strings@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-json-strings": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 88874d0b7a1ddea66c097fc0abb68801ffae194468aa44b828dde9a0e20ac5d8647943793de86092eabaa2911c96f67a6b373793d4bb9c932ef81b2711c06c2e + checksum: f42302d42fc81ac00d14e9e5d80405eb80477d7f9039d7208e712d6bcd486a4e3b32fdfa07b5f027d6c773723d8168193ee880f93b0e430c828e45f104fb82a4 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/plugin-transform-literals@npm:7.25.2" +"@babel/plugin-transform-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 70c9bb40e377a306bd8f500899fb72127e527517914466e95dc6bb53fa7a0f51479db244a54a771b5780fc1eab488fedd706669bf11097b81a23c81ab7423eb1 + checksum: 2df94e9478571852483aca7588419e574d76bde97583e78551c286f498e01321e7dbb1d0ef67bee16e8f950688f79688809cfde370c5c4b84c14d841a3ef217a languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3367ce0be243704dc6fce23e86a592c4380f01998ee5dd9f94c54b1ef7b971ac6f8a002901eb51599ac6cbdc0d067af8d1a720224fca1c40fde8bb8aab804aac + checksum: 895f2290adf457cbf327428bdb4fb90882a38a22f729bcf0629e8ad66b9b616d2721fbef488ac00411b647489d1dda1d20171bb3772d0796bb7ef5ecf057808a languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2720c57aa3bf70576146ba7d6ea03227f4611852122d76d237924f7b008dafc952e6ae61a19e5024f26c665f44384bbd378466f01b6bd1305b3564a3b7fb1a5d + checksum: 4ea641cc14a615f9084e45ad2319f95e2fee01c77ec9789685e7e11a6c286238a426a98f9c1ed91568a047d8ac834393e06e8c82d1ff01764b7aa61bee8e9023 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" +"@babel/plugin-transform-modules-amd@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1" dependencies: - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f1dd0fb2f46c0f8f21076b8c7ccd5b33a85ce6dcb31518ea4c648d9a5bb2474cd4bd87c9b1b752e68591e24b022e334ba0d07631fef2b6b4d8a4b85cf3d581f5 + checksum: 3d777c262f257e93f0405b13e178f9c4a0f31855b409f0191a76bb562a28c541326a027bfe6467fcb74752f3488c0333b5ff2de64feec1b3c4c6ace1747afa03 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" +"@babel/plugin-transform-modules-commonjs@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" dependencies: - "@babel/helper-module-transforms": ^7.24.8 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-simple-access": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a4cf95b1639c33382064b44558f73ee5fac023f2a94d16e549d2bb55ceebd5cbc10fcddd505d08cd5bc97f5a64af9fd155512358b7dcf7b1a0082e8945cf21c5 + checksum: 11402b34c49f76aa921b43c2d76f3f129a32544a1dc4f0d1e48b310f9036ab75269a6d8684ed0198b7a0b07bd7898b12f0cacceb26fbb167999fd2a819aa0802 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" +"@babel/plugin-transform-modules-systemjs@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" dependencies: - "@babel/helper-module-transforms": ^7.25.0 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-validator-identifier": ^7.24.7 - "@babel/traverse": ^7.25.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fe673bec08564e491847324bb80a1e6edfb229f5c37e58a094d51e95306e7b098e1d130fc43e992d22debd93b9beac74441ffc3f6ea5d78f6b2535896efa0728 + checksum: 903766f6808f04278e887e4adec9b1efa741726279652dad255eaad0f5701df8f8ff0af25eb8541a00eb3c9eae2dccf337b085cfa011426ca33ed1f95d70bf75 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" +"@babel/plugin-transform-modules-umd@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" dependencies: - "@babel/helper-module-transforms": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9ff1c464892efe042952ba778468bda6131b196a2729615bdcc3f24cdc94014f016a4616ee5643c5845bade6ba698f386833e61056d7201314b13a7fd69fac88 + checksum: 4922f5056d34de6fd59a1ab1c85bc3472afa706c776aceeb886289c9ac9117e6eb8e22d06c537eb5bc0ede6c30f6bd85210bdcc150dc0ae2d2373f8252df9364 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: f1c6c7b5d60a86b6d7e4dd098798e1d393d55e993a0b57a73b53640c7a94985b601a96bdacee063f809a9a700bcea3a2ff18e98fa561554484ac56b761d774bd + checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-new-target@npm:7.24.7" +"@babel/plugin-transform-new-target@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-new-target@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3cb94cd1076b270f768f91fdcf9dd2f6d487f8dbfff3df7ca8d07b915900b86d02769a35ba1407d16fe49499012c8f055e1741299e2c880798b953d942a8fa1b + checksum: f56159ba56e8824840b8073f65073434e4bc4ef20e366bc03aa6cae9a4389365574fa72390e48aed76049edbc6eba1181eb810e58fae22c25946c62f9da13db4 languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4a9221356401d87762afbc37a9e8e764afc2daf09c421117537820f8cfbed6876888372ad3a7bcfae2d45c95f026651f050ab4020b777be31d3ffb00908dbdd3 + checksum: 74025e191ceb7cefc619c15d33753aab81300a03d81b96ae249d9b599bc65878f962d608f452462d3aad5d6e334b7ab2b09a6bdcfe8d101fe77ac7aacca4261e languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" +"@babel/plugin-transform-numeric-separator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-numeric-separator": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 561b5f1d08b2c3f92ce849f092751558b5e6cfeb7eb55c79e7375c34dd9c3066dce5e630bb439affef6adcf202b6cbcaaa23870070276fa5bb429c8f5b8c7514 + checksum: 3247bd7d409574fc06c59e0eb573ae7470d6d61ecf780df40b550102bb4406747d8f39dcbec57eb59406df6c565a86edd3b429e396ad02e4ce201ad92050832e languageName: node linkType: hard "@babel/plugin-transform-object-assign@npm:^7.18.6": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-assign@npm:7.24.7" + version: 7.24.1 + resolution: "@babel/plugin-transform-object-assign@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e208760295511ba086131dd828903b2f1b12724a8bdbb6708b62534c17b3796d8ba4d38820d1b75a8861b3dbd8cccda7d17324c6796d42e2a4f33ae12dc68838 + checksum: 88f56168f621501dc1aa796d569c76042367c2c3cb2c24f1419ed0783055a393f5722216a87abd9793365a0bd29b42a4e8055e93432c4b3657e6b5a22fe61c6f languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1" dependencies: - "@babel/helper-compilation-targets": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-parameters": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 169d257b9800c13e1feb4c37fb05dae84f702e58b342bb76e19e82e6692b7b5337c9923ee89e3916a97c0dd04a3375bdeca14f5e126f110bbacbeb46d1886ca2 + checksum: d5d28b1f33c279a38299d34011421a4915e24b3846aa23a1aba947f1366ce673ddf8df09dd915e0f2c90c5327f798bf126dca013f8adff1fc8f09e18878b675a languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-super@npm:7.24.7" +"@babel/plugin-transform-object-super@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-object-super@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-replace-supers": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-replace-supers": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f71e607a830ee50a22fa1a2686524d3339440cf9dea63032f6efbd865cfe4e35000e1e3f3492459e5c986f7c0c07dc36938bf3ce61fc9ba5f8ab732d0b64ab37 + checksum: d34d437456a54e2a5dcb26e9cf09ed4c55528f2a327c5edca92c93e9483c37176e228d00d6e0cf767f3d6fdbef45ae3a5d034a7c59337a009e20ae541c8220fa languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7229f3a5a4facaab40f4fdfc7faabc157dc38a67d66bed7936599f4bc509e0bff636f847ac2aa45294881fce9cf8a0a460b85d2a465b7b977de9739fce9b18f6 + checksum: ff7c02449d32a6de41e003abb38537b4a1ad90b1eaa4c0b578cb1b55548201a677588a8c47f3e161c72738400ae811a6673ea7b8a734344755016ca0ac445dac languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" +"@babel/plugin-transform-optional-chaining@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 45e55e3a2fffb89002d3f89aef59c141610f23b60eee41e047380bffc40290b59f64fc649aa7ec5281f73d41b2065410d788acc6afaad2a9f44cad6e8af04442 + checksum: 0eb5f4abdeb1a101c0f67ef25eba4cce0978a74d8722f6222cdb179a28e60d21ab545eda231855f50169cd63d604ec8268cff44ae9370fd3a499a507c56c2bbd languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-parameters@npm:7.24.7" +"@babel/plugin-transform-parameters@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-parameters@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ab534b03ac2eff94bc79342b8f39a4584666f5305a6c63c1964afda0b1b004e6b861e49d1683548030defe248e3590d3ff6338ee0552cb90c064f7e1479968c3 + checksum: d183008e67b1a13b86c92fb64327a75cd8e13c13eb80d0b6952e15806f1b0c4c456d18360e451c6af73485b2c8f543608b0a29e5126c64eb625a31e970b65f80 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" +"@babel/plugin-transform-private-methods@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.25.4 - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-create-class-features-plugin": ^7.24.1 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: cb1dabfc03e2977990263d65bc8f43a9037dffbb5d9a5f825c00d05447ff68015099408c1531d9dd88f18a41a90f5062dc48f3a1d52b415d2d2ee4827dedff09 + checksum: 7208c30bb3f3fbc73fb3a88bdcb78cd5cddaf6d523eb9d67c0c04e78f6fc6319ece89f4a5abc41777ceab16df55b3a13a4120e0efc9275ca6d2d89beaba80aa0 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-create-class-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.24.1 + "@babel/helper-plugin-utils": ^7.24.0 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8cee9473095305cc787bb653fd681719b49363281feabf677db8a552e8e41c94441408055d7e5fd5c7d41b315e634fa70b145ad0c7c54456216049df4ed57350 + checksum: 47c123ca9975f7f6b20e6fe8fe89f621cd04b622539faf5ec037e2be7c3d53ce2506f7c785b1930dcdea11994eff79094a02715795218c7d6a0bdc11f2fb3ac2 languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" +"@babel/plugin-transform-property-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9aeefc3aab6c6bf9d1fae1cf3a2d38c7d886fd3c6c81b7c608c477f5758aee2e7abf52f32724310fe861da61af934ee2508b78a5b5f234b9740c9134e1c14437 + checksum: a73646d7ecd95b3931a3ead82c7d5efeb46e68ba362de63eb437d33531f294ec18bd31b6d24238cd3b6a3b919a6310c4a0ba4a2629927721d4d10b0518eb7715 languageName: node linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.12.1": - version: 7.25.1 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.25.1" + version: 7.24.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6126abf8bc3980c1e27fd217f8b2f226b20cce9be300eaf9d30548556dd1e906b7daa4580d9ae1dae35eb5ed5c98e7222e0cb91efb0a232d05aae5875dcfe55c + checksum: 37fd10113b786a2462cf15366aa3a11a2a5bdba9bf8881b2544941f5ad6175ebc31116be5a53549c9fce56a08ded6e0b57adb45d6e42efb55d3bc0ff7afdd433 languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" +"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a05bf83bf5e7b31f7a3b56da1bf8e2eeec76ef52ae44435ceff66363a1717fcda45b7b4b931a2c115982175f481fc3f2d0fab23f0a43c44e6d983afc396858f0 + checksum: d87ac36073f923a25de0ed3cffac067ec5abc4cde63f7f4366881388fbea6dcbced0e4fefd3b7e99edfe58a4ce32ea4d4c523a577d2b9f0515b872ed02b3d8c3 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" +"@babel/plugin-transform-react-jsx-development@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" dependencies: - "@babel/plugin-transform-react-jsx": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 653d32ea5accb12d016e324ec5a584b60a8f39e60c6a5101194b73553fdefbfa3c3f06ec2410216ec2033fddae181a2f146a1d6ed59f075c488fc4570cad2e7b + checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" +"@babel/plugin-transform-react-jsx-self@npm:^7.23.3": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2d72c33664e614031b8a03fc2d4cfd185e99efb1d681cbde4b0b4ab379864b31d83ee923509892f6d94b2c5893c309f0217d33bcda3e470ed42297f958138381 + checksum: a0ff893b946bb0e501ad5aab43ce4b321ed9e74b94c0bc7191e2ee6409014fc96ee1a47dcb1ecdf445c44868564667ae16507ed4516dcacf6aa9c37a0ad28382 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" +"@babel/plugin-transform-react-jsx-source@npm:^7.23.3": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c9afcb2259dd124a2de76f8a578589c18bd2f24dbcf78fe02b53c5cbc20c493c4618369604720e4e699b52be10ba0751b97140e1ef8bc8f0de0a935280e9d5b7 + checksum: 396ce878dc588e74113d38c5a1773e0850bb878a073238a74f8cdf62d968d56a644f5485bf4032dc095fe8863fe2bd9fbbbab6abc3adf69542e038ac5c689d4c languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.24.7": - version: 7.25.2 - resolution: "@babel/plugin-transform-react-jsx@npm:7.25.2" +"@babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/plugin-syntax-jsx": ^7.24.7 - "@babel/types": ^7.25.2 + "@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 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 44fbde046385916de19a88d77fed9121c6cc6e25b9cdc38a43d8e514a9b18cf391ed3de25e7d6a8996d3fe4c298e395edf856ee20efffaab3b70f8ce225fffa4 + checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" +"@babel/plugin-transform-react-pure-annotations@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d859ada3cbeb829fa3d9978a29b2d36657fcc9dcc1e4c3c3af84ec5a044a8f8db26ada406baa309e5d4d512aca53d07c520d991b891ff943bec7d8f01aae0419 + checksum: 06a6bfe80f1f36408d07dd80c48cf9f61177c8e5d814e80ddbe88cfad81a8b86b3110e1fe9d1ac943db77e74497daa7f874b5490c788707106ad26ecfbe44813 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" +"@babel/plugin-transform-regenerator@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 regenerator-transform: ^0.15.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 20c6c3fb6fc9f407829087316653388d311e8c1816b007609bb09aeef254092a7157adace8b3aaa8f34be752503717cb85c88a5fe482180a9b11bcbd676063be + checksum: a04319388a0a7931c3f8e15715d01444c32519692178b70deccc86d53304e74c0f589a4268f6c68578d86f75e934dd1fe6e6ed9071f54ee8379f356f88ef6e42 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" +"@babel/plugin-transform-reserved-words@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3d5876954d5914d7270819479504f30c4bf5452a65c677f44e2dab2db50b3c9d4b47793c45dfad7abf4f377035dd79e4b3f554ae350df9f422201d370ce9f8dd + checksum: 132c6040c65aabae2d98a39289efb5c51a8632546dc50d2ad032c8660aec307fbed74ef499856ea4f881fc8505905f49b48e0270585da2ea3d50b75e962afd89 languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-runtime@npm:7.25.4" + version: 7.24.3 + resolution: "@babel/plugin-transform-runtime@npm:7.24.3" dependencies: - "@babel/helper-module-imports": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-module-imports": ^7.24.3 + "@babel/helper-plugin-utils": ^7.24.0 babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-corejs3: ^0.10.1 babel-plugin-polyfill-regenerator: ^0.6.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 40ea3519840c1b2062fc53dd0e4ce2b37cd43995bfc8bbb741f1985622138fbfd873307217692d7bf3ab0629faf0ce277e302e8446673fddaf470d3e07dd0fb2 + checksum: 719112524e6fe3e665385ad4425530dadb2ddee839023381ed9d77edf5ce2748f32cc0e38dacda1990c56a7ae0af4de6cdca2413ffaf307e9f75f8d2200d09a2 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7b524245814607188212b8eb86d8c850e5974203328455a30881b4a92c364b93353fae14bc2af5b614ef16300b75b8c1d3b8f3a08355985b4794a7feb240adc3 + checksum: 006a2032d1c57dca76579ce6598c679c2f20525afef0a36e9d42affe3c8cf33c1427581ad696b519cc75dfee46c5e8ecdf0c6a29ffb14250caa3e16dd68cb424 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-spread@npm:7.24.7" +"@babel/plugin-transform-spread@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-spread@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4c4254c8b9cceb1a8f975fa9b92257ddb08380a35c0a3721b8f4b9e13a3d82e403af2e0fba577b9f2452dd8f06bc3dea71cc53b1e2c6af595af5db52a13429d6 + checksum: 622ef507e2b5120a9010b25d3df5186c06102ecad8751724a38ec924df8d3527688198fa490c47064eabba14ef2f961b3069855bd22a8c0a1e51a23eed348d02 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" +"@babel/plugin-transform-sticky-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 118fc7a7ebf7c20411b670c8a030535fdfe4a88bc5643bb625a584dbc4c8a468da46430a20e6bf78914246962b0f18f1b9d6a62561a7762c4f34a038a5a77179 + checksum: e326e96a9eeb6bb01dbc4d3362f989411490671b97f62edf378b8fb102c463a018b777f28da65344d41b22aa6efcdfa01ed43d2b11fdcf202046d3174be137c5 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" +"@babel/plugin-transform-template-literals@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ad44e5826f5a98c1575832dbdbd033adfe683cdff195e178528ead62507564bf02f479b282976cfd3caebad8b06d5fd7349c1cdb880dec3c56daea4f1f179619 + checksum: 4c9009c72321caf20e3b6328bbe9d7057006c5ae57b794cf247a37ca34d87dfec5e27284169a16df5a6235a083bf0f3ab9e1bfcb005d1c8b75b04aed75652621 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" +"@babel/plugin-transform-typeof-symbol@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8663a8e7347cedf181001d99c88cf794b6598c3d82f324098510fe8fb8bd22113995526a77aa35a3cc5d70ffd0617a59dd0d10311a9bf0e1a3a7d3e59b900c00 + checksum: 90251c02986aebe50937522a6e404cb83db1b1feda17c0244e97d6429ded1634340c8411536487d14c54495607e1b7c9dc4db4aed969d519f1ff1e363f9c2229 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.24.7": - version: 7.25.2 - resolution: "@babel/plugin-transform-typescript@npm:7.25.2" +"@babel/plugin-transform-typescript@npm:^7.24.1": + version: 7.24.4 + resolution: "@babel/plugin-transform-typescript@npm:7.24.4" dependencies: - "@babel/helper-annotate-as-pure": ^7.24.7 - "@babel/helper-create-class-features-plugin": ^7.25.0 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 - "@babel/plugin-syntax-typescript": ^7.24.7 + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.24.4 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/plugin-syntax-typescript": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b0267128d93560a4350919f7230a3b497e20fb8611d9f04bb3560d6b38877305ccad4c40903160263361c6930a84dbcb5b21b8ea923531bda51f67bffdc2dd0b + checksum: 57a9a776b1910c706d28972e4b056ced3af8fc59c29b2a6205c2bb2a408141ddb59a8f2f6041f8467a7b260942818767f4ecabb9f63adf7fddf2afa25e774dfc languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4af0a193e1ddea6ff82b2b15cc2501b872728050bd625740b813c8062fec917d32d530ff6b41de56c15e7296becdf3336a58db81f5ca8e7c445c1306c52f3e01 + checksum: d4d7cfea91af7be2768fb6bed902e00d6e3190bda738b5149c3a788d570e6cf48b974ec9548442850308ecd8fc9a67681f4ea8403129e7867bcb85adaf6ec238 languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: aae13350c50973f5802ca7906d022a6a0cc0e3aebac9122d0450bbd51e78252d4c2032ad69385e2759fcbdd3aac5d571bd7e26258907f51f8e1a51b53be626c2 + checksum: 276099b4483e707f80b054e2d29bc519158bfe52461ef5ff76f70727d592df17e30b1597ef4d8a0f04d810f6cb5a8dd887bdc1d0540af3744751710ef280090f languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.24.7 - "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1cb4e70678906e431da0a05ac3f8350025fee290304ad7482d9cfaa1ca67b2e898654de537c9268efbdad5b80d3ebadf42b4a88ea84609bd8a4cce7b11b48afd + checksum: 400a0927bdb1425b4c0dc68a61b5b2d7d17c7d9f0e07317a1a6a373c080ef94be1dd65fdc4ac9a78fcdb58f89fd128450c7bc0d5b8ca0ae7eca3fbd98e50acba languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.25.2 - "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-create-regexp-features-plugin": ^7.22.15 + "@babel/helper-plugin-utils": ^7.24.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6d1a7e9fdde4ffc9a81c0e3f261b96a9a0dfe65da282ec96fe63b36c597a7389feac638f1df2a8a4f8c9128337bba8e984f934e9f19077930f33abf1926759ea + checksum: 364342fb8e382dfaa23628b88e6484dc1097e53fb7199f4d338f1e2cd71d839bb0a35a9b1380074f6a10adb2e98b79d53ca3ec78c0b8c557ca895ffff42180df languageName: node linkType: hard "@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4": - version: 7.25.4 - resolution: "@babel/preset-env@npm:7.25.4" - dependencies: - "@babel/compat-data": ^7.25.4 - "@babel/helper-compilation-targets": ^7.25.2 - "@babel/helper-plugin-utils": ^7.24.8 - "@babel/helper-validator-option": ^7.24.8 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.3 - "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.0 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.0 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.0 + version: 7.24.4 + resolution: "@babel/preset-env@npm:7.24.4" + dependencies: + "@babel/compat-data": ^7.24.4 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-validator-option": ^7.23.5 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.4 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.1 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.1 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.1 "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-class-properties": ^7.12.13 "@babel/plugin-syntax-class-static-block": ^7.14.5 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.24.7 - "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-assertions": ^7.24.1 + "@babel/plugin-syntax-import-attributes": ^7.24.1 "@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 @@ -1535,64 +1537,63 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": ^7.14.5 "@babel/plugin-syntax-top-level-await": ^7.14.5 "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.24.7 - "@babel/plugin-transform-async-generator-functions": ^7.25.4 - "@babel/plugin-transform-async-to-generator": ^7.24.7 - "@babel/plugin-transform-block-scoped-functions": ^7.24.7 - "@babel/plugin-transform-block-scoping": ^7.25.0 - "@babel/plugin-transform-class-properties": ^7.25.4 - "@babel/plugin-transform-class-static-block": ^7.24.7 - "@babel/plugin-transform-classes": ^7.25.4 - "@babel/plugin-transform-computed-properties": ^7.24.7 - "@babel/plugin-transform-destructuring": ^7.24.8 - "@babel/plugin-transform-dotall-regex": ^7.24.7 - "@babel/plugin-transform-duplicate-keys": ^7.24.7 - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.0 - "@babel/plugin-transform-dynamic-import": ^7.24.7 - "@babel/plugin-transform-exponentiation-operator": ^7.24.7 - "@babel/plugin-transform-export-namespace-from": ^7.24.7 - "@babel/plugin-transform-for-of": ^7.24.7 - "@babel/plugin-transform-function-name": ^7.25.1 - "@babel/plugin-transform-json-strings": ^7.24.7 - "@babel/plugin-transform-literals": ^7.25.2 - "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 - "@babel/plugin-transform-member-expression-literals": ^7.24.7 - "@babel/plugin-transform-modules-amd": ^7.24.7 - "@babel/plugin-transform-modules-commonjs": ^7.24.8 - "@babel/plugin-transform-modules-systemjs": ^7.25.0 - "@babel/plugin-transform-modules-umd": ^7.24.7 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 - "@babel/plugin-transform-new-target": ^7.24.7 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 - "@babel/plugin-transform-numeric-separator": ^7.24.7 - "@babel/plugin-transform-object-rest-spread": ^7.24.7 - "@babel/plugin-transform-object-super": ^7.24.7 - "@babel/plugin-transform-optional-catch-binding": ^7.24.7 - "@babel/plugin-transform-optional-chaining": ^7.24.8 - "@babel/plugin-transform-parameters": ^7.24.7 - "@babel/plugin-transform-private-methods": ^7.25.4 - "@babel/plugin-transform-private-property-in-object": ^7.24.7 - "@babel/plugin-transform-property-literals": ^7.24.7 - "@babel/plugin-transform-regenerator": ^7.24.7 - "@babel/plugin-transform-reserved-words": ^7.24.7 - "@babel/plugin-transform-shorthand-properties": ^7.24.7 - "@babel/plugin-transform-spread": ^7.24.7 - "@babel/plugin-transform-sticky-regex": ^7.24.7 - "@babel/plugin-transform-template-literals": ^7.24.7 - "@babel/plugin-transform-typeof-symbol": ^7.24.8 - "@babel/plugin-transform-unicode-escapes": ^7.24.7 - "@babel/plugin-transform-unicode-property-regex": ^7.24.7 - "@babel/plugin-transform-unicode-regex": ^7.24.7 - "@babel/plugin-transform-unicode-sets-regex": ^7.25.4 + "@babel/plugin-transform-arrow-functions": ^7.24.1 + "@babel/plugin-transform-async-generator-functions": ^7.24.3 + "@babel/plugin-transform-async-to-generator": ^7.24.1 + "@babel/plugin-transform-block-scoped-functions": ^7.24.1 + "@babel/plugin-transform-block-scoping": ^7.24.4 + "@babel/plugin-transform-class-properties": ^7.24.1 + "@babel/plugin-transform-class-static-block": ^7.24.4 + "@babel/plugin-transform-classes": ^7.24.1 + "@babel/plugin-transform-computed-properties": ^7.24.1 + "@babel/plugin-transform-destructuring": ^7.24.1 + "@babel/plugin-transform-dotall-regex": ^7.24.1 + "@babel/plugin-transform-duplicate-keys": ^7.24.1 + "@babel/plugin-transform-dynamic-import": ^7.24.1 + "@babel/plugin-transform-exponentiation-operator": ^7.24.1 + "@babel/plugin-transform-export-namespace-from": ^7.24.1 + "@babel/plugin-transform-for-of": ^7.24.1 + "@babel/plugin-transform-function-name": ^7.24.1 + "@babel/plugin-transform-json-strings": ^7.24.1 + "@babel/plugin-transform-literals": ^7.24.1 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.1 + "@babel/plugin-transform-member-expression-literals": ^7.24.1 + "@babel/plugin-transform-modules-amd": ^7.24.1 + "@babel/plugin-transform-modules-commonjs": ^7.24.1 + "@babel/plugin-transform-modules-systemjs": ^7.24.1 + "@babel/plugin-transform-modules-umd": ^7.24.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.24.1 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.1 + "@babel/plugin-transform-numeric-separator": ^7.24.1 + "@babel/plugin-transform-object-rest-spread": ^7.24.1 + "@babel/plugin-transform-object-super": ^7.24.1 + "@babel/plugin-transform-optional-catch-binding": ^7.24.1 + "@babel/plugin-transform-optional-chaining": ^7.24.1 + "@babel/plugin-transform-parameters": ^7.24.1 + "@babel/plugin-transform-private-methods": ^7.24.1 + "@babel/plugin-transform-private-property-in-object": ^7.24.1 + "@babel/plugin-transform-property-literals": ^7.24.1 + "@babel/plugin-transform-regenerator": ^7.24.1 + "@babel/plugin-transform-reserved-words": ^7.24.1 + "@babel/plugin-transform-shorthand-properties": ^7.24.1 + "@babel/plugin-transform-spread": ^7.24.1 + "@babel/plugin-transform-sticky-regex": ^7.24.1 + "@babel/plugin-transform-template-literals": ^7.24.1 + "@babel/plugin-transform-typeof-symbol": ^7.24.1 + "@babel/plugin-transform-unicode-escapes": ^7.24.1 + "@babel/plugin-transform-unicode-property-regex": ^7.24.1 + "@babel/plugin-transform-unicode-regex": ^7.24.1 + "@babel/plugin-transform-unicode-sets-regex": ^7.24.1 "@babel/preset-modules": 0.1.6-no-external-plugins babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-corejs3: ^0.10.4 babel-plugin-polyfill-regenerator: ^0.6.1 - core-js-compat: ^3.37.1 + core-js-compat: ^3.31.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 752be43f0b78a2eefe5007076aed3d21b505e1c09d134b61e7de8838f1bbb1e7af81023d39adb14b6eae23727fb5a9fd23f8115a44df043319be22319be17913 + checksum: 5a057a6463f92b02bfe66257d3f2c76878815bc7847f2a716b0539d9f547eae2a9d1f0fc62a5c0eff6ab0504bb52e815829ef893e4586b641f8dd6a609d114f3 languageName: node linkType: hard @@ -1610,33 +1611,33 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6": - version: 7.24.7 - resolution: "@babel/preset-react@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-validator-option": ^7.24.7 - "@babel/plugin-transform-react-display-name": ^7.24.7 - "@babel/plugin-transform-react-jsx": ^7.24.7 - "@babel/plugin-transform-react-jsx-development": ^7.24.7 - "@babel/plugin-transform-react-pure-annotations": ^7.24.7 + version: 7.24.1 + resolution: "@babel/preset-react@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-validator-option": ^7.23.5 + "@babel/plugin-transform-react-display-name": ^7.24.1 + "@babel/plugin-transform-react-jsx": ^7.23.4 + "@babel/plugin-transform-react-jsx-development": ^7.22.5 + "@babel/plugin-transform-react-pure-annotations": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 76d0365b6bca808be65c4ccb3f3384c0792084add15eb537f16b3e44184216b82fa37f945339b732ceee6f06e09ba1f39f75c45e69b9811ddcc479f05555ea9c + checksum: 70e146a6de480cb4b6c5eb197003960a2d148d513e1f5b5d04ee954f255d68c935c2800da13e550267f47b894bd0214b2548181467b52a4bdc0a85020061b68c languageName: node linkType: hard "@babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.18.6": - version: 7.24.7 - resolution: "@babel/preset-typescript@npm:7.24.7" - dependencies: - "@babel/helper-plugin-utils": ^7.24.7 - "@babel/helper-validator-option": ^7.24.7 - "@babel/plugin-syntax-jsx": ^7.24.7 - "@babel/plugin-transform-modules-commonjs": ^7.24.7 - "@babel/plugin-transform-typescript": ^7.24.7 + version: 7.24.1 + resolution: "@babel/preset-typescript@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-validator-option": ^7.23.5 + "@babel/plugin-syntax-jsx": ^7.24.1 + "@babel/plugin-transform-modules-commonjs": ^7.24.1 + "@babel/plugin-transform-typescript": ^7.24.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 12929b24757f3bd6548103475f86478eda4c872bc7cefd920b29591eee8f4a4f350561d888e133d632d0c9402b8615fdcec9138e5127a6567dcb22f804ff207f + checksum: f3e0ff8c20dd5abc82614df2d7953f1549a98282b60809478f7dfb41c29be63720f2d1d7a51ef1f0d939b65e8666cb7d36e32bc4f8ac2b74c20664efd41e8bdd languageName: node linkType: hard @@ -1648,58 +1649,61 @@ __metadata: linkType: hard "@babel/runtime-corejs3@npm:^7.10.2": - version: 7.25.6 - resolution: "@babel/runtime-corejs3@npm:7.25.6" + version: 7.24.4 + resolution: "@babel/runtime-corejs3@npm:7.24.4" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: 54d60c4eadfb58420dc88fb5bbba97910bb08bac316085ea74ee40584b56a9d9c1fb0f608862b8fef71c05837aaac9c2ed19504adfd72011f9740fe5d57733ae + checksum: 0c2e7c477de3dbf5cc6f2434cee3d78a34d87e8f1e2ea65840eb948d00f7d6968e0ef055449adf372a39d6214f8b9b2532506149b9d0e7ea3d09b1b84678ae6c languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.24.6, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.25.6 - resolution: "@babel/runtime@npm:7.25.6" +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.24.4 + resolution: "@babel/runtime@npm:7.24.4" dependencies: regenerator-runtime: ^0.14.0 - checksum: ee1a69d3ac7802803f5ee6a96e652b78b8addc28c6a38c725a4ad7d61a059d9e6cb9f6550ed2f63cce67a1bd82e0b1ef66a1079d895be6bfb536a5cfbd9ccc32 + checksum: 2f27d4c0ffac7ae7999ac0385e1106f2a06992a8bdcbf3da06adcac7413863cd08c198c2e4e970041bbea849e17f02e1df18875539b6afba76c781b6b59a07c3 languageName: node linkType: hard -"@babel/template@npm:^7.10.4, @babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" +"@babel/template@npm:^7.10.4, @babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/parser": ^7.25.0 - "@babel/types": ^7.25.0 - checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b + "@babel/code-frame": ^7.23.5 + "@babel/parser": ^7.24.0 + "@babel/types": ^7.24.0 + checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 languageName: node linkType: hard -"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4, @babel/traverse@npm:^7.7.0": - version: 7.25.6 - resolution: "@babel/traverse@npm:7.25.6" +"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.7.0": + version: 7.24.1 + resolution: "@babel/traverse@npm:7.24.1" dependencies: - "@babel/code-frame": ^7.24.7 - "@babel/generator": ^7.25.6 - "@babel/parser": ^7.25.6 - "@babel/template": ^7.25.0 - "@babel/types": ^7.25.6 + "@babel/code-frame": ^7.24.1 + "@babel/generator": ^7.24.1 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.24.1 + "@babel/types": ^7.24.0 debug: ^4.3.1 globals: ^11.1.0 - checksum: 11ee47269aa4356f2d6633a05b9af73405b5ed72c09378daf644289b686ef852035a6ac9aa410f601991993c6bbf72006795b5478283b78eb1ca77874ada7737 + checksum: 92a5ca906abfba9df17666d2001ab23f18600035f706a687055a0e392a690ae48d6fec67c8bd4ef19ba18699a77a5b7f85727e36b83f7d110141608fe0c24fe9 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": - version: 7.25.6 - resolution: "@babel/types@npm:7.25.6" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" dependencies: - "@babel/helper-string-parser": ^7.24.8 - "@babel/helper-validator-identifier": ^7.24.7 + "@babel/helper-string-parser": ^7.23.4 + "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: 9b2f84ff3f874ad05b0b9bf06862c56f478b65781801f82296b4cc01bee39e79c20a7c0a06959fed0ee582c8267e1cb21638318655c5e070b0287242a844d1c9 + checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807 languageName: node linkType: hard @@ -1745,149 +1749,149 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.12.0": - version: 11.12.0 - resolution: "@emotion/babel-plugin@npm:11.12.0" +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" 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.2.0 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/serialize": ^1.1.2 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 - checksum: b5d4b3dfe97e6763794a42b5c3a027a560caa1aa6dcaf05c18e5969691368dd08245c077bad7397dcc720b53d29caeaaec1888121e68cfd9ab02ff52f6fef662 + checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 languageName: node linkType: hard -"@emotion/cache@npm:^11.11.0, @emotion/cache@npm:^11.13.0": - version: 11.13.1 - resolution: "@emotion/cache@npm:11.13.1" +"@emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" dependencies: - "@emotion/memoize": ^0.9.0 - "@emotion/sheet": ^1.4.0 - "@emotion/utils": ^1.4.0 - "@emotion/weak-memoize": ^0.4.0 + "@emotion/memoize": ^0.8.1 + "@emotion/sheet": ^1.2.2 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 stylis: 4.2.0 - checksum: 94b161786a03a08a1e30257478fad9a9be1ac8585ddca0c6410d7411fd474fc8b0d6d1167d7d15bdb012d1fd8a1220ac2bbc79501ad9b292b83c17da0874d7de + checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 languageName: node linkType: hard -"@emotion/hash@npm:^0.9.2": - version: 0.9.2 - resolution: "@emotion/hash@npm:0.9.2" - checksum: 379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.3.0": - version: 1.3.1 - resolution: "@emotion/is-prop-valid@npm:1.3.1" +"@emotion/is-prop-valid@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" dependencies: - "@emotion/memoize": ^0.9.0 - checksum: fe6549d54f389e1a17cb02d832af7ee85fb6ea126fc18d02ca47216e8ff19332c1983f4a0ba68602cfcd3b325ffd4ebf0b2d0c6270f1e7e6fe3fca4ba7741e1a + "@emotion/memoize": ^0.8.1 + checksum: 61f6b128ea62b9f76b47955057d5d86fcbe2a6989d2cd1e583daac592901a950475a37d049b9f7a7c6aa8758a33b408735db759fdedfd1f629df0f85ab60ea25 languageName: node linkType: hard -"@emotion/memoize@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/memoize@npm:0.9.0" - checksum: 038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 languageName: node linkType: hard "@emotion/react@npm:^11.10.4": - version: 11.13.3 - resolution: "@emotion/react@npm:11.13.3" + version: 11.11.4 + resolution: "@emotion/react@npm:11.11.4" dependencies: "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.12.0 - "@emotion/cache": ^11.13.0 - "@emotion/serialize": ^1.3.1 - "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 - "@emotion/utils": ^1.4.0 - "@emotion/weak-memoize": ^0.4.0 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/cache": ^11.11.0 + "@emotion/serialize": ^1.1.3 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 hoist-non-react-statics: ^3.3.1 peerDependencies: react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 0b58374bf28de914b49881f0060acfb908989869ebab63a2287773fc5e91a39f15552632b03d376c3e9835c5b4f23a5ebac8b0963b29af164d46c0a77ac928f0 + checksum: 6abaa7a05c5e1db31bffca7ac79169f5456990022cbb3794e6903221536609a60420f2b4888dd3f84e9634a304e394130cb88dc32c243a1dedc263e50da329f8 languageName: node linkType: hard -"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": - version: 1.3.2 - resolution: "@emotion/serialize@npm:1.3.2" +"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": + version: 1.1.4 + resolution: "@emotion/serialize@npm:1.1.4" dependencies: - "@emotion/hash": ^0.9.2 - "@emotion/memoize": ^0.9.0 - "@emotion/unitless": ^0.10.0 - "@emotion/utils": ^1.4.1 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/unitless": ^0.8.1 + "@emotion/utils": ^1.2.1 csstype: ^3.0.2 - checksum: 8051bafe32459e1aecf716cdb66a22b090060806104cca89d4e664893b56878d3e9bb94a4657df9b7b3fd183700a9be72f7144c959ddcbd3cf7b330206919237 + checksum: 71b99f816a9c1d61a87c62cf4928da3894bb62213f3aff38b1ea9790b3368f084af98a3e5453b5055c2f36a7d70318d2fa9955b7b5676c2065b868062375df39 languageName: node linkType: hard -"@emotion/sheet@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/sheet@npm:1.4.0" - checksum: eeb1212e3289db8e083e72e7e401cd6d1a84deece87e9ce184f7b96b9b5dbd6f070a89057255a6ff14d9865c3ce31f27c39248a053e4cdd875540359042586b4 +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe languageName: node linkType: hard "@emotion/styled@npm:^11.10.4": - version: 11.13.0 - resolution: "@emotion/styled@npm:11.13.0" + version: 11.11.5 + resolution: "@emotion/styled@npm:11.11.5" dependencies: "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.12.0 - "@emotion/is-prop-valid": ^1.3.0 - "@emotion/serialize": ^1.3.0 - "@emotion/use-insertion-effect-with-fallbacks": ^1.1.0 - "@emotion/utils": ^1.4.0 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/is-prop-valid": ^1.2.2 + "@emotion/serialize": ^1.1.4 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 peerDependencies: "@emotion/react": ^11.0.0-rc.0 react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: f5b951059418f57bc8ea32b238afb25965ece3314f2ffd1b14ce049ba3c066a424990dfbfabbf57bb88e044eaa80bf19f620ac988adda3d2fc483177be6da05e + checksum: ad5fc42d00e8aa9597f6d9665986036d5ebe0e8f8155af6d95831c5e8fb2319fb837724e6c5cd59e5346f14c3263711b7ce7271d34688e974d1f32ffeecb37ba languageName: node linkType: hard -"@emotion/unitless@npm:^0.10.0": - version: 0.10.0 - resolution: "@emotion/unitless@npm:0.10.0" - checksum: d79346df31a933e6d33518e92636afeb603ce043f3857d0a39a2ac78a09ef0be8bedff40130930cb25df1beeee12d96ee38613963886fa377c681a89970b787c +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" peerDependencies: react: ">=16.8.0" - checksum: 63665191773b27de66807c53b90091ef0d10d5161381f62726cfceecfe1d8c944f18594b8021805fc81575b64246fd5ab9c75d60efabec92f940c1c410530949 + checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 languageName: node linkType: hard -"@emotion/utils@npm:^1.4.0, @emotion/utils@npm:^1.4.1": - version: 1.4.1 - resolution: "@emotion/utils@npm:1.4.1" - checksum: 088f6844c735981f53c84a76101cf261422301e7895cb37fea6a47e7950247ffa8ca174ca2a15d9b29a47f0fa831b432017ca7683bccbb5cfd78dda82743d856 +"@emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 languageName: node linkType: hard -"@emotion/weak-memoize@npm:^0.4.0": - version: 0.4.0 - resolution: "@emotion/weak-memoize@npm:0.4.0" - checksum: db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 languageName: node linkType: hard @@ -2052,24 +2056,6 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.4.0": - version: 4.11.1 - resolution: "@eslint-community/regexpp@npm:4.11.1" - checksum: 6986685529d30e33c2640973c3d8e7ddd31bef3cc8cb10ad54ddc1dea12680779a2c23a45562aa1462c488137a3570e672d122fac7da22d82294382d915cec70 - languageName: node - linkType: hard - "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -2087,41 +2073,41 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^1.6.0": - version: 1.6.8 - resolution: "@floating-ui/core@npm:1.6.8" +"@floating-ui/core@npm:^1.0.0": + version: 1.6.0 + resolution: "@floating-ui/core@npm:1.6.0" dependencies: - "@floating-ui/utils": ^0.2.8 - checksum: 82faa6ea9d57e466779324e51308d6d49c098fb9d184a08d9bb7f4fad83f08cc070fc491f8d56f0cad44a16215fb43f9f829524288413e6c33afcb17303698de + "@floating-ui/utils": ^0.2.1 + checksum: 2e25c53b0c124c5c9577972f8ae21d081f2f7895e6695836a53074463e8c65b47722744d6d2b5a993164936da006a268bcfe87fe68fd24dc235b1cb86bed3127 languageName: node linkType: hard -"@floating-ui/dom@npm:^1.0.0": - version: 1.6.11 - resolution: "@floating-ui/dom@npm:1.6.11" +"@floating-ui/dom@npm:^1.6.1": + version: 1.6.3 + resolution: "@floating-ui/dom@npm:1.6.3" dependencies: - "@floating-ui/core": ^1.6.0 - "@floating-ui/utils": ^0.2.8 - checksum: d6413759abd06a541edfad829c45313f930310fe76a3322e74a00eb655e283db33fe3e65b5265c4072eb54db7447e11225acd355a9a02cabd1d1b0d5fc8fc21d + "@floating-ui/core": ^1.0.0 + "@floating-ui/utils": ^0.2.0 + checksum: 81cbb18ece3afc37992f436e469e7fabab2e433248e46fff4302d12493a175b0c64310f8a971e6e1eda7218df28ace6b70237b0f3c22fe12a21bba05b5579555 languageName: node linkType: hard "@floating-ui/react-dom@npm:^2.0.8": - version: 2.1.2 - resolution: "@floating-ui/react-dom@npm:2.1.2" + version: 2.0.8 + resolution: "@floating-ui/react-dom@npm:2.0.8" dependencies: - "@floating-ui/dom": ^1.0.0 + "@floating-ui/dom": ^1.6.1 peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 25bb031686e23062ed4222a8946e76b3f9021d40a48437bd747233c4964a766204b8a55f34fa8b259839af96e60db7c6e3714d81f1de06914294f90e86ffbc48 + checksum: 5da7f13a69281e38859a3203a608fe9de1d850b332b355c10c0c2427c7b7209a0374c10f6295b6577c1a70237af8b678340bd4cc0a4b1c66436a94755d81e526 languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.8": - version: 0.2.8 - resolution: "@floating-ui/utils@npm:0.2.8" - checksum: deb98bba017c4e073c7ad5740d4dec33a4d3e0942d412e677ac0504f3dade15a68fc6fd164d43c93c0bb0bcc5dc5015c1f4080dfb1a6161140fe660624f7c875 +"@floating-ui/utils@npm:^0.2.0, @floating-ui/utils@npm:^0.2.1": + version: 0.2.1 + resolution: "@floating-ui/utils@npm:0.2.1" + checksum: 9ed4380653c7c217cd6f66ae51f20fdce433730dbc77f95b5abfb5a808f5fdb029c6ae249b4e0490a816f2453aa6e586d9a873cd157fdba4690f65628efc6e06 languageName: node linkType: hard @@ -2174,24 +2160,6 @@ __metadata: languageName: node linkType: hard -"@hello-pangea/dnd@npm:^16.6.0": - version: 16.6.0 - resolution: "@hello-pangea/dnd@npm:16.6.0" - dependencies: - "@babel/runtime": ^7.24.1 - css-box-model: ^1.2.1 - memoize-one: ^6.0.0 - raf-schd: ^4.0.3 - react-redux: ^8.1.3 - redux: ^4.2.1 - use-memo-one: ^1.1.3 - peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 - checksum: 00dcf9c2a7632e56c13e4a38c888081f65cec6bac0640b975b6cd17f2afa8995e8df02735db6f17de3a7ade3779386fc8375d7cedc884f8704e2e6c2977ebcec - languageName: node - linkType: hard - "@hookform/resolvers@npm:^2.9.7": version: 2.9.11 resolution: "@hookform/resolvers@npm:2.9.11" @@ -2547,10 +2515,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard @@ -2600,16 +2568,38 @@ __metadata: languageName: node linkType: hard +"@mui/base@npm:5.0.0-beta.40": + version: 5.0.0-beta.40 + resolution: "@mui/base@npm:5.0.0-beta.40" + 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 + 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 + checksum: 9c084ee67de372411a71af5eca9a5367db9f5bce57bb43973629c522760fe64fa2a43d2934dccd24d6dcbcd0ed399c5fc5c461226c86104f5767de1c9b8deba2 + languageName: node + linkType: hard + "@mui/base@npm:^5.0.0-beta.22": - version: 5.0.0-dev.20240529-082515-213b5e33ab - resolution: "@mui/base@npm:5.0.0-dev.20240529-082515-213b5e33ab" + version: 5.0.0-beta.42 + resolution: "@mui/base@npm:5.0.0-beta.42" dependencies: - "@babel/runtime": ^7.24.6 + "@babel/runtime": ^7.24.4 "@floating-ui/react-dom": ^2.0.8 - "@mui/types": ^7.2.14-dev.20240529-082515-213b5e33ab - "@mui/utils": ^6.0.0-dev.20240529-082515-213b5e33ab + "@mui/types": ^7.2.14 + "@mui/utils": ^6.0.0-alpha.1 "@popperjs/core": ^2.11.8 - clsx: ^2.1.1 + clsx: ^2.1.0 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -2618,20 +2608,20 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 7ca5d369c5f4dfa2bb36fe49d721f3dc28a6d067bd74492e8f4531671ff9debe33bade579d0cdcb7d5f899bfc5003c8f710b1f9422edd22f06d805dbc68c9f4e + checksum: f7af6e6003a4a8502062607b7861490eb6dc3a1f617532c92521981329ae077535444d65e378718bbf59ce8b7a52fc32275dc794969c73bdb389e5d69155fc69 languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.16.7": - version: 5.16.7 - resolution: "@mui/core-downloads-tracker@npm:5.16.7" - checksum: b65c48ba2bf6bba6435ba9f2d6c33db0c8a85b3ff7599136a9682b72205bec76470ab5ed5e6e625d5bd012ed9bcbc641ed677548be80d217c9fb5d0435567062 +"@mui/core-downloads-tracker@npm:^5.15.15": + version: 5.15.15 + resolution: "@mui/core-downloads-tracker@npm:5.15.15" + checksum: 3e99a04e03f66d5fa5f0c23cdce0f9fa2331ba08c99a75dc2347ccaa1c6ed520153e04aaeb0d613c9dca099a3e6242558a6284c33d93f95cc65e3243b17860bc languageName: node linkType: hard "@mui/icons-material@npm:^5.10.3": - version: 5.16.7 - resolution: "@mui/icons-material@npm:5.16.7" + version: 5.15.15 + resolution: "@mui/icons-material@npm:5.15.15" dependencies: "@babel/runtime": ^7.23.9 peerDependencies: @@ -2641,25 +2631,25 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a875f2837897d79a83173d80461e06ab090b64d08913d26433cf2cbeb8e7c7456468632a7aa495d722718f09111a8043255777d73b4dfbe9e0f863a170fc7190 + checksum: 42d62fc94be25a361034a8974b1860608e866c155ff2eea7dc18f10a4acc71dbe2f48af3f0309a345ff6fb16be30c6fbc1d8a0a447c828aa1380a49e176a8803 languageName: node linkType: hard "@mui/material@npm:^5.10.3": - version: 5.16.7 - resolution: "@mui/material@npm:5.16.7" + version: 5.15.15 + resolution: "@mui/material@npm:5.15.15" dependencies: "@babel/runtime": ^7.23.9 - "@mui/core-downloads-tracker": ^5.16.7 - "@mui/system": ^5.16.7 - "@mui/types": ^7.2.15 - "@mui/utils": ^5.16.6 - "@popperjs/core": ^2.11.8 + "@mui/base": 5.0.0-beta.40 + "@mui/core-downloads-tracker": ^5.15.15 + "@mui/system": ^5.15.15 + "@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.3.1 + react-is: ^18.2.0 react-transition-group: ^4.4.5 peerDependencies: "@emotion/react": ^11.5.0 @@ -2674,16 +2664,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 5057b48c3ce554247de9a8f675bda9bbda079bc83a696c500525f3ebbd63315a44f1c2a7c83c2025dbd02d2722892e397a0af10c1219d45f6534e41d91a43cc0 + checksum: ee0dc22fc4d617f7cf69f2451b6d5139978e6c5319e3056e7719159aff786ee3b80abd07691e230371811d9b5b574aef4559d7855bfe2f8493d596d960a91ab7 languageName: node linkType: hard -"@mui/private-theming@npm:^5.16.6": - version: 5.16.6 - resolution: "@mui/private-theming@npm:5.16.6" +"@mui/private-theming@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/private-theming@npm:5.15.14" dependencies: "@babel/runtime": ^7.23.9 - "@mui/utils": ^5.16.6 + "@mui/utils": ^5.15.14 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -2691,13 +2681,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 314ba598ab17cd425a36e4cab677ed26fe0939b23e53120da77cfbc3be6dada5428fa8e2a55cb697417599a4e3abfee6d4711de0a7318b9fb2c3a822b2d5b5a8 + checksum: 1b1ef54e8281c9b13fcc58f4c39682efc610946a68402283c19fcfbce8a7d7a231d61b536d6df9bf7a59a1426591bd403a453a59eb8efb9689437fb58554dc8c languageName: node linkType: hard -"@mui/styled-engine@npm:^5.16.6": - version: 5.16.6 - resolution: "@mui/styled-engine@npm:5.16.6" +"@mui/styled-engine@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/styled-engine@npm:5.15.14" dependencies: "@babel/runtime": ^7.23.9 "@emotion/cache": ^11.11.0 @@ -2712,19 +2702,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: 604f83b91801945336db211a8273061132668d01e9f456c30bb811a3b49cc5786b8b7dd8e0b5b89de15f6209abc900d9e679d3ae7a4651a6df45e323b6ed95c5 + checksum: 23b45c859a4f0d2b10933d06a6082c0ff093f7b6d8d32a2bfe3a6e515fe46d7a38ca9e7150d45c025a2e98d963bae9a5991d131cf4748b62670075ef0fa321ed languageName: node linkType: hard -"@mui/system@npm:^5.10.16, @mui/system@npm:^5.16.7": - version: 5.16.7 - resolution: "@mui/system@npm:5.16.7" +"@mui/system@npm:^5.10.16, @mui/system@npm:^5.15.15": + version: 5.15.15 + resolution: "@mui/system@npm:5.15.15" dependencies: "@babel/runtime": ^7.23.9 - "@mui/private-theming": ^5.16.6 - "@mui/styled-engine": ^5.16.6 - "@mui/types": ^7.2.15 - "@mui/utils": ^5.16.6 + "@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 @@ -2740,59 +2730,55 @@ __metadata: optional: true "@types/react": optional: true - checksum: 86cc11d062645b6742328178ca3a9e2aa2c6d064a559e4fb8c6c6bb8251794959b9dad385f9508fdcab2ae2764503c80f7c3d4f6eb1e0e8aa649f28d4f59133b + checksum: 9ca96d5f66b2a9d6471909cc98c671eea5ec0a6d58a7ec071073b9e5200b95c3f017f0ca5cc946abc7f83074bd11830ca18f5e30bc98e25cd6ca217bd1b3a26f languageName: node linkType: hard -"@mui/types@npm:^7.2.14-dev.20240529-082515-213b5e33ab, @mui/types@npm:^7.2.15, @mui/types@npm:^7.2.17": - version: 7.2.17 - resolution: "@mui/types@npm:7.2.17" +"@mui/types@npm:^7.2.14": + version: 7.2.14 + resolution: "@mui/types@npm:7.2.14" peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + "@types/react": ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 21b7f7639f05663f4ba9baa75f8a3f2fbb1e675e0fa4a4ef3b97acdcb81b6290c04b5515d2ae719e8ed2397bbe379f9fb665c74b209a2181fcccd2f83483dd85 + checksum: 615c9f9110933157f5d3c4fee69d6e70b98fc0d9ebc3b63079b6a1e23e6b389748687a25ab4ac15b56166fc228885da87c3929503b41fa322cfdee0f6d411206 languageName: node linkType: hard -"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.16.6": - version: 5.16.6 - resolution: "@mui/utils@npm:5.16.6" +"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/utils@npm:5.15.14" dependencies: "@babel/runtime": ^7.23.9 - "@mui/types": ^7.2.15 - "@types/prop-types": ^15.7.12 - clsx: ^2.1.1 + "@types/prop-types": ^15.7.11 prop-types: ^15.8.1 - react-is: ^18.3.1 + react-is: ^18.2.0 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 6f8068f07f60a842fcb2e2540eecbd9c5f04df695bcc427184720e8ae138ae689fefd3c20147ab7c76e809ede6e10f5e08d1c34cd3a8b09bd22d2020a666a96f + checksum: 36543ba7e3b65fb3219ed27e8f1455aff15b47a74c9b642c63e60774e22baa6492a196079e72bcfa5a570421dab32160398f892110bd444428bcf8b266b11893 languageName: node linkType: hard -"@mui/utils@npm:^6.0.0-dev.20240529-082515-213b5e33ab": - version: 6.1.1 - resolution: "@mui/utils@npm:6.1.1" +"@mui/utils@npm:^6.0.0-alpha.1": + version: 6.0.0-alpha.3 + resolution: "@mui/utils@npm:6.0.0-alpha.3" dependencies: - "@babel/runtime": ^7.25.6 - "@mui/types": ^7.2.17 + "@babel/runtime": ^7.24.4 "@types/prop-types": ^15.7.12 - clsx: ^2.1.1 prop-types: ^15.8.1 - react-is: ^18.3.1 + react-is: ^18.2.0 peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 1f8b9d8a71fdabfe7adaf18d2d24b480dce250ad4b9491cc51e1fa503804332fb733c212cfb8601bb4e193f91f635f5b06c378c17c5e91d602033ea319ca3e74 + checksum: 4122813e8f10b0c907ab28e062287e234760a532203b47459469411460302e33856b2bd43c4febcc0b8f5b0ad4f8f028f3e6af8e34631e35e5fe9f82b9f0a330 languageName: node linkType: hard @@ -2815,8 +2801,8 @@ __metadata: linkType: hard "@mui/x-date-pickers@npm:^6.19.4": - version: 6.20.2 - resolution: "@mui/x-date-pickers@npm:6.20.2" + version: 6.19.9 + resolution: "@mui/x-date-pickers@npm:6.19.9" dependencies: "@babel/runtime": ^7.23.2 "@mui/base": ^5.0.0-beta.22 @@ -2858,16 +2844,7 @@ __metadata: optional: true moment-jalaali: optional: true - checksum: 0447b911ea0d78d4ee2080827bc075d8c1ed4764bd289d6bf65ee2ff870ac8ef72daef8a1858ccf27aad6c296cfece5455f6834a2d18a2c8e719518cd5464a0b - languageName: node - linkType: hard - -"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": - version: 5.1.1-v1 - resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" - dependencies: - eslint-scope: 5.1.1 - checksum: f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 + checksum: 830d9cb64187613fdb99cdf465ba6b144169dae944e2c850eedb360d4c8e11943f3b602ffa7c141a4ecf6b02e278f56cd58186b1c25b6beb42d047a9dcbddf56 languageName: node linkType: hard @@ -2922,11 +2899,11 @@ __metadata: linkType: hard "@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" dependencies: semver: ^7.3.5 - checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e languageName: node linkType: hard @@ -3015,61 +2992,31 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:^5.7.1": - version: 5.20.0 - resolution: "@prisma/client@npm:5.20.0" +"@prisma/client@npm:^4.4.0": + version: 4.16.2 + resolution: "@prisma/client@npm:4.16.2" + dependencies: + "@prisma/engines-version": 4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81 peerDependencies: prisma: "*" peerDependenciesMeta: prisma: optional: true - checksum: fecac7883b6e910abb68b27017c35a5d493d4fd40b721246f57acf3ee79f6b131851b45ab3240bb1f42efe98a33ab6877d7fa37026983f514685c32b117f573c - languageName: node - linkType: hard - -"@prisma/debug@npm:5.20.0": - version: 5.20.0 - resolution: "@prisma/debug@npm:5.20.0" - checksum: ed26dd90501799b0e50c61a2478bb9fbfd9ab85bc3aa9a0fb82ed69ae52b6e454d4acd75c10b16a10b7766c39da199a3702fd0d88c40ef8a8c00d85666f9f40d - languageName: node - linkType: hard - -"@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284": - version: 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 - resolution: "@prisma/engines-version@npm:5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284" - checksum: df30ecc59bec0fcd6c2d6de343fcc84f01e9aabc8886bc1f71fe527ca84737e898d0dc4d80d63a1582e9a20c5ca72d5b355988640632100710dd17713c568089 + checksum: 38e1356644a764946c69c8691ea4bbed0ba37739d833a435625bd5435912bed4b9bdd7c384125f3a4ab8128faf566027985c0f0840a42741c338d72e40b5d565 languageName: node linkType: hard -"@prisma/engines@npm:5.20.0": - version: 5.20.0 - resolution: "@prisma/engines@npm:5.20.0" - dependencies: - "@prisma/debug": 5.20.0 - "@prisma/engines-version": 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 - "@prisma/fetch-engine": 5.20.0 - "@prisma/get-platform": 5.20.0 - checksum: fbb51533dfd884a24e95a01ccf0a954f4b33d2c382bcd0832f02e4ecdfccb6ba5c40ad222e6e3c9c9d77f80cc3018914644b0735d5f449cd5fe4726d09efeab5 +"@prisma/engines-version@npm:4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81": + version: 4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81 + resolution: "@prisma/engines-version@npm:4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + checksum: b42c6abe7c1928e546f15449e40ffa455701ef2ab1f62973628ecb4e19ff3652e34609a0d83196d1cbd0864adb44c55e082beec852b11929acf1c15fb57ca45a languageName: node linkType: hard -"@prisma/fetch-engine@npm:5.20.0": - version: 5.20.0 - resolution: "@prisma/fetch-engine@npm:5.20.0" - dependencies: - "@prisma/debug": 5.20.0 - "@prisma/engines-version": 5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284 - "@prisma/get-platform": 5.20.0 - checksum: 51d83fbcca538645cabb9995d654fc10e72381c16b3babd329a1b405bfcb5f35a0c1ecd28fe6ec4b89e8984f934b91dbd7549a0d153bbea8fdf09f3a28c308c9 - languageName: node - linkType: hard - -"@prisma/get-platform@npm:5.20.0": - version: 5.20.0 - resolution: "@prisma/get-platform@npm:5.20.0" - dependencies: - "@prisma/debug": 5.20.0 - checksum: 9bbad9c21ba8943fb18df69bf1504cf8276b1893e9ce8a000ffcde27f6d5ad7c323871b8586cf5cb7cbff9a698337a6d6d1fb34824aee198cd4141877fb6e0b5 +"@prisma/engines@npm:4.16.2": + version: 4.16.2 + resolution: "@prisma/engines@npm:4.16.2" + checksum: f423e6092c3e558cd089a68ae87459fba7fd390c433df087342b3269c3b04163965b50845150dfe47d01f811781bfff89d5ae81c95ca603c59359ab69ebd810f languageName: node linkType: hard @@ -3113,20 +3060,6 @@ __metadata: languageName: node linkType: hard -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 - languageName: node - linkType: hard - -"@rushstack/eslint-patch@npm:^1.1.0": - version: 1.10.4 - resolution: "@rushstack/eslint-patch@npm:1.10.4" - checksum: ec17ac954ed01e9c714e29ae00da29099234a71615d6f61f2da5c7beeef283f5619132114faf9481cb1ca7b4417aed74c05a54d416e4d8facc189bb216d49066 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.24.1": version: 0.24.51 resolution: "@sinclair/typebox@npm:0.24.51" @@ -3169,28 +3102,28 @@ __metadata: linkType: hard "@slack/types@npm:^2.11.0": - version: 2.14.0 - resolution: "@slack/types@npm:2.14.0" - checksum: fbef74d50d0de8f16125f7178bd2e664a69eeefd827b09c6f78153957278fc4400049685c756076e7dbcabd04c22730ac783bcc5d36fd588c7749d35f02c2afd + version: 2.11.0 + resolution: "@slack/types@npm:2.11.0" + checksum: b5b7e4be242c9409b247c5be9df480b91a5ad21f367ae96945a7752bd720c65b13623c4a9b37b812107b3a5aa5e5013d7962807230913781ff5f0ad427a79ec2 languageName: node linkType: hard "@slack/web-api@npm:^6.7.2": - version: 6.13.0 - resolution: "@slack/web-api@npm:6.13.0" + version: 6.12.0 + resolution: "@slack/web-api@npm:6.12.0" dependencies: "@slack/logger": ^3.0.0 "@slack/types": ^2.11.0 "@types/is-stream": ^1.1.0 "@types/node": ">=12.0.0" - axios: ^1.7.4 + axios: ^1.6.5 eventemitter3: ^3.1.0 form-data: ^2.5.0 is-electron: 2.2.2 is-stream: ^1.1.0 p-queue: ^6.6.1 p-retry: ^4.0.0 - checksum: 77f0d506bbb011ae43d322e5152e8b1ec2b88aa01256da6b3c9ff8ce106d2284f887cad2d9f044e0fe34dc865d60f2bce1c6bb5c4117150ff71a7ef341f5dfeb + checksum: d0cc16a2981167f3780a07542b4c88d31fc836a743de04e52e9f8fe8a82281781103f8821b3db5aa9de55471b6e550f044e767dbf482045865bd713b90fddd65 languageName: node linkType: hard @@ -3367,7 +3300,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.11.9": +"@testing-library/jest-dom@npm:^5.11.9, @testing-library/jest-dom@npm:^5.16.4": version: 5.17.0 resolution: "@testing-library/jest-dom@npm:5.17.0" dependencies: @@ -3512,11 +3445,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" + version: 7.20.5 + resolution: "@types/babel__traverse@npm:7.20.5" dependencies: "@babel/types": ^7.20.7 - checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c + checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8 languageName: node linkType: hard @@ -3539,17 +3472,10 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*": - version: 5.0.0 - resolution: "@types/chai@npm:5.0.0" - checksum: ae3d63d8e84b4fc7fce5b0e68d0000834e709e19378e569c9ab97503a1b38f582ff69db6299528a849ec336954690a905225cb0dd9648d823c291f53ae93b458 - languageName: node - linkType: hard - -"@types/chai@npm:^4.3.5": - version: 4.3.20 - resolution: "@types/chai@npm:4.3.20" - checksum: 7c5b0c9148f1a844a8d16cb1e16c64f2e7749cab2b8284155b9e494a6b34054846e22fb2b38df6b290f9bf57e6beebb2e121940c5896bc086ad7bab7ed429f06 +"@types/chai@npm:*, @types/chai@npm:^4.3.5": + version: 4.3.14 + resolution: "@types/chai@npm:4.3.14" + checksum: 962c67d1295005886ced8f87c73614616f6d65ed1ec71818021c9206decbaab1234da878295ba52450883c78a8ee5e1359e5deeadee3b7d058538b0ae8c67b08 languageName: node linkType: hard @@ -3623,9 +3549,9 @@ __metadata: linkType: hard "@types/estree@npm:*": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a languageName: node linkType: hard @@ -3647,26 +3573,14 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:^4.17.33": - version: 4.19.6 - resolution: "@types/express-serve-static-core@npm:4.19.6" + version: 4.19.0 + resolution: "@types/express-serve-static-core@npm:4.19.0" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" "@types/send": "*" - checksum: b0576eddc2d25ccdf10e68ba09598b87a4d7b2ad04a81dc847cb39fe56beb0b6a5cc017b1e00aa0060cb3b38e700384ce96d291a116a0f1e54895564a104aae9 - languageName: node - linkType: hard - -"@types/express-serve-static-core@npm:^5.0.0": - version: 5.0.0 - resolution: "@types/express-serve-static-core@npm:5.0.0" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - "@types/send": "*" - checksum: d4e2abfc961a908098290958e43a077504ef669f3ef3c49e871932453d2281e86f5d483ae99ec3aaecd13ada0b18025a99ad5413577660587570c4e21d91c263 + checksum: 39c09fcb3f61de96ed56d97273874cafe50e6675ac254af4d77014e569e4fdc29d1d0d1dd12e11f008cb9a52785b07c2801c6ba91397965392b20c75ee01fb4e languageName: node linkType: hard @@ -3679,19 +3593,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*": - version: 5.0.0 - resolution: "@types/express@npm:5.0.0" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^5.0.0 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: ef68d8e2b7593c930093b1e79bf4df15413773508c9acd6a1a933ed7017f2a4892a8d128b2222d7eab9a3fa43181067a378c2600d9258bd7ae917f170e962df4 - languageName: node - linkType: hard - -"@types/express@npm:^4.17.6": +"@types/express@npm:*, @types/express@npm:^4.17.6": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -3745,16 +3647,6 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.1": - version: 3.3.5 - resolution: "@types/hoist-non-react-statics@npm:3.3.5" - dependencies: - "@types/react": "*" - hoist-non-react-statics: ^3.3.0 - checksum: b645b062a20cce6ab1245ada8274051d8e2e0b2ee5c6bd58215281d0ec6dae2f26631af4e2e7c8abe238cdcee73fcaededc429eef569e70908f82d0cc0ea31d7 - languageName: node - linkType: hard - "@types/html-minifier-terser@npm:^5.0.0": version: 5.1.2 resolution: "@types/html-minifier-terser@npm:5.1.2" @@ -3804,12 +3696,12 @@ __metadata: linkType: hard "@types/jest@npm:*": - version: 29.5.13 - resolution: "@types/jest@npm:29.5.13" + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 875ac23c2398cdcf22aa56c6ba24560f11d2afda226d4fa23936322dde6202f9fdbd2b91602af51c27ecba223d9fc3c1e33c9df7e47b3bf0e2aefc6baf13ce53 + checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c languageName: node linkType: hard @@ -3830,7 +3722,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -3854,9 +3746,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.175": - version: 4.17.9 - resolution: "@types/lodash@npm:4.17.9" - checksum: 6d1bf3e77f0a54d97532755a74260d402d8972259c5451b74612c16cb983b73e0760e5bfe4f9e68ab15051511c867812b40715a01f9805afe6bc36c7dd676378 + version: 4.17.0 + resolution: "@types/lodash@npm:4.17.0" + checksum: 3f98c0b67a93994cbc3403d4fa9dbaf52b0b6bb7f07a764d73875c2dcd5ef91222621bd5bcf8eee7b417a74d175c2f7191b9f595f8603956fd06f0674c0cba93 languageName: node linkType: hard @@ -3898,20 +3790,20 @@ __metadata: linkType: hard "@types/multer@npm:^1.4.7": - version: 1.4.12 - resolution: "@types/multer@npm:1.4.12" + version: 1.4.11 + resolution: "@types/multer@npm:1.4.11" dependencies: "@types/express": "*" - checksum: 719cacf88ec83ed77e250e45bee830fd7a505323825efa2a2c1144f5f3d7d36e67408ec988e571bcbaa571e0c214b5ede42d57ebb0f9b453a5eb8faba8ff12d0 + checksum: 3d80b2acdfbc9f3e9027d4467e948925810b67e5622a3017f42f58a3598d34b25376890801e55d0c03973ccc34573abf5218af334e8292ec455832f4ade3e5f5 languageName: node linkType: hard "@types/node@npm:*, @types/node@npm:>=12.0.0": - version: 22.7.4 - resolution: "@types/node@npm:22.7.4" + version: 20.12.7 + resolution: "@types/node@npm:20.12.7" dependencies: - undici-types: ~6.19.2 - checksum: a3f4154147639369aed08fe6f8d62eff637cf87b187bb252d7bbccdc82884626007af424b08a653c53f2182adfa0340001b4888cb7cbb942cef351210fc742a5 + undici-types: ~5.26.4 + checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686 languageName: node linkType: hard @@ -3922,12 +3814,12 @@ __metadata: languageName: node linkType: hard -"@types/nodemailer@npm:^6.4.0": - version: 6.4.16 - resolution: "@types/nodemailer@npm:6.4.16" +"@types/nodemailer@npm:^6.4.7": + version: 6.4.14 + resolution: "@types/nodemailer@npm:6.4.14" dependencies: "@types/node": "*" - checksum: ef34226b7b69a474a9b9b4681bcfb2461540aed92c54995b934f8072e28deff72aadd4c71522f6825938346048cfec077c69f18cfc2a3ec9f7432db11e5667a3 + checksum: 5f61f01dd736b17f431d1e8b320322f86460604b45df947fc4bc8999d7c7719405e349f7abba86e4fb100a464a30b52615d00dac03d9cb37562ff04487ebd310 languageName: node linkType: hard @@ -3952,10 +3844,10 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12": - version: 15.7.13 - resolution: "@types/prop-types@npm:15.7.13" - checksum: 8935cad87c683c665d09a055919d617fe951cb3b2d5c00544e3a913f861a2bd8d2145b51c9aa6d2457d19f3107ab40784c40205e757232f6a80cc8b1c815513c +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11, @types/prop-types@npm:^15.7.12": + version: 15.7.12 + resolution: "@types/prop-types@npm:15.7.12" + checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe languageName: node linkType: hard @@ -3967,9 +3859,9 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.16 - resolution: "@types/qs@npm:6.9.16" - checksum: 2e8918150c12735630f7ee16b770c72949274938c30306025f68aaf977227f41fe0c698ed93db1099e04916d582ac5a1faf7e3c7061c8d885d9169f59a184b6c + version: 6.9.15 + resolution: "@types/qs@npm:6.9.15" + checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 languageName: node linkType: hard @@ -4029,11 +3921,11 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.4.10, @types/react-transition-group@npm:^4.4.8": - version: 4.4.11 - resolution: "@types/react-transition-group@npm:4.4.11" + version: 4.4.10 + resolution: "@types/react-transition-group@npm:4.4.10" dependencies: "@types/react": "*" - checksum: a6e3b2e4363cb019e256ae4f19dadf9d7eb199da1a5e4109bbbf6a132821884044d332e9c74b520b1e5321a7f545502443fd1ce0b18649c8b510fa4220b0e5c2 + checksum: fe2ea11f70251e9f79f368e198c18fd469b1d4f1e1d44e4365845b44e15974b0ec925100036f449b023b0ca3480a82725c5f0a73040e282ad32ec7b0def9b57c languageName: node linkType: hard @@ -4063,13 +3955,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -4092,11 +3977,11 @@ __metadata: linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.10 - resolution: "@types/set-cookie-parser@npm:2.4.10" + version: 2.4.7 + resolution: "@types/set-cookie-parser@npm:2.4.7" dependencies: "@types/node": "*" - checksum: 105cc90c7d7deeb344858f720b58bd137356586545ac00d1a448e050bfcc0f385553ff26bc9c674bd8c2e953a458149eadb1945ee3d1eee81e6c0656236ebc0a + checksum: 01ef803e24b8cd33e49fe7463f32a562da45ce3f960381b90cccf67ea71b1830d2273df044255b040069c0a92ea25b4bf21c39ac2f85b50c01818ded5e918554 languageName: node linkType: hard @@ -4115,14 +4000,13 @@ __metadata: linkType: hard "@types/superagent@npm:*": - version: 8.1.9 - resolution: "@types/superagent@npm:8.1.9" + version: 8.1.6 + resolution: "@types/superagent@npm:8.1.6" dependencies: "@types/cookiejar": ^2.1.5 "@types/methods": ^1.1.4 "@types/node": "*" - form-data: ^4.0.0 - checksum: 530d8c2e87706315c82c8c9696500c40621de3353bc54ea9b104947f3530243abf54d0a49a6ae219d4947606a102ceb94bedfc43b9cc49f74069a18cbb3be8e2 + checksum: 240ea5a58bb3c9e53f0dbe1ccd1bfe046e084fffdb4eaf44f0bf846fb98dad98ce03d057fdfb555bfa06afbb76a0e5877fe639750b798edac594bc7e19833934 languageName: node linkType: hard @@ -4161,16 +4045,9 @@ __metadata: linkType: hard "@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": - version: 2.0.11 - resolution: "@types/unist@npm:2.0.11" - checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e - languageName: node - linkType: hard - -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + version: 2.0.10 + resolution: "@types/unist@npm:2.0.10" + checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa languageName: node linkType: hard @@ -4186,8 +4063,8 @@ __metadata: linkType: hard "@types/webpack@npm:^4.41.8": - version: 4.41.39 - resolution: "@types/webpack@npm:4.41.39" + version: 4.41.38 + resolution: "@types/webpack@npm:4.41.38" dependencies: "@types/node": "*" "@types/tapable": ^1 @@ -4195,7 +4072,7 @@ __metadata: "@types/webpack-sources": "*" anymatch: ^3.0.0 source-map: ^0.6.0 - checksum: 97a934fc89f1c62aa1ffccc9377c25aef108b46938b0062369d17373b5393eade9151fa087f2d65930f272625728c850790102d449b08c2e7f2d5046d825ef34 + checksum: d3de65993ef3a7621f75548c2f6f509e8f87f586032238e999743d6067030655c67e38ec5f8b32e04fa5276c83bdfb7a761773bce0e6f28605da87e3fc388e3e languageName: node linkType: hard @@ -4216,37 +4093,15 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.33 - resolution: "@types/yargs@npm:17.0.33" + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" dependencies: "@types/yargs-parser": "*" - checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.18.0" - dependencies: - "@typescript-eslint/experimental-utils": 4.18.0 - "@typescript-eslint/scope-manager": 4.18.0 - debug: ^4.1.1 - functional-red-black-tree: ^1.0.1 - lodash: ^4.17.15 - regexpp: ^3.0.0 - semver: ^7.3.2 - tsutils: ^3.17.1 - peerDependencies: - "@typescript-eslint/parser": ^4.0.0 - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 0e781b0d88ad29badc593a5d3babc53c38a4a5ad8f76161b2d9d47b651c939233f83fb4ce14dd075d86625e834aa25fb07d6f19bb7d98ec55646664eec8c7e29 + checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^4.5.0": +"@typescript-eslint/eslint-plugin@npm:^4.18.0, @typescript-eslint/eslint-plugin@npm:^4.5.0": version: 4.33.0 resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" dependencies: @@ -4268,46 +4123,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.5.0": - version: 5.62.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" - 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 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.18.0" - dependencies: - "@types/json-schema": ^7.0.3 - "@typescript-eslint/scope-manager": 4.18.0 - "@typescript-eslint/types": 4.18.0 - "@typescript-eslint/typescript-estree": 4.18.0 - eslint-scope: ^5.0.0 - eslint-utils: ^2.0.0 - peerDependencies: - eslint: "*" - checksum: e3a404cc0102b3a414798daf2f98782657112abc99ca6b83a74978c078a28c86314cb09ff1919ec00356001e10f2f21ea395c1c0b643849f0dec0f70904c1f15 - languageName: node - linkType: hard - "@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -4339,35 +4154,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.62.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.62.0" - dependencies: - "@typescript-eslint/utils": 5.62.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ce55d9f74eac5cb94d66d5db9ead9a5d734f4301519fb5956a57f4b405a5318a115b0316195a3c039e0111489138680411709cb769085d71e1e1db1376ea0949 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/parser@npm:4.18.0" - dependencies: - "@typescript-eslint/scope-manager": 4.18.0 - "@typescript-eslint/types": 4.18.0 - "@typescript-eslint/typescript-estree": 4.18.0 - debug: ^4.1.1 - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 03ab70d1cb0b04ffa60aa089be45cc45737881c8ae57fac02afe02c38e61c3f1fb281a7d2dfbc6600c88c197c142ca3db83cefed96937e6cc2fce6014f37c410 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^4.5.0": +"@typescript-eslint/parser@npm:^4.18.0, @typescript-eslint/parser@npm:^4.5.0": version: 4.33.0 resolution: "@typescript-eslint/parser@npm:4.33.0" dependencies: @@ -4384,33 +4171,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.5.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" - 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 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/scope-manager@npm:4.18.0" - dependencies: - "@typescript-eslint/types": 4.18.0 - "@typescript-eslint/visitor-keys": 4.18.0 - checksum: 52b6dbac8cac1599d087882d9469fba00eff9d3e4c64dc1118eef3d10a7ba02e59675c0cfe1363af0cd87c8840d31f7375fe3b01a0866c5ff6a69721d52e586d - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -4421,33 +4181,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/type-utils@npm:5.62.0" - dependencies: - "@typescript-eslint/typescript-estree": 5.62.0 - "@typescript-eslint/utils": 5.62.0 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/types@npm:3.10.1" @@ -4455,13 +4188,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/types@npm:4.18.0" - checksum: 3397b58099c0a86a13b201b9b6b2313577d92f71dd5be5f87f050559902b36be0de63e54e1d1ceda39e8cf1d57937588cff7374b2481a5a92e8ede5e8c986872 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/types@npm:4.33.0" @@ -4469,13 +4195,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/typescript-estree@npm:3.10.1" @@ -4495,24 +4214,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.18.0" - dependencies: - "@typescript-eslint/types": 4.18.0 - "@typescript-eslint/visitor-keys": 4.18.0 - debug: ^4.1.1 - globby: ^11.0.1 - is-glob: ^4.0.1 - semver: ^7.3.2 - tsutils: ^3.17.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 451d329f0086cf1ecabfe1f3b73cc291472e02b3e167d83f2ffa6681a8de9054c1d8c63a6b56f34da22910802483382fc3a456221a94db5013f21e76e83a933b - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" @@ -4531,42 +4232,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - 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 - peerDependenciesMeta: - typescript: - optional: true - checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.58.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - 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 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:3.10.1": version: 3.10.1 resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" @@ -4576,16 +4241,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.18.0": - version: 4.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.18.0" - dependencies: - "@typescript-eslint/types": 4.18.0 - eslint-visitor-keys: ^2.0.0 - checksum: 4e515d93edff7c2a7c7b558581c448865b845d2dcea912c2a19373b65f8f8949b858a2f2e283f670a3e49302892b9c139a50578de6d8ba8fe7e85cf3f880a5fe - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" @@ -4596,28 +4251,18 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: ^3.3.0 - checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 - languageName: node - linkType: hard - "@vitejs/plugin-react@npm:^4.0.0": - version: 4.3.2 - resolution: "@vitejs/plugin-react@npm:4.3.2" + version: 4.2.1 + resolution: "@vitejs/plugin-react@npm:4.2.1" dependencies: - "@babel/core": ^7.25.2 - "@babel/plugin-transform-react-jsx-self": ^7.24.7 - "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/core": ^7.23.5 + "@babel/plugin-transform-react-jsx-self": ^7.23.3 + "@babel/plugin-transform-react-jsx-source": ^7.23.3 "@types/babel__core": ^7.20.5 - react-refresh: ^0.14.2 + react-refresh: ^0.14.0 peerDependencies: vite: ^4.2.0 || ^5.0.0 - checksum: 6bd3f8ec4a5c1f9f2970217d6a7291fafb41b7760f7761b982b6835c8f9cd3874cea9eb3b6659aa75c511954fcec7707116ea32042854b1be47902ebbb781794 + checksum: 08d227d27ff2304e395e746bd2d4b5fee40587f69d7e2fcd6beb7d91163c1f1dc26d843bc48e2ffb8f38c6b8a1b9445fb07840e3dcc841f97b56bbb8205346aa languageName: node linkType: hard @@ -4890,6 +4535,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:1": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -4934,11 +4586,9 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": - version: 8.3.4 - resolution: "acorn-walk@npm:8.3.4" - dependencies: - acorn: ^8.11.0 - checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 languageName: node linkType: hard @@ -4960,12 +4610,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.12.1 - resolution: "acorn@npm:8.12.1" +"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn - checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c languageName: node linkType: hard @@ -5052,14 +4702,14 @@ __metadata: linkType: hard "ajv@npm:^8.0.1": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" + version: 8.12.0 + resolution: "ajv@npm:8.12.0" dependencies: - fast-deep-equal: ^3.1.3 - fast-uri: ^3.0.1 + fast-deep-equal: ^3.1.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 - checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 languageName: node linkType: hard @@ -5124,9 +4774,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard @@ -5219,7 +4869,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3, aria-query@npm:~5.1.3": +"aria-query@npm:5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -5238,10 +4888,12 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": - version: 5.3.2 - resolution: "aria-query@npm:5.3.2" - checksum: d971175c85c10df0f6d14adfe6f1292409196114ab3c62f238e208b53103686f46cc70695a4f775b73bc65f6a09b6a092fd963c4f3a5a7d690c8fc5094925717 +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 languageName: node linkType: hard @@ -5297,7 +4949,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -5341,7 +4993,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.5": +"array.prototype.findlast@npm:^1.2.4": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" dependencies: @@ -5355,7 +5007,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.5": +"array.prototype.findlastindex@npm:^1.2.3": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" dependencies: @@ -5408,16 +5060,28 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: ^1.0.5 define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 + es-abstract: ^1.22.3 + es-errors: ^1.1.0 es-shim-unscopables: ^1.0.2 - checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a + checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af languageName: node linkType: hard @@ -5572,10 +5236,10 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:^4.10.0": - version: 4.10.0 - resolution: "axe-core@npm:4.10.0" - checksum: 7eca827fd8d98d7e4b561df65437be608155c613d8f262ae9e4a6ade02c156c7362dcbc3f71b4b526edce686f7c686280236bcff1d6725e2ef8327def72a8c41 +"axe-core@npm:=4.7.0": + version: 4.7.0 + resolution: "axe-core@npm:4.7.0" + checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a languageName: node linkType: hard @@ -5589,21 +5253,23 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.7.4": - version: 1.7.7 - resolution: "axios@npm:1.7.7" +"axios@npm:^1.6.5": + version: 1.6.8 + resolution: "axios@npm:1.6.8" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe + checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd languageName: node linkType: hard -"axobject-query@npm:^4.1.0": - version: 4.1.0 - resolution: "axobject-query@npm:4.1.0" - checksum: 7d1e87bf0aa7ae7a76cd39ab627b7c48fda3dc40181303d9adce4ba1d5b5ce73b5e5403ee6626ec8e91090448c887294d6144e24b6741a976f5be9347e3ae1df +"axobject-query@npm:^3.2.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" + dependencies: + dequal: ^2.0.3 + checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 languageName: node linkType: hard @@ -5724,15 +5390,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.6": - version: 0.10.6 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" +"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": + version: 0.10.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.2 - core-js-compat: ^3.38.0 + "@babel/helper-define-polyfill-provider": ^0.6.1 + core-js-compat: ^3.36.1 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd languageName: node linkType: hard @@ -5772,27 +5438,24 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.1.0 - resolution: "babel-preset-current-node-syntax@npm:1.1.0" + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-import-attributes": ^7.24.7 - "@babel/plugin-syntax-import-meta": ^7.10.4 + "@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.10.4 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@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-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 languageName: node linkType: hard @@ -5808,7 +5471,7 @@ __metadata: languageName: node linkType: hard -"babel-preset-react-app@npm:^10.0.0, babel-preset-react-app@npm:^10.0.1": +"babel-preset-react-app@npm:^10.0.0": version: 10.0.1 resolution: "babel-preset-react-app@npm:10.0.1" dependencies: @@ -5855,7 +5518,7 @@ __metadata: version: 0.0.0-use.local resolution: "backend@workspace:src/backend" dependencies: - "@prisma/client": ^5.7.1 + "@prisma/client": ^4.4.0 "@slack/web-api": ^6.7.2 "@types/concat-stream": ^2.0.0 "@types/cookie-parser": ^1.4.3 @@ -5865,7 +5528,6 @@ __metadata: "@types/jsonwebtoken": ^8.5.9 "@types/multer": ^1.4.7 "@types/node": 18.17.1 - "@types/nodemailer": ^6.4.0 "@types/supertest": ^2.0.12 body-parser: ^1.19.0 concat-stream: ^2.0.0 @@ -5882,7 +5544,7 @@ __metadata: multer: ^1.4.5-lts.1 nodemailer: ^6.9.1 nodemon: ^2.0.16 - prisma: ^5.7.1 + prisma: ^4.4.0 shared: 1.0.0 supertest: ^6.2.4 ts-jest: ^26.2.0 @@ -6017,16 +5679,16 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^5.2.1": +"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard -"body-parser@npm:1.20.3, body-parser@npm:^1.19.0": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" +"body-parser@npm:1.20.2, body-parser@npm:^1.19.0": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: bytes: 3.1.2 content-type: ~1.0.5 @@ -6036,11 +5698,11 @@ __metadata: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 + qs: 6.11.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 languageName: node linkType: hard @@ -6112,12 +5774,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3, braces@npm:~3.0.2": - version: 3.0.3 - resolution: "braces@npm:3.0.3" +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" dependencies: - fill-range: ^7.1.1 - checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 languageName: node linkType: hard @@ -6189,13 +5851,12 @@ __metadata: linkType: hard "browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.1 - resolution: "browserify-rsa@npm:4.1.1" + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" dependencies: - bn.js: ^5.2.1 - randombytes: ^2.1.0 - safe-buffer: ^5.2.1 - checksum: 2628508646331791c29312bbf274c076a237437a17178ea9bdc75c577fb4164a0da0b137deaadf6ade623701332377c5c2ceb0ff6f991c744a576e790ec95852 + bn.js: ^5.0.0 + randombytes: ^2.0.1 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 languageName: node linkType: hard @@ -6240,17 +5901,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": - version: 4.24.0 - resolution: "browserslist@npm:4.24.0" +"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" dependencies: - caniuse-lite: ^1.0.30001663 - electron-to-chromium: ^1.5.28 - node-releases: ^2.0.18 - update-browserslist-db: ^1.1.0 + 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 - checksum: de200d3eb8d6ed819dad99719099a28fb6ebeb88016a5ac42fbdc11607e910c236a84ca1b0bbf232477d4b88ab64e8ab6aa67557cdd40a73ca9c2834f92ccce0 + checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def languageName: node linkType: hard @@ -6426,8 +6087,8 @@ __metadata: linkType: hard "cacache@npm:^18.0.0": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" + version: 18.0.2 + resolution: "cacache@npm:18.0.2" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 @@ -6441,7 +6102,7 @@ __metadata: ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 - checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 + checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b languageName: node linkType: hard @@ -6543,10 +6204,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001663": - version: 1.0.30001664 - resolution: "caniuse-lite@npm:1.0.30001664" - checksum: cee25b4ea8a84779b7c9a60c1f9e304f6d99b79ef622b25fbc7873b4e55e8722a1091dd6c8b77bd7723e9f26a84b4a820a50a864989dd477e7ee51dc30461dca +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001612 + resolution: "caniuse-lite@npm:1.0.30001612" + checksum: 2b6ab6a19c72bdf8dccac824944e828a2a1fae52c6dfeb2d64ccecfd60d0466d2e5a392e996da2150d92850188a5034666dceed34a38d978177f6934e0bf106d languageName: node linkType: hard @@ -6578,8 +6239,8 @@ __metadata: linkType: hard "chai@npm:^4.3.7": - version: 4.5.0 - resolution: "chai@npm:4.5.0" + version: 4.4.1 + resolution: "chai@npm:4.4.1" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.3 @@ -6587,8 +6248,8 @@ __metadata: get-func-name: ^2.0.2 loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.1.0 - checksum: 70e5a8418a39e577e66a441cc0ce4f71fd551a650a71de30dd4e3e31e75ed1f5aa7119cf4baf4a2cb5e85c0c6befdb4d8a05811fad8738c1a6f3aa6a23803821 + type-detect: ^4.0.8 + checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e languageName: node linkType: hard @@ -6717,6 +6378,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d + languageName: node + linkType: hard + "chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" @@ -6740,34 +6420,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.1 - resolution: "chokidar@npm:4.0.1" - dependencies: - readdirp: ^4.0.1 - checksum: 193da9786b0422a895d59c7552195d15c6c636e6a2293ae43d09e34e243e24ccd02d693f007c767846a65abbeae5fea6bfacb8fc2ddec4ea4d397620d552010d - languageName: node - linkType: hard - "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -6783,9 +6435,9 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.4 - resolution: "chrome-trace-event@npm:1.0.4" - checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 languageName: node linkType: hard @@ -6918,14 +6570,14 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.1.1, clsx@npm:^1.2.1": +"clsx@npm:^1.2.1": version: 1.2.1 resolution: "clsx@npm:1.2.1" checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.0, clsx@npm:^2.1.1": +"clsx@npm:^2.0.0, clsx@npm:^2.1.0": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: acd3e1ab9d8a433ecb3cc2f6a05ab95fe50b4a3cfc5ba47abb6cbf3754585fcb87b84e90c822a1f256c4198e3b41c7f6c391577ffc8678ad587fc0976b24fd57 @@ -7160,7 +6812,7 @@ __metadata: languageName: node linkType: hard -"confusing-browser-globals@npm:^1.0.10, confusing-browser-globals@npm:^1.0.11": +"confusing-browser-globals@npm:^1.0.10": version: 1.0.11 resolution: "confusing-browser-globals@npm:1.0.11" checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef @@ -7311,19 +6963,19 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": - version: 3.38.1 - resolution: "core-js-compat@npm:3.38.1" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": + version: 3.37.0 + resolution: "core-js-compat@npm:3.37.0" dependencies: - browserslist: ^4.23.3 - checksum: a0a5673bcd59f588f0cd0b59cdacd4712b82909738a87406d334dd412eb3d273ae72b275bdd8e8fef63fca9ef12b42ed651be139c7c44c8a1acb423c8906992e + browserslist: ^4.23.0 + checksum: cab5078e98625f889fd9bbbb19e84cb408f31c87e68302d380db0d26ae8e35c1b38cde084358ff345d4aa461af5f3c60d8a913a5b30bff3a83b4b7859374db36 languageName: node linkType: hard "core-js-pure@npm:^3.30.2": - version: 3.38.1 - resolution: "core-js-pure@npm:3.38.1" - checksum: 95ca2e75df371571b0d41cba81e1f6335a2ba1f080e80f8edfa124ad3041880fe72e10f2144527a700a3d993dbf9f7cada3e04a927a66604bc49d0c4951567fb + version: 3.37.0 + resolution: "core-js-pure@npm:3.37.0" + checksum: 206797d88046f4f5a62ecb9a7158bc6ba38127db2239bcbd1e85b2c8cf3cfb9bb3bbc6a312ecf0f87702f87659959d10625aeac74de6336a9303866f7010d364 languageName: node linkType: hard @@ -7335,9 +6987,9 @@ __metadata: linkType: hard "core-js@npm:^3.6.5": - version: 3.38.1 - resolution: "core-js@npm:3.38.1" - checksum: 55703c2f6fcd537e47a5cc83e9dc9884efef61861bbefb4a96a8c95e87956db980ce314628465dd49f14e626c5e633b9e3433f3e4a1f628404a14da420eb2556 + version: 3.37.0 + resolution: "core-js@npm:3.37.0" + checksum: 212c3e9b3fc277dbb63739ef58a61c5709ccd0b36f09c3ce6946aa91fa180c60f57f976d4a5fdb9cda0c6cb55417379ba5a008fc3a1384ec94ec8ec61826469d languageName: node linkType: hard @@ -7488,15 +7140,6 @@ __metadata: languageName: node linkType: hard -"css-box-model@npm:^1.2.1": - version: 1.2.1 - resolution: "css-box-model@npm:1.2.1" - dependencies: - tiny-invariant: ^1.0.6 - checksum: 4d113f26fed6b9150e2c314502d00dabe06f12ae43a01a7e9b6e57f3de49b4281dbb0dc46a1158a7349618f8f34d9250af57cb43d7337e9485e73e6b821e470e - languageName: node - linkType: hard - "css-color-names@npm:0.0.4, css-color-names@npm:^0.0.4": version: 0.0.4 resolution: "css-color-names@npm:0.0.4" @@ -7899,9 +7542,9 @@ __metadata: linkType: hard "dayjs@npm:^1.11.10": - version: 1.11.13 - resolution: "dayjs@npm:1.11.13" - checksum: f388db88a6aa93956c1f6121644e783391c7b738b73dbc54485578736565c8931bdfba4bb94e9b1535c6e509c97d5deb918bbe1ae6b34358d994de735055cca9 + version: 1.11.10 + resolution: "dayjs@npm:1.11.10" + checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 languageName: node linkType: hard @@ -7922,14 +7565,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.7 - resolution: "debug@npm:4.3.7" + version: 4.3.4 + resolution: "debug@npm:4.3.4" dependencies: - ms: ^2.1.3 + ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true - checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160 + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard @@ -7971,11 +7614,11 @@ __metadata: linkType: hard "deep-eql@npm:^4.1.3": - version: 4.1.4 - resolution: "deep-eql@npm:4.1.4" + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" dependencies: type-detect: ^4.0.0 - checksum: 01c3ca78ff40d79003621b157054871411f94228ceb9b2cab78da913c606631c46e8aa79efc4aa0faf3ace3092acd5221255aab3ef0e8e7b438834f0ca9a16c7 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f languageName: node linkType: hard @@ -8138,6 +7781,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + "des.js@npm:^1.0.0": version: 1.1.0 resolution: "des.js@npm:1.1.0" @@ -8480,16 +8130,16 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.28": - version: 1.5.30 - resolution: "electron-to-chromium@npm:1.5.30" - checksum: b1a9003d32b7ef2075580941e868e1ba9a5b57e8e8e6b7a26462dea830c194d26906a00c92366b41e09bb794ff37ae73865b5c25cbe1f96ae931fc3faf6ded64 +"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.668": + version: 1.4.747 + resolution: "electron-to-chromium@npm:1.4.747" + checksum: 6d302c2fbe71390ca666544017de5f8614ba8632ee02fd612d423439e813d72df09cbd8f614122a2ee07c8ffc2b3788882a5c5bb99363f162b9257f34c0eb31f languageName: node linkType: hard "elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": - version: 6.5.7 - resolution: "elliptic@npm:6.5.7" + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" dependencies: bn.js: ^4.11.9 brorand: ^1.1.0 @@ -8498,7 +8148,7 @@ __metadata: inherits: ^2.0.4 minimalistic-assert: ^1.0.1 minimalistic-crypto-utils: ^1.0.1 - checksum: af0ffddffdbc2fea4eeec74388cd73e62ed5a0eac6711568fb28071566319785df529c968b0bf1250ba4bc628e074b2d64c54a633e034aa6f0c6b152ceb49ab8 + checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb languageName: node linkType: hard @@ -8544,13 +8194,6 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -8640,7 +8283,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -8710,7 +8353,7 @@ __metadata: languageName: node linkType: hard -"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 @@ -8734,13 +8377,13 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.19": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": + version: 1.0.18 + resolution: "es-iterator-helpers@npm:1.0.18" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 - es-abstract: ^1.23.3 + es-abstract: ^1.23.0 es-errors: ^1.3.0 es-set-tostringtag: ^2.0.3 function-bind: ^1.1.2 @@ -8752,7 +8395,7 @@ __metadata: internal-slot: ^1.0.7 iterator.prototype: ^1.1.2 safe-array-concat: ^1.1.2 - checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 + checksum: 1594324ff3ca8890fe30c98b2419d3007d2b14b35f9773f188114408ff973e13c526f6045d88209e932f58dc0c55fc9a4ae1554636f8938ed7d926ffc27d3e1a languageName: node linkType: hard @@ -9120,10 +8763,10 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.0.2, escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e +"escalade@npm:^3.0.2, escalade@npm:^3.1.1": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 languageName: node linkType: hard @@ -9229,30 +8872,6 @@ __metadata: languageName: node linkType: hard -"eslint-config-react-app@npm:^7.0.1": - version: 7.0.1 - resolution: "eslint-config-react-app@npm:7.0.1" - 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 - peerDependencies: - eslint: ^8.0.0 - checksum: a67e0821809e62308d6e419753fa2acfc7cd353659fab08cf34735f59c6c66910c0b6fda0471c4ec0d712ce762d65efc6431b39569f8d575e2d9bdfc384e0824 - languageName: node - linkType: hard - "eslint-import-resolver-node@npm:^0.3.9": version: 0.3.9 resolution: "eslint-import-resolver-node@npm:0.3.9" @@ -9264,26 +8883,15 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.9.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" +"eslint-module-utils@npm:^2.8.0": + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" dependencies: debug: ^3.2.7 peerDependenciesMeta: eslint: optional: true - checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180 - languageName: node - linkType: hard - -"eslint-plugin-cypress@npm:latest": - version: 3.5.0 - resolution: "eslint-plugin-cypress@npm:3.5.0" - dependencies: - globals: ^13.20.0 - peerDependencies: - eslint: ">=7" - checksum: b13b3e6c0074ab4246f15072f1c4877ffff0b14a891b0e3714cb13b449515446e814df29cbcf63b60dc09a8d301271f1434ded18398f9aa3f11005a3899bc265 + checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d languageName: node linkType: hard @@ -9299,45 +8907,30 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-flowtype@npm:^8.0.3": - version: 8.0.3 - resolution: "eslint-plugin-flowtype@npm:8.0.3" - dependencies: - lodash: ^4.17.21 - string-natural-compare: ^3.0.1 - peerDependencies: - "@babel/plugin-syntax-flow": ^7.14.5 - "@babel/plugin-transform-react-jsx": ^7.14.9 - eslint: ^8.1.0 - checksum: 30e63c5357b0b5571f39afed51e59c140084f4aa53c106b1fd04f26da42b268908466daa6020b92943e71409bdaee1c67202515ed9012404d027cc92cb03cefa - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.22.1, eslint-plugin-import@npm:^2.25.3": - version: 2.30.0 - resolution: "eslint-plugin-import@npm:2.30.0" +"eslint-plugin-import@npm:^2.22.1": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" dependencies: - "@rtsao/scc": ^1.1.0 - array-includes: ^3.1.8 - array.prototype.findlastindex: ^1.2.5 + 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.9.0 - hasown: ^2.0.2 - is-core-module: ^2.15.1 + 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.8 - object.groupby: ^1.0.3 - object.values: ^1.2.0 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 semver: ^6.3.1 tsconfig-paths: ^3.15.0 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0ec1ad69c0d22f15bc4a49ee97ae757e4adfc3181996f2c4a1ed4d5028bd99bab38e7623e58ef4477ba1db8425f441e4e986367125273efa4c5f7ad2c4467a9a + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c languageName: node linkType: hard @@ -9356,46 +8949,29 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^25.3.0": - version: 25.7.0 - resolution: "eslint-plugin-jest@npm:25.7.0" - dependencies: - "@typescript-eslint/experimental-utils": ^5.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 - checksum: fc6da96131f4cbf33d15ef911ec8e600ccd71deb97d73c0ca340427cef7b01ff41a797e2e7d1e351abf97321a46ed0c0acff5ee8eeedac94961dd6dad1f718a9 - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:^6.3.1, eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.10.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.10.0" +"eslint-plugin-jsx-a11y@npm:^6.3.1": + version: 6.8.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" dependencies: - aria-query: ~5.1.3 - array-includes: ^3.1.8 + "@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.10.0 - axobject-query: ^4.1.0 + 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.19 - hasown: ^2.0.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.fromentries: ^2.0.8 - safe-regex-test: ^1.0.3 - string.prototype.includes: ^2.0.0 + object.entries: ^1.1.7 + object.fromentries: ^2.0.7 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - checksum: 1009deca12ddbe3624586bc5fc3534ca98d00a5841a2563cb6abd9339b984f0a99075dc2a703a517f4087eb84d659c87e60beda17645883de2ba1d86f2b20c96 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 languageName: node linkType: hard @@ -9414,40 +8990,40 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.2.0, eslint-plugin-react-hooks@npm:^4.3.0": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" +"eslint-plugin-react-hooks@npm:^4.2.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 395c433610f59577cfcf3f2e42bcb130436c8a0b3777ac64f441d88c5275f4fcfc89094cedab270f2822daf29af1079151a7a6579a8e9ea8cee66540ba0384c4 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 languageName: node linkType: hard -"eslint-plugin-react@npm:^7.21.5, eslint-plugin-react@npm:^7.27.1": - version: 7.37.1 - resolution: "eslint-plugin-react@npm:7.37.1" +"eslint-plugin-react@npm:^7.21.5": + version: 7.34.1 + resolution: "eslint-plugin-react@npm:7.34.1" dependencies: - array-includes: ^3.1.8 - array.prototype.findlast: ^1.2.5 + array-includes: ^3.1.7 + array.prototype.findlast: ^1.2.4 array.prototype.flatmap: ^1.3.2 - array.prototype.tosorted: ^1.1.4 + array.prototype.toreversed: ^1.1.2 + array.prototype.tosorted: ^1.1.3 doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.19 + es-iterator-helpers: ^1.0.17 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.8 - object.fromentries: ^2.0.8 - object.values: ^1.2.0 + object.entries: ^1.1.7 + object.fromentries: ^2.0.7 + object.hasown: ^1.1.3 + object.values: ^1.1.7 prop-types: ^15.8.1 resolve: ^2.0.0-next.5 semver: ^6.3.1 - string.prototype.matchall: ^4.0.11 - string.prototype.repeat: ^1.0.0 + string.prototype.matchall: ^4.0.10 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 22d1bdf0dd4cdbf8c57ce563c58d43c5f5e1da0b08d27d0a69d7126d9e8afcb74a5befae97dab4019b4c6029ae617b6a0af1709cb9e0439d5757b01b392d2ca7 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f languageName: node linkType: hard @@ -9462,18 +9038,17 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-testing-library@npm:^5.0.1": - version: 5.11.1 - resolution: "eslint-plugin-testing-library@npm:5.11.1" +"eslint-scope@npm:^4.0.3": + version: 4.0.3 + resolution: "eslint-scope@npm:4.0.3" dependencies: - "@typescript-eslint/utils": ^5.58.0 - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - checksum: 9f3fc68ef9f13016a4381b33ab5dbffcc189e5de3eaeba184bcf7d2771faa7f54e59c04b652162fb1c0f83fb52428dd909db5450a25508b94be59eba69fcc990 + esrecurse: ^4.1.0 + estraverse: ^4.1.1 + checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b languageName: node linkType: hard -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -9483,16 +9058,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^4.0.3": - version: 4.0.3 - resolution: "eslint-scope@npm:4.0.3" - dependencies: - esrecurse: ^4.1.0 - estraverse: ^4.1.1 - checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b - languageName: node - linkType: hard - "eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -9520,20 +9085,13 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0": +"eslint-visitor-keys@npm:^2.0.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - "eslint-webpack-plugin@npm:^2.5.2": version: 2.7.0 resolution: "eslint-webpack-plugin@npm:2.7.0" @@ -9645,11 +9203,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -9862,13 +9420,13 @@ __metadata: linkType: hard "express-jwt@npm:^7.7.5": - version: 7.7.8 - resolution: "express-jwt@npm:7.7.8" + version: 7.7.7 + resolution: "express-jwt@npm:7.7.7" dependencies: "@types/jsonwebtoken": ^8.5.8 express-unless: ^2.1.3 - jsonwebtoken: ^9.0.2 - checksum: 88ea57e7c033bafd5918cdbddd67f469a3e70f9ae3c5c973b370ef0b9f86e3499ea132fb15d9ecdddcc97d8305dec1f759a1fdf4dfc8a1a9e6642e166188e28b + jsonwebtoken: ^8.5.1 + checksum: b3aec510ce490cd8d449604c82ce1debf9b8c215fb0220f78d07e86c555fb06ca93b4199da135c00e62bb98c67a47fac8c1fdcc6ea74f2047f4e2defbc4578fe languageName: node linkType: hard @@ -9890,41 +9448,41 @@ __metadata: linkType: hard "express@npm:^4.17.1": - version: 4.21.0 - resolution: "express@npm:4.21.0" + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + 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: ~2.0.0 + encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.3 + merge-descriptors: 1.0.1 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 - qs: 6.13.0 + qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + 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 - checksum: 1c5212993f665809c249bf00ab550b989d1365a5b9171cdfaa26d93ee2ef10cd8add520861ec8d5da74b3194d8374e1d9d53e85ef69b89fd9c4196b87045a5d4 + checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 languageName: node linkType: hard @@ -10045,13 +9603,6 @@ __metadata: languageName: node linkType: hard -"fast-uri@npm:^3.0.1": - version: 3.0.2 - resolution: "fast-uri@npm:3.0.2" - checksum: ca00aadc84e0ab93a8a1700c386bc7cbeb49f47d9801083c258444eed31221fdf864d68fb48ea8acd7c512bf046b53c09e3aafd6d4bdb9449ed21be29d8d6f75 - languageName: node - linkType: hard - "fastparse@npm:^1.1.2": version: 1.1.2 resolution: "fastparse@npm:1.1.2" @@ -10156,27 +9707,27 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" dependencies: to-regex-range: ^5.0.1 - checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 languageName: node linkType: hard -"finalhandler@npm:1.3.1": - version: 1.3.1 - resolution: "finalhandler@npm:1.3.1" +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" dependencies: debug: 2.6.9 - encodeurl: ~2.0.0 + 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 - checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 languageName: node linkType: hard @@ -10236,19 +9787,18 @@ __metadata: "@babel/plugin-transform-object-assign": ^7.18.6 "@babel/preset-react": ^7.18.6 "@babel/preset-typescript": ^7.18.6 + "@testing-library/jest-dom": ^5.16.4 "@types/jest": ^28.1.6 "@types/node": 18.17.1 - "@typescript-eslint/eslint-plugin": 4.18.0 - "@typescript-eslint/parser": 4.18.0 + "@types/nodemailer": ^6.4.7 + "@types/react-query": ^1.2.9 + "@typescript-eslint/eslint-plugin": ^4.18.0 + "@typescript-eslint/parser": ^4.18.0 concurrently: ^5.2.0 eslint: ^7.0.0 eslint-config-prettier: ^8.5.0 - eslint-config-react-app: ^7.0.1 - eslint-plugin-cypress: latest eslint-plugin-prettier: ^4.2.1 - mitt: ^3.0.1 prettier: ^2.0.5 - react-hook-form-persist: ^3.0.0 rimraf: ^3.0.2 ts-node: ^10.9.1 typescript: ^4.1.5 @@ -10291,12 +9841,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.6": - version: 1.15.9 - resolution: "follow-redirects@npm:1.15.9" + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true - checksum: 859e2bacc7a54506f2bf9aacb10d165df78c8c1b0ceb8023f966621b233717dab56e8d08baadc3ad3b9db58af290413d585c999694b7c146aaf2616340c3d2a6 + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 languageName: node linkType: hard @@ -10317,12 +9867,12 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 - checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard @@ -10425,7 +9975,6 @@ __metadata: dependencies: "@emotion/react": ^11.10.4 "@emotion/styled": ^11.10.4 - "@hello-pangea/dnd": ^16.6.0 "@hookform/resolvers": ^2.9.7 "@mui/icons-material": ^5.10.3 "@mui/material": ^5.10.3 @@ -10455,10 +10004,8 @@ __metadata: jest-fail-on-console: ^3.0.2 msw: ^0.44.2 pdf-lib: ^1.17.1 - react: 18.2.0 - react-archer: ^4.4.0 + react: ^18.2.0 react-dom: ^18.2.0 - react-draggable: ^4.4.6 react-google-charts: ^4.0.0 react-google-login: ^5.2.2 react-helmet: ^6.1.0 @@ -10471,8 +10018,8 @@ __metadata: sass: ^1.54.0 shared: 1.0.0 typed-scss-modules: ^6.5.0 - typescript: 4.1.5 - vite: 4.4.5 + typescript: ^4.1.5 + vite: ^4.4.5 vitest: ^0.32.1 web-vitals: ^0.2.4 yup: ^0.32.11 @@ -10550,16 +10097,6 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:2.3.3, fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - "fsevents@npm:^1.2.7": version: 1.2.13 resolution: "fsevents@npm:1.2.13" @@ -10571,11 +10108,12 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@2.3.3#~builtin, fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard @@ -10590,6 +10128,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -10597,7 +10144,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -10749,18 +10296,17 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" + version: 10.3.12 + resolution: "glob@npm:10.3.12" dependencies: foreground-child: ^3.1.0 - jackspeak: ^3.1.2 - minimatch: ^9.0.4 - minipass: ^7.1.2 - package-json-from-dist: ^1.0.0 - path-scurry: ^1.11.1 + jackspeak: ^2.3.6 + minimatch: ^9.0.1 + minipass: ^7.0.4 + path-scurry: ^1.10.2 bin: glob: dist/esm/bin.mjs - checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a + checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 languageName: node linkType: hard @@ -10805,7 +10351,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.20.0, globals@npm:^13.6.0, globals@npm:^13.9.0": +"globals@npm:^13.6.0, globals@npm:^13.9.0": version: 13.24.0 resolution: "globals@npm:13.24.0" dependencies: @@ -10815,12 +10361,11 @@ __metadata: linkType: hard "globalthis@npm:^1.0.3": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" dependencies: - define-properties: ^1.2.1 - gopd: ^1.0.1 - checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -10838,7 +10383,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": +"globby@npm:^11.0.3": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -10933,17 +10478,10 @@ __metadata: languageName: node linkType: hard -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 - languageName: node - linkType: hard - "graphql@npm:^16.3.0": - version: 16.9.0 - resolution: "graphql@npm:16.9.0" - checksum: 8cb3d54100e9227310383ce7f791ca48d12f15ed9f2021f23f8735f1121aafe4e5e611a853081dd935ce221724ea1ae4638faef5d2921fb1ad7c26b5f46611e9 + version: 16.8.1 + resolution: "graphql@npm:16.8.1" + checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 languageName: node linkType: hard @@ -11216,7 +10754,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -11444,12 +10982,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" dependencies: agent-base: ^7.0.2 debug: 4 - checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 + checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 languageName: node linkType: hard @@ -11532,9 +11070,9 @@ __metadata: linkType: hard "ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 languageName: node linkType: hard @@ -11546,9 +11084,9 @@ __metadata: linkType: hard "immutable@npm:^4.0.0": - version: 4.3.7 - resolution: "immutable@npm:4.3.7" - checksum: 1c50eb053bb300796551604afff554066f041aa8e15926cf98f6d11d9736b62ad12531c06515dd96375258653878b4736f8051cd20b640f5f976d09fa640e3ec + version: 4.3.5 + resolution: "immutable@npm:4.3.5" + checksum: 0e25dd5c314421faede9e1122ab26cdb638cc3edc8678c4a75dee104279b12621a30c80a480fae7f68bc7e81672f1e672e454dc0fdc7e6cf0af10809348387b8 languageName: node linkType: hard @@ -11603,14 +11141,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" + version: 3.1.0 + resolution: "import-local@npm:3.1.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd languageName: node linkType: hard @@ -11921,12 +11459,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": - version: 2.15.1 - resolution: "is-core-module@npm:2.15.1" +"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - hasown: ^2.0.2 - checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard @@ -12509,16 +12047,16 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" +"jackspeak@npm:^2.3.6": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 languageName: node linkType: hard @@ -12704,9 +12242,9 @@ __metadata: linkType: hard "jest-fail-on-console@npm:^3.0.2": - version: 3.3.0 - resolution: "jest-fail-on-console@npm:3.3.0" - checksum: 891cbe9bac5d7656beee75850c880427401880debc6dc110b845d17313cf375dc5f6f1d27eaf411553839287fe150fd46738f3c5facba5cb22244546ee66e111 + version: 3.2.0 + resolution: "jest-fail-on-console@npm:3.2.0" + checksum: 389aa581484825a285fc27f959369a674d4a81ede7474218a27d3596cfc8ed6ea13a0f99053e5d08d7fa43b68246ab8ff51592a70fdb9b4e2b355ca9a165221a languageName: node linkType: hard @@ -13408,26 +12946,8 @@ __metadata: lodash.isstring: ^4.0.1 lodash.once: ^4.0.0 ms: ^2.1.1 - semver: ^5.6.0 - checksum: 93c9e3f23c59b758ac88ba15f4e4753b3749dfce7a6f7c40fb86663128a1e282db085eec852d4e0cbca4cefdcd3a8275ee255dbd08fcad0df26ad9f6e4cc853a - languageName: node - linkType: hard - -"jsonwebtoken@npm:^9.0.2": - version: 9.0.2 - resolution: "jsonwebtoken@npm:9.0.2" - 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: ^7.5.4 - checksum: fc739a6a8b33f1974f9772dca7f8493ca8df4cc31c5a09dcfdb7cff77447dcf22f4236fb2774ef3fe50df0abeb8e1c6f4c41eba82f500a804ab101e2fbc9d61a + semver: ^5.6.0 + checksum: 93c9e3f23c59b758ac88ba15f4e4753b3749dfce7a6f7c40fb86663128a1e282db085eec852d4e0cbca4cefdcd3a8275ee255dbd08fcad0df26ad9f6e4cc853a languageName: node linkType: hard @@ -13541,9 +13061,9 @@ __metadata: linkType: hard "language-subtag-registry@npm:^0.3.20": - version: 0.3.23 - resolution: "language-subtag-registry@npm:0.3.23" - checksum: 0b64c1a6c5431c8df648a6d25594ff280613c886f4a1a542d9b864e5472fb93e5c7856b9c41595c38fac31370328fc79fcc521712e89ea6d6866cbb8e0995d81 + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a languageName: node linkType: hard @@ -13815,9 +13335,9 @@ __metadata: linkType: hard "loglevel@npm:^1.6.8": - version: 1.9.2 - resolution: "loglevel@npm:1.9.2" - checksum: 896c67b90a507bfcfc1e9a4daa7bf789a441dd70d95cd13b998d6dd46233a3bfadfb8fadb07250432bbfb53bf61e95f2520f9b11f9d3175cc460e5c251eca0af + version: 1.9.1 + resolution: "loglevel@npm:1.9.1" + checksum: e1c8586108c4d566122e91f8a79c8df728920e3a714875affa5120566761a24077ec8ec9e5fc388b022e39fc411ec6e090cde1b5775871241b045139771eeb06 languageName: node linkType: hard @@ -13851,9 +13371,9 @@ __metadata: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db languageName: node linkType: hard @@ -13894,11 +13414,11 @@ __metadata: linkType: hard "magic-string@npm:^0.30.0": - version: 0.30.11 - resolution: "magic-string@npm:0.30.11" + version: 0.30.10 + resolution: "magic-string@npm:0.30.10" dependencies: - "@jridgewell/sourcemap-codec": ^1.5.0 - checksum: e041649453c9a3f31d2e731fc10e38604d50e20d3585cd48bc7713a6e2e1a3ad3012105929ca15750d59d0a3f1904405e4b95a23b7e69dc256db3c277a73a3ca + "@jridgewell/sourcemap-codec": ^1.4.15 + checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 languageName: node linkType: hard @@ -13938,8 +13458,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" dependencies: "@npmcli/agent": ^2.0.0 cacache: ^18.0.0 @@ -13950,10 +13470,9 @@ __metadata: minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 - proc-log: ^4.2.0 promise-retry: ^2.0.1 ssri: ^10.0.0 - checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af languageName: node linkType: hard @@ -14076,13 +13595,6 @@ __metadata: languageName: node linkType: hard -"memoize-one@npm:^6.0.0": - version: 6.0.0 - resolution: "memoize-one@npm:6.0.0" - checksum: f185ea69f7cceae5d1cb596266dcffccf545e8e7b4106ec6aa93b71ab9d16460dd118ac8b12982c55f6d6322fcc1485de139df07eacffaae94888b9b3ad7675f - languageName: node - linkType: hard - "memory-fs@npm:^0.4.1": version: 0.4.1 resolution: "memory-fs@npm:0.4.1" @@ -14103,10 +13615,10 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.3": - version: 1.0.3 - resolution: "merge-descriptors@npm:1.0.3" - checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 languageName: node linkType: hard @@ -14170,12 +13682,12 @@ __metadata: linkType: hard "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" dependencies: - braces: ^3.0.3 + braces: ^3.0.2 picomatch: ^2.3.1 - checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc languageName: node linkType: hard @@ -14198,20 +13710,13 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0": +"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f languageName: node linkType: hard -"mime-db@npm:>= 1.43.0 < 2": - version: 1.53.0 - resolution: "mime-db@npm:1.53.0" - checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb - languageName: node - linkType: hard - "mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -14299,12 +13804,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" +"minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" dependencies: brace-expansion: ^2.0.1 - checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 languageName: node linkType: hard @@ -14334,8 +13839,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" dependencies: encoding: ^0.1.13 minipass: ^7.0.3 @@ -14344,7 +13849,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a languageName: node linkType: hard @@ -14391,10 +13896,10 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 languageName: node linkType: hard @@ -14426,13 +13931,6 @@ __metadata: languageName: node linkType: hard -"mitt@npm:^3.0.1": - version: 3.0.1 - resolution: "mitt@npm:3.0.1" - checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 - languageName: node - linkType: hard - "mixin-deep@npm:^1.2.0": version: 1.3.2 resolution: "mixin-deep@npm:1.3.2" @@ -14463,15 +13961,15 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.4.0, mlly@npm:^1.7.1": - version: 1.7.1 - resolution: "mlly@npm:1.7.1" +"mlly@npm:^1.4.0, mlly@npm:^1.6.1": + version: 1.6.1 + resolution: "mlly@npm:1.6.1" dependencies: acorn: ^8.11.3 pathe: ^1.1.2 - pkg-types: ^1.1.1 - ufo: ^1.5.3 - checksum: 956a6d54119eef782f302580f63a9800654e588cd70015b4218a00069c6ef11b87984e8ffe140a4668b0100ad4022b11d1f9b11ac2c6dbafa4d8bc33ae3a08a8 + pkg-types: ^1.0.3 + ufo: ^1.3.2 + checksum: c40a547dba8f6b2a5a840899d49f4c9550c233d47fd7bd75f4ac27f388047bad655ad86684329809c1640df4373b45bec77304f73530ca4354bc1199700e2a46 languageName: node linkType: hard @@ -14496,7 +13994,14 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -14580,11 +14085,11 @@ __metadata: linkType: hard "nan@npm:^2.12.1": - version: 2.20.0 - resolution: "nan@npm:2.20.0" + version: 2.19.0 + resolution: "nan@npm:2.19.0" dependencies: node-gyp: latest - checksum: eb09286e6c238a3582db4d88c875db73e9b5ab35f60306090acd2f3acae21696c9b653368b4a0e32abcef64ee304a923d6223acaddd16169e5eaaf5c508fb533 + checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600 languageName: node linkType: hard @@ -14641,13 +14146,6 @@ __metadata: languageName: node linkType: hard -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -14722,8 +14220,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.2.0 - resolution: "node-gyp@npm:10.2.0" + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 @@ -14731,13 +14229,13 @@ __metadata: graceful-fs: ^4.2.6 make-fetch-happen: ^13.0.0 nopt: ^7.0.0 - proc-log: ^4.1.0 + proc-log: ^3.0.0 semver: ^7.3.5 - tar: ^6.2.1 + tar: ^6.1.2 which: ^4.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f + checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 languageName: node linkType: hard @@ -14800,17 +14298,17 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.18": - version: 2.0.18 - resolution: "node-releases@npm:2.0.18" - checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3 +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 languageName: node linkType: hard "nodemailer@npm:^6.9.1": - version: 6.9.15 - resolution: "nodemailer@npm:6.9.15" - checksum: 2d975f5c60f84acde52d79d43287c70197fe94bde4a731682f306e9636a148c49de29a5dd92ce7dc5aac068a148cd91da3401ede80f8f52b9f2bc00439f36ced + version: 6.9.13 + resolution: "nodemailer@npm:6.9.13" + checksum: 1b591ef480be2ff69480127cbff819e6593b1ef263b6f920e1a4e83e40280582daf7a14a809ef92f9828e2a70bdb3ce22b11924e209f2afe4975f9ff37e08e9d languageName: node linkType: hard @@ -14835,13 +14333,24 @@ __metadata: linkType: hard "nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" + version: 7.2.0 + resolution: "nopt@npm:7.2.0" dependencies: abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + languageName: node + linkType: hard + +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: 1 + bin: + nopt: ./bin/nopt.js + checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 languageName: node linkType: hard @@ -14943,9 +14452,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.13 - resolution: "nwsapi@npm:2.2.13" - checksum: d34fb7838517c3c7e8cc824e443275b08b57f6a025a860693d18c56ddcfd176e32df9bf0ae7f5a95c7a32981501caa1f9fda31b59f28aa72a4b9d01f573a8e6b + version: 2.2.9 + resolution: "nwsapi@npm:2.2.9" + checksum: 3ab2bc47d5507a76e2fdee5aae7ea2875c6def912d0401126cad3e39825a7decb7a02622810c855a7902bd31e917e606b37882dca12b0ae54b4d3b70275de927 languageName: node linkType: hard @@ -14968,9 +14477,9 @@ __metadata: linkType: hard "object-inspect@npm:^1.13.1": - version: 1.13.2 - resolution: "object-inspect@npm:1.13.2" - checksum: 9f850b3c045db60e0e97746e809ee4090d6ce62195af17dd1e9438ac761394a7d8ec4f7906559aea5424eaf61e35d3e53feded2ccd5f62fcc7d9670d3c8eb353 + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f languageName: node linkType: hard @@ -15012,7 +14521,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.0, object.entries@npm:^1.1.8": +"object.entries@npm:^1.1.0, object.entries@npm:^1.1.7": version: 1.1.8 resolution: "object.entries@npm:1.1.8" dependencies: @@ -15023,7 +14532,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.7": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -15050,7 +14559,7 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.3": +"object.groupby@npm:^1.0.1": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" dependencies: @@ -15061,6 +14570,17 @@ __metadata: languageName: node linkType: hard +"object.hasown@npm:^1.1.3": + version: 1.1.4 + resolution: "object.hasown@npm:1.1.4" + dependencies: + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 + languageName: node + linkType: hard + "object.pick@npm:^1.3.0": version: 1.3.0 resolution: "object.pick@npm:1.3.0" @@ -15070,7 +14590,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.2.0": +"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -15175,16 +14695,16 @@ __metadata: linkType: hard "optionator@npm:^0.9.1": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" + version: 0.9.3 + resolution: "optionator@npm:0.9.3" 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 - word-wrap: ^1.2.5 - checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -15220,9 +14740,9 @@ __metadata: linkType: hard "outvariant@npm:^1.2.1, outvariant@npm:^1.3.0": - version: 1.4.3 - resolution: "outvariant@npm:1.4.3" - checksum: 4a3551fb2b45309e585eebf88bad094dbe56ac6d3a28d59dd2e4050b431aa2beb6097a0763fce3cd82ca0f077026f380a9b60fffc306aaf430141421e7a7b6ed + version: 1.4.2 + resolution: "outvariant@npm:1.4.2" + checksum: 5d9e2b3edb1cc8be9cbfc1c8c97e8b05137c4384bbfc56e0a465de26c5d2f023e65732ddcda9d46599b06d667fbc0de32c30d2ecd11f6f3f43bcf8ce0d320918 languageName: node linkType: hard @@ -15346,13 +14866,6 @@ __metadata: languageName: node linkType: hard -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 - languageName: node - linkType: hard - "pako@npm:^1.0.10, pako@npm:^1.0.11, pako@npm:^1.0.6, pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -15544,36 +15057,36 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" +"path-scurry@npm:^1.10.2": + version: 1.10.2 + resolution: "path-scurry@npm:1.10.2" dependencies: lru-cache: ^10.2.0 minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 languageName: node linkType: hard -"path-to-regexp@npm:0.1.10": - version: 0.1.10 - resolution: "path-to-regexp@npm:0.1.10" - checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce languageName: node linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.9.0 - resolution: "path-to-regexp@npm:1.9.0" + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" dependencies: isarray: 0.0.1 - checksum: 5b2ac9cab2a9f82effd30a35164b20998b18d99d96608281dd2cab6e66c0e4536187970369b185ab21d3815da1ecb7dcb2d5f97a4bf0ee6e31a9612299fca147 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd languageName: node linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.3.0 - resolution: "path-to-regexp@npm:6.3.0" - checksum: eca78602e6434a1b6799d511d375ec044e8d7e28f5a48aa5c28d57d8152fb52f3fc62fb1cfc5dfa2198e1f041c2a82ed14043d75740a2fe60e91b5089a153250 + version: 6.2.2 + resolution: "path-to-regexp@npm:6.2.2" + checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 languageName: node linkType: hard @@ -15637,10 +15150,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": - version: 1.1.0 - resolution: "picocolors@npm:1.1.0" - checksum: a64d653d3a188119ff45781dfcdaeedd7625583f45280aea33fcb032c7a0d3959f2368f9b192ad5e8aade75b74dbd954ffe3106c158509a45e4c18ab379a2acd +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 languageName: node linkType: hard @@ -15713,14 +15226,14 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.1.1": - version: 1.2.0 - resolution: "pkg-types@npm:1.2.0" +"pkg-types@npm:^1.0.3": + version: 1.1.0 + resolution: "pkg-types@npm:1.1.0" dependencies: confbox: ^0.1.7 - mlly: ^1.7.1 + mlly: ^1.6.1 pathe: ^1.1.2 - checksum: c9ea31be8c7bf0b760c075d5e39f71d90fcebee316e49688345e9095d520ed766f3bfd560227e3f3c28639399a0641a27193eef60c4802d89cb414e21240bbb5 + checksum: 9cd3684e308c622db79efc8edc9291662e01cb42ed624ea2fa5400fb6eab94679b4e5b28808e9b763298a023c2381fd72a363a1c84a9073c96609af4c5c59f8f languageName: node linkType: hard @@ -16538,12 +16051,12 @@ __metadata: linkType: hard "postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" + version: 6.0.16 + resolution: "postcss-selector-parser@npm:6.0.16" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84 + checksum: e1cd68e33a39e3dc1e1e5bd8717be5bbe3cc23a4cecb466c3acb2f3a77daad7a47df4d6137a76f8db74cf160d2fb16b2cfdb4ccbebdfda844690f8d545fe281d languageName: node linkType: hard @@ -16637,14 +16150,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.0, postcss@npm:^8.4.26, postcss@npm:^8.4.27": - version: 8.4.47 - resolution: "postcss@npm:8.4.47" +"postcss@npm:^8.1.0, postcss@npm:^8.4.27": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" dependencies: nanoid: ^3.3.7 - picocolors: ^1.1.0 - source-map-js: ^1.2.1 - checksum: f78440a9d8f97431dd2ab1ab8e1de64f12f3eff38a3d8d4a33919b96c381046a314658d2de213a5fa5eb296b656de76a3ec269fdea27f16d5ab465b916a0f52c + picocolors: ^1.0.0 + source-map-js: ^1.2.0 + checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 languageName: node linkType: hard @@ -16750,25 +16263,22 @@ __metadata: languageName: node linkType: hard -"prisma@npm:^5.7.1": - version: 5.20.0 - resolution: "prisma@npm:5.20.0" +"prisma@npm:^4.4.0": + version: 4.16.2 + resolution: "prisma@npm:4.16.2" dependencies: - "@prisma/engines": 5.20.0 - fsevents: 2.3.3 - dependenciesMeta: - fsevents: - optional: true + "@prisma/engines": 4.16.2 bin: prisma: build/index.js - checksum: 792349b6e40a2f8586bc0a21249990621b556056a1a1e45274a999b8ff317ed3111dabf3175c392688c5e154c330343a4f658961040ffa7d6de41475eb36f744 + prisma2: build/index.js + checksum: 1d0ed616abd7f8de22441e333b976705f1cb05abcb206965df3fc6a7ea03911ef467dd484a4bc51fdc6cff72dd9857b9852be5f232967a444af0a98c49bfdb76 languageName: node linkType: hard -"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 languageName: node linkType: hard @@ -16929,12 +16439,12 @@ __metadata: linkType: hard "pump@npm:^3.0.0": - version: 3.0.2 - resolution: "pump@npm:3.0.2" + version: 3.0.0 + resolution: "pump@npm:3.0.0" dependencies: end-of-stream: ^1.1.0 once: ^1.3.1 - checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 languageName: node linkType: hard @@ -16970,12 +16480,21 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.13.0, qs@npm:^6.11.0, qs@npm:^6.12.3, qs@npm:^6.7.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + +"qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.7.0": + version: 6.12.1 + resolution: "qs@npm:6.12.1" dependencies: side-channel: ^1.0.6 - checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 + checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 languageName: node linkType: hard @@ -17017,13 +16536,6 @@ __metadata: languageName: node linkType: hard -"raf-schd@npm:^4.0.3": - version: 4.0.3 - resolution: "raf-schd@npm:4.0.3" - checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 - languageName: node - linkType: hard - "raf@npm:^3.4.1": version: 3.4.1 resolution: "raf@npm:3.4.1" @@ -17085,20 +16597,6 @@ __metadata: languageName: node linkType: hard -"react-archer@npm:^4.4.0": - version: 4.4.0 - resolution: "react-archer@npm:4.4.0" - dependencies: - react-fast-compare: ^2.0.4 - resize-observer-polyfill: 1.5.0 - peerDependencies: - "@types/react": ^16.8.8 || ^17 || ^18 - prop-types: ^15.6.2 - react: ^16.9.0 || ^17 || ^18 - checksum: 2f675499d9af5a06911332e432af24280b38715151078a3a75b6dd7790f6756c19647928e3f67cda3b21526c6dda2729bedb17e40d1f21835a1b4873c362c6c4 - languageName: node - linkType: hard - "react-dev-utils@npm:^11.0.3": version: 11.0.4 resolution: "react-dev-utils@npm:11.0.4" @@ -17132,27 +16630,14 @@ __metadata: linkType: hard "react-dom@npm:^18.2.0": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - scheduler: ^0.23.2 - peerDependencies: - react: ^18.3.1 - checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9 - languageName: node - linkType: hard - -"react-draggable@npm:^4.4.6": - version: 4.4.6 - resolution: "react-draggable@npm:4.4.6" - dependencies: - clsx: ^1.1.1 - prop-types: ^15.8.1 + scheduler: ^0.23.0 peerDependencies: - react: ">= 16.3.0" - react-dom: ">= 16.3.0" - checksum: 9b15aac59244873ac4561c5a2bead43a56e18d406e0a5f242bd4f9d151c074530c02b99387983104bf43417292f9cf8d063e554ed08d88792235e3fbc965f1b8 + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc languageName: node linkType: hard @@ -17174,13 +16659,6 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^2.0.4": - version: 2.0.4 - resolution: "react-fast-compare@npm:2.0.4" - checksum: 06046595f90a4e3e3a56f40a8078c00aa71bdb064ddb98343f577f546aa22e888831fd45f009c93b34707cc842b4c637737e956fd13d6f80607ee92fb9cf9a1c - languageName: node - linkType: hard - "react-fast-compare@npm:^3.1.1": version: 3.2.2 resolution: "react-fast-compare@npm:3.2.2" @@ -17189,12 +16667,12 @@ __metadata: linkType: hard "react-google-charts@npm:^4.0.0": - version: 4.0.7 - resolution: "react-google-charts@npm:4.0.7" + version: 4.0.1 + resolution: "react-google-charts@npm:4.0.1" peerDependencies: react: ">=16.3.0" react-dom: ">=16.3.0" - checksum: 73b7765aad8adee94a93d3e01f2a81ccc096d95ae555946307cd7be826b8b8bc056757d4602b4ff27c9e5ce3196dbb8136f5f30a49719783eba9bd7710c9d482 + checksum: 874a552b07cc67d6b830718dd5e71055c46fbd0c7a12bca14078c0744111d8fead833e36a16bd0b0ea5c26f6cff0eb84b4b6de62845c945b3c47c6cc75233f9d languageName: node linkType: hard @@ -17225,22 +16703,12 @@ __metadata: languageName: node linkType: hard -"react-hook-form-persist@npm:^3.0.0": - version: 3.0.0 - resolution: "react-hook-form-persist@npm:3.0.0" - peerDependencies: - react: ">= 16.3" - react-hook-form: ">= 6" - checksum: de90d45cb8ac49c636df78da96284e5f915894a639b06b95c1ce1d7da7bbd04305a52411b90693007376417dac3fd9bd3ed114dedbbae32fb15c2a588e870260 - languageName: node - linkType: hard - "react-hook-form@npm:^7.34.0": - version: 7.53.0 - resolution: "react-hook-form@npm:7.53.0" + version: 7.51.3 + resolution: "react-hook-form@npm:7.51.3" peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - checksum: 84d67fb79bad03d0aa809b5e411d97fb081fc13cd2b6d063a988f81f6fbef8545463e05360afa9d8d58fff19f08fa919930dcdc98a9e68bf74048c9f63e10ad5 + react: ^16.8.0 || ^17 || ^18 + checksum: 4ac71033b66ae0b7b9d75a1bc2053a6747fb37f68c6895ee85a72cabb890168d82990c8ca7bddd271e80fdbf58f471d14d6a0e0714400d017590d4f56b3d241f languageName: node linkType: hard @@ -17258,10 +16726,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -17325,42 +16793,10 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^8.1.3": - version: 8.1.3 - resolution: "react-redux@npm:8.1.3" - dependencies: - "@babel/runtime": ^7.12.1 - "@types/hoist-non-react-statics": ^3.3.1 - "@types/use-sync-external-store": ^0.0.3 - hoist-non-react-statics: ^3.3.2 - react-is: ^18.0.0 - use-sync-external-store: ^1.0.0 - peerDependencies: - "@types/react": ^16.8 || ^17.0 || ^18.0 - "@types/react-dom": ^16.8 || ^17.0 || ^18.0 - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - react-native: ">=0.59" - redux: ^4 || ^5.0.0-beta.0 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - react-dom: - optional: true - react-native: - optional: true - redux: - optional: true - checksum: 192ea6f6053148ec80a4148ec607bc259403b937e515f616a1104ca5ab357e97e98b8245ed505a17afee67a72341d4a559eaca9607968b4a422aa9b44ba7eb89 - languageName: node - linkType: hard - -"react-refresh@npm:^0.14.2": - version: 0.14.2 - resolution: "react-refresh@npm:0.14.2" - checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382 +"react-refresh@npm:^0.14.0": + version: 0.14.0 + resolution: "react-refresh@npm:0.14.0" + checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 languageName: node linkType: hard @@ -17521,7 +16957,7 @@ __metadata: languageName: node linkType: hard -"react@npm:18.2.0": +"react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" dependencies: @@ -17601,13 +17037,6 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:^4.0.1": - version: 4.0.1 - resolution: "readdirp@npm:4.0.1" - checksum: b39747defe52922c2478874ffbb1fd0bececa7b3170466a5bc770795dd5296a309598990cbd809732079b2363e989d0008b8e91cfbac7b726f68c1947db2d31c - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -17636,15 +17065,6 @@ __metadata: languageName: node linkType: hard -"redux@npm:^4.2.1": - version: 4.2.1 - resolution: "redux@npm:4.2.1" - dependencies: - "@babel/runtime": ^7.9.2 - checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd - languageName: node - linkType: hard - "reflect.getprototypeof@npm:^1.0.4": version: 1.0.6 resolution: "reflect.getprototypeof@npm:1.0.6" @@ -17661,11 +17081,11 @@ __metadata: linkType: hard "regenerate-unicode-properties@npm:^10.1.0": - version: 10.2.0 - resolution: "regenerate-unicode-properties@npm:10.2.0" + version: 10.1.1 + resolution: "regenerate-unicode-properties@npm:10.1.1" dependencies: regenerate: ^1.4.2 - checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 + checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf languageName: node linkType: hard @@ -17735,7 +17155,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": +"regexpp@npm:^3.1.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 @@ -17875,13 +17295,6 @@ __metadata: languageName: node linkType: hard -"resize-observer-polyfill@npm:1.5.0": - version: 1.5.0 - resolution: "resize-observer-polyfill@npm:1.5.0" - checksum: ecc6aab5d4f967f1b76cee0748c1967c8b6b5d8c4393764ca3b788dbd15c0f846326c4ebff9f4f39aba45fea8016cd42bb95e28e8fab1d14349e173790c58133 - languageName: node - linkType: hard - "resolve-cwd@npm:^2.0.0": version: 2.0.0 resolution: "resolve-cwd@npm:2.0.0" @@ -18176,9 +17589,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^3.25.2, rollup@npm:^3.27.1": - version: 3.29.5 - resolution: "rollup@npm:3.29.5" +"rollup@npm:^3.27.1": + version: 3.29.4 + resolution: "rollup@npm:3.29.4" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -18186,7 +17599,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 6f8304e58ac8170a715e61e46c4aa674b2ae2587ed2a712dab58f72e5e54803ae40b485fbe6b3e6a694f4c8f7a59ab936ccf9f6b686c7cfd1f1970fa9ecadf1a + checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e languageName: node linkType: hard @@ -18345,15 +17758,15 @@ __metadata: linkType: hard "sass@npm:^1.54.0": - version: 1.79.4 - resolution: "sass@npm:1.79.4" + version: 1.75.0 + resolution: "sass@npm:1.75.0" dependencies: - chokidar: ^4.0.0 + chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: c6da5642894f5ff6627861cd39d595f83e02f05255519a1c50873705ca1f8a6b9065a5c4456fb876552bba5b3024ad1424db00ee6ab12e66fe3be0acf48d5d21 + checksum: bfb9f5ddb6a2e1fe0c1ba6191cdb17afa7b40c1eb892c7152f6a29ff2b06dc7a510bdb648f8cca0179dcb3965920ebeb8894f0710b0b450a99db563831345033 languageName: node linkType: hard @@ -18373,12 +17786,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" dependencies: loose-envify: ^1.1.0 - checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a languageName: node linkType: hard @@ -18449,12 +17862,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.6.3 - resolution: "semver@npm:7.6.3" +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c languageName: node linkType: hard @@ -18476,9 +17891,9 @@ __metadata: languageName: node linkType: hard -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" dependencies: debug: 2.6.9 depd: 2.0.0 @@ -18493,7 +17908,7 @@ __metadata: on-finished: 2.4.1 range-parser: ~1.2.1 statuses: 2.0.1 - checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 languageName: node linkType: hard @@ -18541,15 +17956,15 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.16.2": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" dependencies: - encodeurl: ~2.0.0 + encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 - send: 0.19.0 - checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d languageName: node linkType: hard @@ -18561,9 +17976,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.7.0 - resolution: "set-cookie-parser@npm:2.7.0" - checksum: 1eed43d7b284b727b4e7d35e324a74c493469265488b0c8f464f5224186e7dbbdd1cb35c8822053581f807a10b930a628144041ad453db06548945c61d5a834f + version: 2.6.0 + resolution: "set-cookie-parser@npm:2.6.0" + checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 languageName: node linkType: hard @@ -18848,17 +18263,17 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" dependencies: agent-base: ^7.1.1 debug: ^4.3.4 - socks: ^2.8.3 - checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 + socks: ^2.7.1 + checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 languageName: node linkType: hard -"socks@npm:^2.8.3": +"socks@npm:^2.7.1": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -18884,10 +18299,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 languageName: node linkType: hard @@ -18991,9 +18406,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.20 - resolution: "spdx-license-ids@npm:3.0.20" - checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 + version: 3.0.17 + resolution: "spdx-license-ids@npm:3.0.17" + checksum: 0aba5d16292ff604dd20982200e23b4d425f6ba364765039bdbde2f6c956b9909fce1ad040a897916a5f87388e85e001f90cb64bf706b6e319f3908cfc445a59 languageName: node linkType: hard @@ -19048,11 +18463,11 @@ __metadata: linkType: hard "ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" + version: 10.0.5 + resolution: "ssri@npm:10.0.5" dependencies: minipass: ^7.0.3 - checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 languageName: node linkType: hard @@ -19266,17 +18681,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.includes@npm:^2.0.0": - version: 2.0.0 - resolution: "string.prototype.includes@npm:2.0.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: cf413e7f603b0414b65fdf1e7e3670ba85fd992b31c7eadfbdd9a484b86d265f0260431e7558cdb44a318dcadd1da8442b7bb8193b9ddd0aea3c376d2a559859 - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.11": +"string.prototype.matchall@npm:^4.0.10": version: 4.0.11 resolution: "string.prototype.matchall@npm:4.0.11" dependencies: @@ -19296,16 +18701,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -19670,7 +19065,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.2.1": +"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -19732,8 +19127,8 @@ __metadata: linkType: hard "terser-webpack-plugin@npm:^1.4.3": - version: 1.4.6 - resolution: "terser-webpack-plugin@npm:1.4.6" + version: 1.4.5 + resolution: "terser-webpack-plugin@npm:1.4.5" dependencies: cacache: ^12.0.2 find-cache-dir: ^2.1.0 @@ -19746,7 +19141,7 @@ __metadata: worker-farm: ^1.7.0 peerDependencies: webpack: ^4.0.0 - checksum: 8b6c84df929383032edb25c949781dc55dc31ff85dda9ede25af49357077f615f0065101fcc567cd9c801c8cb1f158ce441fb193c18c6127d04a809a1e7d0d2b + checksum: 02aada80927d3c8105d69cb00384d307b73aed67d180db5d20023a8d649149f3803ad50f9cd2ef9eb2622005de87e677198ecc5088f51422bfac5d4d57472d0e languageName: node linkType: hard @@ -19764,8 +19159,8 @@ __metadata: linkType: hard "terser@npm:^5.3.4": - version: 5.34.1 - resolution: "terser@npm:5.34.1" + version: 5.30.4 + resolution: "terser@npm:5.30.4" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -19773,7 +19168,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 19a6710e17ff3f20d3b0661090640a572ce5ff6f2e95c731bb5a9eb1dcc1fe563cd0f1e4a22cde89b2717667336252bc2adb8894bdfbec6d1996b3e70b44f365 + checksum: 4e33a98d451a1175c83f668cb1dd34e1b4573890ba3081e0389e71e6552ca501ebfda5b15cddeab33585f7b4c13f2e7ad9ba9613655b9e36bc919fde48ba2dcd languageName: node linkType: hard @@ -19842,7 +19237,7 @@ __metadata: languageName: node linkType: hard -"tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6": +"tiny-invariant@npm:^1.0.2": version: 1.3.3 resolution: "tiny-invariant@npm:1.3.3" checksum: 5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe @@ -19857,9 +19252,9 @@ __metadata: linkType: hard "tinybench@npm:^2.5.0": - version: 2.9.0 - resolution: "tinybench@npm:2.9.0" - checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 + version: 2.8.0 + resolution: "tinybench@npm:2.8.0" + checksum: 024a307c6a71f6e2903e110952457ee3dfa606093b45d7f49efcfd01d452650e099474080677ff650b0fd76b49074425ac68ff2a70561699a78515a278bf0862 languageName: node linkType: hard @@ -19962,23 +19357,25 @@ __metadata: linkType: hard "touch@npm:^3.1.0": - version: 3.1.1 - resolution: "touch@npm:3.1.1" + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: ~1.0.10 bin: - nodetouch: bin/nodetouch.js - checksum: fb8c54207500eb760b6b9d77b9c5626cc027c9ad44431eed4268845f00f8c6bbfc95ce7e9da8e487f020aa921982a8bc5d8e909d0606e82686bd0a08a8e0539b + nodetouch: ./bin/nodetouch.js + checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 languageName: node linkType: hard "tough-cookie@npm:^4.0.0": - version: 4.1.4 - resolution: "tough-cookie@npm:4.1.4" + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 - checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c + checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc languageName: node linkType: hard @@ -20132,9 +19529,9 @@ __metadata: linkType: hard "tslib@npm:^2.0.3, tslib@npm:^2.1.0": - version: 2.7.0 - resolution: "tslib@npm:2.7.0" - checksum: 1606d5c89f88d466889def78653f3aab0f88692e80bb2066d090ca6112ae250ec1cfa9dbfaab0d17b60da15a4186e8ec4d893801c67896b277c17374e36e1d28 + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -20174,20 +19571,13 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": - version: 4.1.0 - resolution: "type-detect@npm:4.1.0" - checksum: 3b32f873cd02bc7001b00a61502b7ddc4b49278aabe68d652f732e1b5d768c072de0bc734b427abf59d0520a5f19a2e07309ab921ef02018fa1cb4af155cdb37 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -20241,9 +19631,9 @@ __metadata: linkType: hard "type@npm:^2.7.2": - version: 2.7.3 - resolution: "type@npm:2.7.3" - checksum: 69cfda3248847998f93b9d292fd251c10facf8d29513e2047d4684509d67bae82d910d7a00c1e9d9bbf2af242d36425b6616807d6c652c5c370c2be1f0008a47 + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 languageName: node linkType: hard @@ -20344,16 +19734,6 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.1.5": - version: 4.1.5 - resolution: "typescript@npm:4.1.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: af660e69aa5184520dfa57362dcf7fd1b26d08b869d76b3bd58dcc04058a757983f470cd61ded824ab01fa08a81d58c7f607d8e360f4e550664b9439d04f8e41 - languageName: node - linkType: hard - "typescript@npm:^4.1.5": version: 4.9.5 resolution: "typescript@npm:4.9.5" @@ -20364,16 +19744,6 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@4.1.5#~builtin": - version: 4.1.5 - resolution: "typescript@patch:typescript@npm%3A4.1.5#~builtin::version=4.1.5&hash=7ad353" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: fde897357ff6bb729323dc6d58753193d0d8e3d90ea66081f9a4eb798e1056a3a47a49c666a7bccdf93e37780ed0913b78de83a766c6da85b73bad3ed34470d0 - languageName: node - linkType: hard - "typescript@patch:typescript@^4.1.5#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=7ad353" @@ -20384,10 +19754,10 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.5.3": - version: 1.5.4 - resolution: "ufo@npm:1.5.4" - checksum: f244703b7d4f9f0df4f9af23921241ab73410b591f4e5b39c23e3147f3159b139a4b1fb5903189c306129f7a16b55995dac0008e0fbae88a37c3e58cbc34d833 +"ufo@npm:^1.3.2": + version: 1.5.3 + resolution: "ufo@npm:1.5.3" + checksum: 2f54fa543b2e689cc4ab341fe2194937afe37c5ee43cd782e6ecc184e36859e84d4197a43ae4cd6e9a56f793ca7c5b950dfff3f16fadaeef9b6b88b05c88c8ef languageName: node linkType: hard @@ -20417,17 +19787,17 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.19.2": - version: 6.19.8 - resolution: "undici-types@npm:6.19.8" - checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 languageName: node linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 languageName: node linkType: hard @@ -20442,9 +19812,9 @@ __metadata: linkType: hard "unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.2.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" - checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 languageName: node linkType: hard @@ -20660,17 +20030,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.0": - version: 1.1.1 - resolution: "update-browserslist-db@npm:1.1.1" +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" dependencies: - escalade: ^3.2.0 - picocolors: ^1.1.0 + escalade: ^3.1.1 + picocolors: ^1.0.0 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 languageName: node linkType: hard @@ -20743,30 +20113,12 @@ __metadata: linkType: hard "url@npm:^0.11.0": - version: 0.11.4 - resolution: "url@npm:0.11.4" + version: 0.11.3 + resolution: "url@npm:0.11.3" dependencies: punycode: ^1.4.1 - qs: ^6.12.3 - checksum: c25e587723d343d5d4248892393bfa5039ded9c2c07095a9d005bc64b7cb8956d623c0d8da8d1a28f71986a7a8d80fc2e9f9cf84235e48fa435a5cb4451062c6 - languageName: node - linkType: hard - -"use-memo-one@npm:^1.1.3": - version: 1.1.3 - resolution: "use-memo-one@npm:1.1.3" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac - languageName: node - linkType: hard - -"use-sync-external-store@npm:^1.0.0": - version: 1.2.2 - resolution: "use-sync-external-store@npm:1.2.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: fe07c071c4da3645f112c38c0e57beb479a8838616ff4e92598256ecce527f2888c08febc7f9b2f0ce2f0e18540ba3cde41eb2035e4fafcb4f52955037098a81 + qs: ^6.11.2 + checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e languageName: node linkType: hard @@ -20914,9 +20266,9 @@ __metadata: linkType: hard "validator@npm:^13.9.0": - version: 13.12.0 - resolution: "validator@npm:13.12.0" - checksum: fb8f070724770b1449ea1a968605823fdb112dbd10507b2802f8841cda3e7b5c376c40f18c84e6a7b59de320a06177e471554101a85f1fa8a70bac1a84e48adf + version: 13.11.0 + resolution: "validator@npm:13.11.0" + checksum: d1e0c27022681420756da25bc03eb08d5f0c66fb008f8ff02ebc95812b77c6be6e03d3bd05cf80ca702e23eeb73dadd66b4b3683173ea2a0bc7cc72820bee131 languageName: node linkType: hard @@ -20979,49 +20331,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:4.4.5": - version: 4.4.5 - resolution: "vite@npm:4.4.5" - dependencies: - esbuild: ^0.18.10 - fsevents: ~2.3.2 - postcss: ^8.4.26 - rollup: ^3.25.2 - peerDependencies: - "@types/node": ">= 14" - less: "*" - lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 825d8c13511b764710ca503e603746e20a7cb963194033dc606c46b1650a0d8986b577ba92507b54143cbf467032e9868ea04913a86a8fcb88b69c5b8551938b - languageName: node - linkType: hard - -"vite@npm:^3.0.0 || ^4.0.0": - version: 4.5.5 - resolution: "vite@npm:4.5.5" +"vite@npm:^3.0.0 || ^4.0.0, vite@npm:^4.4.5": + version: 4.5.3 + resolution: "vite@npm:4.5.3" dependencies: esbuild: ^0.18.10 fsevents: ~2.3.2 @@ -21055,7 +20367,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 300c5f39c83b22413dfdc84f72e9ba979bf4004e4d939409eea1470b116626294495b09e2bd73fae387a254b79988c8d54ceb281f9515120a0eda179c33b216e + checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c languageName: node linkType: hard @@ -21449,11 +20761,11 @@ __metadata: linkType: hard "which-builtin-type@npm:^1.1.3": - version: 1.1.4 - resolution: "which-builtin-type@npm:1.1.4" + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" dependencies: - function.prototype.name: ^1.1.6 - has-tostringtag: ^1.0.2 + 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 @@ -21462,13 +20774,13 @@ __metadata: is-weakref: ^1.0.2 isarray: ^2.0.5 which-boxed-primitive: ^1.0.2 - which-collection: ^1.0.2 - which-typed-array: ^1.1.15 - checksum: 1f413025250072534de2a2ee25139a24d477512b532b05c85fb9aa05aef04c6e1ca8e2668acf971b777e602721dbdec4b9d6a4f37c6b9ff8f026ad030352707f + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 languageName: node linkType: hard -"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": +"which-collection@npm:^1.0.1": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -21487,7 +20799,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: @@ -21534,18 +20846,18 @@ __metadata: linkType: hard "why-is-node-running@npm:^2.2.2": - version: 2.3.0 - resolution: "why-is-node-running@npm:2.3.0" + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" dependencies: siginfo: ^2.0.0 stackback: 0.0.2 bin: why-is-node-running: cli.js - checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a languageName: node linkType: hard -"word-wrap@npm:^1.2.5, word-wrap@npm:~1.2.3": +"word-wrap@npm:~1.2.3": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb @@ -21821,17 +21133,17 @@ __metadata: linkType: hard "ws@npm:^6.2.1": - version: 6.2.3 - resolution: "ws@npm:6.2.3" + version: 6.2.2 + resolution: "ws@npm:6.2.2" dependencies: async-limiter: ~1.0.0 - checksum: bbc96ff5628832d80669a88fd117487bf070492dfaa50df77fa442a2b119792e772f4365521e0a8e025c0d51173c54fa91adab165c11b8e0674685fdd36844a5 + checksum: aec3154ec51477c094ac2cb5946a156e17561a581fa27005cbf22c53ac57f8d4e5f791dd4bbba6a488602cb28778c8ab7df06251d590507c3c550fd8ebeee949 languageName: node linkType: hard "ws@npm:^7.4.6": - version: 7.5.10 - resolution: "ws@npm:7.5.10" + version: 7.5.9 + resolution: "ws@npm:7.5.9" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21840,7 +21152,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 languageName: node linkType: hard @@ -22001,9 +21313,9 @@ __metadata: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.1.1 - resolution: "yocto-queue@npm:1.1.1" - checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 languageName: node linkType: hard From dc59fae6001bf480ef0271029bc63a8689c13efa Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 19:05:14 -0500 Subject: [PATCH 132/320] #2797-removed yarn.lock changes --- yarn.lock | 21335 ---------------------------------------------------- 1 file changed, 21335 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 563831aede..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,21335 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd - languageName: node - linkType: hard - -"@adobe/css-tools@npm:^4.0.1": - version: 4.3.3 - resolution: "@adobe/css-tools@npm:4.3.3" - checksum: d21f3786b84911fee59c995a146644a85c98692979097b26484ffa9e442fb1a92ccd68ce984e3e7cf8d5933c3560fbc0ad3e3cd1de50b9a723d1c012e793bbcb - languageName: node - linkType: hard - -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 - languageName: node - linkType: hard - -"@babel/code-frame@npm:7.10.4": - version: 7.10.4 - resolution: "@babel/code-frame@npm:7.10.4" - dependencies: - "@babel/highlight": ^7.10.4 - checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019 - languageName: node - linkType: hard - -"@babel/code-frame@npm:7.12.11": - version: 7.12.11 - resolution: "@babel/code-frame@npm:7.12.11" - dependencies: - "@babel/highlight": ^7.10.4 - checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.5.5": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" - dependencies: - "@babel/highlight": ^7.24.2 - picocolors: ^1.0.0 - checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/compat-data@npm:7.24.4" - checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4 - languageName: node - linkType: hard - -"@babel/core@npm:7.12.3": - version: 7.12.3 - resolution: "@babel/core@npm:7.12.3" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/generator": ^7.12.1 - "@babel/helper-module-transforms": ^7.12.1 - "@babel/helpers": ^7.12.1 - "@babel/parser": ^7.12.3 - "@babel/template": ^7.10.4 - "@babel/traverse": ^7.12.1 - "@babel/types": ^7.12.1 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.1 - json5: ^2.1.2 - lodash: ^4.17.19 - resolve: ^1.3.2 - semver: ^5.4.1 - source-map: ^0.5.0 - checksum: 29ee14dd7ae66c1af84d1b2864e1e9e1bec23b89f41e414917b10151ae1fcb6d3b6a8a25d028a7e22dba3bb7b69eb1f7f0d844797341357e36fa71ff967fb4a5 - languageName: node - linkType: hard - -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.23.5, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": - version: 7.24.4 - resolution: "@babel/core@npm:7.24.4" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.2 - "@babel/generator": ^7.24.4 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helpers": ^7.24.4 - "@babel/parser": ^7.24.4 - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 15ecad7581f3329995956ba461961b1af7bed48901f14fe962ccd3217edca60049e9e6ad4ce48134618397e6c90230168c842e2c28e47ef1f16c97dbbf663c61 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.24.1, @babel/generator@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/generator@npm:7.24.4" - dependencies: - "@babel/types": ^7.24.0 - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: 1b6146c31386c9df3eb594a2c36b5c98da4f67f7c06edb3d68a442b92516b21bb5ba3ad7dbe0058fe76625ed24d66923e15c95b0df75ef1907d4068921a699b8 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" - dependencies: - "@babel/types": ^7.22.15 - checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helper-compilation-targets@npm:7.23.6" - 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 - checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-member-expression-to-functions": ^7.23.0 - "@babel/helper-optimise-call-expression": ^7.22.5 - "@babel/helper-replace-supers": ^7.24.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 75b0a51ae1f7232932559779b78711c271404d02d069156d1bd9a7982c165c5134058d2ec2d8b5f2e42026ee4f52ba2a30c86a7aa3bce6b5fd0991eb721abc8c - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - regexpu-core: ^5.3.1 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": - version: 0.6.2 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" - 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 - checksum: 2bba965ea9a4887ddf9c11d51d740ab473bd7597b787d042c325f6a45912dfe908c2d6bb1d837bf82f7e9fa51e6ad5150563c58131d2bb85515e63d971414a9c - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-environment-visitor@npm:7.22.20" - checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-function-name@npm:7.23.0" - dependencies: - "@babel/template": ^7.22.15 - "@babel/types": ^7.23.0 - checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-hoist-variables@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" - dependencies: - "@babel/types": ^7.23.0 - checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": - version: 7.24.3 - resolution: "@babel/helper-module-imports@npm:7.24.3" - dependencies: - "@babel/types": ^7.24.0 - checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" - 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 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.0 - resolution: "@babel/helper-plugin-utils@npm:7.24.0" - checksum: e2baa0eede34d2fa2265947042aa84d444aa48dc51e9feedea55b67fc1bc3ab051387e18b33ca7748285a6061390831ab82f8a2c767d08470b93500ec727e9b9 - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-wrap-function": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/helper-replace-supers@npm:7.24.1" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-member-expression-to-functions": ^7.23.0 - "@babel/helper-optimise-call-expression": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: c04182c34a3195c6396de2f2945f86cb60daa94ca7392db09bd8b0d4e7a15b02fbe1947c70f6062c87eadaea6d7135207129efa35cf458ea0987bab8c0f02d5a - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" - dependencies: - "@babel/types": ^7.22.5 - checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.23.4": - version: 7.24.1 - resolution: "@babel/helper-string-parser@npm:7.24.1" - checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-wrap-function@npm:7.22.20" - dependencies: - "@babel/helper-function-name": ^7.22.5 - "@babel/template": ^7.22.15 - "@babel/types": ^7.22.19 - checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/helpers@npm:7.24.4" - dependencies: - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 - checksum: ecd2dc0b3b32e24b97fa3bcda432dd3235b77c2be1e16eafc35b8ef8f6c461faa99796a8bc2431a408c98b4aabfd572c160e2b67ecea4c5c9dd3a8314a97994a - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/highlight@npm:7.24.2" - dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5f17b131cc3ebf3ab285a62cf98a404aef1bd71a6be045e748f8d5bf66d6a6e1aefd62f5972c84369472e8d9f22a614c58a89cd331eb60b7ba965b31b1bbeaf5 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.7.0": - version: 7.24.4 - resolution: "@babel/parser@npm:7.24.4" - bin: - parser: ./bin/babel-parser.js - checksum: 94c9e3e592894cd6fc57c519f4e06b65463df9be5f01739bb0d0bfce7ffcf99b3c2fdadd44dc59cc858ba2739ce6e469813a941c2f2dfacf333a3b2c9c5c8465 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.4" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 0be3f41b1b865d7a4ed1a432337be48de67989d0b4e47def34a05097a804b6fc193115f97c954fd757339e0b80030ecf1d0a3d3fd6e7e91718644de0a5aae3d3 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: ec5fddc8db6de0e0082a883f21141d6f4f9f9f0bc190d662a732b5e9a506aae5d7d2337049a1bf055d7cb7add6f128036db6d4f47de5e9ac1be29e043c8b7ca8 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-transform-optional-chaining": ^7.24.1 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: e18235463e716ac2443938aaec3c18b40c417a1746fba0fa4c26cf4d71326b76ef26c002081ab1b445abfae98e063d561519aa55672dddc1ef80b3940211ffbb - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: b5e5889ce5ef51e813e3063cd548f55eb3c88e925c3c08913f334e15d62496861e538ae52a3974e0c56a3044ed8fd5033faea67a64814324af56edc9865b7359 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.24.1 - resolution: "@babel/plugin-proposal-decorators@npm:7.24.1" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-decorators": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b9375c64656bf9ae6d2eeb965c40823e6447f0f4594979d037231884c0f3a92af97172087f35a05e90b8ca0ccb47551b013998e85853c1c634d47b341f4deece - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.16.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - 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 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.0": - version: 7.21.11 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" - 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 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1b880543bc5f525b360b53d97dd30807302bb82615cd42bf931968f59003cac75629563d6b104868db50abd22235b3271fdf679fea5db59a267181a99cc0c265 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 - languageName: node - linkType: hard - -"@babel/plugin-syntax-decorators@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-decorators@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5933fdb1d8d2c0b4b80621ad65dacd4e1ccd836041557c2ddc4cb4c1f46a347fa72977fc519695a801c9cca8b9aaf90d7895ddd52cb4e510fbef5b9f03cb9568 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a - languageName: node - linkType: hard - -"@babel/plugin-syntax-flow@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-flow@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87dfe32f3a3ea77941034fb2a39fdfc9ea18a994b8df40c3659a11c8787b2bc5adea029259c4eafc03cd35f11628f6533aa2a06381db7fcbe3b2cc3c2a2bb54f - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2a463928a63b62052e9fb8f8b0018aa11a926e94f32c168260ae012afe864875c6176c6eb361e13f300542c31316dad791b08a5b8ed92436a3095c7a0e4fce65 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87c8aa4a5ef931313f956871b27f2c051556f627b97ed21e9a5890ca4906b222d89062a956cde459816f5e0dec185ff128d7243d3fdc389504522acb88f0464e - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 58f9aa9b0de8382f8cfa3f1f1d40b69d98cd2f52340e2391733d0af745fdddda650ba392e509bc056157c880a2f52834a38ab2c5aa5569af8c61bb6ecbf45f34 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.24.3": - version: 7.24.3 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-remap-async-to-generator": ^7.22.20 - "@babel/plugin-syntax-async-generators": ^7.8.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 309af02610be65d937664435adb432a32d9b6eb42bb3d3232c377d27fbc57014774d931665a5bfdaff3d1841b72659e0ad7adcef84b709f251cb0b8444f19214 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" - dependencies: - "@babel/helper-module-imports": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-remap-async-to-generator": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 429004a6596aa5c9e707b604156f49a146f8d029e31a3152b1649c0b56425264fda5fd38e5db1ddaeb33c3fe45c97dc8078d7abfafe3542a979b49f229801135 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d8e18bd57b156da1cd4d3c1780ab9ea03afed56c6824ca8e6e74f67959d7989a0e953ec370fe9b417759314f2eef30c8c437395ce63ada2e26c2f469e4704f82 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-transform-block-scoping@npm:7.24.4" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5229ffe1c55744b96f791521e2876b01ed05c81df67488a7453ce66c2faceb9d1d653089ce6f0abf512752e15e9acac0e75a797a860f24e05b4d36497c7c3183 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 95779e9eef0c0638b9631c297d48aee53ffdbb2b1b5221bf40d7eccd566a8e34f859ff3571f8f20b9159b67f1bff7d7dc81da191c15d69fbae5a645197eae7e0 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.4 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 3b1db3308b57ba21d47772a9f183804234c23fd64c9ca40915d2d65c5dc7a48b49a6de16b8b90b7a354eacbb51232a862f0fca3dbd23e27d34641f511decddab - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-classes@npm:7.24.1" - 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.24.0 - "@babel/helper-replace-supers": ^7.24.1 - "@babel/helper-split-export-declaration": ^7.22.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e5337e707d731c9f4dcc107d09c9a99b90786bc0da6a250165919587ed818818f6cae2bbcceea880abef975c0411715c0c7f3f361ecd1526bf2eaca5ad26bb00 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/template": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f2832bcf100a70f348facbb395873318ef5b9ee4b0fb4104a420d9daaeb6003cc2ecc12fd8083dd2e4a7c2da873272ad73ff94de4497125a0cf473294ef9664e - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 994fd3c513e40b8f1bdfdd7104ebdcef7c6a11a4e380086074496f586db3ac04cba0ae70babb820df6363b6700747b0556f6860783e046ace7c741a22f49ec5b - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7f623d25b6f213b94ebc1754e9e31c1077c8e288626d8b7bfa76a97b067ce80ddcd0ede402a546706c65002c0ccf45cd5ec621511c2668eed31ebcabe8391d35 - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a3b07c07cee441e185858a9bb9739bb72643173c18bf5f9f949dd2d4784ca124e56b01d0a270790fb1ff0cf75d436075db0a2b643fb4285ff9a21df9e8dc6284 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 59fc561ee40b1a69f969c12c6c5fac206226d6642213985a569dd0f99f8e41c0f4eaedebd36936c255444a8335079842274c42a975a433beadb436d4c5abb79b - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f90841fe1a1e9f680b4209121d3e2992f923e85efcd322b26e5901c180ef44ff727fb89790803a23fac49af34c1ce2e480018027c22b4573b615512ac5b6fc50 - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bc710ac231919df9555331885748385c11c5e695d7271824fe56fba51dd637d48d3e5cd52e1c69f2b1a384fbbb41552572bc1ca3a2285ee29571f002e9bb2421 - languageName: node - linkType: hard - -"@babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.24.1 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-flow": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 83faac90c934e15a8fe813d90cbfdf8aa2cb2cc9108f55e4a1ecda1c3097735af6a0b6623057f059153b572bc1dd088aeb2ff24217e9de82ad2390ab1210d01b - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-for-of@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 990adde96ea1766ed6008c006c7040127bef59066533bb2977b246ea4a596fe450a528d1881a0db5f894deaf1b81654dfb494b19ad405b369be942738aa9c364 - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-function-name@npm:7.24.1" - dependencies: - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 31eb3c75297dda7265f78eba627c446f2324e30ec0124a645ccc3e9f341254aaa40d6787bd62b2280d77c0a5c9fbfce1da2c200ef7c7f8e0a1b16a8eb3644c6f - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f42302d42fc81ac00d14e9e5d80405eb80477d7f9039d7208e712d6bcd486a4e3b32fdfa07b5f027d6c773723d8168193ee880f93b0e430c828e45f104fb82a4 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-literals@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2df94e9478571852483aca7588419e574d76bde97583e78551c286f498e01321e7dbb1d0ef67bee16e8f950688f79688809cfde370c5c4b84c14d841a3ef217a - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 895f2290adf457cbf327428bdb4fb90882a38a22f729bcf0629e8ad66b9b616d2721fbef488ac00411b647489d1dda1d20171bb3772d0796bb7ef5ecf057808a - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4ea641cc14a615f9084e45ad2319f95e2fee01c77ec9789685e7e11a6c286238a426a98f9c1ed91568a047d8ac834393e06e8c82d1ff01764b7aa61bee8e9023 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1" - dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3d777c262f257e93f0405b13e178f9c4a0f31855b409f0191a76bb562a28c541326a027bfe6467fcb74752f3488c0333b5ff2de64feec1b3c4c6ace1747afa03 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" - dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-simple-access": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 11402b34c49f76aa921b43c2d76f3f129a32544a1dc4f0d1e48b310f9036ab75269a6d8684ed0198b7a0b07bd7898b12f0cacceb26fbb167999fd2a819aa0802 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" - dependencies: - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 903766f6808f04278e887e4adec9b1efa741726279652dad255eaad0f5701df8f8ff0af25eb8541a00eb3c9eae2dccf337b085cfa011426ca33ed1f95d70bf75 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" - dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4922f5056d34de6fd59a1ab1c85bc3472afa706c776aceeb886289c9ac9117e6eb8e22d06c537eb5bc0ede6c30f6bd85210bdcc150dc0ae2d2373f8252df9364 - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-new-target@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f56159ba56e8824840b8073f65073434e4bc4ef20e366bc03aa6cae9a4389365574fa72390e48aed76049edbc6eba1181eb810e58fae22c25946c62f9da13db4 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 74025e191ceb7cefc619c15d33753aab81300a03d81b96ae249d9b599bc65878f962d608f452462d3aad5d6e334b7ab2b09a6bdcfe8d101fe77ac7aacca4261e - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3247bd7d409574fc06c59e0eb573ae7470d6d61ecf780df40b550102bb4406747d8f39dcbec57eb59406df6c565a86edd3b429e396ad02e4ce201ad92050832e - languageName: node - linkType: hard - -"@babel/plugin-transform-object-assign@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-assign@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 88f56168f621501dc1aa796d569c76042367c2c3cb2c24f1419ed0783055a393f5722216a87abd9793365a0bd29b42a4e8055e93432c4b3657e6b5a22fe61c6f - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1" - dependencies: - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d5d28b1f33c279a38299d34011421a4915e24b3846aa23a1aba947f1366ce673ddf8df09dd915e0f2c90c5327f798bf126dca013f8adff1fc8f09e18878b675a - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-super@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-replace-supers": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d34d437456a54e2a5dcb26e9cf09ed4c55528f2a327c5edca92c93e9483c37176e228d00d6e0cf767f3d6fdbef45ae3a5d034a7c59337a009e20ae541c8220fa - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ff7c02449d32a6de41e003abb38537b4a1ad90b1eaa4c0b578cb1b55548201a677588a8c47f3e161c72738400ae811a6673ea7b8a734344755016ca0ac445dac - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0eb5f4abdeb1a101c0f67ef25eba4cce0978a74d8722f6222cdb179a28e60d21ab545eda231855f50169cd63d604ec8268cff44ae9370fd3a499a507c56c2bbd - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-parameters@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d183008e67b1a13b86c92fb64327a75cd8e13c13eb80d0b6952e15806f1b0c4c456d18360e451c6af73485b2c8f543608b0a29e5126c64eb625a31e970b65f80 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7208c30bb3f3fbc73fb3a88bdcb78cd5cddaf6d523eb9d67c0c04e78f6fc6319ece89f4a5abc41777ceab16df55b3a13a4120e0efc9275ca6d2d89beaba80aa0 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 47c123ca9975f7f6b20e6fe8fe89f621cd04b622539faf5ec037e2be7c3d53ce2506f7c785b1930dcdea11994eff79094a02715795218c7d6a0bdc11f2fb3ac2 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a73646d7ecd95b3931a3ead82c7d5efeb46e68ba362de63eb437d33531f294ec18bd31b6d24238cd3b6a3b919a6310c4a0ba4a2629927721d4d10b0518eb7715 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-constant-elements@npm:^7.12.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 37fd10113b786a2462cf15366aa3a11a2a5bdba9bf8881b2544941f5ad6175ebc31116be5a53549c9fce56a08ded6e0b57adb45d6e42efb55d3bc0ff7afdd433 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d87ac36073f923a25de0ed3cffac067ec5abc4cde63f7f4366881388fbea6dcbced0e4fefd3b7e99edfe58a4ce32ea4d4c523a577d2b9f0515b872ed02b3d8c3 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-development@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" - dependencies: - "@babel/plugin-transform-react-jsx": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-self@npm:^7.23.3": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a0ff893b946bb0e501ad5aab43ce4b321ed9e74b94c0bc7191e2ee6409014fc96ee1a47dcb1ecdf445c44868564667ae16507ed4516dcacf6aa9c37a0ad28382 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-source@npm:^7.23.3": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 396ce878dc588e74113d38c5a1773e0850bb878a073238a74f8cdf62d968d56a644f5485bf4032dc095fe8863fe2bd9fbbbab6abc3adf69542e038ac5c689d4c - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" - 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 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 06a6bfe80f1f36408d07dd80c48cf9f61177c8e5d814e80ddbe88cfad81a8b86b3110e1fe9d1ac943db77e74497daa7f874b5490c788707106ad26ecfbe44813 - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - regenerator-transform: ^0.15.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a04319388a0a7931c3f8e15715d01444c32519692178b70deccc86d53304e74c0f589a4268f6c68578d86f75e934dd1fe6e6ed9071f54ee8379f356f88ef6e42 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 132c6040c65aabae2d98a39289efb5c51a8632546dc50d2ad032c8660aec307fbed74ef499856ea4f881fc8505905f49b48e0270585da2ea3d50b75e962afd89 - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.24.3 - resolution: "@babel/plugin-transform-runtime@npm:7.24.3" - dependencies: - "@babel/helper-module-imports": ^7.24.3 - "@babel/helper-plugin-utils": ^7.24.0 - babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.1 - babel-plugin-polyfill-regenerator: ^0.6.1 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 719112524e6fe3e665385ad4425530dadb2ddee839023381ed9d77edf5ce2748f32cc0e38dacda1990c56a7ae0af4de6cdca2413ffaf307e9f75f8d2200d09a2 - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 006a2032d1c57dca76579ce6598c679c2f20525afef0a36e9d42affe3c8cf33c1427581ad696b519cc75dfee46c5e8ecdf0c6a29ffb14250caa3e16dd68cb424 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-spread@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 622ef507e2b5120a9010b25d3df5186c06102ecad8751724a38ec924df8d3527688198fa490c47064eabba14ef2f961b3069855bd22a8c0a1e51a23eed348d02 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e326e96a9eeb6bb01dbc4d3362f989411490671b97f62edf378b8fb102c463a018b777f28da65344d41b22aa6efcdfa01ed43d2b11fdcf202046d3174be137c5 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4c9009c72321caf20e3b6328bbe9d7057006c5ae57b794cf247a37ca34d87dfec5e27284169a16df5a6235a083bf0f3ab9e1bfcb005d1c8b75b04aed75652621 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 90251c02986aebe50937522a6e404cb83db1b1feda17c0244e97d6429ded1634340c8411536487d14c54495607e1b7c9dc4db4aed969d519f1ff1e363f9c2229 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.24.1": - version: 7.24.4 - resolution: "@babel/plugin-transform-typescript@npm:7.24.4" - dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.24.4 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-typescript": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 57a9a776b1910c706d28972e4b056ced3af8fc59c29b2a6205c2bb2a408141ddb59a8f2f6041f8467a7b260942818767f4ecabb9f63adf7fddf2afa25e774dfc - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d4d7cfea91af7be2768fb6bed902e00d6e3190bda738b5149c3a788d570e6cf48b974ec9548442850308ecd8fc9a67681f4ea8403129e7867bcb85adaf6ec238 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 276099b4483e707f80b054e2d29bc519158bfe52461ef5ff76f70727d592df17e30b1597ef4d8a0f04d810f6cb5a8dd887bdc1d0540af3744751710ef280090f - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 400a0927bdb1425b4c0dc68a61b5b2d7d17c7d9f0e07317a1a6a373c080ef94be1dd65fdc4ac9a78fcdb58f89fd128450c7bc0d5b8ca0ae7eca3fbd98e50acba - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 364342fb8e382dfaa23628b88e6484dc1097e53fb7199f4d338f1e2cd71d839bb0a35a9b1380074f6a10adb2e98b79d53ca3ec78c0b8c557ca895ffff42180df - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4": - version: 7.24.4 - resolution: "@babel/preset-env@npm:7.24.4" - dependencies: - "@babel/compat-data": ^7.24.4 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.4 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.1 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.1 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.1 - "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.24.1 - "@babel/plugin-syntax-import-attributes": ^7.24.1 - "@babel/plugin-syntax-import-meta": ^7.10.4 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.24.1 - "@babel/plugin-transform-async-generator-functions": ^7.24.3 - "@babel/plugin-transform-async-to-generator": ^7.24.1 - "@babel/plugin-transform-block-scoped-functions": ^7.24.1 - "@babel/plugin-transform-block-scoping": ^7.24.4 - "@babel/plugin-transform-class-properties": ^7.24.1 - "@babel/plugin-transform-class-static-block": ^7.24.4 - "@babel/plugin-transform-classes": ^7.24.1 - "@babel/plugin-transform-computed-properties": ^7.24.1 - "@babel/plugin-transform-destructuring": ^7.24.1 - "@babel/plugin-transform-dotall-regex": ^7.24.1 - "@babel/plugin-transform-duplicate-keys": ^7.24.1 - "@babel/plugin-transform-dynamic-import": ^7.24.1 - "@babel/plugin-transform-exponentiation-operator": ^7.24.1 - "@babel/plugin-transform-export-namespace-from": ^7.24.1 - "@babel/plugin-transform-for-of": ^7.24.1 - "@babel/plugin-transform-function-name": ^7.24.1 - "@babel/plugin-transform-json-strings": ^7.24.1 - "@babel/plugin-transform-literals": ^7.24.1 - "@babel/plugin-transform-logical-assignment-operators": ^7.24.1 - "@babel/plugin-transform-member-expression-literals": ^7.24.1 - "@babel/plugin-transform-modules-amd": ^7.24.1 - "@babel/plugin-transform-modules-commonjs": ^7.24.1 - "@babel/plugin-transform-modules-systemjs": ^7.24.1 - "@babel/plugin-transform-modules-umd": ^7.24.1 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 - "@babel/plugin-transform-new-target": ^7.24.1 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.1 - "@babel/plugin-transform-numeric-separator": ^7.24.1 - "@babel/plugin-transform-object-rest-spread": ^7.24.1 - "@babel/plugin-transform-object-super": ^7.24.1 - "@babel/plugin-transform-optional-catch-binding": ^7.24.1 - "@babel/plugin-transform-optional-chaining": ^7.24.1 - "@babel/plugin-transform-parameters": ^7.24.1 - "@babel/plugin-transform-private-methods": ^7.24.1 - "@babel/plugin-transform-private-property-in-object": ^7.24.1 - "@babel/plugin-transform-property-literals": ^7.24.1 - "@babel/plugin-transform-regenerator": ^7.24.1 - "@babel/plugin-transform-reserved-words": ^7.24.1 - "@babel/plugin-transform-shorthand-properties": ^7.24.1 - "@babel/plugin-transform-spread": ^7.24.1 - "@babel/plugin-transform-sticky-regex": ^7.24.1 - "@babel/plugin-transform-template-literals": ^7.24.1 - "@babel/plugin-transform-typeof-symbol": ^7.24.1 - "@babel/plugin-transform-unicode-escapes": ^7.24.1 - "@babel/plugin-transform-unicode-property-regex": ^7.24.1 - "@babel/plugin-transform-unicode-regex": ^7.24.1 - "@babel/plugin-transform-unicode-sets-regex": ^7.24.1 - "@babel/preset-modules": 0.1.6-no-external-plugins - babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.4 - babel-plugin-polyfill-regenerator: ^0.6.1 - core-js-compat: ^3.31.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5a057a6463f92b02bfe66257d3f2c76878815bc7847f2a716b0539d9f547eae2a9d1f0fc62a5c0eff6ab0504bb52e815829ef893e4586b641f8dd6a609d114f3 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - 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 - checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/preset-react@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-transform-react-display-name": ^7.24.1 - "@babel/plugin-transform-react-jsx": ^7.23.4 - "@babel/plugin-transform-react-jsx-development": ^7.22.5 - "@babel/plugin-transform-react-pure-annotations": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 70e146a6de480cb4b6c5eb197003960a2d148d513e1f5b5d04ee954f255d68c935c2800da13e550267f47b894bd0214b2548181467b52a4bdc0a85020061b68c - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/preset-typescript@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-syntax-jsx": ^7.24.1 - "@babel/plugin-transform-modules-commonjs": ^7.24.1 - "@babel/plugin-transform-typescript": ^7.24.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f3e0ff8c20dd5abc82614df2d7953f1549a98282b60809478f7dfb41c29be63720f2d1d7a51ef1f0d939b65e8666cb7d36e32bc4f8ac2b74c20664efd41e8bdd - languageName: node - linkType: hard - -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 - languageName: node - linkType: hard - -"@babel/runtime-corejs3@npm:^7.10.2": - version: 7.24.4 - resolution: "@babel/runtime-corejs3@npm:7.24.4" - dependencies: - core-js-pure: ^3.30.2 - regenerator-runtime: ^0.14.0 - checksum: 0c2e7c477de3dbf5cc6f2434cee3d78a34d87e8f1e2ea65840eb948d00f7d6968e0ef055449adf372a39d6214f8b9b2532506149b9d0e7ea3d09b1b84678ae6c - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.24.4 - resolution: "@babel/runtime@npm:7.24.4" - dependencies: - regenerator-runtime: ^0.14.0 - checksum: 2f27d4c0ffac7ae7999ac0385e1106f2a06992a8bdcbf3da06adcac7413863cd08c198c2e4e970041bbea849e17f02e1df18875539b6afba76c781b6b59a07c3 - languageName: node - linkType: hard - -"@babel/template@npm:^7.10.4, @babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": - version: 7.24.0 - resolution: "@babel/template@npm:7.24.0" - dependencies: - "@babel/code-frame": ^7.23.5 - "@babel/parser": ^7.24.0 - "@babel/types": ^7.24.0 - checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.7.0": - version: 7.24.1 - resolution: "@babel/traverse@npm:7.24.1" - dependencies: - "@babel/code-frame": ^7.24.1 - "@babel/generator": ^7.24.1 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.24.1 - "@babel/types": ^7.24.0 - debug: ^4.3.1 - globals: ^11.1.0 - checksum: 92a5ca906abfba9df17666d2001ab23f18600035f706a687055a0e392a690ae48d6fec67c8bd4ef19ba18699a77a5b7f85727e36b83f7d110141608fe0c24fe9 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": - version: 7.24.0 - resolution: "@babel/types@npm:7.24.0" - dependencies: - "@babel/helper-string-parser": ^7.23.4 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807 - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - -"@cnakazawa/watch@npm:^1.0.3": - version: 1.0.4 - resolution: "@cnakazawa/watch@npm:1.0.4" - dependencies: - exec-sh: ^0.3.2 - minimist: ^1.2.0 - bin: - watch: cli.js - checksum: 88f395ca0af2f3c0665b8ce7bb29e83647ec5d141e8735712aeeee4117081555436712966b6957aa1c461f6f826a4d23b0034e379c443a10e919f81c8748bf29 - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@csstools/convert-colors@npm:^1.4.0": - version: 1.4.0 - resolution: "@csstools/convert-colors@npm:1.4.0" - checksum: 26069eeb845a506934c821c203feb97f5de634c5fbeb9978505a2271d6cfdb0ce400240fca9620a4ef2e68953928ea25aab92ea8454e0edf5cd074066d9ad57b - languageName: node - linkType: hard - -"@csstools/normalize.css@npm:^10.1.0": - version: 10.1.0 - resolution: "@csstools/normalize.css@npm:10.1.0" - checksum: c0adedd58e16b73b6588377ca505bfbc3f6273ab1ba1b55dd343aa5e4c0bf81bd74f051a1317a0d383bdcd59af665ba34db00b0c51c7dbc176c1a536175c2b03 - languageName: node - linkType: hard - -"@emotion/babel-plugin@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/babel-plugin@npm:11.11.0" - dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/serialize": ^1.1.2 - 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 - checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/cache@npm:11.11.0" - dependencies: - "@emotion/memoize": ^0.8.1 - "@emotion/sheet": ^1.2.2 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 - stylis: 4.2.0 - checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.1": - version: 0.9.1 - resolution: "@emotion/hash@npm:0.9.1" - checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/is-prop-valid@npm:1.2.2" - dependencies: - "@emotion/memoize": ^0.8.1 - checksum: 61f6b128ea62b9f76b47955057d5d86fcbe2a6989d2cd1e583daac592901a950475a37d049b9f7a7c6aa8758a33b408735db759fdedfd1f629df0f85ab60ea25 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/memoize@npm:0.8.1" - checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.10.4": - version: 11.11.4 - resolution: "@emotion/react@npm:11.11.4" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/cache": ^11.11.0 - "@emotion/serialize": ^1.1.3 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 - "@emotion/weak-memoize": ^0.3.1 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 6abaa7a05c5e1db31bffca7ac79169f5456990022cbb3794e6903221536609a60420f2b4888dd3f84e9634a304e394130cb88dc32c243a1dedc263e50da329f8 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": - version: 1.1.4 - resolution: "@emotion/serialize@npm:1.1.4" - dependencies: - "@emotion/hash": ^0.9.1 - "@emotion/memoize": ^0.8.1 - "@emotion/unitless": ^0.8.1 - "@emotion/utils": ^1.2.1 - csstype: ^3.0.2 - checksum: 71b99f816a9c1d61a87c62cf4928da3894bb62213f3aff38b1ea9790b3368f084af98a3e5453b5055c2f36a7d70318d2fa9955b7b5676c2065b868062375df39 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/sheet@npm:1.2.2" - checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe - languageName: node - linkType: hard - -"@emotion/styled@npm:^11.10.4": - version: 11.11.5 - resolution: "@emotion/styled@npm:11.11.5" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.11.0 - "@emotion/is-prop-valid": ^1.2.2 - "@emotion/serialize": ^1.1.4 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 - "@emotion/utils": ^1.2.1 - peerDependencies: - "@emotion/react": ^11.0.0-rc.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ad5fc42d00e8aa9597f6d9665986036d5ebe0e8f8155af6d95831c5e8fb2319fb837724e6c5cd59e5346f14c3263711b7ce7271d34688e974d1f32ffeecb37ba - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/unitless@npm:0.8.1" - checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": - version: 1.0.1 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" - peerDependencies: - react: ">=16.8.0" - checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.2.1": - version: 1.2.1 - resolution: "@emotion/utils@npm:1.2.1" - checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.3.1": - version: 0.3.1 - resolution: "@emotion/weak-memoize@npm:0.3.1" - checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm64@npm:0.18.20" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm@npm:0.18.20" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-x64@npm:0.18.20" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-arm64@npm:0.18.20" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-x64@npm:0.18.20" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-arm64@npm:0.18.20" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-x64@npm:0.18.20" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm64@npm:0.18.20" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm@npm:0.18.20" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ia32@npm:0.18.20" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.14.54": - version: 0.14.54 - resolution: "@esbuild/linux-loong64@npm:0.14.54" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-loong64@npm:0.18.20" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-mips64el@npm:0.18.20" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ppc64@npm:0.18.20" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-riscv64@npm:0.18.20" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-s390x@npm:0.18.20" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-x64@npm:0.18.20" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/netbsd-x64@npm:0.18.20" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/openbsd-x64@npm:0.18.20" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/sunos-x64@npm:0.18.20" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-arm64@npm:0.18.20" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-ia32@npm:0.18.20" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-x64@npm:0.18.20" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^0.4.3": - version: 0.4.3 - resolution: "@eslint/eslintrc@npm:0.4.3" - dependencies: - ajv: ^6.12.4 - debug: ^4.1.1 - espree: ^7.3.0 - globals: ^13.9.0 - ignore: ^4.0.6 - import-fresh: ^3.2.1 - js-yaml: ^3.13.1 - minimatch: ^3.0.4 - strip-json-comments: ^3.1.1 - checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 - languageName: node - linkType: hard - -"@floating-ui/core@npm:^1.0.0": - version: 1.6.0 - resolution: "@floating-ui/core@npm:1.6.0" - dependencies: - "@floating-ui/utils": ^0.2.1 - checksum: 2e25c53b0c124c5c9577972f8ae21d081f2f7895e6695836a53074463e8c65b47722744d6d2b5a993164936da006a268bcfe87fe68fd24dc235b1cb86bed3127 - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^1.6.1": - version: 1.6.3 - resolution: "@floating-ui/dom@npm:1.6.3" - dependencies: - "@floating-ui/core": ^1.0.0 - "@floating-ui/utils": ^0.2.0 - checksum: 81cbb18ece3afc37992f436e469e7fabab2e433248e46fff4302d12493a175b0c64310f8a971e6e1eda7218df28ace6b70237b0f3c22fe12a21bba05b5579555 - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:^2.0.8": - version: 2.0.8 - resolution: "@floating-ui/react-dom@npm:2.0.8" - dependencies: - "@floating-ui/dom": ^1.6.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 5da7f13a69281e38859a3203a608fe9de1d850b332b355c10c0c2427c7b7209a0374c10f6295b6577c1a70237af8b678340bd4cc0a4b1c66436a94755d81e526 - languageName: node - linkType: hard - -"@floating-ui/utils@npm:^0.2.0, @floating-ui/utils@npm:^0.2.1": - version: 0.2.1 - resolution: "@floating-ui/utils@npm:0.2.1" - checksum: 9ed4380653c7c217cd6f66ae51f20fdce433730dbc77f95b5abfb5a808f5fdb029c6ae249b4e0490a816f2453aa6e586d9a873cd157fdba4690f65628efc6e06 - languageName: node - linkType: hard - -"@gar/promisify@npm:^1.0.1": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - -"@hapi/address@npm:2.x.x": - version: 2.1.4 - resolution: "@hapi/address@npm:2.1.4" - checksum: 10341c3b650746c79ac2c57118efb05d45d850b33aef82a6f2ba89419fdbf1b6d337c8b085cc9bc1af7a5fb18379c07edaf3be7584426f40bd370ed6de29e965 - languageName: node - linkType: hard - -"@hapi/bourne@npm:1.x.x": - version: 1.3.2 - resolution: "@hapi/bourne@npm:1.3.2" - checksum: 8403a2e8297fbb49a0e4fca30e874590d96ecaf7165740804037ff30625f3fdea6353d9f7f4422607eb069a3f471900a3037df34285a95135d15c6a8b10094b0 - languageName: node - linkType: hard - -"@hapi/hoek@npm:8.x.x, @hapi/hoek@npm:^8.3.0": - version: 8.5.1 - resolution: "@hapi/hoek@npm:8.5.1" - checksum: 8f8ce36be4f5e5d7a712072d4a028a4a95beec7a7da3a7a6e9a0c07d697f04c19b37d93751db352c314ea831f7e2120569a035dc6a351ed8c0444f1d3b275621 - languageName: node - linkType: hard - -"@hapi/joi@npm:^15.1.0": - version: 15.1.1 - resolution: "@hapi/joi@npm:15.1.1" - dependencies: - "@hapi/address": 2.x.x - "@hapi/bourne": 1.x.x - "@hapi/hoek": 8.x.x - "@hapi/topo": 3.x.x - checksum: 5bc3df9d43d4a53c41fd172d2958a4a846dbacbe2a2abe16830059109c436776d7be98144f14af9d328ebd107dbebafe55e00a9032a905aef45aadff988b54bf - languageName: node - linkType: hard - -"@hapi/topo@npm:3.x.x": - version: 3.1.6 - resolution: "@hapi/topo@npm:3.1.6" - dependencies: - "@hapi/hoek": ^8.3.0 - checksum: 34278bc13b4023d6d0d7c913605a254b2d728dc6489cd465269eebaa7d8d2d81cda3f2157398dca87d3cb9e1a8aa8a1158ce2564c71a8e289b807c144e3b4c1e - languageName: node - linkType: hard - -"@hookform/resolvers@npm:^2.9.7": - version: 2.9.11 - resolution: "@hookform/resolvers@npm:2.9.11" - peerDependencies: - react-hook-form: ^7.0.0 - checksum: 977ea038bb94457ac9f6c7ca65438ce8fcd0cf7643b9925d8bc4d66df6faa0f49ad642bee7362f86a4d3ff7ff53d18b7aea0597085993971cae00e86bf6eda73 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.5.0": - version: 0.5.0 - resolution: "@humanwhocodes/config-array@npm:0.5.0" - dependencies: - "@humanwhocodes/object-schema": ^1.2.0 - debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^1.2.0": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - 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" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - 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 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 - languageName: node - linkType: hard - -"@jest/console@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/console@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^26.6.2 - jest-util: ^26.6.2 - slash: ^3.0.0 - checksum: 69a9ca6ba357d7634fd537e3b87c64369865ffb59f57fe6661223088bd62273d0c1d660fefce3625a427f42a37d32590f6b291e1295ea6d6b7cb31ddae36a737 - languageName: node - linkType: hard - -"@jest/core@npm:^26.6.0, @jest/core@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/core@npm:26.6.3" - dependencies: - "@jest/console": ^26.6.2 - "@jest/reporters": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-changed-files: ^26.6.2 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-resolve-dependencies: ^26.6.3 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - jest-watcher: ^26.6.2 - micromatch: ^4.0.2 - p-each-series: ^2.1.0 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - checksum: f52b26ffe9b923ed67b3ff30e170b3a434d4263990f78d96cd43acbd0aa8ad36aecad2f1822f376da3a80228714fd6b7f7acd51744133cfcd2780ba0e3da537b - languageName: node - linkType: hard - -"@jest/environment@npm:^26.6.0, @jest/environment@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/environment@npm:26.6.2" - dependencies: - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - jest-mock: ^26.6.2 - checksum: 7748081b2a758161785aff161780b05084dccaff908c8ed82c04f7da5d5e5439e77b5eb667306d5c4e1422653c7a67ed2955f26704f48c65c404195e1e21780a - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/fake-timers@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@sinonjs/fake-timers": ^6.0.1 - "@types/node": "*" - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: c732658fac4014a424e6629495296c3b2e8697787518df34c74539ec139625e7141ad792b8a4d3c8392b47954ad01be9846b7c57cc8c631490969e7cafa84e6a - languageName: node - linkType: hard - -"@jest/globals@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/globals@npm:26.6.2" - dependencies: - "@jest/environment": ^26.6.2 - "@jest/types": ^26.6.2 - expect: ^26.6.2 - checksum: 49b28d0cc7e99898eeaf23e6899e3c9ee25a2a4831caa3eb930ec1722de2e92a0e8a6a6f649438fdd20ff0c0d5e522dd78cb719466a57f011a88d60419b903c5 - languageName: node - linkType: hard - -"@jest/reporters@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/reporters@npm:26.6.2" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.2 - graceful-fs: ^4.2.4 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^4.0.3 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.0.2 - jest-haste-map: ^26.6.2 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - node-notifier: ^8.0.0 - slash: ^3.0.0 - source-map: ^0.6.0 - string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^7.0.0 - dependenciesMeta: - node-notifier: - optional: true - checksum: 53c7a697c562becb7682a9a6248ea553013bf7048c08ddce5bf9fb53b975fc9f799ca163f7494e0be6c4d3cf181c8bc392976268da52b7de8ce4470b971ed84e - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": ^0.27.8 - checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 - languageName: node - linkType: hard - -"@jest/source-map@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/source-map@npm:26.6.2" - dependencies: - callsites: ^3.0.0 - graceful-fs: ^4.2.4 - source-map: ^0.6.0 - checksum: b171cef442738887dda85527ab78229996db5946c6435ddb56d442c2851889ba493729a9de73100f1a31b9a31a91207b55bc75656ae7df9843d65078b925385e - languageName: node - linkType: hard - -"@jest/test-result@npm:^26.6.0, @jest/test-result@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/test-result@npm:26.6.2" - dependencies: - "@jest/console": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: dcb6175825231e9377e43546aed4edd6acc22f1788d5f099bbba36bb55b9115a92f760e88426c076bcdeff5a50d8f697327a920db0cd1fb339781fc3713fa8c7 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/test-sequencer@npm:26.6.3" - dependencies: - "@jest/test-result": ^26.6.2 - graceful-fs: ^4.2.4 - jest-haste-map: ^26.6.2 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - checksum: a3450b3d7057f74da1828bb7b3658f228a7c049dc4082c5c49b8bafbd8f69d102a8a99007b7ed5d43464712f7823f53fe3564fda17787f178c219cccf329a461 - languageName: node - linkType: hard - -"@jest/transform@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/transform@npm:26.6.2" - dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^26.6.2 - babel-plugin-istanbul: ^6.0.0 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.4 - jest-haste-map: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-util: ^26.6.2 - micromatch: ^4.0.2 - pirates: ^4.0.1 - slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: 31667b925a2f3b310d854495da0ab67be8f5da24df76ecfc51162e75f1140aed5d18069ba190cb5e0c7e492b04272c8c79076ddf5bbcff530ee80a16a02c4545 - languageName: node - linkType: hard - -"@jest/types@npm:^26.6.0, @jest/types@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/types@npm:26.6.2" - 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 - checksum: a0bd3d2f22f26ddb23f41fddf6e6a30bf4fab2ce79ec1cb6ce6fdfaf90a72e00f4c71da91ec61e13db3b10c41de22cf49d07c57ff2b59171d64b29f909c1d8d6 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - 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 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.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 - checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" - dependencies: - "@jridgewell/set-array": ^1.2.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.3": - version: 0.3.6 - resolution: "@jridgewell/source-map@npm:0.3.6" - dependencies: - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 - checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": ^3.1.0 - "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 - languageName: node - linkType: hard - -"@mswjs/cookies@npm:^0.2.2": - version: 0.2.2 - resolution: "@mswjs/cookies@npm:0.2.2" - dependencies: - "@types/set-cookie-parser": ^2.4.0 - set-cookie-parser: ^2.4.6 - checksum: 23b1ef56d57efcc1b44600076f531a1fb703855af342a31e01bad4adaf0dab51f6d3b5595a95a7988c3f612ba075835f9a06c52833205284d101eb9a51dd72b0 - languageName: node - linkType: hard - -"@mswjs/interceptors@npm:^0.17.2": - version: 0.17.10 - resolution: "@mswjs/interceptors@npm:0.17.10" - dependencies: - "@open-draft/until": ^1.0.3 - "@types/debug": ^4.1.7 - "@xmldom/xmldom": ^0.8.3 - debug: ^4.3.3 - headers-polyfill: 3.2.5 - outvariant: ^1.2.1 - strict-event-emitter: ^0.2.4 - web-encoding: ^1.1.5 - checksum: 0e6d32f399144b5cefe6fd7620f2776c83adc9bbbbccf2eb4ea347332be059f585136c44168c09b544c41cd3d686f88e43432e10192227a24fbb0c98a2f52dc8 - languageName: node - linkType: hard - -"@mui/base@npm:5.0.0-beta.40": - version: 5.0.0-beta.40 - resolution: "@mui/base@npm:5.0.0-beta.40" - 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 - 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 - checksum: 9c084ee67de372411a71af5eca9a5367db9f5bce57bb43973629c522760fe64fa2a43d2934dccd24d6dcbcd0ed399c5fc5c461226c86104f5767de1c9b8deba2 - languageName: node - linkType: hard - -"@mui/base@npm:^5.0.0-beta.22": - version: 5.0.0-beta.42 - resolution: "@mui/base@npm:5.0.0-beta.42" - dependencies: - "@babel/runtime": ^7.24.4 - "@floating-ui/react-dom": ^2.0.8 - "@mui/types": ^7.2.14 - "@mui/utils": ^6.0.0-alpha.1 - "@popperjs/core": ^2.11.8 - clsx: ^2.1.0 - prop-types: ^15.8.1 - 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 - checksum: f7af6e6003a4a8502062607b7861490eb6dc3a1f617532c92521981329ae077535444d65e378718bbf59ce8b7a52fc32275dc794969c73bdb389e5d69155fc69 - languageName: node - linkType: hard - -"@mui/core-downloads-tracker@npm:^5.15.15": - version: 5.15.15 - resolution: "@mui/core-downloads-tracker@npm:5.15.15" - checksum: 3e99a04e03f66d5fa5f0c23cdce0f9fa2331ba08c99a75dc2347ccaa1c6ed520153e04aaeb0d613c9dca099a3e6242558a6284c33d93f95cc65e3243b17860bc - languageName: node - linkType: hard - -"@mui/icons-material@npm:^5.10.3": - version: 5.15.15 - resolution: "@mui/icons-material@npm:5.15.15" - dependencies: - "@babel/runtime": ^7.23.9 - 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 - checksum: 42d62fc94be25a361034a8974b1860608e866c155ff2eea7dc18f10a4acc71dbe2f48af3f0309a345ff6fb16be30c6fbc1d8a0a447c828aa1380a49e176a8803 - languageName: node - linkType: hard - -"@mui/material@npm:^5.10.3": - version: 5.15.15 - resolution: "@mui/material@npm:5.15.15" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/base": 5.0.0-beta.40 - "@mui/core-downloads-tracker": ^5.15.15 - "@mui/system": ^5.15.15 - "@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 - 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 - checksum: ee0dc22fc4d617f7cf69f2451b6d5139978e6c5319e3056e7719159aff786ee3b80abd07691e230371811d9b5b574aef4559d7855bfe2f8493d596d960a91ab7 - languageName: node - linkType: hard - -"@mui/private-theming@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/private-theming@npm:5.15.14" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/utils": ^5.15.14 - prop-types: ^15.8.1 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 1b1ef54e8281c9b13fcc58f4c39682efc610946a68402283c19fcfbce8a7d7a231d61b536d6df9bf7a59a1426591bd403a453a59eb8efb9689437fb58554dc8c - languageName: node - linkType: hard - -"@mui/styled-engine@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/styled-engine@npm:5.15.14" - dependencies: - "@babel/runtime": ^7.23.9 - "@emotion/cache": ^11.11.0 - csstype: ^3.1.3 - prop-types: ^15.8.1 - 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 - checksum: 23b45c859a4f0d2b10933d06a6082c0ff093f7b6d8d32a2bfe3a6e515fe46d7a38ca9e7150d45c025a2e98d963bae9a5991d131cf4748b62670075ef0fa321ed - languageName: node - linkType: hard - -"@mui/system@npm:^5.10.16, @mui/system@npm:^5.15.15": - version: 5.15.15 - resolution: "@mui/system@npm:5.15.15" - 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 - 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 - checksum: 9ca96d5f66b2a9d6471909cc98c671eea5ec0a6d58a7ec071073b9e5200b95c3f017f0ca5cc946abc7f83074bd11830ca18f5e30bc98e25cd6ca217bd1b3a26f - languageName: node - linkType: hard - -"@mui/types@npm:^7.2.14": - version: 7.2.14 - resolution: "@mui/types@npm:7.2.14" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 615c9f9110933157f5d3c4fee69d6e70b98fc0d9ebc3b63079b6a1e23e6b389748687a25ab4ac15b56166fc228885da87c3929503b41fa322cfdee0f6d411206 - languageName: node - linkType: hard - -"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.15.14": - version: 5.15.14 - resolution: "@mui/utils@npm:5.15.14" - dependencies: - "@babel/runtime": ^7.23.9 - "@types/prop-types": ^15.7.11 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 36543ba7e3b65fb3219ed27e8f1455aff15b47a74c9b642c63e60774e22baa6492a196079e72bcfa5a570421dab32160398f892110bd444428bcf8b266b11893 - languageName: node - linkType: hard - -"@mui/utils@npm:^6.0.0-alpha.1": - version: 6.0.0-alpha.3 - resolution: "@mui/utils@npm:6.0.0-alpha.3" - dependencies: - "@babel/runtime": ^7.24.4 - "@types/prop-types": ^15.7.12 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 4122813e8f10b0c907ab28e062287e234760a532203b47459469411460302e33856b2bd43c4febcc0b8f5b0ad4f8f028f3e6af8e34631e35e5fe9f82b9f0a330 - languageName: node - linkType: hard - -"@mui/x-data-grid@npm:^5.16.0": - version: 5.17.26 - resolution: "@mui/x-data-grid@npm:5.17.26" - dependencies: - "@babel/runtime": ^7.18.9 - "@mui/utils": ^5.10.3 - clsx: ^1.2.1 - prop-types: ^15.8.1 - reselect: ^4.1.6 - peerDependencies: - "@mui/material": ^5.4.1 - "@mui/system": ^5.4.1 - react: ^17.0.2 || ^18.0.0 - react-dom: ^17.0.2 || ^18.0.0 - checksum: 521d9c76c7275836dda0b7ace197553142a33de702cb172cfdfbaf505379faa7566da5340eb9bdf7980909e8034b1fe0eae2b7aca6a499667ecb76f4442dc9e7 - languageName: node - linkType: hard - -"@mui/x-date-pickers@npm:^6.19.4": - version: 6.19.9 - resolution: "@mui/x-date-pickers@npm:6.19.9" - dependencies: - "@babel/runtime": ^7.23.2 - "@mui/base": ^5.0.0-beta.22 - "@mui/utils": ^5.14.16 - "@types/react-transition-group": ^4.4.8 - clsx: ^2.0.0 - prop-types: ^15.8.1 - react-transition-group: ^4.4.5 - peerDependencies: - "@emotion/react": ^11.9.0 - "@emotion/styled": ^11.8.1 - "@mui/material": ^5.8.6 - "@mui/system": ^5.8.0 - date-fns: ^2.25.0 || ^3.2.0 - date-fns-jalali: ^2.13.0-0 - dayjs: ^1.10.7 - luxon: ^3.0.2 - moment: ^2.29.4 - moment-hijri: ^2.1.2 - moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.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 - date-fns: - optional: true - date-fns-jalali: - optional: true - dayjs: - optional: true - luxon: - optional: true - moment: - optional: true - moment-hijri: - optional: true - moment-jalaali: - optional: true - checksum: 830d9cb64187613fdb99cdf465ba6b144169dae944e2c850eedb360d4c8e11943f3b602ffa7c141a4ecf6b02e278f56cd58186b1c25b6beb42d047a9dcbddf56 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: ^7.1.0 - http-proxy-agent: ^7.0.0 - https-proxy-agent: ^7.0.1 - lru-cache: ^10.0.1 - socks-proxy-agent: ^8.0.3 - checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" - dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^1.0.1": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 - languageName: node - linkType: hard - -"@open-draft/until@npm:^1.0.3": - version: 1.0.3 - resolution: "@open-draft/until@npm:1.0.3" - checksum: 323e92ebef0150ed0f8caedc7d219b68cdc50784fa4eba0377eef93533d3f46514eb2400ced83dda8c51bddc3d2c7b8e9cf95e5ec85ab7f62dfc015d174f62f2 - languageName: node - linkType: hard - -"@pdf-lib/standard-fonts@npm:^1.0.0": - version: 1.0.0 - resolution: "@pdf-lib/standard-fonts@npm:1.0.0" - dependencies: - pako: ^1.0.6 - checksum: 7dc629b83862424a64b10c7ae34d789e0045a1a589f34a66a7f8e197f177cdb410969424e5d90f67b35c848db8b045cfa0a664941bdfb2d9b5413dbf44232981 - languageName: node - linkType: hard - -"@pdf-lib/upng@npm:^1.0.1": - version: 1.0.1 - resolution: "@pdf-lib/upng@npm:1.0.1" - dependencies: - pako: ^1.0.10 - checksum: acd8ac0974a3c2ed12c4e21d6340c4f77f8dde6727a74075b2faf69fb9dc4051b9e576479caf8e870f67d1bb37b953dfe50c4784892b466f01a29b55272d5e1f - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - -"@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3": - version: 0.4.3 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3" - dependencies: - ansi-html: ^0.0.7 - error-stack-parser: ^2.0.6 - html-entities: ^1.2.1 - native-url: ^0.2.6 - schema-utils: ^2.6.5 - source-map: ^0.7.3 - peerDependencies: - "@types/webpack": 4.x - react-refresh: ">=0.8.3 <0.10.0" - sockjs-client: ^1.4.0 - type-fest: ^0.13.1 - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.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 - checksum: 36a7b0c63f0aabde856a2b43f3f3bfa7919920afa67b4fbcf7d4980b286c7c11e34ada13654d81bf30c3d3e2c12a5b9eef6c15e21a200003b8030809d3ddd6c6 - languageName: node - linkType: hard - -"@popperjs/core@npm:^2.11.8": - version: 2.11.8 - resolution: "@popperjs/core@npm:2.11.8" - checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 - languageName: node - linkType: hard - -"@prisma/client@npm:^4.4.0": - version: 4.16.2 - resolution: "@prisma/client@npm:4.16.2" - dependencies: - "@prisma/engines-version": 4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81 - peerDependencies: - prisma: "*" - peerDependenciesMeta: - prisma: - optional: true - checksum: 38e1356644a764946c69c8691ea4bbed0ba37739d833a435625bd5435912bed4b9bdd7c384125f3a4ab8128faf566027985c0f0840a42741c338d72e40b5d565 - languageName: node - linkType: hard - -"@prisma/engines-version@npm:4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81": - version: 4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81 - resolution: "@prisma/engines-version@npm:4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" - checksum: b42c6abe7c1928e546f15449e40ffa455701ef2ab1f62973628ecb4e19ff3652e34609a0d83196d1cbd0864adb44c55e082beec852b11929acf1c15fb57ca45a - languageName: node - linkType: hard - -"@prisma/engines@npm:4.16.2": - version: 4.16.2 - resolution: "@prisma/engines@npm:4.16.2" - checksum: f423e6092c3e558cd089a68ae87459fba7fd390c433df087342b3269c3b04163965b50845150dfe47d01f811781bfff89d5ae81c95ca603c59359ab69ebd810f - languageName: node - linkType: hard - -"@rollup/plugin-node-resolve@npm:^7.1.1": - version: 7.1.3 - resolution: "@rollup/plugin-node-resolve@npm:7.1.3" - dependencies: - "@rollup/pluginutils": ^3.0.8 - "@types/resolve": 0.0.8 - builtin-modules: ^3.1.0 - is-module: ^1.0.0 - resolve: ^1.14.2 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: e787c35f123652762d212b63f8cfaf577307434a935466397021c31b71d0d94357c6fa4e326b49bf44b959e22e41bc21f5648470eabec086566e7c36c5d041b1 - languageName: node - linkType: hard - -"@rollup/plugin-replace@npm:^2.3.1": - version: 2.4.2 - resolution: "@rollup/plugin-replace@npm:2.4.2" - dependencies: - "@rollup/pluginutils": ^3.1.0 - magic-string: ^0.25.7 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: b2f1618ee5526d288e2f8ae328dcb326e20e8dc8bd1f60d3e14d6708a5832e4aa44811f7d493f4aed2deeadca86e3b6b0503cd39bf50cfb4b595bb9da027fad0 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.0.8, @rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": 0.0.39 - estree-walker: ^1.0.1 - picomatch: ^2.2.2 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 8be16e27863c219edbb25a4e6ec2fe0e1e451d9e917b6a43cf2ae5bc025a6b8faaa40f82a6e53b66d0de37b58ff472c6c3d57a83037ae635041f8df959d6d9aa - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^6.0.1": - version: 6.0.1 - resolution: "@sinonjs/fake-timers@npm:6.0.1" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 - languageName: node - linkType: hard - -"@slack/logger@npm:^3.0.0": - version: 3.0.0 - resolution: "@slack/logger@npm:3.0.0" - dependencies: - "@types/node": ">=12.0.0" - checksum: 6512d0e9e4be47ea465705ab9b6e6901f36fa981da0d4a657fde649d452b567b351002049b5ee0a22569b5119bf6c2f61befd5b8022d878addb7a99c91b03389 - languageName: node - linkType: hard - -"@slack/types@npm:^2.11.0": - version: 2.11.0 - resolution: "@slack/types@npm:2.11.0" - checksum: b5b7e4be242c9409b247c5be9df480b91a5ad21f367ae96945a7752bd720c65b13623c4a9b37b812107b3a5aa5e5013d7962807230913781ff5f0ad427a79ec2 - languageName: node - linkType: hard - -"@slack/web-api@npm:^6.7.2": - version: 6.12.0 - resolution: "@slack/web-api@npm:6.12.0" - dependencies: - "@slack/logger": ^3.0.0 - "@slack/types": ^2.11.0 - "@types/is-stream": ^1.1.0 - "@types/node": ">=12.0.0" - axios: ^1.6.5 - eventemitter3: ^3.1.0 - form-data: ^2.5.0 - is-electron: 2.2.2 - is-stream: ^1.1.0 - p-queue: ^6.6.1 - p-retry: ^4.0.0 - checksum: d0cc16a2981167f3780a07542b4c88d31fc836a743de04e52e9f8fe8a82281781103f8821b3db5aa9de55471b6e550f044e767dbf482045865bd713b90fddd65 - languageName: node - linkType: hard - -"@surma/rollup-plugin-off-main-thread@npm:^1.1.1": - version: 1.4.2 - resolution: "@surma/rollup-plugin-off-main-thread@npm:1.4.2" - dependencies: - ejs: ^2.6.1 - magic-string: ^0.25.0 - checksum: da721792036a0e1253911f9b5280e6cb236024d7d2255bde3b6e87587c0ea8f46404224c8c032a27ee11ab3244eda752587fb37ec78c2e64eb53e10557373102 - languageName: node - linkType: hard - -"@svgr/babel-plugin-add-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:5.4.0" - checksum: 1c538cf312b486598c6aea17f9b72d7fc308eb5dd32effd804630206a185493b8a828ff980ceb29d57d8319c085614c7cea967be709c71ae77702a4c30037011 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:5.4.0" - checksum: ad2231bfcb14daa944201df66236c222cde05a07c4cffaecab1d36d33f606b6caf17bda21844fc435780c1a27195e49beb8397536fe5e7545dfffcfbbcecb7f8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:5.0.1" - checksum: 175c8f13ddcb0744f7c3910ebed3799cfb961a75bff130e1ed2071c87ca8b8df8964825c988e511b2e3c5dbf48ad3d4fbbb6989edc53294253df40cf2a24375e - languageName: node - linkType: hard - -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:5.0.1" - checksum: 68f4e2a5b95eca44e22fce485dc2ddd10adabe2b38f6db3ef9071b35e84bf379685f7acab6c05b7a82f722328c02f6424f8252c6dd5c2c4ed2f00104072b1dfe - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-dynamic-title@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:5.4.0" - checksum: c46feb52454acea32031d1d881a81334f2e5f838ed25a2d9014acb5e9541d404405911e86dbee8bee9f1e43c9e07118123a07dc297962dbed0c4c5a86bdc4be9 - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-em-dimensions@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:5.4.0" - checksum: 0d19b26147bbba932bd973258dab4a80a7ea6b9d674713186f0e10fa21a9e3aa4327326b2bf1892e8051712bce0ea30561eb187ca27bb241d33c350cea51ac88 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-react-native-svg@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:5.4.0" - checksum: 8ac5dc9fb2dee24addc74dbcb169860c95a69247606f986eabb0618fb300dd08e8f220891b758e62c051428ba04d8dd50f2c2bf877e15fa190e6d384d1ccd2ad - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-svg-component@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:5.5.0" - checksum: 94c3fed490deb8544af4ea32a5d78a840334cdcc8a5a33fe8ea9f1c220a4d714d57c9e10934492de99b7e1acc17963b1749a49927e27b1e839a4dc3c893605c7 - languageName: node - linkType: hard - -"@svgr/babel-preset@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-preset@npm:5.5.0" - 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 - checksum: 5d396c4499c9ff2df9db6d08a160d10386b9f459cb9c2bb5ee183ab03b2f46c8ef3c9a070f1eee93f4e4433a5f00704e7632b1386078eb697ad8a2b38edb8522 - languageName: node - linkType: hard - -"@svgr/core@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/core@npm:5.5.0" - dependencies: - "@svgr/plugin-jsx": ^5.5.0 - camelcase: ^6.2.0 - cosmiconfig: ^7.0.0 - checksum: 39b230151e30b9ca8551d10674e50efb821d1a49ce10969b09587af130780eba581baa1e321b0922f48331943096f05590aa6ae92d88d011d58093a89dd34158 - languageName: node - linkType: hard - -"@svgr/hast-util-to-babel-ast@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/hast-util-to-babel-ast@npm:5.5.0" - dependencies: - "@babel/types": ^7.12.6 - checksum: a03c1c7ab92b1a6dbd7671b0b78df4c07e8d808ff092671554a78752ec0c0425c03b6c82569a5f33903d191c73379eedf631f23aeb30b7a70185f5f2fc67fae6 - languageName: node - linkType: hard - -"@svgr/plugin-jsx@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-jsx@npm:5.5.0" - 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 - checksum: e053f8dd6bfcd72377b432dd5b1db3c89d503d29839639a87f85b597a680d0b69e33a4db376f5a1074a89615f7157cd36f63f94bdb4083a0fd5bbe918c7fcb9b - languageName: node - linkType: hard - -"@svgr/plugin-svgo@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-svgo@npm:5.5.0" - dependencies: - cosmiconfig: ^7.0.0 - deepmerge: ^4.2.2 - svgo: ^1.2.2 - checksum: bef5d09581349afdf654209f82199670649cc749b81ff5f310ce4a3bbad749cde877c9b1a711dd9ced51224e2b5b5a720d242bdf183fa0f83e08e8d5e069b0b6 - languageName: node - linkType: hard - -"@svgr/webpack@npm:5.5.0": - version: 5.5.0 - resolution: "@svgr/webpack@npm:5.5.0" - 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 - checksum: 540391bd63791625d26d6b5e0dd3c716ef51176bfba53bf0979a1ac4781afd2672f4bef2d76cf3d9cdc8e9ee61bda6863ed405a237b10406633ede4cd524f1cc - languageName: node - linkType: hard - -"@testing-library/dom@npm:^7.28.1": - version: 7.31.2 - resolution: "@testing-library/dom@npm:7.31.2" - 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 - checksum: 54fbedd1ecdfe1d47be2e592b98d18b2ab9d7e731f57231caf9b152593fe7329fe5ebe219e0e5d1e0df5b1ab803121cb8acd8b73bd1fb292bfdc2c55663eb01d - languageName: node - linkType: hard - -"@testing-library/dom@npm:^8.19.0": - version: 8.20.1 - resolution: "@testing-library/dom@npm:8.20.1" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 - "@types/aria-query": ^5.0.1 - aria-query: 5.1.3 - chalk: ^4.1.0 - dom-accessibility-api: ^0.5.9 - lz-string: ^1.5.0 - pretty-format: ^27.0.2 - checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 - languageName: node - linkType: hard - -"@testing-library/jest-dom@npm:^5.11.9, @testing-library/jest-dom@npm:^5.16.4": - version: 5.17.0 - resolution: "@testing-library/jest-dom@npm:5.17.0" - 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 - checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b - languageName: node - linkType: hard - -"@testing-library/react-hooks@npm:^8.0.1": - version: 8.0.1 - resolution: "@testing-library/react-hooks@npm:8.0.1" - dependencies: - "@babel/runtime": ^7.12.5 - react-error-boundary: ^3.1.0 - peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 - react-dom: ^16.9.0 || ^17.0.0 - react-test-renderer: ^16.9.0 || ^17.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - react-dom: - optional: true - react-test-renderer: - optional: true - checksum: 7fe44352e920deb5cb1876f80d64e48615232072c9d5382f1e0284b3aab46bb1c659a040b774c45cdf084a5257b8fe463f7e08695ad8480d8a15635d4d3d1f6d - languageName: node - linkType: hard - -"@testing-library/react@npm:^11.2.5": - version: 11.2.7 - resolution: "@testing-library/react@npm:11.2.7" - dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^7.28.1 - peerDependencies: - react: "*" - react-dom: "*" - checksum: 64e07cb96e40dbdbd3c46a09c47bed14446b30efafaa65a5d4fed5a7553878990cda108578f2b114422a775f31c635d51fd50b752f6163ddd6b8474e0e5fc2ce - languageName: node - linkType: hard - -"@testing-library/user-event@npm:^12.6.3": - version: 12.8.3 - resolution: "@testing-library/user-event@npm:12.8.3" - dependencies: - "@babel/runtime": ^7.12.5 - peerDependencies: - "@testing-library/dom": ">=7.21.4" - checksum: c9fb5ee07cbe79ddf32d81e1a353e556d02a1f1619456ccfad6abcdf1b7db400fdc9d7a8e0be3994f456e7135a0dfb7fa10b29fb98a0f5fc417b99fce0ce8166 - languageName: node - linkType: hard - -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node10@npm:1.0.11" - checksum: 51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 - languageName: node - linkType: hard - -"@types/aria-query@npm:^5.0.1": - version: 5.0.4 - resolution: "@types/aria-query@npm:5.0.4" - checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.20.5": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": ^7.0.0 - checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.20.5 - resolution: "@types/babel__traverse@npm:7.20.5" - dependencies: - "@babel/types": ^7.20.7 - checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8 - languageName: node - linkType: hard - -"@types/body-parser@npm:*": - version: 1.19.5 - resolution: "@types/body-parser@npm:1.19.5" - dependencies: - "@types/connect": "*" - "@types/node": "*" - checksum: 1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 - languageName: node - linkType: hard - -"@types/chai-subset@npm:^1.3.3": - version: 1.3.5 - resolution: "@types/chai-subset@npm:1.3.5" - dependencies: - "@types/chai": "*" - checksum: 715c46d3e90f87482c2769389d560456bb257b225716ff44c275c231bdb62c8a30629f355f412bac0ecab07ebc036c1806d9ed9dde9792254f8ef4f07f76033b - languageName: node - linkType: hard - -"@types/chai@npm:*, @types/chai@npm:^4.3.5": - version: 4.3.14 - resolution: "@types/chai@npm:4.3.14" - checksum: 962c67d1295005886ced8f87c73614616f6d65ed1ec71818021c9206decbaab1234da878295ba52450883c78a8ee5e1359e5deeadee3b7d058538b0ae8c67b08 - languageName: node - linkType: hard - -"@types/concat-stream@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/concat-stream@npm:2.0.3" - dependencies: - "@types/node": "*" - checksum: e829fde246528665b31a9b8f64c369ffc66aa2a1337d2bab1d38f4d4145701480af7c67e877dd09a7fa97fcbaa0f3baa816ed1b3e71c3ad430930acd37f4eb1f - languageName: node - linkType: hard - -"@types/connect@npm:*": - version: 3.4.38 - resolution: "@types/connect@npm:3.4.38" - dependencies: - "@types/node": "*" - checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 - languageName: node - linkType: hard - -"@types/cookie-parser@npm:^1.4.3": - version: 1.4.7 - resolution: "@types/cookie-parser@npm:1.4.7" - dependencies: - "@types/express": "*" - checksum: 7b87c59420598e686a57e240be6e0db53967c3c8814be9326bf86609ee2fc39c4b3b9f2263e1deba43526090121d1df88684b64c19f7b494a80a4437caf3d40b - languageName: node - linkType: hard - -"@types/cookie@npm:^0.4.1": - version: 0.4.1 - resolution: "@types/cookie@npm:0.4.1" - checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 - languageName: node - linkType: hard - -"@types/cookiejar@npm:^2.1.5": - version: 2.1.5 - resolution: "@types/cookiejar@npm:2.1.5" - checksum: 04d5990e87b6387532d15a87d9ec9b2eb783039291193863751dcfd7fc723a3b3aa30ce4c06b03975cba58632e933772f1ff031af23eaa3ac7f94e71afa6e073 - languageName: node - linkType: hard - -"@types/cors@npm:^2.8.12": - version: 2.8.17 - resolution: "@types/cors@npm:2.8.17" - dependencies: - "@types/node": "*" - checksum: 469bd85e29a35977099a3745c78e489916011169a664e97c4c3d6538143b0a16e4cc72b05b407dc008df3892ed7bf595f9b7c0f1f4680e169565ee9d64966bde - languageName: node - linkType: hard - -"@types/debug@npm:^4.1.7": - version: 4.1.12 - resolution: "@types/debug@npm:4.1.12" - dependencies: - "@types/ms": "*" - checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 - languageName: node - linkType: hard - -"@types/eslint@npm:^7.29.0": - version: 7.29.0 - resolution: "@types/eslint@npm:7.29.0" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf - languageName: node - linkType: hard - -"@types/estree@npm:*": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a - languageName: node - linkType: hard - -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 412fb5b9868f2c418126451821833414189b75cc6bf84361156feed733e3d92ec220b9d74a89e52722e03d5e241b2932732711b7497374a404fad49087adc248 - languageName: node - linkType: hard - -"@types/express-jwt@npm:^6.0.4": - version: 6.0.4 - resolution: "@types/express-jwt@npm:6.0.4" - dependencies: - "@types/express": "*" - "@types/express-unless": "*" - checksum: bf4b80b10fbeb9d45491e605c79d4b2925823af76929ca833a208c13f73be45a7ab639e76054d0185457f97fef10b0232833dcc3f44dfcf14baabae26801420e - languageName: node - linkType: hard - -"@types/express-serve-static-core@npm:^4.17.33": - version: 4.19.0 - resolution: "@types/express-serve-static-core@npm:4.19.0" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - "@types/send": "*" - checksum: 39c09fcb3f61de96ed56d97273874cafe50e6675ac254af4d77014e569e4fdc29d1d0d1dd12e11f008cb9a52785b07c2801c6ba91397965392b20c75ee01fb4e - languageName: node - linkType: hard - -"@types/express-unless@npm:*": - version: 0.5.3 - resolution: "@types/express-unless@npm:0.5.3" - dependencies: - "@types/express": "*" - checksum: 5c76425ff7490123f3c072c942ae6d18bb3cbf91d5d9857c52fca1f9a3d11b72413dbfb3e4af28fdd7f745d1a443f90daadbcf7daff714d608eef10bd7c8763c - languageName: node - linkType: hard - -"@types/express@npm:*, @types/express@npm:^4.17.6": - version: 4.17.21 - resolution: "@types/express@npm:4.17.21" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.33 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 - languageName: node - linkType: hard - -"@types/file-saver@npm:^2.0.5": - version: 2.0.7 - resolution: "@types/file-saver@npm:2.0.7" - checksum: c3d1cd80eab1214767922cabac97681f3fb688e82b74890450d70deaca49537949bbc96d80d363d91e8f0a4752c7164909cc8902d9721c5c4809baafc42a3801 - languageName: node - linkType: hard - -"@types/glob@npm:^7.1.1": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "*" - "@types/node": "*" - checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "*" - checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - -"@types/hast@npm:^2.0.0": - version: 2.3.10 - resolution: "@types/hast@npm:2.3.10" - dependencies: - "@types/unist": ^2 - checksum: 41531b7fbf590b02452996fc63272479c20a07269e370bd6514982cbcd1819b4b84d3ea620f2410d1b9541a23d08ce2eeb0a592145d05e00e249c3d56700d460 - languageName: node - linkType: hard - -"@types/history@npm:^4.7.11": - version: 4.7.11 - resolution: "@types/history@npm:4.7.11" - checksum: c92e2ba407dcab0581a9afdf98f533aa41b61a71133420a6d92b1ca9839f741ab1f9395b17454ba5b88cb86020b70b22d74a1950ccfbdfd9beeaa5459fdc3464 - languageName: node - linkType: hard - -"@types/html-minifier-terser@npm:^5.0.0": - version: 5.1.2 - resolution: "@types/html-minifier-terser@npm:5.1.2" - checksum: 4bca779c44d2aebe4cc4036c5db370abe7466249038e9c5996cb3c192debeff1c75b7a2ab78e5fd2a014ad24ebf0f357f9a174a4298540dc1e1317d43aa69cfa - languageName: node - linkType: hard - -"@types/http-errors@npm:*": - version: 2.0.4 - resolution: "@types/http-errors@npm:2.0.4" - checksum: 1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 - languageName: node - linkType: hard - -"@types/is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "@types/is-stream@npm:1.1.0" - dependencies: - "@types/node": "*" - checksum: 23fcb06cd8adc0124d4c44071bd4b447c41f5e4c2eccb6166789c7fc0992b566e2e8b628a3800ff4472b686d9085adbec203925068bf72e350e085650e83adec - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 - languageName: node - linkType: hard - -"@types/jest@npm:*": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c - languageName: node - linkType: hard - -"@types/jest@npm:^28.1.6": - version: 28.1.8 - resolution: "@types/jest@npm:28.1.8" - dependencies: - expect: ^28.0.0 - pretty-format: ^28.0.0 - checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 - languageName: node - linkType: hard - -"@types/js-levenshtein@npm:^1.1.1": - version: 1.1.3 - resolution: "@types/js-levenshtein@npm:1.1.3" - checksum: eb338696da976925ea8448a42d775d7615a14323dceeb08909f187d0b3d3b4c1f67a1c36ef586b1c2318b70ab141bba8fc58311ba1c816711704605aec09db8b - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac - languageName: node - linkType: hard - -"@types/jsonwebtoken@npm:^8.5.8, @types/jsonwebtoken@npm:^8.5.9": - version: 8.5.9 - resolution: "@types/jsonwebtoken@npm:8.5.9" - dependencies: - "@types/node": "*" - checksum: 33815ab02d1371b423118316b7706d2f2ec03eeee5e1494be72da50425d2384e5e0a09ea193f7a5ab4b4f6a9c5847147305f50e965f3d927a95bdf8adb471b2a - languageName: node - linkType: hard - -"@types/lodash@npm:^4.14.175": - version: 4.17.0 - resolution: "@types/lodash@npm:4.17.0" - checksum: 3f98c0b67a93994cbc3403d4fa9dbaf52b0b6bb7f07a764d73875c2dcd5ef91222621bd5bcf8eee7b417a74d175c2f7191b9f595f8603956fd06f0674c0cba93 - languageName: node - linkType: hard - -"@types/mdast@npm:^3.0.0": - version: 3.0.15 - resolution: "@types/mdast@npm:3.0.15" - dependencies: - "@types/unist": ^2 - checksum: af85042a4e3af3f879bde4059fa9e76c71cb552dffc896cdcc6cf9dc1fd38e37035c2dbd6245cfa6535b433f1f0478f5549696234ccace47a64055a10c656530 - languageName: node - linkType: hard - -"@types/methods@npm:^1.1.4": - version: 1.1.4 - resolution: "@types/methods@npm:1.1.4" - checksum: ad2a7178486f2fd167750f3eb920ab032a947ff2e26f55c86670a6038632d790b46f52e5b6ead5823f1e53fc68028f1e9ddd15cfead7903e04517c88debd72b1 - languageName: node - linkType: hard - -"@types/mime@npm:^1": - version: 1.3.5 - resolution: "@types/mime@npm:1.3.5" - checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 - languageName: node - linkType: hard - -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 - languageName: node - linkType: hard - -"@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a - languageName: node - linkType: hard - -"@types/multer@npm:^1.4.7": - version: 1.4.11 - resolution: "@types/multer@npm:1.4.11" - dependencies: - "@types/express": "*" - checksum: 3d80b2acdfbc9f3e9027d4467e948925810b67e5622a3017f42f58a3598d34b25376890801e55d0c03973ccc34573abf5218af334e8292ec455832f4ade3e5f5 - languageName: node - linkType: hard - -"@types/node@npm:*, @types/node@npm:>=12.0.0": - version: 20.12.7 - resolution: "@types/node@npm:20.12.7" - dependencies: - undici-types: ~5.26.4 - checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686 - languageName: node - linkType: hard - -"@types/node@npm:18.17.1": - version: 18.17.1 - resolution: "@types/node@npm:18.17.1" - checksum: 56201bda9a2d05d68602df63b4e67b0545ac8c6d0280bd5fb31701350a978a577a027501fbf49db99bf177f2242ebd1244896bfd35e89042d5bd7dfebff28d4e - languageName: node - linkType: hard - -"@types/nodemailer@npm:^6.4.7": - version: 6.4.14 - resolution: "@types/nodemailer@npm:6.4.14" - dependencies: - "@types/node": "*" - checksum: 5f61f01dd736b17f431d1e8b320322f86460604b45df947fc4bc8999d7c7719405e349f7abba86e4fb100a464a30b52615d00dac03d9cb37562ff04487ebd310 - languageName: node - linkType: hard - -"@types/normalize-package-data@npm:^2.4.0": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.2 - resolution: "@types/parse-json@npm:4.0.2" - checksum: 5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 - languageName: node - linkType: hard - -"@types/prettier@npm:^2.0.0": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 - languageName: node - linkType: hard - -"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11, @types/prop-types@npm:^15.7.12": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe - languageName: node - linkType: hard - -"@types/q@npm:^1.5.1": - version: 1.5.8 - resolution: "@types/q@npm:1.5.8" - checksum: ff3b7f09c2746d068dee8d39501f09dbf71728c4facdc9cb0e266ea6615ad97e61267c0606ab3da88d11ef1609ce904cef45a9c56b2b397f742388d7f15bb740 - languageName: node - linkType: hard - -"@types/qs@npm:*": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 - languageName: node - linkType: hard - -"@types/range-parser@npm:*": - version: 1.2.7 - resolution: "@types/range-parser@npm:1.2.7" - checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a - languageName: node - linkType: hard - -"@types/react-dom@npm:17.0.1": - version: 17.0.1 - resolution: "@types/react-dom@npm:17.0.1" - dependencies: - "@types/react": "*" - checksum: bbe68efb2936053562785c9495d5cae9ea1fa2b02c93b68458f8ba71517a5f2afcda2629d8a2c073476e4909cf11ca99ad746d9cd5383fbe7c1d61209209870d - languageName: node - linkType: hard - -"@types/react-helmet@npm:^6.1.6": - version: 6.1.11 - resolution: "@types/react-helmet@npm:6.1.11" - dependencies: - "@types/react": "*" - checksum: e329d8ad82c365fec7dd7d91c8b6d167faac30cef0d9f1e27d7e895172a0ebfa65829fb4acabbe79283b01cbbe5840a845caeb50148ceef6f3fad42b3c2c4bdc - languageName: node - linkType: hard - -"@types/react-query@npm:^1.2.9": - version: 1.2.9 - resolution: "@types/react-query@npm:1.2.9" - dependencies: - react-query: "*" - checksum: 9bddd0e810f3453276c8145450b294674c14f69daba75da9fdc953f0a6329ab533b64db6fe212267dc79ba61485f6eb673a9c2ad119c072b2ecae59c2bb593e4 - languageName: node - linkType: hard - -"@types/react-router-dom@npm:^5.1.7": - version: 5.3.3 - resolution: "@types/react-router-dom@npm:5.3.3" - dependencies: - "@types/history": ^4.7.11 - "@types/react": "*" - "@types/react-router": "*" - checksum: 28c4ea48909803c414bf5a08502acbb8ba414669b4b43bb51297c05fe5addc4df0b8fd00e0a9d1e3535ec4073ef38aaafac2c4a2b95b787167d113bc059beff3 - languageName: node - linkType: hard - -"@types/react-router@npm:*": - version: 5.1.20 - resolution: "@types/react-router@npm:5.1.20" - dependencies: - "@types/history": ^4.7.11 - "@types/react": "*" - checksum: 128764143473a5e9457ddc715436b5d49814b1c214dde48939b9bef23f0e77f52ffcdfa97eb8d3cc27e2c229869c0cdd90f637d887b62f2c9f065a87d6425419 - languageName: node - linkType: hard - -"@types/react-transition-group@npm:^4.4.10, @types/react-transition-group@npm:^4.4.8": - version: 4.4.10 - resolution: "@types/react-transition-group@npm:4.4.10" - dependencies: - "@types/react": "*" - checksum: fe2ea11f70251e9f79f368e198c18fd469b1d4f1e1d44e4365845b44e15974b0ec925100036f449b023b0ca3480a82725c5f0a73040e282ad32ec7b0def9b57c - languageName: node - linkType: hard - -"@types/react@npm:17.0.1": - version: 17.0.1 - resolution: "@types/react@npm:17.0.1" - dependencies: - "@types/prop-types": "*" - csstype: ^3.0.2 - checksum: 592d7a33898550f2139e69c1bb21397ab6f351f406623397cd7f9a4aea20140c779dd23f2934789d40b0bd87995a86c766434ba07bdd1de9533045d0f3596b68 - languageName: node - linkType: hard - -"@types/resolve@npm:0.0.8": - version: 0.0.8 - resolution: "@types/resolve@npm:0.0.8" - dependencies: - "@types/node": "*" - checksum: f241bb773ab14b14500623ac3b57c52006ce32b20426b6d8bf2fe5fdc0344f42c77ac0f94ff57b443ae1d320a1a86c62b4e47239f0321699404402fbeb24bad6 - languageName: node - linkType: hard - -"@types/retry@npm:0.12.0": - version: 0.12.0 - resolution: "@types/retry@npm:0.12.0" - checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 - languageName: node - linkType: hard - -"@types/send@npm:*": - version: 0.17.4 - resolution: "@types/send@npm:0.17.4" - dependencies: - "@types/mime": ^1 - "@types/node": "*" - checksum: cf4db48251bbb03cd6452b4de6e8e09e2d75390a92fd798eca4a803df06444adc94ed050246c94c7ed46fb97be1f63607f0e1f13c3ce83d71788b3e08640e5e0 - languageName: node - linkType: hard - -"@types/serve-static@npm:*": - version: 1.15.7 - resolution: "@types/serve-static@npm:1.15.7" - dependencies: - "@types/http-errors": "*" - "@types/node": "*" - "@types/send": "*" - checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6 - languageName: node - linkType: hard - -"@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.7 - resolution: "@types/set-cookie-parser@npm:2.4.7" - dependencies: - "@types/node": "*" - checksum: 01ef803e24b8cd33e49fe7463f32a562da45ce3f960381b90cccf67ea71b1830d2273df044255b040069c0a92ea25b4bf21c39ac2f85b50c01818ded5e918554 - languageName: node - linkType: hard - -"@types/source-list-map@npm:*": - version: 0.1.6 - resolution: "@types/source-list-map@npm:0.1.6" - checksum: 9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1 - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 - languageName: node - linkType: hard - -"@types/superagent@npm:*": - version: 8.1.6 - resolution: "@types/superagent@npm:8.1.6" - dependencies: - "@types/cookiejar": ^2.1.5 - "@types/methods": ^1.1.4 - "@types/node": "*" - checksum: 240ea5a58bb3c9e53f0dbe1ccd1bfe046e084fffdb4eaf44f0bf846fb98dad98ce03d057fdfb555bfa06afbb76a0e5877fe639750b798edac594bc7e19833934 - languageName: node - linkType: hard - -"@types/supertest@npm:^2.0.12": - version: 2.0.16 - resolution: "@types/supertest@npm:2.0.16" - dependencies: - "@types/superagent": "*" - checksum: 2fc998ea698e0467cdbe3bea0ebce2027ea3a45a13e51a6cecb0435f44b486faecf99c34d8702d2d7fe033e6e09fdd2b374af52ecc8d0c69a1deec66b8c0dd52 - languageName: node - linkType: hard - -"@types/tapable@npm:^1, @types/tapable@npm:^1.0.5": - version: 1.0.12 - resolution: "@types/tapable@npm:1.0.12" - checksum: 5312fbc01e0135bd11b44cfea2bf29943807cd9675c10bbed13873ad0e73f656993fb88bb6ceaf05b12a55c570e6acc0267faf59e9c4d2f032fc833bafcf0597 - languageName: node - linkType: hard - -"@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.9 - resolution: "@types/testing-library__jest-dom@npm:5.14.9" - dependencies: - "@types/jest": "*" - checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 - languageName: node - linkType: hard - -"@types/uglify-js@npm:*": - version: 3.17.5 - resolution: "@types/uglify-js@npm:3.17.5" - dependencies: - source-map: ^0.6.1 - checksum: ffed5d63637c6ea5c155469121ee40d9b652e677e6d9eb07b72ff72bb4029ffad19049a0af6e91a5021bad6c481cff2572fbf6367e319c6885cf1537c20d861d - languageName: node - linkType: hard - -"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa - languageName: node - linkType: hard - -"@types/webpack-sources@npm:*": - version: 3.2.3 - resolution: "@types/webpack-sources@npm:3.2.3" - dependencies: - "@types/node": "*" - "@types/source-list-map": "*" - source-map: ^0.7.3 - checksum: 7b557f242efaa10e4e3e18cc4171a0c98e22898570caefdd4f7b076fe8534b5abfac92c953c6604658dcb7218507f970230352511840fe9fdea31a9af3b9a906 - languageName: node - linkType: hard - -"@types/webpack@npm:^4.41.8": - version: 4.41.38 - resolution: "@types/webpack@npm:4.41.38" - dependencies: - "@types/node": "*" - "@types/tapable": ^1 - "@types/uglify-js": "*" - "@types/webpack-sources": "*" - anymatch: ^3.0.0 - source-map: ^0.6.0 - checksum: d3de65993ef3a7621f75548c2f6f509e8f87f586032238e999743d6067030655c67e38ec5f8b32e04fa5276c83bdfb7a761773bce0e6f28605da87e3fc388e3e - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc - languageName: node - linkType: hard - -"@types/yargs@npm:^15.0.0": - version: 15.0.19 - resolution: "@types/yargs@npm:15.0.19" - dependencies: - "@types/yargs-parser": "*" - checksum: 6a509db36304825674f4f00300323dce2b4d850e75819c3db87e9e9f213ac2c4c6ed3247a3e4eed6e8e45b3f191b133a356d3391dd694d9ea27a0507d914ef4c - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" - dependencies: - "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^4.18.0, @typescript-eslint/eslint-plugin@npm:^4.5.0": - version: 4.33.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" - dependencies: - "@typescript-eslint/experimental-utils": 4.33.0 - "@typescript-eslint/scope-manager": 4.33.0 - debug: ^4.3.1 - functional-red-black-tree: ^1.0.1 - ignore: ^5.1.8 - regexpp: ^3.1.0 - semver: ^7.3.5 - tsutils: ^3.21.0 - peerDependencies: - "@typescript-eslint/parser": ^4.0.0 - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": - version: 4.33.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" - dependencies: - "@types/json-schema": ^7.0.7 - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - peerDependencies: - eslint: "*" - checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:^3.10.1": - version: 3.10.1 - resolution: "@typescript-eslint/experimental-utils@npm:3.10.1" - dependencies: - "@types/json-schema": ^7.0.3 - "@typescript-eslint/types": 3.10.1 - "@typescript-eslint/typescript-estree": 3.10.1 - eslint-scope: ^5.0.0 - eslint-utils: ^2.0.0 - peerDependencies: - eslint: "*" - checksum: 635cc1afe466088b04901c2bce0e4c3e48bb74668e61e39aa74a485f856c6f9683482350d4b16b3f4c0112ce40cad2c2c427d4fe5e11a3329b3bb93286d4ab26 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^4.18.0, @typescript-eslint/parser@npm:^4.5.0": - version: 4.33.0 - resolution: "@typescript-eslint/parser@npm:4.33.0" - 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 - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/scope-manager@npm:4.33.0" - dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:3.10.1": - version: 3.10.1 - resolution: "@typescript-eslint/types@npm:3.10.1" - checksum: 3ea820d37c2595d457acd6091ffda8b531e5d916e1cce708336bf958aa8869126f95cca3268a724f453ce13be11c5388a0a4143bf09bca51be1020ec46635d92 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/types@npm:4.33.0" - checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:3.10.1": - version: 3.10.1 - resolution: "@typescript-eslint/typescript-estree@npm:3.10.1" - dependencies: - "@typescript-eslint/types": 3.10.1 - "@typescript-eslint/visitor-keys": 3.10.1 - debug: ^4.1.1 - glob: ^7.1.6 - is-glob: ^4.0.1 - lodash: ^4.17.15 - semver: ^7.3.2 - tsutils: ^3.17.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 911680da9d26220944f4f8f26f88349917609844fafcff566147cecae37ff0211d66c626eb62a2b24d17fd50d10715f5b0f32b2e7f5d9a88efc46709266d5053 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" - 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 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:3.10.1": - version: 3.10.1 - resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" - dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 0c4825b9829b1c11258a73aaee70d64834ba6d9b24157e7624e80f27f6537f468861d4dd33ad233c13ad2c6520afb9008c0675da6d792f26e82d75d6bfe9b0c6 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" - dependencies: - "@typescript-eslint/types": 4.33.0 - eslint-visitor-keys: ^2.0.0 - checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 - languageName: node - linkType: hard - -"@vitejs/plugin-react@npm:^4.0.0": - version: 4.2.1 - resolution: "@vitejs/plugin-react@npm:4.2.1" - dependencies: - "@babel/core": ^7.23.5 - "@babel/plugin-transform-react-jsx-self": ^7.23.3 - "@babel/plugin-transform-react-jsx-source": ^7.23.3 - "@types/babel__core": ^7.20.5 - react-refresh: ^0.14.0 - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - checksum: 08d227d27ff2304e395e746bd2d4b5fee40587f69d7e2fcd6beb7d91163c1f1dc26d843bc48e2ffb8f38c6b8a1b9445fb07840e3dcc841f97b56bbb8205346aa - languageName: node - linkType: hard - -"@vitest/expect@npm:0.32.4": - version: 0.32.4 - resolution: "@vitest/expect@npm:0.32.4" - dependencies: - "@vitest/spy": 0.32.4 - "@vitest/utils": 0.32.4 - chai: ^4.3.7 - checksum: fb44ae0507c3a0298e472e64f4d298f60b159c7ce05201987cbd60ba6b11069a97bed5f689f911ac66096ee573c64ed0c17a2511661ad7823ce31a86244b8cd8 - languageName: node - linkType: hard - -"@vitest/runner@npm:0.32.4": - version: 0.32.4 - resolution: "@vitest/runner@npm:0.32.4" - dependencies: - "@vitest/utils": 0.32.4 - p-limit: ^4.0.0 - pathe: ^1.1.1 - checksum: 06f2b4003963a7f18954bcd690ebd3b917e1d45d998a8c9a23458569a8ae9b50a18fcf511ac100343eeddf1df1e47f8eba870e193afa895ccb348a679e5295de - languageName: node - linkType: hard - -"@vitest/snapshot@npm:0.32.4": - version: 0.32.4 - resolution: "@vitest/snapshot@npm:0.32.4" - dependencies: - magic-string: ^0.30.0 - pathe: ^1.1.1 - pretty-format: ^29.5.0 - checksum: d8907fc0504acfb59df88aaf43a210161f7e2f22eaaa96c6562b7a1c9e28b12d2b572afcd49ae224a8a9947fabf473e956c7ea7c7d25f794d5521d7d45f24b78 - languageName: node - linkType: hard - -"@vitest/spy@npm:0.32.4": - version: 0.32.4 - resolution: "@vitest/spy@npm:0.32.4" - dependencies: - tinyspy: ^2.1.1 - checksum: 742870e7554dd8d478de85bc265c3af051e1f3420093fdc9978fe9871472db37da6da69c66d80ad604029d1dfdc303f1159613d9ccf08dba1c3991eb4e7616a7 - languageName: node - linkType: hard - -"@vitest/utils@npm:0.32.4": - version: 0.32.4 - resolution: "@vitest/utils@npm:0.32.4" - dependencies: - diff-sequences: ^29.4.3 - loupe: ^2.3.6 - pretty-format: ^29.5.0 - checksum: 7d81162c3afaa638d30c47a28b7eced62abb8d7a8c891b10fa2f9756b2b6609d767142162044fe976c2cb8c17911d135fb3950f83e6d2bbd90150a042237bd25 - languageName: node - linkType: hard - -"@webassemblyjs/ast@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/ast@npm:1.9.0" - dependencies: - "@webassemblyjs/helper-module-context": 1.9.0 - "@webassemblyjs/helper-wasm-bytecode": 1.9.0 - "@webassemblyjs/wast-parser": 1.9.0 - checksum: 8a9838dc7fdac358aee8daa75eefa35934ab18dafb594092ff7be79c467ebe9dabb2543e58313c905fd802bdcc3cb8320e4e19af7444e49853a7a24e25138f75 - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.9.0" - checksum: d3aeb19bc30da26f639698daa28e44e0c18d5aa135359ef3c54148e194eec46451a912d0506099d479a71a94bc3eef6ef52d6ec234799528a25a9744789852de - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-api-error@npm:1.9.0" - checksum: 9179d3148639cc202e89a118145b485cf834613260679a99af6ec487bbc15f238566ca713207394b336160a41bf8c1b75cf2e853b3e96f0cc73c1e5c735b3f64 - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-buffer@npm:1.9.0" - checksum: dcb85f630f8a2e22b7346ad4dd58c3237a2cad1457699423e8fd19592a0bd3eacbc2639178a1b9a873c3ac217bfc7a23a134ff440a099496b590e82c7a4968d5 - languageName: node - linkType: hard - -"@webassemblyjs/helper-code-frame@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-code-frame@npm:1.9.0" - dependencies: - "@webassemblyjs/wast-printer": 1.9.0 - checksum: a28fa057f7beff0fd14bff716561520f8edb8c9c56c7a5559451e6765acfb70aaeb8af718ea2bd2262e7baeba597545af407e28eb2eff8329235afe8605f20d1 - languageName: node - linkType: hard - -"@webassemblyjs/helper-fsm@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-fsm@npm:1.9.0" - checksum: 374cc510c8f5a7a07d4fe9eb7036cc475a96a670b5d25c31f16757ac8295be8d03a2f29657ff53eaefa9e8315670a48824d430ed910e7c1835788ac79f93124e - languageName: node - linkType: hard - -"@webassemblyjs/helper-module-context@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-module-context@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - checksum: 55e8f89c7ea1beaa78fad88403f3753b8413b0f3b6bb32d898ce95078b3e1d1b48ade0919c00b82fc2e3813c0ab6901e415f7a4d4fa9be50944e2431adde75a5 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.9.0" - checksum: 280da4df3c556f73a1a02053277f8a4be481de32df4aa21050b015c8f4d27c46af89f0417eb88e486df117e5df4bccffae593f78cb1e79f212d3b3d4f3ed0f04 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-buffer": 1.9.0 - "@webassemblyjs/helper-wasm-bytecode": 1.9.0 - "@webassemblyjs/wasm-gen": 1.9.0 - checksum: b8f7bb45d4194074c82210211a5d3e402a5b5fa63ecae26d2c356ae3978af5a530e91192fb260f32f9d561b18e2828b3da2e2f41c59efadb5f3c6d72446807f0 - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/ieee754@npm:1.9.0" - dependencies: - "@xtuc/ieee754": ^1.2.0 - checksum: 7fe4a217ba0f7051e2cfef92919d4a64fac1a63c65411763779bd50907820f33f440255231a474fe3ba03bd1d9ee0328662d1eae3fce4c59b91549d6b62b839b - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/leb128@npm:1.9.0" - dependencies: - "@xtuc/long": 4.2.2 - checksum: 4ca7cbb869530d78d42a414f34ae53249364cb1ecebbfb6ed5d562c2f209fce857502f088822ee82a23876f653a262ddc34ab64e45a7962510a263d39bb3f51a - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/utf8@npm:1.9.0" - checksum: e328a30ac8a503bbd015d32e75176e0dedcb45a21d4be051c25dfe89a00035ca7a6dbd8937b442dd5b4b334de3959d4f5fe0b330037bd226a28b9814cd49e84f - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wasm-edit@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-buffer": 1.9.0 - "@webassemblyjs/helper-wasm-bytecode": 1.9.0 - "@webassemblyjs/helper-wasm-section": 1.9.0 - "@webassemblyjs/wasm-gen": 1.9.0 - "@webassemblyjs/wasm-opt": 1.9.0 - "@webassemblyjs/wasm-parser": 1.9.0 - "@webassemblyjs/wast-printer": 1.9.0 - checksum: 1997e0c2f4051c33239587fb143242919320bc861a0af03a873c7150a27d6404bd2e063c658193288b0aa88c35aadbe0c4fde601fe642bae0743a8c8eda52717 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wasm-gen@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-wasm-bytecode": 1.9.0 - "@webassemblyjs/ieee754": 1.9.0 - "@webassemblyjs/leb128": 1.9.0 - "@webassemblyjs/utf8": 1.9.0 - checksum: 2456e84e8e6bedb7ab47f6333a0ee170f7ef62842c90862ca787c08528ca8041061f3f8bc257fc2a01bf6e8d1a76fddaddd43418c738f681066e5b50f88fe7df - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wasm-opt@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-buffer": 1.9.0 - "@webassemblyjs/wasm-gen": 1.9.0 - "@webassemblyjs/wasm-parser": 1.9.0 - checksum: 91242205bdbd1aa8045364a5338bfb34880cb2c65f56db8dd19382894209673699fb31a0e5279f25c7e5bcd8f3097d6c9ca84d8969d9613ef2cf166450cc3515 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wasm-parser@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-api-error": 1.9.0 - "@webassemblyjs/helper-wasm-bytecode": 1.9.0 - "@webassemblyjs/ieee754": 1.9.0 - "@webassemblyjs/leb128": 1.9.0 - "@webassemblyjs/utf8": 1.9.0 - checksum: 493f6cfc63a5e16073056c81ff0526a9936f461327379ef3c83cc841000e03623b6352704f6bf9f7cb5b3610f0032020a61f9cca78c91b15b8e995854b29c098 - languageName: node - linkType: hard - -"@webassemblyjs/wast-parser@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wast-parser@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/floating-point-hex-parser": 1.9.0 - "@webassemblyjs/helper-api-error": 1.9.0 - "@webassemblyjs/helper-code-frame": 1.9.0 - "@webassemblyjs/helper-fsm": 1.9.0 - "@xtuc/long": 4.2.2 - checksum: 705dd48fbbceec7f6bed299b8813631b242fd9312f9594dbb2985dda86c9688048692357d684f6080fc2c5666287cefaa26b263d01abadb6a9049d4c8978b9db - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.9.0": - version: 1.9.0 - resolution: "@webassemblyjs/wast-printer@npm:1.9.0" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/wast-parser": 1.9.0 - "@xtuc/long": 4.2.2 - checksum: 3d1e1b2e84745a963f69acd1c02425b321dd2e608e11dabc467cae0c9a808962bc769ec9afc46fbcea7188cc1e47d72370da762d258f716fb367cb1a7865c54b - languageName: node - linkType: hard - -"@xmldom/xmldom@npm:^0.8.3": - version: 0.8.10 - resolution: "@xmldom/xmldom@npm:0.8.10" - checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec - languageName: node - linkType: hard - -"@zxing/text-encoding@npm:0.9.0": - version: 0.9.0 - resolution: "@zxing/text-encoding@npm:0.9.0" - checksum: c23b12aee7639382e4949961304a1294776afaffa40f579e09ffecd0e5e68cf26ef3edd75009de46da8a536e571448755ca68b3e2ea707d53793c0edb2e2c34a - languageName: node - linkType: hard - -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 - languageName: node - linkType: hard - -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: ~2.1.34 - negotiator: 0.6.3 - checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 - languageName: node - linkType: hard - -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.1": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 - languageName: node - linkType: hard - -"acorn@npm:^6.4.1": - version: 6.4.2 - resolution: "acorn@npm:6.4.2" - bin: - acorn: bin/acorn - checksum: 44b07053729db7f44d28343eed32247ed56dc4a6ec6dff2b743141ecd6b861406bbc1c20bf9d4f143ea7dd08add5dc8c290582756539bc03a8db605050ce2fb4 - languageName: node - linkType: hard - -"acorn@npm:^7.1.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - -"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" - bin: - acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c - languageName: node - linkType: hard - -"address@npm:1.1.2": - version: 1.1.2 - resolution: "address@npm:1.1.2" - checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 - languageName: node - linkType: hard - -"address@npm:^1.0.1": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 - languageName: node - linkType: hard - -"adjust-sourcemap-loader@npm:3.0.0": - version: 3.0.0 - resolution: "adjust-sourcemap-loader@npm:3.0.0" - dependencies: - loader-utils: ^2.0.0 - regex-parser: ^2.2.11 - checksum: 5ceabea85219fcafed06f7d1aafb37dc761c6435e4ded2a8c6b01c69844250aa94ef65a4d07210dc7566c2d8b4c9ba8897518db596a550461eed26fbeb76b96f - languageName: node - linkType: hard - -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: ^4.3.4 - checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv-errors@npm:^1.0.0": - version: 1.0.1 - resolution: "ajv-errors@npm:1.0.1" - peerDependencies: - ajv: ">=5.0.0" - checksum: 2c9fc02cf58f9aae5bace61ebd1b162e1ea372ae9db5999243ba5e32a9a78c0d635d29ae085f652c61c941a43af0b2b1acdb255e29d44dc43a6e021085716d8c - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.1.0, ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 - languageName: node - linkType: hard - -"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - 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 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ajv@npm:^8.0.1": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 - languageName: node - linkType: hard - -"alphanum-sort@npm:^1.0.0": - version: 1.0.2 - resolution: "alphanum-sort@npm:1.0.2" - checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 - languageName: node - linkType: hard - -"ansi-colors@npm:^3.0.0": - version: 3.2.4 - resolution: "ansi-colors@npm:3.2.4" - checksum: 026c51880e9f8eb59b112669a87dbea4469939ff94b131606303bbd697438a6691b16b9db3027aa9bf132a244214e83ab1508b998496a34d2aea5b437ac9e62d - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - -"ansi-html@npm:0.0.7, ansi-html@npm:^0.0.7": - version: 0.0.7 - resolution: "ansi-html@npm:0.0.7" - bin: - ansi-html: ./bin/ansi-html - checksum: 9b839ce99650b4c2d83621d67d68622d27e7948b54f7a4386f2218a3997ee4e684e5a6e8d290880c3f3260e8d90c2613c59c7028f04992ad5c8d99d3a0fcc02c - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"anymatch@npm:^2.0.0": - version: 2.0.0 - resolution: "anymatch@npm:2.0.0" - dependencies: - micromatch: ^3.1.4 - normalize-path: ^2.1.1 - checksum: f7bb1929842b4585cdc28edbb385767d499ce7d673f96a8f11348d2b2904592ffffc594fe9229b9a1e9e4dccb9329b7692f9f45e6a11dcefbb76ecdc9ab740f6 - languageName: node - linkType: hard - -"anymatch@npm:^3.0.0, anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"append-field@npm:^1.0.0": - version: 1.0.0 - resolution: "append-field@npm:1.0.0" - checksum: 482ba08acc0ecef00fe7da6bf2f8e48359a9905ee1af525f3120c9260c02e91eedf0579b59d898e8d8455b6c199e340bc0a2fd4b9e02adaa29a8a86c722b37f9 - languageName: node - linkType: hard - -"aproba@npm:^1.1.1": - version: 1.2.0 - resolution: "aproba@npm:1.2.0" - checksum: 0fca141966559d195072ed047658b6e6c4fe92428c385dd38e288eacfc55807e7b4989322f030faff32c0f46bb0bc10f1e0ac32ec22d25315a1e5bbc0ebb76dc - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - -"aria-query@npm:5.1.3": - version: 5.1.3 - resolution: "aria-query@npm:5.1.3" - dependencies: - deep-equal: ^2.0.5 - checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b - languageName: node - linkType: hard - -"aria-query@npm:^4.2.2": - version: 4.2.2 - resolution: "aria-query@npm:4.2.2" - dependencies: - "@babel/runtime": ^7.10.2 - "@babel/runtime-corejs3": ^7.10.2 - checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665 - languageName: node - linkType: hard - -"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: ^2.0.3 - checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 - languageName: node - linkType: hard - -"arity-n@npm:^1.0.4": - version: 1.0.4 - resolution: "arity-n@npm:1.0.4" - checksum: 3d76e16907f7b8a9452690c1efc301d0fbecea457365797eccfbade9b8d1653175b2c38343201bf26fdcbf0bcbb31eab6d912e7c008c6d19042301dc0be80a73 - languageName: node - linkType: hard - -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.1.0": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "array-buffer-byte-length@npm:1.0.1" - dependencies: - call-bind: ^1.0.5 - is-array-buffer: ^3.0.4 - checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e - languageName: node - linkType: hard - -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b - languageName: node - linkType: hard - -"array-flatten@npm:^2.1.0": - version: 2.1.2 - resolution: "array-flatten@npm:2.1.2" - checksum: e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - is-string: ^1.0.7 - checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 - languageName: node - linkType: hard - -"array-union@npm:^1.0.1": - version: 1.0.2 - resolution: "array-union@npm:1.0.2" - dependencies: - array-uniq: ^1.0.1 - checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array-uniq@npm:^1.0.1": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e - languageName: node - linkType: hard - -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 - languageName: node - linkType: hard - -"array.prototype.findlast@npm:^1.2.4": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - 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 - checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.3": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - 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 - checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flat@npm:1.3.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flatmap@npm:1.3.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.6": - version: 1.0.7 - resolution: "array.prototype.reduce@npm:1.0.7" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-array-method-boxes-properly: ^1.0.0 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - is-string: ^1.0.7 - checksum: 90303617bd70c8e9a81ebff041d3e10fad1a97f163699cb015b7c84a3f9e6960d9bb161a30f1d0309d6e476f166af5668c1e24f7add3202213d25f7c7f15475d - languageName: node - linkType: hard - -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.3": - version: 1.1.3 - resolution: "array.prototype.tosorted@npm:1.1.3" - 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 - checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.3": - version: 1.0.3 - resolution: "arraybuffer.prototype.slice@npm:1.0.3" - 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 - checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e - languageName: node - linkType: hard - -"arrify@npm:^2.0.0, arrify@npm:^2.0.1": - version: 2.0.1 - resolution: "arrify@npm:2.0.1" - checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 - languageName: node - linkType: hard - -"asap@npm:^2.0.0, asap@npm:~2.0.6": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - -"asn1.js@npm:^4.10.1": - version: 4.10.1 - resolution: "asn1.js@npm:4.10.1" - dependencies: - bn.js: ^4.0.0 - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 - languageName: node - linkType: hard - -"assert@npm:^1.1.1": - version: 1.5.1 - resolution: "assert@npm:1.5.1" - dependencies: - object.assign: ^4.1.4 - util: ^0.10.4 - checksum: bfc539da97545f9b2989395d6b85be40b70649ce57464f3cc6e61f4975fb097ba0689c386f95bdb4c3ab867931e40a565c9e193ae3c02263a8e92acb17c9dc93 - languageName: node - linkType: hard - -"assertion-error@npm:^1.1.0": - version: 1.1.0 - resolution: "assertion-error@npm:1.1.0" - checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf - languageName: node - linkType: hard - -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c - languageName: node - linkType: hard - -"ast-types-flow@npm:^0.0.8": - version: 0.0.8 - resolution: "ast-types-flow@npm:0.0.8" - checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8 - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - -"async-each@npm:^1.0.1": - version: 1.0.6 - resolution: "async-each@npm:1.0.6" - checksum: d237e8c39348d5f1441edbd3893692912afbacaf83a2ccce8978ebeea804529a8838654b12208fbbc08c8b0411a1248948ee9bf9291ebe1921aabd5b613bc5db - languageName: node - linkType: hard - -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b - languageName: node - linkType: hard - -"async@npm:^2.6.4": - version: 2.6.4 - resolution: "async@npm:2.6.4" - dependencies: - lodash: ^4.17.14 - checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - -"autoprefixer@npm:^9.6.1": - version: 9.8.8 - resolution: "autoprefixer@npm:9.8.8" - dependencies: - browserslist: ^4.12.0 - caniuse-lite: ^1.0.30001109 - normalize-range: ^0.1.2 - num2fraction: ^1.2.2 - picocolors: ^0.2.1 - postcss: ^7.0.32 - postcss-value-parser: ^4.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 8f017672fbac248db0cf4e86aa707d8b148d9abadb842b5cf4c6be306d80fa6a654fadefd17e46213234c1f0947612acce2864f93e903f3e736b183fc1aedc45 - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: ^1.0.0 - checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 - languageName: node - linkType: hard - -"axe-core@npm:=4.7.0": - version: 4.7.0 - resolution: "axe-core@npm:4.7.0" - checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a - languageName: node - linkType: hard - -"axios@npm:^0.27.2": - version: 0.27.2 - resolution: "axios@npm:0.27.2" - dependencies: - follow-redirects: ^1.14.9 - form-data: ^4.0.0 - checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 - languageName: node - linkType: hard - -"axios@npm:^1.6.5": - version: 1.6.8 - resolution: "axios@npm:1.6.8" - dependencies: - follow-redirects: ^1.15.6 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd - languageName: node - linkType: hard - -"axobject-query@npm:^3.2.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" - dependencies: - dequal: ^2.0.3 - checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 - languageName: node - linkType: hard - -"babel-eslint@npm:^10.1.0": - version: 10.1.0 - resolution: "babel-eslint@npm:10.1.0" - dependencies: - "@babel/code-frame": ^7.0.0 - "@babel/parser": ^7.7.0 - "@babel/traverse": ^7.7.0 - "@babel/types": ^7.7.0 - eslint-visitor-keys: ^1.0.0 - resolve: ^1.12.0 - peerDependencies: - eslint: ">= 4.12.1" - checksum: bdc1f62b6b0f9c4d5108c96d835dad0c0066bc45b7c020fcb2d6a08107cf69c9217a99d3438dbd701b2816896190c4283ba04270ed9a8349ee07bd8dafcdc050 - languageName: node - linkType: hard - -"babel-extract-comments@npm:^1.0.0": - version: 1.0.0 - resolution: "babel-extract-comments@npm:1.0.0" - dependencies: - babylon: ^6.18.0 - checksum: 6345c688ccb56a7b750223afb42c1ddc83865b8ac33d7b808b5ad5e3619624563cf8324fbacdcf41cf073a40d935468a05f806e1a7622b0186fa5dad1232a07b - languageName: node - linkType: hard - -"babel-jest@npm:^26.6.0, babel-jest@npm:^26.6.3": - version: 26.6.3 - resolution: "babel-jest@npm:26.6.3" - dependencies: - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/babel__core": ^7.1.7 - babel-plugin-istanbul: ^6.0.0 - babel-preset-jest: ^26.6.2 - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 5917233f0d381e719e195b69b81e46da90293432d10288d79f8f59b8f3f9ac030e14701f3d9f90893fb739481df1d132446f1b983d841e65e2623775db100897 - languageName: node - linkType: hard - -"babel-loader@npm:8.1.0": - version: 8.1.0 - resolution: "babel-loader@npm:8.1.0" - dependencies: - find-cache-dir: ^2.1.0 - loader-utils: ^1.4.0 - mkdirp: ^0.5.3 - pify: ^4.0.1 - schema-utils: ^2.6.5 - peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: fdbcae91cc43366206320a1cbe40d358a64ba2dfaa561fbd690efe0db6256c9d27ab7600f7c84041fbc4c2a6f0279175b1f8d1fa5ed17ec30bbd734da84a1bc0 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.0.0": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - 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 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^26.6.2": - version: 26.6.2 - resolution: "babel-plugin-jest-hoist@npm:26.6.2" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 - "@types/babel__traverse": ^7.0.6 - checksum: abe3732fdf20f96e91cbf788a54d776b30bd7a6054cb002a744d7071c656813e26e77a780dc2a6f6b197472897e220836cd907bda3fadb9d0481126bfd6c3783 - languageName: node - linkType: hard - -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": ^7.12.5 - cosmiconfig: ^7.0.0 - resolve: ^1.19.0 - checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 - languageName: node - linkType: hard - -"babel-plugin-named-asset-import@npm:^0.3.7": - version: 0.3.8 - resolution: "babel-plugin-named-asset-import@npm:0.3.8" - peerDependencies: - "@babel/core": ^7.1.0 - checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.10": - version: 0.4.11 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" - dependencies: - "@babel/compat-data": ^7.22.6 - "@babel/helper-define-polyfill-provider": ^0.6.2 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: f098353ce7c7dde1a1d2710858e01b471e85689110c9e37813e009072347eb8c55d5f84d20d3bf1cab31755f20078ba90f8855fdc4686a9daa826a95ff280bd7 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": - version: 0.10.4 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.1 - core-js-compat: ^3.36.1 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.1": - version: 0.6.2 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.2 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 150233571072b6b3dfe946242da39cba8587b7f908d1c006f7545fc88b0e3c3018d445739beb61e7a75835f0c2751dbe884a94ff9b245ec42369d9267e0e1b3f - languageName: node - linkType: hard - -"babel-plugin-syntax-object-rest-spread@npm:^6.8.0": - version: 6.13.0 - resolution: "babel-plugin-syntax-object-rest-spread@npm:6.13.0" - checksum: 14083f2783c760f5f199160f48e42ad4505fd35fc7cf9c4530812b176705259562b77db6d3ddc5e3cbce9e9b2b61ec9db3065941f0949b68e77cae3e395a6eef - languageName: node - linkType: hard - -"babel-plugin-transform-object-rest-spread@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-plugin-transform-object-rest-spread@npm:6.26.0" - dependencies: - babel-plugin-syntax-object-rest-spread: ^6.8.0 - babel-runtime: ^6.26.0 - checksum: aad583fb0d08073678838f77fa822788b9a0b842ba33e34f8d131246852f7ed31cfb5fdf57644dec952f84dcae862a27dbf3d12ccbee6bdb0aed6e7ed13ca9ba - languageName: node - linkType: hard - -"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": - version: 0.4.24 - resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" - checksum: 54afe56d67f0d118c9da23996f39948e502a152b3f582eb6e8f163fcb76c2c1ea4e0cdd4f9fac5c0ef050eab4fe0a950b0b74aae6237bcc0d31d8fc4cc808d1a - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - 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 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^26.6.2": - version: 26.6.2 - resolution: "babel-preset-jest@npm:26.6.2" - dependencies: - babel-plugin-jest-hoist: ^26.6.2 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 1d9bef3a7ac6751a09d29ceb84be8b1998abd210fafa12223689c744db4f2a63ab90cba7986a71f3154d9aceda9dbeca563178731d21cbaf793b4096ed3a4d01 - languageName: node - linkType: hard - -"babel-preset-react-app@npm:^10.0.0": - version: 10.0.1 - resolution: "babel-preset-react-app@npm:10.0.1" - 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 - checksum: ee66043484e67b8aef2541976388299691478ea00834f3bb14b6b3d5edcd316a5ac95351f6ec084b41ee555cad820d4194280ad38ce51884fedc7e8946a57b74 - languageName: node - linkType: hard - -"babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: ^2.4.0 - regenerator-runtime: ^0.11.0 - checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 - languageName: node - linkType: hard - -"babylon@npm:^6.18.0": - version: 6.18.0 - resolution: "babylon@npm:6.18.0" - bin: - babylon: ./bin/babylon.js - checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d - languageName: node - linkType: hard - -"backend@workspace:src/backend": - version: 0.0.0-use.local - resolution: "backend@workspace:src/backend" - dependencies: - "@prisma/client": ^4.4.0 - "@slack/web-api": ^6.7.2 - "@types/concat-stream": ^2.0.0 - "@types/cookie-parser": ^1.4.3 - "@types/cors": ^2.8.12 - "@types/express": ^4.17.6 - "@types/express-jwt": ^6.0.4 - "@types/jsonwebtoken": ^8.5.9 - "@types/multer": ^1.4.7 - "@types/node": 18.17.1 - "@types/supertest": ^2.0.12 - body-parser: ^1.19.0 - concat-stream: ^2.0.0 - cookie-parser: ^1.4.5 - cors: ^2.8.5 - decimal.js: ^10.4.3 - dotenv: ^16.0.1 - express: ^4.17.1 - express-jwt: ^7.7.5 - express-validator: ^6.14.2 - google-auth-library: ^8.1.1 - googleapis: ^118.0.0 - jsonwebtoken: ^8.5.1 - multer: ^1.4.5-lts.1 - nodemailer: ^6.9.1 - nodemon: ^2.0.16 - prisma: ^4.4.0 - shared: 1.0.0 - supertest: ^6.2.4 - ts-jest: ^26.2.0 - ts-node: ^8.10.1 - typescript: ^4.1.5 - vitest: ^0.32.1 - languageName: unknown - linkType: soft - -"bail@npm:^1.0.0": - version: 1.0.5 - resolution: "bail@npm:1.0.5" - checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - dependencies: - cache-base: ^1.0.1 - class-utils: ^0.3.5 - component-emitter: ^1.2.1 - define-property: ^1.0.0 - isobject: ^3.0.1 - mixin-deep: ^1.2.0 - pascalcase: ^0.1.1 - checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd - languageName: node - linkType: hard - -"batch@npm:0.6.1": - version: 0.6.1 - resolution: "batch@npm:0.6.1" - checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f - languageName: node - linkType: hard - -"bfj@npm:^7.0.2": - version: 7.1.0 - resolution: "bfj@npm:7.1.0" - dependencies: - bluebird: ^3.7.2 - check-types: ^11.2.3 - hoopy: ^0.1.4 - jsonpath: ^1.1.1 - tryer: ^1.0.1 - checksum: 36da9ed36c60f377a3f43bb0433092af7dc40442914b8155a1330ae86b1905640baf57e9c195ab83b36d6518b27cf8ed880adff663aa444c193be149e027d722 - languageName: node - linkType: hard - -"big-integer@npm:^1.6.16": - version: 1.6.52 - resolution: "big-integer@npm:1.6.52" - checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b - languageName: node - linkType: hard - -"big.js@npm:^5.2.2": - version: 5.2.2 - resolution: "big.js@npm:5.2.2" - checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e - languageName: node - linkType: hard - -"bignumber.js@npm:^9.0.0": - version: 9.1.2 - resolution: "bignumber.js@npm:9.1.2" - checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf - languageName: node - linkType: hard - -"binary-extensions@npm:^1.0.0": - version: 1.13.1 - resolution: "binary-extensions@npm:1.13.1" - checksum: ad7747f33c07e94ba443055de130b50c8b8b130a358bca064c580d91769ca6a69c7ac65ca008ff044ed4541d2c6ad45496e1fadbef5218a68770996b6a2194d7 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 - languageName: node - linkType: hard - -"bindings@npm:^1.5.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: 1.0.0 - checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 - languageName: node - linkType: hard - -"bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: ^5.5.0 - inherits: ^2.0.4 - readable-stream: ^3.4.0 - checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 - languageName: node - linkType: hard - -"bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef - languageName: node - linkType: hard - -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 - languageName: node - linkType: hard - -"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 - languageName: node - linkType: hard - -"body-parser@npm:1.20.2, body-parser@npm:^1.19.0": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" - 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 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 - languageName: node - linkType: hard - -"bonjour@npm:^3.5.0": - version: 3.5.0 - resolution: "bonjour@npm:3.5.0" - dependencies: - array-flatten: ^2.1.0 - deep-equal: ^1.0.1 - dns-equal: ^1.0.0 - dns-txt: ^2.0.2 - multicast-dns: ^6.0.1 - multicast-dns-service-types: ^1.1.0 - checksum: 2cfbe9fa861f4507b5ff3853eeae3ef03a231ede2b7363efedd80880ea3c0576f64416f98056c96e429ed68ff38dc4a70c0583d1eb4dab72e491ca44a0f03444 - languageName: node - linkType: hard - -"boolbase@npm:^1.0.0, boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - -"bootstrap@npm:^4.6.0": - version: 4.6.2 - resolution: "bootstrap@npm:4.6.2" - peerDependencies: - jquery: 1.9.1 - 3 - popper.js: ^1.16.1 - checksum: 3f4e7768ff7d618c49d4bf4f02aa54a9bfb679d4eecb0f3854fa4af1a17b9114b147009c435946432cdd1572efffc71d88ec385c55943a12fa66253cde0876b0 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^2.3.1, braces@npm:^2.3.2": - version: 2.3.2 - resolution: "braces@npm:2.3.2" - dependencies: - arr-flatten: ^1.1.0 - array-unique: ^0.3.2 - extend-shallow: ^2.0.1 - fill-range: ^4.0.0 - isobject: ^3.0.1 - repeat-element: ^1.1.2 - snapdragon: ^0.8.1 - snapdragon-node: ^2.0.1 - split-string: ^3.0.2 - to-regex: ^3.0.1 - checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"broadcast-channel@npm:^3.4.1": - version: 3.7.0 - resolution: "broadcast-channel@npm:3.7.0" - dependencies: - "@babel/runtime": ^7.7.2 - detect-node: ^2.1.0 - js-sha3: 0.8.0 - microseconds: 0.2.0 - nano-time: 1.0.0 - oblivious-set: 1.0.0 - rimraf: 3.0.2 - unload: 2.2.0 - checksum: 803794c48dcce7f03aca69797430bd8b1c4cfd70b7de22079cd89567eeffaa126a1db98c7c2d86af8131d9bb41ed367c0fef96dfb446151c927b831572c621fc - languageName: node - linkType: hard - -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - -"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": - version: 1.2.0 - resolution: "browserify-aes@npm:1.2.0" - dependencies: - buffer-xor: ^1.0.3 - cipher-base: ^1.0.0 - create-hash: ^1.1.0 - evp_bytestokey: ^1.0.3 - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 - languageName: node - linkType: hard - -"browserify-cipher@npm:^1.0.0": - version: 1.0.1 - resolution: "browserify-cipher@npm:1.0.1" - dependencies: - browserify-aes: ^1.0.4 - browserify-des: ^1.0.0 - evp_bytestokey: ^1.0.0 - checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 - languageName: node - linkType: hard - -"browserify-des@npm:^1.0.0": - version: 1.0.2 - resolution: "browserify-des@npm:1.0.2" - dependencies: - cipher-base: ^1.0.1 - des.js: ^1.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 - languageName: node - linkType: hard - -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" - dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 - languageName: node - linkType: hard - -"browserify-sign@npm:^4.0.0": - version: 4.2.3 - resolution: "browserify-sign@npm:4.2.3" - dependencies: - bn.js: ^5.2.1 - browserify-rsa: ^4.1.0 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.5 - hash-base: ~3.0 - inherits: ^2.0.4 - parse-asn1: ^5.1.7 - readable-stream: ^2.3.8 - safe-buffer: ^5.2.1 - checksum: 403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b - languageName: node - linkType: hard - -"browserify-zlib@npm:^0.2.0": - version: 0.2.0 - resolution: "browserify-zlib@npm:0.2.0" - dependencies: - pako: ~1.0.5 - checksum: 5cd9d6a665190fedb4a97dfbad8dabc8698d8a507298a03f42c734e96d58ca35d3c7d4085e283440bbca1cd1938cff85031728079bedb3345310c58ab1ec92d6 - languageName: node - linkType: hard - -"browserslist@npm:4.14.2": - version: 4.14.2 - resolution: "browserslist@npm:4.14.2" - dependencies: - caniuse-lite: ^1.0.30001125 - electron-to-chromium: ^1.3.564 - escalade: ^3.0.2 - node-releases: ^1.1.61 - bin: - browserslist: cli.js - checksum: 44b5d7a444b867e1f027923f37a8ed537b4403f8a85a35869904e7d3e4071b37459df08d41ab4d425f5191f3125f1c5a191cbff9070f81f4d311803dc0a2fb0f - languageName: node - linkType: hard - -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" - 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 - checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def - languageName: node - linkType: hard - -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-equal-constant-time@npm:1.0.1": - version: 1.0.1 - resolution: "buffer-equal-constant-time@npm:1.0.1" - checksum: 80bb945f5d782a56f374b292770901065bad21420e34936ecbe949e57724b4a13874f735850dd1cc61f078773c4fb5493a41391e7bda40d1fa388d6bd80daaab - languageName: node - linkType: hard - -"buffer-from@npm:1.x, buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"buffer-indexof@npm:^1.0.0": - version: 1.1.1 - resolution: "buffer-indexof@npm:1.1.1" - checksum: 0967abc2981a8e7d776324c6b84811e4d84a7ead89b54a3bb8791437f0c4751afd060406b06db90a436f1cf771867331b5ecf5c4aca95b4ccb9f6cb146c22ebc - languageName: node - linkType: hard - -"buffer-xor@npm:^1.0.3": - version: 1.0.3 - resolution: "buffer-xor@npm:1.0.3" - checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a - languageName: node - linkType: hard - -"buffer@npm:^4.3.0": - version: 4.9.2 - resolution: "buffer@npm:4.9.2" - dependencies: - base64-js: ^1.0.2 - ieee754: ^1.1.4 - isarray: ^1.0.0 - checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.1.13 - checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 - languageName: node - linkType: hard - -"builtin-modules@npm:^3.1.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d - languageName: node - linkType: hard - -"builtin-status-codes@npm:^3.0.0": - version: 3.0.0 - resolution: "builtin-status-codes@npm:3.0.0" - checksum: 1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 - languageName: node - linkType: hard - -"bundle-require@npm:^3.0.4": - version: 3.1.2 - resolution: "bundle-require@npm:3.1.2" - dependencies: - load-tsconfig: ^0.2.0 - peerDependencies: - esbuild: ">=0.13" - checksum: 71f8cb81bcde97825317b0e516b7e479ec70bd2370f55a8f02795c0df6d541e6562c4b9ec0427cc7b5b835103a8dcf306da04e3846fa468146358471490fcf81 - languageName: node - linkType: hard - -"busboy@npm:^1.0.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" - dependencies: - streamsearch: ^1.1.0 - checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e - languageName: node - linkType: hard - -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 - languageName: node - linkType: hard - -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a - languageName: node - linkType: hard - -"cacache@npm:^12.0.2": - version: 12.0.4 - resolution: "cacache@npm:12.0.4" - dependencies: - bluebird: ^3.5.5 - chownr: ^1.1.1 - figgy-pudding: ^3.5.1 - glob: ^7.1.4 - graceful-fs: ^4.1.15 - infer-owner: ^1.0.3 - lru-cache: ^5.1.1 - mississippi: ^3.0.0 - mkdirp: ^0.5.1 - move-concurrently: ^1.0.1 - promise-inflight: ^1.0.1 - rimraf: ^2.6.3 - ssri: ^6.0.1 - unique-filename: ^1.1.1 - y18n: ^4.0.0 - checksum: c88a72f36939b2523533946ffb27828443db5bf5995d761b35ae17af1eb6c8e20ac55b00b74c2ca900b2e1e917f0afba6847bf8cc16bee05ccca6aa150e0830c - languageName: node - linkType: hard - -"cacache@npm:^15.0.5": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" - dependencies: - "@npmcli/fs": ^1.0.0 - "@npmcli/move-file": ^1.0.1 - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - glob: ^7.1.4 - infer-owner: ^1.0.4 - lru-cache: ^6.0.0 - minipass: ^3.1.1 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.2 - mkdirp: ^1.0.3 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.0.2 - unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 - languageName: node - linkType: hard - -"cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^10.0.1 - minipass: ^7.0.3 - minipass-collect: ^2.0.1 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b - languageName: node - linkType: hard - -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - dependencies: - collection-visit: ^1.0.0 - component-emitter: ^1.2.1 - get-value: ^2.0.6 - has-value: ^1.0.0 - isobject: ^3.0.1 - set-value: ^2.0.0 - to-object-path: ^0.3.0 - union-value: ^1.0.0 - unset-value: ^1.0.0 - checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - 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 - checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 - languageName: node - linkType: hard - -"caller-callsite@npm:^2.0.0": - version: 2.0.0 - resolution: "caller-callsite@npm:2.0.0" - dependencies: - callsites: ^2.0.0 - checksum: b685e9d126d9247b320cfdfeb3bc8da0c4be28d8fb98c471a96bc51aab3130099898a2fe3bf0308f0fe048d64c37d6d09f563958b9afce1a1e5e63d879c128a2 - languageName: node - linkType: hard - -"caller-path@npm:^2.0.0": - version: 2.0.0 - resolution: "caller-path@npm:2.0.0" - dependencies: - caller-callsite: ^2.0.0 - checksum: 3e12ccd0c71ec10a057aac69e3ec175b721ca858c640df021ef0d25999e22f7c1d864934b596b7d47038e9b56b7ec315add042abbd15caac882998b50102fb12 - languageName: node - linkType: hard - -"callsites@npm:^2.0.0": - version: 2.0.0 - resolution: "callsites@npm:2.0.0" - checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"camel-case@npm:^4.1.1, camel-case@npm:^4.1.2": - version: 4.1.2 - resolution: "camel-case@npm:4.1.2" - dependencies: - pascal-case: ^3.1.2 - tslib: ^2.0.3 - checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 - languageName: node - linkType: hard - -"camelcase@npm:5.3.1, camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.0.0, camelcase@npm:^6.1.0, camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"caniuse-api@npm:^3.0.0": - version: 3.0.0 - resolution: "caniuse-api@npm:3.0.0" - dependencies: - browserslist: ^4.0.0 - caniuse-lite: ^1.0.0 - lodash.memoize: ^4.1.2 - lodash.uniq: ^4.5.0 - checksum: db2a229383b20d0529b6b589dde99d7b6cb56ba371366f58cbbfa2929c9f42c01f873e2b6ef641d4eda9f0b4118de77dbb2805814670bdad4234bf08e720b0b4 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001612 - resolution: "caniuse-lite@npm:1.0.30001612" - checksum: 2b6ab6a19c72bdf8dccac824944e828a2a1fae52c6dfeb2d64ccecfd60d0466d2e5a392e996da2150d92850188a5034666dceed34a38d978177f6934e0bf106d - languageName: node - linkType: hard - -"capital-case@npm:^1.0.4": - version: 1.0.4 - resolution: "capital-case@npm:1.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 - languageName: node - linkType: hard - -"capture-exit@npm:^2.0.0": - version: 2.0.0 - resolution: "capture-exit@npm:2.0.0" - dependencies: - rsvp: ^4.8.4 - checksum: 0b9f10daca09e521da9599f34c8e7af14ad879c336e2bdeb19955b375398ae1c5bcc91ac9f2429944343057ee9ed028b1b2fb28816c384e0e55d70c439b226f4 - languageName: node - linkType: hard - -"case-sensitive-paths-webpack-plugin@npm:2.3.0": - version: 2.3.0 - resolution: "case-sensitive-paths-webpack-plugin@npm:2.3.0" - checksum: 2fa78f7a495d7e73e66d1f528eac5abde65df797c9487624eeae9815a409ba6d584d8fbfe8b6c89157292fbb08d0ee6cc3418fe7f8c75b83fb2c8e29c30f205d - languageName: node - linkType: hard - -"chai@npm:^4.3.7": - version: 4.4.1 - resolution: "chai@npm:4.4.1" - dependencies: - assertion-error: ^1.1.0 - check-error: ^1.0.3 - deep-eql: ^4.1.3 - get-func-name: ^2.0.2 - loupe: ^2.3.6 - pathval: ^1.1.1 - type-detect: ^4.0.8 - checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e - languageName: node - linkType: hard - -"chalk@npm:2.4.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"chalk@npm:4.1.1": - version: 4.1.1 - resolution: "chalk@npm:4.1.1" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: 036e973e665ba1a32c975e291d5f3d549bceeb7b1b983320d4598fb75d70fe20c5db5d62971ec0fe76cdbce83985a00ee42372416abfc3a5584465005a7855ed - languageName: node - linkType: hard - -"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: ^2.2.1 - escape-string-regexp: ^1.0.2 - has-ansi: ^2.0.0 - strip-ansi: ^3.0.0 - supports-color: ^2.0.0 - checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd - languageName: node - linkType: hard - -"chalk@npm:^3.0.0": - version: 3.0.0 - resolution: "chalk@npm:3.0.0" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 - languageName: node - linkType: hard - -"change-case@npm:^4.1.2": - version: 4.1.2 - resolution: "change-case@npm:4.1.2" - dependencies: - camel-case: ^4.1.2 - capital-case: ^1.0.4 - constant-case: ^3.0.4 - dot-case: ^3.0.4 - header-case: ^2.0.4 - no-case: ^3.0.4 - param-case: ^3.0.4 - pascal-case: ^3.1.2 - path-case: ^3.0.4 - sentence-case: ^3.0.4 - snake-case: ^3.0.4 - tslib: ^2.0.3 - checksum: e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - -"character-entities-legacy@npm:^1.0.0": - version: 1.1.4 - resolution: "character-entities-legacy@npm:1.1.4" - checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 - languageName: node - linkType: hard - -"character-entities@npm:^1.0.0": - version: 1.2.4 - resolution: "character-entities@npm:1.2.4" - checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d - languageName: node - linkType: hard - -"character-reference-invalid@npm:^1.0.0": - version: 1.1.4 - resolution: "character-reference-invalid@npm:1.1.4" - checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d - languageName: node - linkType: hard - -"check-error@npm:^1.0.3": - version: 1.0.3 - resolution: "check-error@npm:1.0.3" - dependencies: - get-func-name: ^2.0.2 - checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 - languageName: node - linkType: hard - -"check-types@npm:^11.2.3": - version: 11.2.3 - resolution: "check-types@npm:11.2.3" - checksum: f99ff09ae65e63cfcfa40a1275c0a70d8c43ffbf9ac35095f3bf030cc70361c92e075a9975a1144329e50b4fe4620be6bedb4568c18abc96071a3e23aed3ed8e - languageName: node - linkType: hard - -"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d - languageName: node - linkType: hard - -"chokidar@npm:^2.1.8": - version: 2.1.8 - resolution: "chokidar@npm:2.1.8" - dependencies: - anymatch: ^2.0.0 - async-each: ^1.0.1 - braces: ^2.3.2 - fsevents: ^1.2.7 - glob-parent: ^3.1.0 - inherits: ^2.0.3 - is-binary-path: ^1.0.0 - is-glob: ^4.0.0 - normalize-path: ^3.0.0 - path-is-absolute: ^1.0.0 - readdirp: ^2.2.1 - upath: ^1.1.1 - dependenciesMeta: - fsevents: - optional: true - checksum: 0c43e89cbf0268ef1e1f41ce8ec5233c7ba022c6f3282c2ef6530e351d42396d389a1148c5a040f291cf1f4083a4c6b2f51dad3f31c726442ea9a337de316bcf - languageName: node - linkType: hard - -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 - languageName: node - linkType: hard - -"ci-info@npm:^2.0.0": - version: 2.0.0 - resolution: "ci-info@npm:2.0.0" - checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - -"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^0.6.0": - version: 0.6.0 - resolution: "cjs-module-lexer@npm:0.6.0" - checksum: 445b039607efd74561d7db8d0867031c8b6a69f25e83fdd861b0fa1fbc11f12de057ba1db80637f3c9016774354092af5325eebb90505d65ccc5389cae09d1fd - languageName: node - linkType: hard - -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" - dependencies: - arr-union: ^3.1.0 - define-property: ^0.2.5 - isobject: ^3.0.0 - static-extend: ^0.1.1 - checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 - languageName: node - linkType: hard - -"classnames@npm:^2.3.1": - version: 2.5.1 - resolution: "classnames@npm:2.5.1" - checksum: da424a8a6f3a96a2e87d01a432ba19315503294ac7e025f9fece656db6b6a0f7b5003bb1fbb51cbb0d9624d964f1b9bb35a51c73af9b2434c7b292c42231c1e5 - languageName: node - linkType: hard - -"clean-css@npm:^4.2.3": - version: 4.2.4 - resolution: "clean-css@npm:4.2.4" - dependencies: - source-map: ~0.6.0 - checksum: 045ff6fcf4b5c76a084b24e1633e0c78a13b24080338fc8544565a9751559aa32ff4ee5886d9e52c18a644a6ff119bd8e37bc58e574377c05382a1fb7dbe39f8 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: ^3.1.0 - checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.9.2 - resolution: "cli-spinners@npm:2.9.2" - checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 - languageName: node - linkType: hard - -"cliui@npm:^5.0.0": - version: 5.0.0 - resolution: "cliui@npm:5.0.0" - dependencies: - string-width: ^3.1.0 - strip-ansi: ^5.2.0 - wrap-ansi: ^5.1.0 - checksum: 0bb8779efe299b8f3002a73619eaa8add4081eb8d1c17bc4fedc6240557fb4eacdc08fe87c39b002eacb6cfc117ce736b362dbfd8bf28d90da800e010ee97df4 - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - -"clsx@npm:^1.2.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 - languageName: node - linkType: hard - -"clsx@npm:^2.0.0, clsx@npm:^2.1.0": - version: 2.1.1 - resolution: "clsx@npm:2.1.1" - checksum: acd3e1ab9d8a433ecb3cc2f6a05ab95fe50b4a3cfc5ba47abb6cbf3754585fcb87b84e90c822a1f256c4198e3b41c7f6c391577ffc8678ad587fc0976b24fd57 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"coa@npm:^2.0.2": - version: 2.0.2 - resolution: "coa@npm:2.0.2" - dependencies: - "@types/q": ^1.5.1 - chalk: ^2.4.1 - q: ^1.1.2 - checksum: 44736914aac2160d3d840ed64432a90a3bb72285a0cd6a688eb5cabdf15d15a85eee0915b3f6f2a4659d5075817b1cb577340d3c9cbb47d636d59ab69f819552 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da - languageName: node - linkType: hard - -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: ^1.0.0 - object-visit: ^1.0.0 - checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-string@npm:^1.6.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - -"color@npm:^3.0.0": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"comma-separated-tokens@npm:^1.0.0": - version: 1.0.8 - resolution: "comma-separated-tokens@npm:1.0.8" - checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d - languageName: node - linkType: hard - -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^4.1.1": - version: 4.1.1 - resolution: "commander@npm:4.1.1" - checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 - languageName: node - linkType: hard - -"common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff - languageName: node - linkType: hard - -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d - languageName: node - linkType: hard - -"compose-function@npm:3.0.3": - version: 3.0.3 - resolution: "compose-function@npm:3.0.3" - dependencies: - arity-n: ^1.0.4 - checksum: 9f17d431e3ee4797c844f2870e13494079882ac3dbc54c143b7d99967b371908e0ce7ceb71c6aed61e2ecddbcd7bb437d91428a3d0e6569aee17a87fcbc7918f - languageName: node - linkType: hard - -"compressible@npm:~2.0.16": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: ">= 1.43.0 < 2" - checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 - languageName: node - linkType: hard - -"compression@npm:^1.7.4": - version: 1.7.4 - resolution: "compression@npm:1.7.4" - dependencies: - accepts: ~1.3.5 - bytes: 3.0.0 - compressible: ~2.0.16 - debug: 2.6.9 - on-headers: ~1.0.2 - safe-buffer: 5.1.2 - vary: ~1.1.2 - checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"concat-stream@npm:^1.5.0, concat-stream@npm:^1.5.2": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^2.2.2 - typedarray: ^0.0.6 - checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 - languageName: node - linkType: hard - -"concat-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "concat-stream@npm:2.0.0" - dependencies: - buffer-from: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^3.0.2 - typedarray: ^0.0.6 - checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 - languageName: node - linkType: hard - -"concurrently@npm:^5.2.0": - version: 5.3.0 - resolution: "concurrently@npm:5.3.0" - dependencies: - chalk: ^2.4.2 - date-fns: ^2.0.1 - lodash: ^4.17.15 - read-pkg: ^4.0.1 - rxjs: ^6.5.2 - spawn-command: ^0.0.2-1 - supports-color: ^6.1.0 - tree-kill: ^1.2.2 - yargs: ^13.3.0 - bin: - concurrently: bin/concurrently.js - checksum: e12f32eab48e50fc5b7752dc43db7c78f5b553efc625d3b8741c3dd3088ba0050cb8e506f008c8a5fe30d7980849639d12b359a5aea88fd16707a0161b05babb - languageName: node - linkType: hard - -"confbox@npm:^0.1.7": - version: 0.1.7 - resolution: "confbox@npm:0.1.7" - checksum: bde836c26f5154a348b0c0a757f8a0138929e5737e0553be3c4f07a056abca618b861aa63ac3b22d344789b56be99a1382928933e08cd500df00213bf4d8fb43 - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - -"connect-history-api-fallback@npm:^1.6.0": - version: 1.6.0 - resolution: "connect-history-api-fallback@npm:1.6.0" - checksum: 804ca2be28c999032ecd37a9f71405e5d7b7a4b3defcebbe41077bb8c5a0a150d7b59f51dcc33b2de30bc7e217a31d10f8cfad27e8e74c2fc7655eeba82d6e7e - languageName: node - linkType: hard - -"console-browserify@npm:^1.1.0": - version: 1.2.0 - resolution: "console-browserify@npm:1.2.0" - checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 - languageName: node - linkType: hard - -"constant-case@npm:^3.0.4": - version: 3.0.4 - resolution: "constant-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case: ^2.0.2 - checksum: 6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 - languageName: node - linkType: hard - -"constants-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "constants-browserify@npm:1.0.0" - checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f - languageName: node - linkType: hard - -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" - dependencies: - safe-buffer: 5.2.1 - checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 - languageName: node - linkType: hard - -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 - languageName: node - linkType: hard - -"convert-source-map@npm:1.7.0": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 - languageName: node - linkType: hard - -"convert-source-map@npm:^0.3.3": - version: 0.3.5 - resolution: "convert-source-map@npm:0.3.5" - checksum: 33b209aa8f33bcaa9a22f2dbf6bfb71f4a429d8e948068d61b6087304e3194c30016d1e02e842184e653b74442c7e2dd2e7db97532b67f556aded3d8b4377a2c - languageName: node - linkType: hard - -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - -"cookie-parser@npm:^1.4.5": - version: 1.4.6 - resolution: "cookie-parser@npm:1.4.6" - dependencies: - cookie: 0.4.1 - cookie-signature: 1.0.6 - checksum: 1e5a63aa82e8eb4e02d2977c6902983dee87b02e87ec5ec43ac3cb1e72da354003716570cd5190c0ad9e8a454c9d3237f4ad6e2f16d0902205a96a1c72b77ba5 - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a - languageName: node - linkType: hard - -"cookie@npm:0.4.1": - version: 0.4.1 - resolution: "cookie@npm:0.4.1" - checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 - languageName: node - linkType: hard - -"cookie@npm:0.6.0": - version: 0.6.0 - resolution: "cookie@npm:0.6.0" - checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 - languageName: node - linkType: hard - -"cookie@npm:^0.4.2": - version: 0.4.2 - resolution: "cookie@npm:0.4.2" - checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b - languageName: node - linkType: hard - -"cookiejar@npm:^2.1.4": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b - languageName: node - linkType: hard - -"copy-concurrently@npm:^1.0.0": - version: 1.0.5 - resolution: "copy-concurrently@npm:1.0.5" - dependencies: - aproba: ^1.1.1 - fs-write-stream-atomic: ^1.0.8 - iferr: ^0.1.5 - mkdirp: ^0.5.1 - rimraf: ^2.5.4 - run-queue: ^1.0.0 - checksum: 63c169f582e09445260988f697b2d07793d439dfc31e97c8999707bd188dd94d1c7f2ca3533c7786fb75f03a3f2f54ad1ee08055f95f61bb8d2e862498c1d460 - languageName: node - linkType: hard - -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b - languageName: node - linkType: hard - -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": - version: 3.37.0 - resolution: "core-js-compat@npm:3.37.0" - dependencies: - browserslist: ^4.23.0 - checksum: cab5078e98625f889fd9bbbb19e84cb408f31c87e68302d380db0d26ae8e35c1b38cde084358ff345d4aa461af5f3c60d8a913a5b30bff3a83b4b7859374db36 - languageName: node - linkType: hard - -"core-js-pure@npm:^3.30.2": - version: 3.37.0 - resolution: "core-js-pure@npm:3.37.0" - checksum: 206797d88046f4f5a62ecb9a7158bc6ba38127db2239bcbd1e85b2c8cf3cfb9bb3bbc6a312ecf0f87702f87659959d10625aeac74de6336a9303866f7010d364 - languageName: node - linkType: hard - -"core-js@npm:^2.4.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 - languageName: node - linkType: hard - -"core-js@npm:^3.6.5": - version: 3.37.0 - resolution: "core-js@npm:3.37.0" - checksum: 212c3e9b3fc277dbb63739ef58a61c5709ccd0b36f09c3ce6946aa91fa180c60f57f976d4a5fdb9cda0c6cb55417379ba5a008fc3a1384ec94ec8ec61826469d - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - -"cors@npm:^2.8.5": - version: 2.8.5 - resolution: "cors@npm:2.8.5" - dependencies: - object-assign: ^4 - vary: ^1 - checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 - languageName: node - linkType: hard - -"cosmiconfig@npm:^5.0.0": - version: 5.2.1 - resolution: "cosmiconfig@npm:5.2.1" - dependencies: - import-fresh: ^2.0.0 - is-directory: ^0.3.1 - js-yaml: ^3.13.1 - parse-json: ^4.0.0 - checksum: 8b6f1d3c8a5ffdf663a952f17af0761adf210b7a5933d0fe8988f3ca3a1f0e1e5cbbb74d5b419c15933dd2fdcaec31dbc5cc85cb8259a822342b93b529eff89c - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" - 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 - checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f - languageName: node - linkType: hard - -"create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" - dependencies: - bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b - languageName: node - linkType: hard - -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": - version: 1.2.0 - resolution: "create-hash@npm:1.2.0" - dependencies: - cipher-base: ^1.0.1 - inherits: ^2.0.1 - md5.js: ^1.3.4 - ripemd160: ^2.0.1 - sha.js: ^2.4.0 - checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 - languageName: node - linkType: hard - -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": - version: 1.1.7 - resolution: "create-hmac@npm:1.1.7" - dependencies: - cipher-base: ^1.0.3 - create-hash: ^1.1.0 - inherits: ^2.0.1 - ripemd160: ^2.0.0 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"cross-spawn@npm:^6.0.0": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" - dependencies: - nice-try: ^1.0.4 - path-key: ^2.0.1 - semver: ^5.5.0 - shebang-command: ^1.2.0 - which: ^1.2.9 - checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 - languageName: node - linkType: hard - -"crypto-browserify@npm:^3.11.0": - version: 3.12.0 - resolution: "crypto-browserify@npm:3.12.0" - dependencies: - browserify-cipher: ^1.0.0 - browserify-sign: ^4.0.0 - create-ecdh: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.0 - diffie-hellman: ^5.0.0 - inherits: ^2.0.1 - pbkdf2: ^3.0.3 - public-encrypt: ^4.0.0 - randombytes: ^2.0.0 - randomfill: ^1.0.3 - checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 - languageName: node - linkType: hard - -"crypto-random-string@npm:^1.0.0": - version: 1.0.0 - resolution: "crypto-random-string@npm:1.0.0" - checksum: 6fc61a46c18547b49a93da24f4559c4a1c859f4ee730ecc9533c1ba89fa2a9e9d81f390c2789467afbbd0d1c55a6e96a71e4716b6cd3e77736ed5fced7a2df9a - languageName: node - linkType: hard - -"css-blank-pseudo@npm:^0.1.4": - version: 0.1.4 - resolution: "css-blank-pseudo@npm:0.1.4" - dependencies: - postcss: ^7.0.5 - bin: - css-blank-pseudo: cli.js - checksum: f995a6ca5dbb867af4b30c3dc872a8f0b27ad120442c34796eef7f9c4dcf014249522aaa0a2da3c101c4afa5d7d376436bb978ae1b2c02deddec283fad30c998 - languageName: node - linkType: hard - -"css-color-names@npm:0.0.4, css-color-names@npm:^0.0.4": - version: 0.0.4 - resolution: "css-color-names@npm:0.0.4" - checksum: 9c6106320430a9da3a13daab8d8b4def39113edbfb68042444585d9a214af5fd5cb384b9be45124bc75f88261d461b517e00e278f4d2e0ab5a619b182f9f0e2d - languageName: node - linkType: hard - -"css-declaration-sorter@npm:^4.0.1": - version: 4.0.1 - resolution: "css-declaration-sorter@npm:4.0.1" - dependencies: - postcss: ^7.0.1 - timsort: ^0.3.0 - checksum: c38c00245c6706bd1127a6a2807bbdea3a2621c1f4e4bcb4710f6736c15c4ec414e02213adeab2171623351616090cb96374f683b90ec2aad18903066c4526d7 - languageName: node - linkType: hard - -"css-has-pseudo@npm:^0.10.0": - version: 0.10.0 - resolution: "css-has-pseudo@npm:0.10.0" - dependencies: - postcss: ^7.0.6 - postcss-selector-parser: ^5.0.0-rc.4 - bin: - css-has-pseudo: cli.js - checksum: 88d891ba18f821e8a94d821ecdd723c606019462664c7d86e7d8731622bd26f9d55582e494bcc2a62f9399cc7b89049ddc8a9d1e8f1bf1a133c2427739d2d334 - languageName: node - linkType: hard - -"css-loader@npm:4.3.0": - version: 4.3.0 - resolution: "css-loader@npm:4.3.0" - dependencies: - camelcase: ^6.0.0 - cssesc: ^3.0.0 - icss-utils: ^4.1.1 - loader-utils: ^2.0.0 - postcss: ^7.0.32 - postcss-modules-extract-imports: ^2.0.0 - postcss-modules-local-by-default: ^3.0.3 - postcss-modules-scope: ^2.2.0 - postcss-modules-values: ^3.0.0 - postcss-value-parser: ^4.1.0 - schema-utils: ^2.7.1 - semver: ^7.3.2 - peerDependencies: - webpack: ^4.27.0 || ^5.0.0 - checksum: 697a8838f0975f86c634e7a920572604879a9738128fcc01e5393fae5ac9a7a1a925c0d14ebb6ed67fa7e14bd17849eec152a99e3299cc92f422f6b0cd4eff73 - languageName: node - linkType: hard - -"css-modules-loader-core@npm:^1.1.0": - version: 1.1.0 - resolution: "css-modules-loader-core@npm:1.1.0" - dependencies: - icss-replace-symbols: 1.1.0 - postcss: 6.0.1 - postcss-modules-extract-imports: 1.1.0 - postcss-modules-local-by-default: 1.2.0 - postcss-modules-scope: 1.1.0 - postcss-modules-values: 1.3.0 - checksum: e2d513cee6a407b46806e50b3eec9d9034355b6ee14f2f7303353ab0853b8dba9600cffc83ec46cebd3efd68fe2b2aa31808a1c906d043f1c405568fd484eaf5 - languageName: node - linkType: hard - -"css-prefers-color-scheme@npm:^3.1.1": - version: 3.1.1 - resolution: "css-prefers-color-scheme@npm:3.1.1" - dependencies: - postcss: ^7.0.5 - bin: - css-prefers-color-scheme: cli.js - checksum: ba69a86b006818ffe3548bcbeb5e4e8139b8b6cf45815a3b3dddd12cd9acf3d8ac3b94e63fe0abd34e0683cf43ed8c2344e3bd472bbf02a6eb40c7bbf565d587 - languageName: node - linkType: hard - -"css-select-base-adapter@npm:^0.1.1": - version: 0.1.1 - resolution: "css-select-base-adapter@npm:0.1.1" - checksum: c107e9cfa53a23427e4537451a67358375e656baa3322345a982d3c2751fb3904002aae7e5d72386c59f766fe6b109d1ffb43eeab1c16f069f7a3828eb17851c - languageName: node - linkType: hard - -"css-select@npm:^2.0.0": - version: 2.1.0 - resolution: "css-select@npm:2.1.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^3.2.1 - domutils: ^1.7.0 - nth-check: ^1.0.2 - checksum: 0c4099910f2411e2a9103cf92ea6a4ad738b57da75bcf73d39ef2c14a00ef36e5f16cb863211c901320618b24ace74da6333442d82995cafd5040077307de462 - languageName: node - linkType: hard - -"css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^6.0.1 - domhandler: ^4.3.1 - domutils: ^2.8.0 - nth-check: ^2.0.1 - checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 - languageName: node - linkType: hard - -"css-selector-tokenizer@npm:^0.7.0": - version: 0.7.3 - resolution: "css-selector-tokenizer@npm:0.7.3" - dependencies: - cssesc: ^3.0.0 - fastparse: ^1.1.2 - checksum: 92560a9616a8bc073b88c678aa04f22c599ac23c5f8587e60f4861069e2d5aeb37b722af581ae3c5fbce453bed7a893d9c3e06830912e6d28badc3b8b99acd24 - languageName: node - linkType: hard - -"css-tree@npm:1.0.0-alpha.37": - version: 1.0.0-alpha.37 - resolution: "css-tree@npm:1.0.0-alpha.37" - dependencies: - mdn-data: 2.0.4 - source-map: ^0.6.1 - checksum: 0e419a1388ec0fbbe92885fba4a557f9fb0e077a2a1fad629b7245bbf7b4ef5df49e6877401b952b09b9057ffe1a3dba74f6fdfbf7b2223a5a35bce27ff2307d - languageName: node - linkType: hard - -"css-tree@npm:^1.1.2": - version: 1.1.3 - resolution: "css-tree@npm:1.1.3" - dependencies: - mdn-data: 2.0.14 - source-map: ^0.6.1 - checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f - languageName: node - linkType: hard - -"css-what@npm:^3.2.1": - version: 3.4.2 - resolution: "css-what@npm:3.4.2" - checksum: 26bb5ec3ae718393d418016365c849fa14bd0de408c735dea3ddf58146b6cc54f3b336fb4afd31d95c06ca79583acbcdfec7ee93d31ff5c1a697df135b38dfeb - languageName: node - linkType: hard - -"css-what@npm:^6.0.1": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe - languageName: node - linkType: hard - -"css.escape@npm:^1.5.1": - version: 1.5.1 - resolution: "css.escape@npm:1.5.1" - checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 - languageName: node - linkType: hard - -"css@npm:^2.0.0": - version: 2.2.4 - resolution: "css@npm:2.2.4" - dependencies: - inherits: ^2.0.3 - source-map: ^0.6.1 - source-map-resolve: ^0.5.2 - urix: ^0.1.0 - checksum: a35d483c5ccc04bcde3b1e7393d58ad3eee1dd6956df0f152de38e46a17c0ee193c30eec6b1e59831ad0e74599385732000e95987fcc9cb2b16c6d951bae49e1 - languageName: node - linkType: hard - -"cssdb@npm:^4.4.0": - version: 4.4.0 - resolution: "cssdb@npm:4.4.0" - checksum: 521dd2135da1ab93612a4161eb1024cfc7b155a35d95f9867d328cc88ad57fdd959aa88ea8f4e6cea3a82bca91b76570dc1abb18bfd902c6889973956a03e497 - languageName: node - linkType: hard - -"cssesc@npm:^2.0.0": - version: 2.0.0 - resolution: "cssesc@npm:2.0.0" - bin: - cssesc: bin/cssesc - checksum: 5e50886c2aca3f492fe808dbd146d30eb1c6f31fbe6093979a8376e39d171d989279199f6f3f1a42464109e082e0e42bc33eeff9467fb69bf346f5ba5853c3c6 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 - languageName: node - linkType: hard - -"cssnano-preset-default@npm:^4.0.8": - version: 4.0.8 - resolution: "cssnano-preset-default@npm:4.0.8" - dependencies: - css-declaration-sorter: ^4.0.1 - cssnano-util-raw-cache: ^4.0.1 - postcss: ^7.0.0 - postcss-calc: ^7.0.1 - postcss-colormin: ^4.0.3 - postcss-convert-values: ^4.0.1 - postcss-discard-comments: ^4.0.2 - postcss-discard-duplicates: ^4.0.2 - postcss-discard-empty: ^4.0.1 - postcss-discard-overridden: ^4.0.1 - postcss-merge-longhand: ^4.0.11 - postcss-merge-rules: ^4.0.3 - postcss-minify-font-values: ^4.0.2 - postcss-minify-gradients: ^4.0.2 - postcss-minify-params: ^4.0.2 - postcss-minify-selectors: ^4.0.2 - postcss-normalize-charset: ^4.0.1 - postcss-normalize-display-values: ^4.0.2 - postcss-normalize-positions: ^4.0.2 - postcss-normalize-repeat-style: ^4.0.2 - postcss-normalize-string: ^4.0.2 - postcss-normalize-timing-functions: ^4.0.2 - postcss-normalize-unicode: ^4.0.1 - postcss-normalize-url: ^4.0.1 - postcss-normalize-whitespace: ^4.0.2 - postcss-ordered-values: ^4.1.2 - postcss-reduce-initial: ^4.0.3 - postcss-reduce-transforms: ^4.0.2 - postcss-svgo: ^4.0.3 - postcss-unique-selectors: ^4.0.1 - checksum: eb32c9fdd8bd4683e33d62284b6a9c4eb705b745235f4bb51a5571e1eb6738f636958fc9a6218fb51de43e0e2f74386a705b4c7ff2d1dcc611647953ba6ce159 - languageName: node - linkType: hard - -"cssnano-util-get-arguments@npm:^4.0.0": - version: 4.0.0 - resolution: "cssnano-util-get-arguments@npm:4.0.0" - checksum: 34222a1e848d573b74892eda7d7560c5422efa56f87d2b5242f9791593c6aa4ddc9d55e8e1708fb2f0d6f87c456314b78d93d3eec97d946ff756c63b09b72222 - languageName: node - linkType: hard - -"cssnano-util-get-match@npm:^4.0.0": - version: 4.0.0 - resolution: "cssnano-util-get-match@npm:4.0.0" - checksum: 56eacea0eb3d923359c9714ab25edde5eb4859e495954615d5529e81cdfabc2d41b57055c7f6a2f08e7d89df3a2794ef659306b539505d7f4e7202b897396fc2 - languageName: node - linkType: hard - -"cssnano-util-raw-cache@npm:^4.0.1": - version: 4.0.1 - resolution: "cssnano-util-raw-cache@npm:4.0.1" - dependencies: - postcss: ^7.0.0 - checksum: 66a23e5e5255ff65d0f49f135d0ddfdb96433aeceb2708a31e4b4a652110755f103f6c91e0f439c8f3052818eb2b04ebf6334680a810296290e2c3467c14202b - languageName: node - linkType: hard - -"cssnano-util-same-parent@npm:^4.0.0": - version: 4.0.1 - resolution: "cssnano-util-same-parent@npm:4.0.1" - checksum: 97c6b3f670ee9d1d6342b6a1daf9867d5c08644365dc146bd76defd356069112148e382ca86fc3e6c55adf0687974f03535bba34df95efb468b266d2319c7b66 - languageName: node - linkType: hard - -"cssnano@npm:^4.1.10": - version: 4.1.11 - resolution: "cssnano@npm:4.1.11" - dependencies: - cosmiconfig: ^5.0.0 - cssnano-preset-default: ^4.0.8 - is-resolvable: ^1.0.0 - postcss: ^7.0.0 - checksum: 2453fbe9f9f9e2ffe87dc5c718578f1b801fc7b82eaad12f5564c84bb0faf1774ea52e01874ecd29d1782aa7d0d84f0dbc95001eed9866ebd9bc523638999c9b - languageName: node - linkType: hard - -"csso@npm:^4.0.2": - version: 4.2.0 - resolution: "csso@npm:4.2.0" - dependencies: - css-tree: ^1.1.2 - checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 - languageName: node - linkType: hard - -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2, csstype@npm:^3.1.3": - version: 3.1.3 - resolution: "csstype@npm:3.1.3" - checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 - languageName: node - linkType: hard - -"customize-cra@npm:^0.9.1": - version: 0.9.1 - resolution: "customize-cra@npm:0.9.1" - dependencies: - lodash.flow: ^3.5.0 - checksum: d616e4c21f231860b7cad445a52ec5c2b658c4fba9db35f4f60d943d00caeecb140562f89f4ef901b6ef4d6b16f3b6bddff3802358389ae1ab0f0eef936a66ab - languageName: node - linkType: hard - -"cyclist@npm:^1.0.1": - version: 1.0.2 - resolution: "cyclist@npm:1.0.2" - checksum: d7c0336565b9b72ee72347831cbd05fadcc59cc9ab89dcf38293b1a64c2c5fb777c9ce44967390dabe8235f9898f5cb222cd6672f4920b757da8861310082716 - languageName: node - linkType: hard - -"d@npm:1, d@npm:^1.0.1, d@npm:^1.0.2": - version: 1.0.2 - resolution: "d@npm:1.0.2" - dependencies: - es5-ext: ^0.10.64 - type: ^2.7.2 - checksum: 775db1e8ced6707cddf64a5840522fcf5475d38ef49a5d615be0ac47f86ef64d15f5a73de1522b09327cc466d4dc35ea83dbfeed456f7a0fdcab138deb800355 - languageName: node - linkType: hard - -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de - languageName: node - linkType: hard - -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-buffer@npm:1.0.1" - dependencies: - call-bind: ^1.0.6 - es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-length@npm:1.0.1" - dependencies: - call-bind: ^1.0.7 - es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "data-view-byte-offset@npm:1.0.0" - dependencies: - call-bind: ^1.0.6 - es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 - languageName: node - linkType: hard - -"date-fns@npm:^2.0.1": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": ^7.21.0 - checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 - languageName: node - linkType: hard - -"dayjs@npm:^1.11.10": - version: 1.11.10 - resolution: "dayjs@npm:1.11.10" - checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 - languageName: node - linkType: hard - -"debounce@npm:^1.2.1": - version: 1.2.1 - resolution: "debounce@npm:1.2.1" - checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: 2.0.0 - checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.3": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 - languageName: node - linkType: hard - -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - -"deep-eql@npm:^4.1.3": - version: 4.1.3 - resolution: "deep-eql@npm:4.1.3" - dependencies: - type-detect: ^4.0.0 - checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f - languageName: node - linkType: hard - -"deep-equal@npm:^1.0.1": - version: 1.1.2 - resolution: "deep-equal@npm:1.1.2" - dependencies: - is-arguments: ^1.1.1 - is-date-object: ^1.0.5 - is-regex: ^1.1.4 - object-is: ^1.1.5 - object-keys: ^1.1.1 - regexp.prototype.flags: ^1.5.1 - checksum: 2d50f27fff785fb272cdef038ee5365ee5a30ab1aab053976e6a6add44cc60abd99b38179a46a01ac52c5e54ebb220e8f1a3a1954da20678b79c46ef4d97c9db - languageName: node - linkType: hard - -"deep-equal@npm:^2.0.5": - version: 2.2.3 - resolution: "deep-equal@npm:2.2.3" - dependencies: - array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.5 - es-get-iterator: ^1.1.3 - get-intrinsic: ^1.2.2 - is-arguments: ^1.1.1 - is-array-buffer: ^3.0.2 - is-date-object: ^1.0.5 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - isarray: ^2.0.5 - object-is: ^1.1.5 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.1 - side-channel: ^1.0.4 - which-boxed-primitive: ^1.0.2 - which-collection: ^1.0.1 - which-typed-array: ^1.1.13 - checksum: ee8852f23e4d20a5626c13b02f415ba443a1b30b4b3d39eaf366d59c4a85e6545d7ec917db44d476a85ae5a86064f7e5f7af7479f38f113995ba869f3a1ddc53 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 - languageName: node - linkType: hard - -"default-gateway@npm:^4.2.0": - version: 4.2.0 - resolution: "default-gateway@npm:4.2.0" - dependencies: - execa: ^1.0.0 - ip-regex: ^2.1.0 - checksum: 1f5be765471689c6bab33e0c8b87363c3e2485cc1ab78904d383a8a8293a79f684da2a3303744b112503f986af4ea87d917c63a468ed913e9b0c31588c02d6a4 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - gopd: ^1.0.1 - checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b - languageName: node - linkType: hard - -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: ^1.0.1 - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 - languageName: node - linkType: hard - -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: ^0.1.0 - checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" - dependencies: - is-descriptor: ^1.0.0 - checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a - languageName: node - linkType: hard - -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" - dependencies: - is-descriptor: ^1.0.2 - isobject: ^3.0.1 - checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - -"del@npm:^4.1.1": - version: 4.1.1 - resolution: "del@npm:4.1.1" - dependencies: - "@types/glob": ^7.1.1 - globby: ^6.1.0 - is-path-cwd: ^2.0.0 - is-path-in-cwd: ^2.0.0 - p-map: ^2.0.0 - pify: ^4.0.1 - rimraf: ^2.6.3 - checksum: 521f7da44bd79da841c06d573923d1f64f423aee8b8219c973478d3150ce1dcc024d03ad605929292adbff56d6448bca60d96dcdd2d8a53b46dbcb27e265c94b - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"depd@npm:2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a - languageName: node - linkType: hard - -"depd@npm:~1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - -"dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - -"des.js@npm:^1.0.0": - version: 1.1.0 - resolution: "des.js@npm:1.1.0" - dependencies: - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 - languageName: node - linkType: hard - -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": - version: 2.1.0 - resolution: "detect-node@npm:2.1.0" - checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e - languageName: node - linkType: hard - -"detect-port-alt@npm:1.1.6": - version: 1.1.6 - resolution: "detect-port-alt@npm:1.1.6" - dependencies: - address: ^1.0.1 - debug: ^2.6.0 - bin: - detect: ./bin/detect-port - detect-port: ./bin/detect-port - checksum: 9dc37b1fa4a9dd6d4889e1045849b8d841232b598d1ca888bf712f4035b07a17cf6d537465a0d7323250048d3a5a0540e3b7cf89457efc222f96f77e2c40d16a - languageName: node - linkType: hard - -"dezalgo@npm:^1.0.4": - version: 1.0.4 - resolution: "dezalgo@npm:1.0.4" - dependencies: - asap: ^2.0.0 - wrappy: 1 - checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 - languageName: node - linkType: hard - -"diff-sequences@npm:^26.6.2": - version: 26.6.2 - resolution: "diff-sequences@npm:26.6.2" - checksum: 79af871776ef149a7ff3345d6b1bf37fe6e81f68632aa5542787851f6f60fba19b0be22fdd1e06046f56ae7382763ccfe94a982c39ee72bd107aef435ecbc0cf - languageName: node - linkType: hard - -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.4.3, diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"diffie-hellman@npm:^5.0.0": - version: 5.0.3 - resolution: "diffie-hellman@npm:5.0.3" - dependencies: - bn.js: ^4.1.0 - miller-rabin: ^4.0.0 - randombytes: ^2.0.0 - checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"dns-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "dns-equal@npm:1.0.0" - checksum: a8471ac849c7c13824f053babea1bc26e2f359394dd5a460f8340d8abd13434be01e3327a5c59d212f8c8997817450efd3f3ac77bec709b21979cf0235644524 - languageName: node - linkType: hard - -"dns-packet@npm:^1.3.1": - version: 1.3.4 - resolution: "dns-packet@npm:1.3.4" - dependencies: - ip: ^1.1.0 - safe-buffer: ^5.0.1 - checksum: 7dd87f85cb4f9d1a99c03470730e3d9385e67dc94f6c13868c4034424a5378631e492f9f1fbc43d3c42f319fbbfe18b6488bb9527c32d34692c52bf1f5eedf69 - languageName: node - linkType: hard - -"dns-txt@npm:^2.0.2": - version: 2.0.2 - resolution: "dns-txt@npm:2.0.2" - dependencies: - buffer-indexof: ^1.0.0 - checksum: 80130b665379ecd991687ae079fbee25d091e03e4c4cef41e7643b977849ac48c2f56bfcb3727e53594d29029b833749811110d9f3fbee1b26a6e6f8096a5cef - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: ^2.0.2 - checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": - version: 0.5.16 - resolution: "dom-accessibility-api@npm:0.5.16" - checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 - languageName: node - linkType: hard - -"dom-converter@npm:^0.2.0": - version: 0.2.0 - resolution: "dom-converter@npm:0.2.0" - dependencies: - utila: ~0.4 - checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 - languageName: node - linkType: hard - -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: ^2.0.1 - entities: ^2.0.0 - checksum: 376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.0 - entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 - languageName: node - linkType: hard - -"domain-browser@npm:^1.1.1": - version: 1.2.0 - resolution: "domain-browser@npm:1.2.0" - checksum: 8f1235c7f49326fb762f4675795246a6295e7dd566b4697abec24afdba2460daa7dfbd1a73d31efbf5606b3b7deadb06ce47cf06f0a476e706153d62a4ff2b90 - languageName: node - linkType: hard - -"domelementtype@npm:1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa - languageName: node - linkType: hard - -"domutils@npm:^1.7.0": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: 0 - domelementtype: 1 - checksum: f60a725b1f73c1ae82f4894b691601ecc6ecb68320d87923ac3633137627c7865725af813ae5d188ad3954283853bcf46779eb50304ec5d5354044569fcefd2b - languageName: node - linkType: hard - -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: ^1.0.1 - domelementtype: ^2.2.0 - domhandler: ^4.2.0 - checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 - languageName: node - linkType: hard - -"dot-case@npm:^3.0.4": - version: 3.0.4 - resolution: "dot-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 - languageName: node - linkType: hard - -"dot-prop@npm:^5.2.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" - dependencies: - is-obj: ^2.0.0 - checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea - languageName: node - linkType: hard - -"dotenv-expand@npm:5.1.0": - version: 5.1.0 - resolution: "dotenv-expand@npm:5.1.0" - checksum: 8017675b7f254384915d55f9eb6388e577cf0a1231a28d54b0ca03b782be9501b0ac90ac57338636d395fa59051e6209e9b44b8ddf169ce6076dffb5dea227d3 - languageName: node - linkType: hard - -"dotenv@npm:8.2.0": - version: 8.2.0 - resolution: "dotenv@npm:8.2.0" - checksum: ad4c8e0df3e24b4811c8e93377d048a10a9b213dcd9f062483b4a2d3168f08f10ec9c618c23f5639060d230ccdb174c08761479e9baa29610aa978e1ee66df76 - languageName: node - linkType: hard - -"dotenv@npm:^16.0.1": - version: 16.4.5 - resolution: "dotenv@npm:16.4.5" - checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c - languageName: node - linkType: hard - -"duplexer@npm:^0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 - languageName: node - linkType: hard - -"duplexify@npm:^3.4.2, duplexify@npm:^3.6.0": - version: 3.7.1 - resolution: "duplexify@npm:3.7.1" - dependencies: - end-of-stream: ^1.0.0 - inherits: ^2.0.1 - readable-stream: ^2.0.0 - stream-shift: ^1.0.0 - checksum: 3c2ed2223d956a5da713dae12ba8295acb61d9acd966ccbba938090d04f4574ca4dca75cca089b5077c2d7e66101f32e6ea9b36a78ca213eff574e7a8b8accf2 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11": - version: 1.0.11 - resolution: "ecdsa-sig-formatter@npm:1.0.11" - dependencies: - safe-buffer: ^5.0.1 - checksum: 207f9ab1c2669b8e65540bce29506134613dd5f122cccf1e6a560f4d63f2732d427d938f8481df175505aad94583bcb32c688737bb39a6df0625f903d6d93c03 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f - languageName: node - linkType: hard - -"ejs@npm:^2.6.1": - version: 2.7.4 - resolution: "ejs@npm:2.7.4" - checksum: a1d2bfc7d1f0b39e99ae19b20c9469a25aeddba1ffc225db098110b18d566f73772fcdcc740b108cfda7452276f67d7b64eb359f90285414c942f4ae70713371 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.668": - version: 1.4.747 - resolution: "electron-to-chromium@npm:1.4.747" - checksum: 6d302c2fbe71390ca666544017de5f8614ba8632ee02fd612d423439e813d72df09cbd8f614122a2ee07c8ffc2b3788882a5c5bb99363f162b9257f34c0eb31f - languageName: node - linkType: hard - -"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": - version: 6.5.5 - resolution: "elliptic@npm:6.5.5" - dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 - hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb - languageName: node - linkType: hard - -"emittery@npm:^0.7.1": - version: 0.7.2 - resolution: "emittery@npm:0.7.2" - checksum: 908cd933d48a9bcb58ddf39e9a7d4ba1e049de392ccbef010102539a636e03cea2b28218331b7ede41de8165d9ed7f148851c5112ebd2e943117c0f61eff5f10 - languageName: node - linkType: hard - -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"emojis-list@npm:^3.0.0": - version: 3.0.0 - resolution: "emojis-list@npm:3.0.0" - checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: ^1.4.0 - checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b - languageName: node - linkType: hard - -"enhanced-resolve@npm:^4.3.0": - version: 4.5.0 - resolution: "enhanced-resolve@npm:4.5.0" - dependencies: - graceful-fs: ^4.1.2 - memory-fs: ^0.5.0 - tapable: ^1.0.0 - checksum: 4d87488584c4d67d356ef4ba04978af4b2d4d18190cb859efac8e8475a34d5d6c069df33faa5a0a22920b0586dbf330f6a08d52bb15a8771a9ce4d70a2da74ba - languageName: node - linkType: hard - -"enquirer@npm:^2.3.5": - version: 2.4.1 - resolution: "enquirer@npm:2.4.1" - dependencies: - ansi-colors: ^4.1.1 - strip-ansi: ^6.0.1 - checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"errno@npm:^0.1.3, errno@npm:~0.1.7": - version: 0.1.8 - resolution: "errno@npm:0.1.8" - dependencies: - prr: ~1.0.1 - bin: - errno: cli.js - checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: ^0.2.1 - checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 - languageName: node - linkType: hard - -"error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" - dependencies: - stackframe: ^1.3.4 - checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 - languageName: node - linkType: hard - -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" - dependencies: - array-buffer-byte-length: ^1.0.1 - arraybuffer.prototype.slice: ^1.0.3 - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - data-view-buffer: ^1.0.1 - data-view-byte-length: ^1.0.1 - data-view-byte-offset: ^1.0.0 - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-set-tostringtag: ^2.0.3 - 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.3 - has-symbols: ^1.0.3 - hasown: ^2.0.2 - internal-slot: ^1.0.7 - is-array-buffer: ^3.0.4 - is-callable: ^1.2.7 - is-data-view: ^1.0.1 - is-negative-zero: ^2.0.3 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.3 - 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.2 - safe-regex-test: ^1.0.3 - string.prototype.trim: ^1.2.9 - string.prototype.trimend: ^1.0.8 - string.prototype.trimstart: ^1.0.8 - typed-array-buffer: ^1.0.2 - typed-array-byte-length: ^1.0.1 - typed-array-byte-offset: ^1.0.2 - typed-array-length: ^1.0.6 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.15 - checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: ^1.2.4 - checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 - languageName: node - linkType: hard - -"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 - languageName: node - linkType: hard - -"es-get-iterator@npm:^1.1.3": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - has-symbols: ^1.0.3 - is-arguments: ^1.1.1 - is-map: ^2.0.2 - is-set: ^2.0.2 - is-string: ^1.0.7 - isarray: ^2.0.5 - stop-iteration-iterator: ^1.0.0 - checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": - version: 1.0.18 - resolution: "es-iterator-helpers@npm:1.0.18" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.0 - es-errors: ^1.3.0 - es-set-tostringtag: ^2.0.3 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.3 - has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - iterator.prototype: ^1.1.2 - safe-array-concat: ^1.1.2 - checksum: 1594324ff3ca8890fe30c98b2419d3007d2b14b35f9773f188114408ff973e13c526f6045d88209e932f58dc0c55fc9a4ae1554636f8938ed7d926ffc27d3e1a - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" - dependencies: - es-errors: ^1.3.0 - checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.3": - version: 2.0.3 - resolution: "es-set-tostringtag@npm:2.0.3" - dependencies: - get-intrinsic: ^1.2.4 - has-tostringtag: ^1.0.2 - hasown: ^2.0.1 - checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" - dependencies: - hasown: ^2.0.0 - checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: ^1.1.4 - is-date-object: ^1.0.1 - is-symbol: ^1.0.2 - checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed - languageName: node - linkType: hard - -"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.62, es5-ext@npm:^0.10.64, es5-ext@npm:~0.10.14": - version: 0.10.64 - resolution: "es5-ext@npm:0.10.64" - dependencies: - es6-iterator: ^2.0.3 - es6-symbol: ^3.1.3 - esniff: ^2.0.1 - next-tick: ^1.1.0 - checksum: 01179fab0769fdbef213062222f99d0346724dbaccf04b87c0e6ee7f0c97edabf14be647ca1321f0497425ea7145de0fd278d1b3f3478864b8933e7136a5c645 - languageName: node - linkType: hard - -"es6-iterator@npm:2.0.3, es6-iterator@npm:^2.0.3": - version: 2.0.3 - resolution: "es6-iterator@npm:2.0.3" - dependencies: - d: 1 - es5-ext: ^0.10.35 - es6-symbol: ^3.1.1 - checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 - languageName: node - linkType: hard - -"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": - version: 3.1.4 - resolution: "es6-symbol@npm:3.1.4" - dependencies: - d: ^1.0.2 - ext: ^1.7.0 - checksum: 52125ec4b5d1b6b93b8d3d42830bb19f8da21080ffcf45253b614bc6ff3e31349be202fb745d4d1af6778cdf5e38fea30e0c7e7dc37e2aecd44acc43502055f9 - languageName: node - linkType: hard - -"esbuild-android-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-android-64@npm:0.14.54" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"esbuild-android-arm64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-android-arm64@npm:0.14.54" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-darwin-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-darwin-64@npm:0.14.54" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"esbuild-darwin-arm64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-darwin-arm64@npm:0.14.54" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-freebsd-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-freebsd-64@npm:0.14.54" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-freebsd-arm64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-freebsd-arm64@npm:0.14.54" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-32@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-32@npm:0.14.54" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-linux-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-64@npm:0.14.54" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"esbuild-linux-arm64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-arm64@npm:0.14.54" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"esbuild-linux-arm@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-arm@npm:0.14.54" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"esbuild-linux-mips64le@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-mips64le@npm:0.14.54" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"esbuild-linux-ppc64le@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-ppc64le@npm:0.14.54" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"esbuild-linux-riscv64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-riscv64@npm:0.14.54" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"esbuild-linux-s390x@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-linux-s390x@npm:0.14.54" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"esbuild-netbsd-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-netbsd-64@npm:0.14.54" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-openbsd-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-openbsd-64@npm:0.14.54" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"esbuild-sunos-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-sunos-64@npm:0.14.54" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-32@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-windows-32@npm:0.14.54" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"esbuild-windows-64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-windows-64@npm:0.14.54" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"esbuild-windows-arm64@npm:0.14.54": - version: 0.14.54 - resolution: "esbuild-windows-arm64@npm:0.14.54" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"esbuild@npm:^0.14.21": - version: 0.14.54 - resolution: "esbuild@npm:0.14.54" - dependencies: - "@esbuild/linux-loong64": 0.14.54 - esbuild-android-64: 0.14.54 - esbuild-android-arm64: 0.14.54 - esbuild-darwin-64: 0.14.54 - esbuild-darwin-arm64: 0.14.54 - esbuild-freebsd-64: 0.14.54 - esbuild-freebsd-arm64: 0.14.54 - esbuild-linux-32: 0.14.54 - esbuild-linux-64: 0.14.54 - esbuild-linux-arm: 0.14.54 - esbuild-linux-arm64: 0.14.54 - esbuild-linux-mips64le: 0.14.54 - esbuild-linux-ppc64le: 0.14.54 - esbuild-linux-riscv64: 0.14.54 - esbuild-linux-s390x: 0.14.54 - esbuild-netbsd-64: 0.14.54 - esbuild-openbsd-64: 0.14.54 - esbuild-sunos-64: 0.14.54 - esbuild-windows-32: 0.14.54 - esbuild-windows-64: 0.14.54 - esbuild-windows-arm64: 0.14.54 - dependenciesMeta: - "@esbuild/linux-loong64": - optional: true - esbuild-android-64: - optional: true - esbuild-android-arm64: - optional: true - esbuild-darwin-64: - optional: true - esbuild-darwin-arm64: - optional: true - esbuild-freebsd-64: - optional: true - esbuild-freebsd-arm64: - optional: true - esbuild-linux-32: - optional: true - esbuild-linux-64: - optional: true - esbuild-linux-arm: - optional: true - esbuild-linux-arm64: - optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: - optional: true - bin: - esbuild: bin/esbuild - checksum: 49e360b1185c797f5ca3a7f5f0a75121494d97ddf691f65ed1796e6257d318f928342a97f559bb8eced6a90cf604dd22db4a30e0dbbf15edd9dbf22459b639af - languageName: node - linkType: hard - -"esbuild@npm:^0.18.10": - version: 0.18.20 - resolution: "esbuild@npm:0.18.20" - dependencies: - "@esbuild/android-arm": 0.18.20 - "@esbuild/android-arm64": 0.18.20 - "@esbuild/android-x64": 0.18.20 - "@esbuild/darwin-arm64": 0.18.20 - "@esbuild/darwin-x64": 0.18.20 - "@esbuild/freebsd-arm64": 0.18.20 - "@esbuild/freebsd-x64": 0.18.20 - "@esbuild/linux-arm": 0.18.20 - "@esbuild/linux-arm64": 0.18.20 - "@esbuild/linux-ia32": 0.18.20 - "@esbuild/linux-loong64": 0.18.20 - "@esbuild/linux-mips64el": 0.18.20 - "@esbuild/linux-ppc64": 0.18.20 - "@esbuild/linux-riscv64": 0.18.20 - "@esbuild/linux-s390x": 0.18.20 - "@esbuild/linux-x64": 0.18.20 - "@esbuild/netbsd-x64": 0.18.20 - "@esbuild/openbsd-x64": 0.18.20 - "@esbuild/sunos-x64": 0.18.20 - "@esbuild/win32-arm64": 0.18.20 - "@esbuild/win32-ia32": 0.18.20 - "@esbuild/win32-x64": 0.18.20 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b - languageName: node - linkType: hard - -"escalade@npm:^3.0.2, escalade@npm:^3.1.1": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 - languageName: node - linkType: hard - -"escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - -"escape-string-regexp@npm:2.0.0, escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"escodegen@npm:^1.8.1": - version: 1.14.3 - resolution: "escodegen@npm:1.14.3" - dependencies: - esprima: ^4.0.1 - estraverse: ^4.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 - languageName: node - linkType: hard - -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^8.5.0": - version: 8.10.0 - resolution: "eslint-config-prettier@npm:8.10.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 - languageName: node - linkType: hard - -"eslint-config-react-app@npm:^6.0.0": - version: 6.0.0 - resolution: "eslint-config-react-app@npm:6.0.0" - dependencies: - confusing-browser-globals: ^1.0.10 - peerDependencies: - "@typescript-eslint/eslint-plugin": ^4.0.0 - "@typescript-eslint/parser": ^4.0.0 - babel-eslint: ^10.0.0 - eslint: ^7.5.0 - eslint-plugin-flowtype: ^5.2.0 - eslint-plugin-import: ^2.22.0 - eslint-plugin-jest: ^24.0.0 - eslint-plugin-jsx-a11y: ^6.3.1 - eslint-plugin-react: ^7.20.3 - eslint-plugin-react-hooks: ^4.0.8 - eslint-plugin-testing-library: ^3.9.0 - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - eslint-plugin-testing-library: - optional: true - checksum: b265852455b1c10e9c5f0cebe199306fffc7f8e1b6548fcb0bccdc4415c288dfee8ab10717122a32275b91130dfb482dcbbc87d2fb79d8728d4c2bfa889f0915 - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: ^3.2.7 - is-core-module: ^2.13.0 - resolve: ^1.22.4 - checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" - dependencies: - debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d - languageName: node - linkType: hard - -"eslint-plugin-flowtype@npm:^5.2.0": - version: 5.10.0 - resolution: "eslint-plugin-flowtype@npm:5.10.0" - dependencies: - lodash: ^4.17.15 - string-natural-compare: ^3.0.1 - peerDependencies: - eslint: ^7.1.0 - checksum: 791cd53c886bf819d52d6353cdfb4d49276dcd8a14f564a85d275d5017d81c7b1cc1921013ac9749f69c3f1bc4d23f36182137aab42bc059c2ae3f9773dd7740 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.22.1": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" - 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 - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^24.1.0": - version: 24.7.0 - resolution: "eslint-plugin-jest@npm:24.7.0" - dependencies: - "@typescript-eslint/experimental-utils": ^4.0.1 - peerDependencies: - "@typescript-eslint/eslint-plugin": ">= 4" - eslint: ">=5" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:^6.3.1": - version: 6.8.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" - 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 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 - languageName: node - linkType: hard - -"eslint-plugin-prettier@npm:^4.2.1": - version: 4.2.1 - resolution: "eslint-plugin-prettier@npm:4.2.1" - dependencies: - prettier-linter-helpers: ^1.0.0 - peerDependencies: - eslint: ">=7.28.0" - prettier: ">=2.0.0" - peerDependenciesMeta: - eslint-config-prettier: - optional: true - checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:^4.2.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.21.5": - version: 7.34.1 - resolution: "eslint-plugin-react@npm:7.34.1" - dependencies: - array-includes: ^3.1.7 - array.prototype.findlast: ^1.2.4 - array.prototype.flatmap: ^1.3.2 - array.prototype.toreversed: ^1.1.2 - array.prototype.tosorted: ^1.1.3 - doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.17 - estraverse: ^5.3.0 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.7 - object.fromentries: ^2.0.7 - object.hasown: ^1.1.3 - object.values: ^1.1.7 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.5 - semver: ^6.3.1 - string.prototype.matchall: ^4.0.10 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f - languageName: node - linkType: hard - -"eslint-plugin-testing-library@npm:^3.9.2": - version: 3.10.2 - resolution: "eslint-plugin-testing-library@npm:3.10.2" - dependencies: - "@typescript-eslint/experimental-utils": ^3.10.1 - peerDependencies: - eslint: ^5 || ^6 || ^7 - checksum: 3859d4a4816b130cfefc3b45bc7d303aff19b8d4e83a5e35ca3d634de9f3c4aa1b4340cb4f41e2d1bfe70b173562b9882c58ac48be4e07ddf6a1f88659e2604d - languageName: node - linkType: hard - -"eslint-scope@npm:^4.0.3": - version: 4.0.3 - resolution: "eslint-scope@npm:4.0.3" - dependencies: - esrecurse: ^4.1.0 - estraverse: ^4.1.1 - checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b - languageName: node - linkType: hard - -"eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d - languageName: node - linkType: hard - -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-webpack-plugin@npm:^2.5.2": - version: 2.7.0 - resolution: "eslint-webpack-plugin@npm:2.7.0" - dependencies: - "@types/eslint": ^7.29.0 - arrify: ^2.0.1 - jest-worker: ^27.5.1 - micromatch: ^4.0.5 - normalize-path: ^3.0.0 - schema-utils: ^3.1.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^4.0.0 || ^5.0.0 - checksum: b6fd7cf4c49078b345a908b82b0bee06bc82ab0cec214ddd5fe5bb18b065765d52a07ad4077f6bba5830ba2f55f37d8f2208a52d11f34ee29df81153e3124d9c - languageName: node - linkType: hard - -"eslint@npm:^7.0.0, eslint@npm:^7.11.0": - version: 7.32.0 - resolution: "eslint@npm:7.32.0" - dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.3 - "@humanwhocodes/config-array": ^0.5.0 - ajv: ^6.10.0 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.0.1 - doctrine: ^3.0.0 - enquirer: ^2.3.5 - escape-string-regexp: ^4.0.0 - eslint-scope: ^5.1.1 - eslint-utils: ^2.1.0 - eslint-visitor-keys: ^2.0.0 - espree: ^7.3.1 - esquery: ^1.4.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - functional-red-black-tree: ^1.0.1 - glob-parent: ^5.1.2 - globals: ^13.6.0 - ignore: ^4.0.6 - import-fresh: ^3.0.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - js-yaml: ^3.13.1 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.0.4 - natural-compare: ^1.4.0 - optionator: ^0.9.1 - progress: ^2.0.0 - regexpp: ^3.1.0 - semver: ^7.2.1 - strip-ansi: ^6.0.0 - strip-json-comments: ^3.1.0 - table: ^6.0.9 - text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 - bin: - eslint: bin/eslint.js - checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 - languageName: node - linkType: hard - -"esniff@npm:^2.0.1": - version: 2.0.1 - resolution: "esniff@npm:2.0.1" - dependencies: - d: ^1.0.1 - es5-ext: ^0.10.62 - event-emitter: ^0.3.5 - type: ^2.7.2 - checksum: d814c0e5c39bce9925b2e65b6d8767af72c9b54f35a65f9f3d6e8c606dce9aebe35a9599d30f15b0807743f88689f445163cfb577a425de4fb8c3c5bc16710cc - languageName: node - linkType: hard - -"espree@npm:^7.3.0, espree@npm:^7.3.1": - version: 7.3.1 - resolution: "espree@npm:7.3.1" - dependencies: - acorn: ^7.4.0 - acorn-jsx: ^5.3.1 - eslint-visitor-keys: ^1.3.0 - checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 - languageName: node - linkType: hard - -"esprima@npm:1.2.2": - version: 1.2.2 - resolution: "esprima@npm:1.2.2" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 4f10006f0e315f2f7d8cf6630e465f183512f1ab2e862b11785a133ce37ed1696573deefb5256e510eaa4368342b13b393334477f6ccdcdb8f10e782b0f5e6dc - languageName: node - linkType: hard - -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"esquery@npm:^1.4.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"estree-walker@npm:^0.6.1": - version: 0.6.1 - resolution: "estree-walker@npm:0.6.1" - checksum: 9d6f82a4921f11eec18f8089fb3cce6e53bcf45a8e545c42a2674d02d055fb30f25f90495f8be60803df6c39680c80dcee7f944526867eb7aa1fc9254883b23d - languageName: node - linkType: hard - -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 7e70da539691f6db03a08e7ce94f394ce2eef4180e136d251af299d41f92fb2d28ebcd9a6e393e3728d7970aeb5358705ddf7209d52fbcb2dd4693f95dcf925f - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff - languageName: node - linkType: hard - -"event-emitter@npm:^0.3.5": - version: 0.3.5 - resolution: "event-emitter@npm:0.3.5" - dependencies: - d: 1 - es5-ext: ~0.10.14 - checksum: 27c1399557d9cd7e0aa0b366c37c38a4c17293e3a10258e8b692a847dd5ba9fb90429c3a5a1eeff96f31f6fa03ccbd31d8ad15e00540b22b22f01557be706030 - languageName: node - linkType: hard - -"eventemitter3@npm:^3.1.0": - version: 3.1.2 - resolution: "eventemitter3@npm:3.1.2" - checksum: 81e4e82b8418f5cfd986d2b4a2fa5397ac4eb8134e09bcb47005545e22fdf8e9e61d5c053d34651112245aae411bdfe6d0ad5511da0400743fef5fc38bfcfbe3 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 - languageName: node - linkType: hard - -"events@npm:^3.0.0, events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - -"eventsource@npm:^2.0.2": - version: 2.0.2 - resolution: "eventsource@npm:2.0.2" - checksum: c0072d972753e10c705d9b2285b559184bf29d011bc208973dde9c8b6b8b7b6fdad4ef0846cecb249f7b1585e860fdf324cbd2ac854a76bc53649e797496e99a - languageName: node - linkType: hard - -"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": - version: 1.0.3 - resolution: "evp_bytestokey@npm:1.0.3" - dependencies: - md5.js: ^1.3.4 - node-gyp: latest - safe-buffer: ^5.1.1 - checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 - languageName: node - linkType: hard - -"exec-sh@npm:^0.3.2": - version: 0.3.6 - resolution: "exec-sh@npm:0.3.6" - checksum: 0be4f06929c8e4834ea4812f29fe59e2dfcc1bc3fc4b4bb71acb38a500c3b394628a05ef7ba432520bc6c5ec4fadab00cc9c513c4ff6a32104965af302e998e0 - languageName: node - linkType: hard - -"execa@npm:^1.0.0": - version: 1.0.0 - resolution: "execa@npm:1.0.0" - dependencies: - cross-spawn: ^6.0.0 - get-stream: ^4.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 - checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4 - languageName: node - linkType: hard - -"execa@npm:^4.0.0": - version: 4.1.0 - resolution: "execa@npm:4.1.0" - dependencies: - cross-spawn: ^7.0.0 - get-stream: ^5.0.0 - human-signals: ^1.1.1 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.0 - onetime: ^5.1.0 - signal-exit: ^3.0.2 - strip-final-newline: ^2.0.0 - checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - dependencies: - debug: ^2.3.3 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - posix-character-classes: ^0.1.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 - languageName: node - linkType: hard - -"expect@npm:^26.6.0, expect@npm:^26.6.2": - version: 26.6.2 - resolution: "expect@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-styles: ^4.0.0 - jest-get-type: ^26.3.0 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - checksum: 79a9b888c5c6d37d11f2cb76def6cf1dc8ff098d38662ee20c9f2ee0da67e9a93435f2327854b2e7554732153870621843e7f83e8cefb1250447ee2bc39883a4 - languageName: node - linkType: hard - -"expect@npm:^28.0.0": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - -"expect@npm:^29.0.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"express-jwt@npm:^7.7.5": - version: 7.7.7 - resolution: "express-jwt@npm:7.7.7" - dependencies: - "@types/jsonwebtoken": ^8.5.8 - express-unless: ^2.1.3 - jsonwebtoken: ^8.5.1 - checksum: b3aec510ce490cd8d449604c82ce1debf9b8c215fb0220f78d07e86c555fb06ca93b4199da135c00e62bb98c67a47fac8c1fdcc6ea74f2047f4e2defbc4578fe - languageName: node - linkType: hard - -"express-unless@npm:^2.1.3": - version: 2.1.3 - resolution: "express-unless@npm:2.1.3" - checksum: 14bec87e84266180bd8ad71f43a8d1d70d1c3905be7ca89944a86ae0d31f07a3f98418b619673aa8dd417333bbc7bb0a24172ff806a2e0ef1ee9b6221a4bf056 - languageName: node - linkType: hard - -"express-validator@npm:^6.14.2": - version: 6.15.0 - resolution: "express-validator@npm:6.15.0" - dependencies: - lodash: ^4.17.21 - validator: ^13.9.0 - checksum: 05c6883c7c4313bed11acd77cf81b3f25516418c27283d897e8f245f9591c11757511430d0c65a073a70fcd85346afd8fb23070a498020809bfe8cbbf62d3772 - languageName: node - linkType: hard - -"express@npm:^4.17.1": - version: 4.19.2 - resolution: "express@npm:4.19.2" - 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 - checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 - languageName: node - linkType: hard - -"ext@npm:^1.7.0": - version: 1.7.0 - resolution: "ext@npm:1.7.0" - dependencies: - type: ^2.7.2 - checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 - languageName: node - linkType: hard - -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: ^1.0.0 - is-extendable: ^1.0.1 - checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 - languageName: node - linkType: hard - -"extend@npm:^3.0.0, extend@npm:^3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: ^0.7.0 - iconv-lite: ^0.4.24 - tmp: ^0.0.33 - checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 - languageName: node - linkType: hard - -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" - dependencies: - array-unique: ^0.3.2 - define-property: ^1.0.0 - expand-brackets: ^2.1.4 - extend-shallow: ^2.0.1 - fragment-cache: ^0.2.1 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-diff@npm:^1.1.2": - version: 1.3.0 - resolution: "fast-diff@npm:1.3.0" - checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 - languageName: node - linkType: hard - -"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.9": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" - 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 - checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fast-safe-stringify@npm:^2.1.1": - version: 2.1.1 - resolution: "fast-safe-stringify@npm:2.1.1" - checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d - languageName: node - linkType: hard - -"fast-text-encoding@npm:^1.0.0": - version: 1.0.6 - resolution: "fast-text-encoding@npm:1.0.6" - checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 - languageName: node - linkType: hard - -"fastparse@npm:^1.1.2": - version: 1.1.2 - resolution: "fastparse@npm:1.1.2" - checksum: c4d199809dc4e8acafeb786be49481cc9144de296e2d54df4540ccfd868d0df73afc649aba70a748925eb32bbc4208b723d6288adf92382275031a8c7e10c0aa - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" - dependencies: - reusify: ^1.0.4 - checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 - languageName: node - linkType: hard - -"faye-websocket@npm:^0.11.3, faye-websocket@npm:^0.11.4": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" - dependencies: - websocket-driver: ">=0.5.1" - checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - -"figgy-pudding@npm:^3.5.1": - version: 3.5.2 - resolution: "figgy-pudding@npm:3.5.2" - checksum: 4090bd66193693dcda605e44d6b8715d8fb5c92a67acd57826e55cf816a342f550d57e5638f822b39366e1b2fdb244e99b3068a37213aa1d6c1bf602b8fde5ae - languageName: node - linkType: hard - -"figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"file-loader@npm:6.1.1": - version: 6.1.1 - resolution: "file-loader@npm:6.1.1" - dependencies: - loader-utils: ^2.0.0 - schema-utils: ^3.0.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 6369da5af456b640599d7ede7a3a9a55e485138a7829c583313d5165d0984c3d337de3aebee32fdfa3295facb4a44b74a9c3c956b1e0e30e8c96152106ff4b23 - languageName: node - linkType: hard - -"file-saver@npm:^2.0.5": - version: 2.0.5 - resolution: "file-saver@npm:2.0.5" - checksum: c62d96e5cebc58b4bdf3ae8a60d5cf9607ad82f75f798c33a4ee63435ac2203002584d5256a2a780eda7feb5e19dc3b6351c2212e58b3f529e63d265a7cc79f7 - languageName: node - linkType: hard - -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"filesize@npm:6.1.0": - version: 6.1.0 - resolution: "filesize@npm:6.1.0" - checksum: c46d644cb562fba7b7e837d5cd339394492abaa06722018b91a97d2a63b6c753ef30653de5c03bf178c631185bf55c3561c28fa9ccc4e9755f42d853c6ed4d09 - languageName: node - linkType: hard - -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: ^2.0.1 - is-number: ^3.0.0 - repeat-string: ^1.6.1 - to-regex-range: ^2.1.0 - checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" - 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 - checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 - languageName: node - linkType: hard - -"find-cache-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "find-cache-dir@npm:2.1.0" - dependencies: - commondir: ^1.0.1 - make-dir: ^2.0.0 - pkg-dir: ^3.0.0 - checksum: 60ad475a6da9f257df4e81900f78986ab367d4f65d33cf802c5b91e969c28a8762f098693d7a571b6e4dd4c15166c2da32ae2d18b6766a18e2071079448fdce4 - languageName: node - linkType: hard - -"find-cache-dir@npm:^3.3.1": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 - languageName: node - linkType: hard - -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf - languageName: node - linkType: hard - -"find-up@npm:4.1.0, find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: ^3.0.0 - checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - -"finishline-express@workspace:.": - version: 0.0.0-use.local - resolution: "finishline-express@workspace:." - dependencies: - "@babel/core": ^7.20.5 - "@babel/plugin-transform-object-assign": ^7.18.6 - "@babel/preset-react": ^7.18.6 - "@babel/preset-typescript": ^7.18.6 - "@testing-library/jest-dom": ^5.16.4 - "@types/jest": ^28.1.6 - "@types/node": 18.17.1 - "@types/nodemailer": ^6.4.7 - "@types/react-query": ^1.2.9 - "@typescript-eslint/eslint-plugin": ^4.18.0 - "@typescript-eslint/parser": ^4.18.0 - concurrently: ^5.2.0 - eslint: ^7.0.0 - eslint-config-prettier: ^8.5.0 - eslint-plugin-prettier: ^4.2.1 - prettier: ^2.0.5 - rimraf: ^3.0.2 - ts-node: ^10.9.1 - typescript: ^4.1.5 - languageName: unknown - linkType: soft - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 - languageName: node - linkType: hard - -"flatten@npm:^1.0.2": - version: 1.0.3 - resolution: "flatten@npm:1.0.3" - checksum: 5c57379816f1692aaa79fbc6390e0a0644e5e8442c5783ed57c6d315468eddbc53a659eaa03c9bb1e771b0f4a9bd8dd8a2620286bf21fd6538a7857321fdfb20 - languageName: node - linkType: hard - -"flush-write-stream@npm:^1.0.0": - version: 1.1.1 - resolution: "flush-write-stream@npm:1.1.1" - dependencies: - inherits: ^2.0.3 - readable-stream: ^2.3.6 - checksum: 42e07747f83bcd4e799da802e621d6039787749ffd41f5517f8c4f786ee967e31ba32b09f8b28a9c6f67bd4f5346772e604202df350e8d99f4141771bae31279 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" - peerDependenciesMeta: - debug: - optional: true - checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 - languageName: node - linkType: hard - -"for-in@npm:^1.0.2": - version: 1.0.2 - resolution: "for-in@npm:1.0.2" - checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"fork-ts-checker-webpack-plugin@npm:4.1.6": - version: 4.1.6 - resolution: "fork-ts-checker-webpack-plugin@npm:4.1.6" - dependencies: - "@babel/code-frame": ^7.5.5 - chalk: ^2.4.1 - micromatch: ^3.1.10 - minimatch: ^3.0.4 - semver: ^5.6.0 - tapable: ^1.0.0 - worker-rpc: ^0.1.0 - checksum: 4cc4fa7919dd9a0d765514d064c86e3a6f9cea8e700996b3e775cfcc0280f606a2dd16203d9b7e294b64e900795b0d80eb41fc8c192857d3350e407f14ef3eed - languageName: node - linkType: hard - -"form-data@npm:^2.5.0": - version: 2.5.1 - resolution: "form-data@npm:2.5.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.6 - mime-types: ^2.1.12 - checksum: 5134ada56cc246b293a1ac7678dba6830000603a3979cf83ff7b2f21f2e3725202237cfb89e32bcb38a1d35727efbd3c3a22e65b42321e8ade8eec01ce755d08 - languageName: node - linkType: hard - -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - -"formidable@npm:^2.1.2": - version: 2.1.2 - resolution: "formidable@npm:2.1.2" - dependencies: - dezalgo: ^1.0.4 - hexoid: ^1.0.0 - once: ^1.4.0 - qs: ^6.11.0 - checksum: 81c8e5d89f5eb873e992893468f0de22c01678ca3d315db62be0560f9de1c77d4faefc9b1f4575098eb2263b3c81ba1024833a9fc3206297ddbac88a4f69b7a8 - languageName: node - linkType: hard - -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 - languageName: node - linkType: hard - -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: ^0.2.2 - checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - -"fresh@npm:0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 - languageName: node - linkType: hard - -"from2@npm:^2.1.0": - version: 2.3.0 - resolution: "from2@npm:2.3.0" - dependencies: - inherits: ^2.0.1 - readable-stream: ^2.0.0 - checksum: 6080eba0793dce32f475141fb3d54cc15f84ee52e420ee22ac3ab0ad639dc95a1875bc6eb9c0e1140e94972a36a89dc5542491b85f1ab8df0c126241e0f1a61b - languageName: node - linkType: hard - -"frontend@workspace:src/frontend": - version: 0.0.0-use.local - resolution: "frontend@workspace:src/frontend" - dependencies: - "@emotion/react": ^11.10.4 - "@emotion/styled": ^11.10.4 - "@hookform/resolvers": ^2.9.7 - "@mui/icons-material": ^5.10.3 - "@mui/material": ^5.10.3 - "@mui/system": ^5.10.16 - "@mui/x-data-grid": ^5.16.0 - "@mui/x-date-pickers": ^6.19.4 - "@testing-library/dom": ^8.19.0 - "@testing-library/jest-dom": ^5.11.9 - "@testing-library/react": ^11.2.5 - "@testing-library/react-hooks": ^8.0.1 - "@testing-library/user-event": ^12.6.3 - "@types/file-saver": ^2.0.5 - "@types/node": 18.17.1 - "@types/react": ^18.2.15 - "@types/react-dom": ^18.2.7 - "@types/react-helmet": ^6.1.6 - "@types/react-query": ^1.2.9 - "@types/react-router-dom": ^5.1.7 - "@vitejs/plugin-react": ^4.0.0 - axios: ^0.27.2 - bootstrap: ^4.6.0 - classnames: ^2.3.1 - customize-cra: ^0.9.1 - dayjs: ^1.11.10 - file-saver: ^2.0.5 - google-auth-library: ^8.1.1 - jest-fail-on-console: ^3.0.2 - msw: ^0.44.2 - pdf-lib: ^1.17.1 - react: ^18.2.0 - react-dom: ^18.2.0 - react-google-charts: ^4.0.0 - react-google-login: ^5.2.2 - react-helmet: ^6.1.0 - react-hook-form: ^7.34.0 - react-markdown: ^6.0.0 - react-query: 3.17.0 - react-router-dom: ^5.2.0 - react-scripts: ^4.0.1 - react-use-measure: ^2.1.1 - sass: ^1.54.0 - shared: 1.0.0 - typed-scss-modules: ^6.5.0 - typescript: ^4.1.5 - vite: ^4.4.5 - vitest: ^0.32.1 - web-vitals: ^0.2.4 - yup: ^0.32.11 - languageName: unknown - linkType: soft - -"fs-extra@npm:^7.0.0": - version: 7.0.1 - resolution: "fs-extra@npm:7.0.1" - dependencies: - graceful-fs: ^4.1.2 - jsonfile: ^4.0.0 - universalify: ^0.1.0 - checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf - languageName: node - linkType: hard - -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^4.0.0 - universalify: ^0.1.0 - checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: ^1.0.0 - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - -"fs-write-stream-atomic@npm:^1.0.8": - version: 1.0.10 - resolution: "fs-write-stream-atomic@npm:1.0.10" - dependencies: - graceful-fs: ^4.1.2 - iferr: ^0.1.5 - imurmurhash: ^0.1.4 - readable-stream: 1 || 2 - checksum: 43c2d6817b72127793abc811ebf87a135b03ac7cbe41cdea9eeacf59b23e6e29b595739b083e9461303d525687499a1aaefcec3e5ff9bc82b170edd3dc467ccc - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:^1.2.7": - version: 1.2.13 - resolution: "fsevents@npm:1.2.13" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^1.2.7#~builtin": - version: 1.2.13 - resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - functions-have-names: ^1.2.3 - checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 - languageName: node - linkType: hard - -"functional-red-black-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "functional-red-black-tree@npm:1.0.1" - checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 - languageName: node - linkType: hard - -"gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": - version: 5.1.3 - resolution: "gaxios@npm:5.1.3" - dependencies: - extend: ^3.0.2 - https-proxy-agent: ^5.0.0 - is-stream: ^2.0.0 - node-fetch: ^2.6.9 - checksum: 1cf72697715c64f6db1d6fa6e9243bb57ee14b0c758338a33790ecac2675d819a1fc0c51b2fab312d9bfe8201cc981c171b70ff60adcaaec881c5bc5610c42f1 - languageName: node - linkType: hard - -"gcp-metadata@npm:^5.3.0": - version: 5.3.0 - resolution: "gcp-metadata@npm:5.3.0" - dependencies: - gaxios: ^5.0.0 - json-bigint: ^1.0.0 - checksum: 891ea0b902a17f33d7bae753830d23962b63af94ed071092c30496e7d26f8128ba9af43c3d38474bea29cb32a884b4bcb5720ce8b9de4a7e1108475d3d7ae219 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": - version: 2.0.2 - resolution: "get-func-name@npm:2.0.2" - checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - 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 - checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 - languageName: node - linkType: hard - -"get-own-enumerable-property-symbols@npm:^3.0.0": - version: 3.0.2 - resolution: "get-own-enumerable-property-symbols@npm:3.0.2" - checksum: 8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - -"get-stream@npm:^4.0.0": - version: 4.1.0 - resolution: "get-stream@npm:4.1.0" - dependencies: - pump: ^3.0.0 - checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 - languageName: node - linkType: hard - -"get-stream@npm:^5.0.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.0.2": - version: 1.0.2 - resolution: "get-symbol-description@npm:1.0.2" - dependencies: - call-bind: ^1.0.5 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 - languageName: node - linkType: hard - -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb - languageName: node - linkType: hard - -"glob-parent@npm:^3.1.0": - version: 3.1.0 - resolution: "glob-parent@npm:3.1.0" - dependencies: - is-glob: ^3.1.0 - path-dirname: ^1.0.0 - checksum: 653d559237e89a11b9934bef3f392ec42335602034c928590544d383ff5ef449f7b12f3cfa539708e74bc0a6c28ab1fe51d663cc07463cdf899ba92afd85a855 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.12 - resolution: "glob@npm:10.3.12" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.6 - minimatch: ^9.0.1 - minipass: ^7.0.4 - path-scurry: ^1.10.2 - bin: - glob: dist/esm/bin.mjs - checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 - languageName: node - linkType: hard - -"glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - 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 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"global-modules@npm:2.0.0": - version: 2.0.0 - resolution: "global-modules@npm:2.0.0" - dependencies: - global-prefix: ^3.0.0 - checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 - languageName: node - linkType: hard - -"global-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "global-prefix@npm:3.0.0" - dependencies: - ini: ^1.3.5 - kind-of: ^6.0.2 - which: ^1.3.1 - checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e - languageName: node - linkType: hard - -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: ^0.20.2 - checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c - languageName: node - linkType: hard - -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" - dependencies: - define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 - languageName: node - linkType: hard - -"globby@npm:11.0.1": - version: 11.0.1 - resolution: "globby@npm:11.0.1" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.1.1 - ignore: ^5.1.4 - merge2: ^1.3.0 - slash: ^3.0.0 - checksum: b0b26e580666ef8caf0b0facd585c1da46eb971207ee9f8c7b690c1372d77602dd072f047f26c3ae1c293807fdf8fb6890d9291d37bc6d2602b1f07386f983e5 - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - 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 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"globby@npm:^6.1.0": - version: 6.1.0 - resolution: "globby@npm:6.1.0" - dependencies: - array-union: ^1.0.1 - glob: ^7.0.3 - object-assign: ^4.0.1 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: 18109d6b9d55643d2b98b59c3cfae7073ccfe39829632f353d516cc124d836c2ddebe48a23f04af63d66a621b6d86dd4cbd7e6af906f2458a7fe510ffc4bd424 - languageName: node - linkType: hard - -"google-auth-library@npm:^8.0.2, google-auth-library@npm:^8.1.1": - version: 8.9.0 - resolution: "google-auth-library@npm:8.9.0" - dependencies: - arrify: ^2.0.0 - base64-js: ^1.3.0 - ecdsa-sig-formatter: ^1.0.11 - fast-text-encoding: ^1.0.0 - gaxios: ^5.0.0 - gcp-metadata: ^5.3.0 - gtoken: ^6.1.0 - jws: ^4.0.0 - lru-cache: ^6.0.0 - checksum: 8e0bc5f1e91804523786413bf4358e4c5ad94b1e873c725ddd03d0f1c242e2b38e26352c0f375334fbc1d94110f761b304aa0429de49b4a27ebc3875a5b56644 - languageName: node - linkType: hard - -"google-p12-pem@npm:^4.0.0": - version: 4.0.1 - resolution: "google-p12-pem@npm:4.0.1" - dependencies: - node-forge: ^1.3.1 - bin: - gp12-pem: build/src/bin/gp12-pem.js - checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd - languageName: node - linkType: hard - -"googleapis-common@npm:^6.0.0": - version: 6.0.4 - resolution: "googleapis-common@npm:6.0.4" - dependencies: - extend: ^3.0.2 - gaxios: ^5.0.1 - google-auth-library: ^8.0.2 - qs: ^6.7.0 - url-template: ^2.0.8 - uuid: ^9.0.0 - checksum: 718db6b533bdbfaef8f50df8ad9c7cf5a145a346dde16601e7380c5a845920c0801fa84b915e82998f9c4fc1ca77022b585fa5e94c3a40ec35600def7b9d94fe - languageName: node - linkType: hard - -"googleapis@npm:^118.0.0": - version: 118.0.0 - resolution: "googleapis@npm:118.0.0" - dependencies: - google-auth-library: ^8.0.2 - googleapis-common: ^6.0.0 - checksum: 9f415214504858ce5ca733d27d0888a837e342ac11f181e2084789275dc0344e73567db0698f34e9c02ed1fc2bd4c71d71abab27f7d91c710011a7f55b0ca86e - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"graphql@npm:^16.3.0": - version: 16.8.1 - resolution: "graphql@npm:16.8.1" - checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 - languageName: node - linkType: hard - -"growly@npm:^1.3.0": - version: 1.3.0 - resolution: "growly@npm:1.3.0" - checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 - languageName: node - linkType: hard - -"gtoken@npm:^6.1.0": - version: 6.1.2 - resolution: "gtoken@npm:6.1.2" - dependencies: - gaxios: ^5.0.1 - google-p12-pem: ^4.0.0 - jws: ^4.0.0 - checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf - languageName: node - linkType: hard - -"gzip-size@npm:5.1.1": - version: 5.1.1 - resolution: "gzip-size@npm:5.1.1" - dependencies: - duplexer: ^0.1.1 - pify: ^4.0.1 - checksum: 6451ba2210877368f6d9ee9b4dc0d14501671472801323bf81fbd38bdeb8525f40a78be45a59d0182895d51e6b60c6314b7d02bd6ed40e7225a01e8d038aac1b - languageName: node - linkType: hard - -"handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c - languageName: node - linkType: hard - -"harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: ^2.0.0 - checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b - languageName: node - linkType: hard - -"has-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-flag@npm:1.0.0" - checksum: ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: ^1.0.0 - checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 - languageName: node - linkType: hard - -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: ^1.0.3 - checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d - languageName: node - linkType: hard - -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: ^2.0.3 - has-values: ^0.1.4 - isobject: ^2.0.0 - checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" - dependencies: - get-value: ^2.0.6 - has-values: ^1.0.0 - isobject: ^3.0.0 - checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.4": - version: 0.1.4 - resolution: "has-values@npm:0.1.4" - checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc - languageName: node - linkType: hard - -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: ^3.0.0 - kind-of: ^4.0.0 - checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 - languageName: node - linkType: hard - -"has@npm:^1.0.0": - version: 1.0.4 - resolution: "has@npm:1.0.4" - checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 - languageName: node - linkType: hard - -"hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" - dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc - languageName: node - linkType: hard - -"hash-base@npm:~3.0": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 - languageName: node - linkType: hard - -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.1 - checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: ^1.1.2 - checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db - languageName: node - linkType: hard - -"he@npm:^1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 - languageName: node - linkType: hard - -"header-case@npm:^2.0.4": - version: 2.0.4 - resolution: "header-case@npm:2.0.4" - dependencies: - capital-case: ^1.0.4 - tslib: ^2.0.3 - checksum: 571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 - languageName: node - linkType: hard - -"headers-polyfill@npm:3.2.5": - version: 3.2.5 - resolution: "headers-polyfill@npm:3.2.5" - checksum: a3c4bdd661584fd39e40c0f91412abc514616edfbd20d29a75567e591f90ef5c445c8e209b7f3c2b2375d27e95e4690f33417368a168d4832484a93861ab6a3c - languageName: node - linkType: hard - -"headers-polyfill@npm:^3.0.4": - version: 3.3.0 - resolution: "headers-polyfill@npm:3.3.0" - checksum: 6dd010544b7c1a878aa612b49d9e27d273aa9e8a462e1ae05ca212fafa68e6b7cbdec4765f4e443b2fe70d2818f5d9814eab53fa2ba793bf1e5a6b6eff760474 - languageName: node - linkType: hard - -"hex-color-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "hex-color-regex@npm:1.1.0" - checksum: 44fa1b7a26d745012f3bfeeab8015f60514f72d2fcf10dce33068352456b8d71a2e6bc5a17f933ab470da2c5ab1e3e04b05caf3fefe3c1cabd7e02e516fc8784 - languageName: node - linkType: hard - -"hexoid@npm:^1.0.0": - version: 1.0.0 - resolution: "hexoid@npm:1.0.0" - checksum: 27a148ca76a2358287f40445870116baaff4a0ed0acc99900bf167f0f708ffd82e044ff55e9949c71963852b580fc024146d3ac6d5d76b508b78d927fa48ae2d - languageName: node - linkType: hard - -"history@npm:^4.9.0": - version: 4.10.1 - resolution: "history@npm:4.10.1" - dependencies: - "@babel/runtime": ^7.1.2 - loose-envify: ^1.2.0 - resolve-pathname: ^3.0.0 - tiny-invariant: ^1.0.2 - tiny-warning: ^1.0.0 - value-equal: ^1.0.1 - checksum: addd84bc4683929bae4400419b5af132ff4e4e9b311a0d4e224579ea8e184a6b80d7f72c55927e4fa117f69076a9e47ce082d8d0b422f1a9ddac7991490ca1d0 - languageName: node - linkType: hard - -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" - dependencies: - hash.js: ^1.0.3 - minimalistic-assert: ^1.0.0 - minimalistic-crypto-utils: ^1.0.1 - checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.1": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - -"hoopy@npm:^0.1.4": - version: 0.1.4 - resolution: "hoopy@npm:0.1.4" - checksum: cfa60c7684c5e1ee4efe26e167bc54b73f839ffb59d1d44a5c4bf891e26b4f5bcc666555219a98fec95508fea4eda3a79540c53c05cc79afc1f66f9a238f4d9e - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - -"hpack.js@npm:^2.1.6": - version: 2.1.6 - resolution: "hpack.js@npm:2.1.6" - dependencies: - inherits: ^2.0.1 - obuf: ^1.0.0 - readable-stream: ^2.0.1 - wbuf: ^1.1.0 - checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e - languageName: node - linkType: hard - -"hsl-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsl-regex@npm:1.0.0" - checksum: de9ee1bf39de1b83cc3fa0fa1cc337f29f14911e79411d66347365c54fab6b109eea2dd741eaa02486e24de31627ad7bf4453f22224fb55a2fe2b58166fa63b8 - languageName: node - linkType: hard - -"hsla-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsla-regex@npm:1.0.0" - checksum: 9aa6eb9ff6c102d2395435aa5d1d91eae20043c4b1497c543d8db501c05f3edacd9a07fb34a987059d7902dba415af4cb4e610f751859ae8e7525df4ffcd085f - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba - languageName: node - linkType: hard - -"html-entities@npm:^1.2.1, html-entities@npm:^1.3.1": - version: 1.4.0 - resolution: "html-entities@npm:1.4.0" - checksum: 4b73ffb9eead200f99146e4fbe70acb0af2fea136901a131fc3a782e9ef876a7cbb07dec303ca1f8804232b812249dbf3643a270c9c524852065d9224a8dcdd0 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - -"html-minifier-terser@npm:^5.0.1": - version: 5.1.1 - resolution: "html-minifier-terser@npm:5.1.1" - dependencies: - camel-case: ^4.1.1 - clean-css: ^4.2.3 - commander: ^4.1.1 - he: ^1.2.0 - param-case: ^3.0.3 - relateurl: ^0.2.7 - terser: ^4.6.3 - bin: - html-minifier-terser: cli.js - checksum: 75ff3ff886631b9ecb3035acb8e7dd98c599bb4d4618ad6f7e487ee9752987dddcf6848dc3c1ab1d7fc1ad4484337c2ce39c19eac17b0342b4b15e4294c8a904 - languageName: node - linkType: hard - -"html-webpack-plugin@npm:4.5.0": - version: 4.5.0 - resolution: "html-webpack-plugin@npm:4.5.0" - dependencies: - "@types/html-minifier-terser": ^5.0.0 - "@types/tapable": ^1.0.5 - "@types/webpack": ^4.41.8 - html-minifier-terser: ^5.0.1 - loader-utils: ^1.2.3 - lodash: ^4.17.15 - pretty-error: ^2.1.1 - tapable: ^1.1.3 - util.promisify: 1.0.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: d197db16a160ab9136a544e297c3c75d34b769d3cee12a82b9e7af7ee38ff07f4a27f2235581a9624f03996cd24997613df807341799140b4427c12bc4f496f9 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.0.0 - domutils: ^2.5.2 - entities: ^2.0.0 - checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-deceiver@npm:^1.2.7": - version: 1.2.7 - resolution: "http-deceiver@npm:1.2.7" - checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 - languageName: node - linkType: hard - -"http-errors@npm:~1.6.2": - version: 1.6.3 - resolution: "http-errors@npm:1.6.3" - dependencies: - depd: ~1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: ">= 1.4.0 < 2" - checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c - languageName: node - linkType: hard - -"http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d - languageName: node - linkType: hard - -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: ^7.1.0 - debug: ^4.3.4 - checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 - languageName: node - linkType: hard - -"http-proxy-middleware@npm:0.19.1": - version: 0.19.1 - resolution: "http-proxy-middleware@npm:0.19.1" - dependencies: - http-proxy: ^1.17.0 - is-glob: ^4.0.0 - lodash: ^4.17.11 - micromatch: ^3.1.10 - checksum: 64df0438417a613bb22b3689d9652a1b7a56f10b145a463f95f4e8a9b9a351f2c63bc5fd3a9cd710baec224897733b6f299cb7f974ea82769b2a4f1e074764ac - languageName: node - linkType: hard - -"http-proxy@npm:^1.17.0": - version: 1.18.1 - resolution: "http-proxy@npm:1.18.1" - dependencies: - eventemitter3: ^4.0.0 - follow-redirects: ^1.0.0 - requires-port: ^1.0.0 - checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 - languageName: node - linkType: hard - -"https-browserify@npm:^1.0.0": - version: 1.0.0 - resolution: "https-browserify@npm:1.0.0" - checksum: 09b35353e42069fde2435760d13f8a3fb7dd9105e358270e2e225b8a94f811b461edd17cb57594e5f36ec1218f121c160ddceeec6e8be2d55e01dcbbbed8cbae - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" - dependencies: - agent-base: ^7.0.2 - debug: 4 - checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 - languageName: node - linkType: hard - -"human-signals@npm:^1.1.1": - version: 1.1.1 - resolution: "human-signals@npm:1.1.1" - checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"icss-replace-symbols@npm:1.1.0, icss-replace-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "icss-replace-symbols@npm:1.1.0" - checksum: 24575b2c2f7e762bfc6f4beee31be9ba98a01cad521b5aa9954090a5de2b5e1bf67814c17e22f9e51b7d798238db8215a173d6c2b4726ce634ce06b68ece8045 - languageName: node - linkType: hard - -"icss-utils@npm:^4.0.0, icss-utils@npm:^4.1.1": - version: 4.1.1 - resolution: "icss-utils@npm:4.1.1" - dependencies: - postcss: ^7.0.14 - checksum: a4ca2c6b82cb3eb879d635bd4028d74bca174edc49ee48ef5f01988489747d340a389d5a0ac6f6887a5c24ab8fc4386c781daab32a7ade5344a2edff66207635 - languageName: node - linkType: hard - -"identity-obj-proxy@npm:3.0.0": - version: 3.0.0 - resolution: "identity-obj-proxy@npm:3.0.0" - dependencies: - harmony-reflect: ^1.4.6 - checksum: 97559f8ea2aeaa1a880d279d8c49550dce01148321e00a2102cda5ddf9ce622fa1d7f3efc7bed63458af78889de888fdaebaf31c816312298bb3fdd0ef8aaf2c - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e - languageName: node - linkType: hard - -"iferr@npm:^0.1.5": - version: 0.1.5 - resolution: "iferr@npm:0.1.5" - checksum: a18d19b6ad06a2d5412c0d37f6364869393ef6d1688d59d00082c1f35c92399094c031798340612458cd832f4f2e8b13bc9615934a7d8b0c53061307a3816aa1 - languageName: node - linkType: hard - -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a - languageName: node - linkType: hard - -"ignore@npm:^4.0.6": - version: 4.0.6 - resolution: "ignore@npm:4.0.6" - checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 - languageName: node - linkType: hard - -"ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 - languageName: node - linkType: hard - -"immer@npm:8.0.1": - version: 8.0.1 - resolution: "immer@npm:8.0.1" - checksum: 63d875c04882b862481a0a692816e5982975a47a57619698bc1bb52963ad3b624911991708b2b81a7af6fdac15083d408e43932d83a6a61216e5a4503efd4095 - languageName: node - linkType: hard - -"immutable@npm:^4.0.0": - version: 4.3.5 - resolution: "immutable@npm:4.3.5" - checksum: 0e25dd5c314421faede9e1122ab26cdb638cc3edc8678c4a75dee104279b12621a30c80a480fae7f68bc7e81672f1e672e454dc0fdc7e6cf0af10809348387b8 - languageName: node - linkType: hard - -"import-cwd@npm:^2.0.0": - version: 2.1.0 - resolution: "import-cwd@npm:2.1.0" - dependencies: - import-from: ^2.1.0 - checksum: b8786fa3578f3df55370352bf61f99c2d8e6ee9b5741a07503d5a73d99281d141330a8faf87078e67527be4558f758356791ee5efb4b0112ac5eaed0f07de544 - languageName: node - linkType: hard - -"import-fresh@npm:^2.0.0": - version: 2.0.0 - resolution: "import-fresh@npm:2.0.0" - dependencies: - caller-path: ^2.0.0 - resolve-from: ^3.0.0 - checksum: 610255f9753cc6775df00be08e9f43691aa39f7703e3636c45afe22346b8b545e600ccfe100c554607546fc8e861fa149a0d1da078c8adedeea30fff326eef79 - languageName: node - linkType: hard - -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"import-from@npm:^2.1.0": - version: 2.1.0 - resolution: "import-from@npm:2.1.0" - dependencies: - resolve-from: ^3.0.0 - checksum: 91f6f89f46a07227920ef819181bb52eb93023ccc0bdf00224fdfb326f8f753e279ad06819f39a02bb88c9d3a4606adc85b0cc995285e5d65feeb59f1421a1d4 - languageName: node - linkType: hard - -"import-local@npm:^2.0.0": - version: 2.0.0 - resolution: "import-local@npm:2.0.0" - dependencies: - pkg-dir: ^3.0.0 - resolve-cwd: ^2.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: b8469252483624379fd65d53c82f3658b32a1136f7168bfeea961a4ea7ca10a45786ea2b02e0006408f9cd22d2f33305a6f17a64e4d5a03274a50942c5e7c949 - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"indexes-of@npm:^1.0.1": - version: 1.0.1 - resolution: "indexes-of@npm:1.0.1" - checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.3, infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 - languageName: node - linkType: hard - -"ini@npm:^1.3.5": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - -"inline-style-parser@npm:0.1.1": - version: 0.1.1 - resolution: "inline-style-parser@npm:0.1.1" - checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 - languageName: node - linkType: hard - -"inquirer@npm:^8.2.0": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" - dependencies: - ansi-escapes: ^4.2.1 - chalk: ^4.1.1 - cli-cursor: ^3.1.0 - cli-width: ^3.0.0 - external-editor: ^3.0.3 - figures: ^3.0.0 - lodash: ^4.17.21 - mute-stream: 0.0.8 - ora: ^5.4.1 - run-async: ^2.4.0 - rxjs: ^7.5.5 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - through: ^2.3.6 - wrap-ansi: ^6.0.1 - checksum: 387ffb0a513559cc7414eb42c57556a60e302f820d6960e89d376d092e257a919961cd485a1b4de693dbb5c0de8bc58320bfd6247dfd827a873aa82a4215a240 - languageName: node - linkType: hard - -"internal-ip@npm:^4.3.0": - version: 4.3.0 - resolution: "internal-ip@npm:4.3.0" - dependencies: - default-gateway: ^4.2.0 - ipaddr.js: ^1.9.0 - checksum: c970433c84d9a6b46e2c9f5ab7785d3105b856d0a566891bf919241b5a884c5c1c9bf8e915aebb822a86c14b1b6867e58c1eaf5cd49eb023368083069d1a4a9a - languageName: node - linkType: hard - -"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": - version: 1.0.7 - resolution: "internal-slot@npm:1.0.7" - dependencies: - es-errors: ^1.3.0 - hasown: ^2.0.0 - side-channel: ^1.0.4 - checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: 1.1.0 - sprintf-js: ^1.1.3 - checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc - languageName: node - linkType: hard - -"ip-regex@npm:^2.1.0": - version: 2.1.0 - resolution: "ip-regex@npm:2.1.0" - checksum: 331d95052aa53ce245745ea0fc3a6a1e2e3c8d6da65fa8ea52bf73768c1b22a9ac50629d1d2b08c04e7b3ac4c21b536693c149ce2c2615ee4796030e5b3e3cba - languageName: node - linkType: hard - -"ip@npm:^1.1.0, ip@npm:^1.1.5": - version: 1.1.9 - resolution: "ip@npm:1.1.9" - checksum: b6d91fd45a856e3bd6d4f601ea0619d90f3517638f6918ebd079f959a8a6308568d8db5ef4fdf037e0d9cfdcf264f46833dfeea81ca31309cf0a7eb4b1307b84 - languageName: node - linkType: hard - -"ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.9.0": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 - languageName: node - linkType: hard - -"is-absolute-url@npm:^2.0.0": - version: 2.1.0 - resolution: "is-absolute-url@npm:2.1.0" - checksum: 781e8cf8a2af54b1b7a92f269244d96c66224030d91120e734ebeebbce044c167767e1389789d8aaf82f9e429cb20ae93d6d0acfe6c4b53d2bd6ebb47a236d76 - languageName: node - linkType: hard - -"is-absolute-url@npm:^3.0.3": - version: 3.0.3 - resolution: "is-absolute-url@npm:3.0.3" - checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-accessor-descriptor@npm:1.0.1" - dependencies: - hasown: ^2.0.0 - checksum: 8db44c02230a5e9b9dec390a343178791f073d5d5556a400527d2fd67a72d93b226abab2bd4123305c268f5dc22831bfdbd38430441fda82ea9e0b95ddc6b267 - languageName: node - linkType: hard - -"is-alphabetical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphabetical@npm:1.0.4" - checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb - languageName: node - linkType: hard - -"is-alphanumerical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphanumerical@npm:1.0.4" - dependencies: - is-alphabetical: ^1.0.0 - is-decimal: ^1.0.0 - checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f - languageName: node - linkType: hard - -"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": - version: 3.0.4 - resolution: "is-array-buffer@npm:3.0.4" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" - dependencies: - has-tostringtag: ^1.0.0 - checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd - languageName: node - linkType: hard - -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" - dependencies: - has-bigints: ^1.0.1 - checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 - languageName: node - linkType: hard - -"is-binary-path@npm:^1.0.0": - version: 1.0.1 - resolution: "is-binary-path@npm:1.0.1" - dependencies: - binary-extensions: ^1.0.0 - checksum: a803c99e9d898170c3b44a86fbdc0736d3d7fcbe737345433fb78e810b9fe30c982657782ad0e676644ba4693ddf05601a7423b5611423218663d6b533341ac9 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 - languageName: node - linkType: hard - -"is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 - languageName: node - linkType: hard - -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac - languageName: node - linkType: hard - -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" - dependencies: - ci-info: ^2.0.0 - bin: - is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 - languageName: node - linkType: hard - -"is-color-stop@npm:^1.0.0": - version: 1.1.0 - resolution: "is-color-stop@npm:1.1.0" - dependencies: - css-color-names: ^0.0.4 - hex-color-regex: ^1.1.0 - hsl-regex: ^1.0.0 - hsla-regex: ^1.0.0 - rgb-regex: ^1.0.1 - rgba-regex: ^1.0.0 - checksum: 778dd52a603ab8da827925aa4200fe6733b667b216495a04110f038b925dc5ef58babe759b94ffc4e44fcf439328695770873937f59d6045f676322b97f3f92d - languageName: node - linkType: hard - -"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" - dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c - languageName: node - linkType: hard - -"is-data-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-descriptor@npm:1.0.1" - dependencies: - hasown: ^2.0.0 - checksum: fc6da5be5177149d554c5612cc382e9549418ed72f2d3ed5a3e6511b03dd119ae1b2258320ca94931df50b7e9ee012894eccd4ca45bbcadf0d5b27da6faeb15a - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-view@npm:1.0.1" - dependencies: - is-typed-array: ^1.1.13 - checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" - dependencies: - has-tostringtag: ^1.0.0 - checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc - languageName: node - linkType: hard - -"is-decimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-decimal@npm:1.0.4" - checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 - languageName: node - linkType: hard - -"is-descriptor@npm:^0.1.0": - version: 0.1.7 - resolution: "is-descriptor@npm:0.1.7" - dependencies: - is-accessor-descriptor: ^1.0.1 - is-data-descriptor: ^1.0.1 - checksum: 45743109f0bb03f9fa989c34d31ece87cc15792649f147b896a7c4db2906a02fca685867619f4d312e024d7bbd53b945a47c6830d01f5e73efcc6388ac211963 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.3 - resolution: "is-descriptor@npm:1.0.3" - dependencies: - is-accessor-descriptor: ^1.0.1 - is-data-descriptor: ^1.0.1 - checksum: 316153b2fd86ac23b0a2f28b77744ae0a4e3c7a54fe52fa70b125d0971eb0a3bcfb562fa8e74537af0dad5bc405cc606726eb501fc748a241c10910deea89cfb - languageName: node - linkType: hard - -"is-directory@npm:^0.3.1": - version: 0.3.1 - resolution: "is-directory@npm:0.3.1" - checksum: dce9a9d3981e38f2ded2a80848734824c50ee8680cd09aa477bef617949715cfc987197a2ca0176c58a9fb192a1a0d69b535c397140d241996a609d5906ae524 - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-electron@npm:2.2.2": - version: 2.2.2 - resolution: "is-electron@npm:2.2.2" - checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 - languageName: node - linkType: hard - -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: ^2.0.4 - checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b - languageName: node - linkType: hard - -"is-glob@npm:^3.1.0": - version: 3.1.0 - resolution: "is-glob@npm:3.1.0" - dependencies: - is-extglob: ^2.1.0 - checksum: 9d483bca84f16f01230f7c7c8c63735248fe1064346f292e0f6f8c76475fd20c6f50fc19941af5bec35f85d6bf26f4b7768f39a48a5f5fdc72b408dc74e07afc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-hexadecimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-hexadecimal@npm:1.0.4" - checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-map@npm:^2.0.2, is-map@npm:^2.0.3": - version: 2.0.3 - resolution: "is-map@npm:2.0.3" - checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc - languageName: node - linkType: hard - -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.3": - version: 2.0.3 - resolution: "is-negative-zero@npm:2.0.3" - checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd - languageName: node - linkType: hard - -"is-node-process@npm:^1.0.1": - version: 1.2.0 - resolution: "is-node-process@npm:1.2.0" - checksum: 930765cdc6d81ab8f1bbecbea4a8d35c7c6d88a3ff61f3630e0fc7f22d624d7661c1df05c58547d0eb6a639dfa9304682c8e342c4113a6ed51472b704cee2928 - languageName: node - linkType: hard - -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 - languageName: node - linkType: hard - -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: ^3.0.2 - checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-obj@npm:^1.0.1": - version: 1.0.1 - resolution: "is-obj@npm:1.0.1" - checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 - languageName: node - linkType: hard - -"is-path-cwd@npm:^2.0.0": - version: 2.2.0 - resolution: "is-path-cwd@npm:2.2.0" - checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 - languageName: node - linkType: hard - -"is-path-in-cwd@npm:^2.0.0": - version: 2.1.0 - resolution: "is-path-in-cwd@npm:2.1.0" - dependencies: - is-path-inside: ^2.1.0 - checksum: 6b01b3f8c9172e9682ea878d001836a0cc5a78cbe6236024365d478c2c9e384da2417e5f21f2ad2da2761d0465309fc5baf6e71187d2a23f0058da69790f7f48 - languageName: node - linkType: hard - -"is-path-inside@npm:^2.1.0": - version: 2.1.0 - resolution: "is-path-inside@npm:2.1.0" - dependencies: - path-is-inside: ^1.0.2 - checksum: 6ca34dbd84d5c50a3ee1547afb6ada9b06d556a4ff42da9b303797e4acc3ac086516a4833030aa570f397f8c58dacabd57ee8e6c2ce8b2396a986ad2af10fcaf - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.0.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 - languageName: node - linkType: hard - -"is-plain-obj@npm:^2.0.0": - version: 2.1.0 - resolution: "is-plain-obj@npm:2.1.0" - checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 - languageName: node - linkType: hard - -"is-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "is-regexp@npm:1.0.0" - checksum: be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef - languageName: node - linkType: hard - -"is-resolvable@npm:^1.0.0": - version: 1.1.0 - resolution: "is-resolvable@npm:1.1.0" - checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 - languageName: node - linkType: hard - -"is-root@npm:2.1.0": - version: 2.1.0 - resolution: "is-root@npm:2.1.0" - checksum: 37eea0822a2a9123feb58a9d101558ba276771a6d830f87005683349a9acff15958a9ca590a44e778c6b335660b83e85c744789080d734f6081a935a4880aee2 - languageName: node - linkType: hard - -"is-set@npm:^2.0.2, is-set@npm:^2.0.3": - version: 2.0.3 - resolution: "is-set@npm:2.0.3" - checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "is-shared-array-buffer@npm:1.0.3" - dependencies: - call-bind: ^1.0.7 - checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" - dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" - dependencies: - which-typed-array: ^1.1.14 - checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 - languageName: node - linkType: hard - -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.3": - version: 2.0.3 - resolution: "is-weakset@npm:2.0.3" - dependencies: - call-bind: ^1.0.7 - get-intrinsic: ^1.2.4 - checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae - languageName: node - linkType: hard - -"is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"is-wsl@npm:^1.1.0": - version: 1.1.0 - resolution: "is-wsl@npm:1.1.0" - checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe - languageName: node - linkType: hard - -"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - -"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e - languageName: node - linkType: hard - -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: 1.0.0 - checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^4.0.3": - version: 4.0.3 - resolution: "istanbul-lib-instrument@npm:4.0.3" - dependencies: - "@babel/core": ^7.7.5 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.0.0 - semver: ^6.3.0 - checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - 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 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^4.0.0 - supports-color: ^7.1.0 - checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.0.2": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 - languageName: node - linkType: hard - -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" - 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 - checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.6": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"jest-changed-files@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-changed-files@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - execa: ^4.0.0 - throat: ^5.0.0 - checksum: 8c405f5ff905ee69ace9fd39355233206e3e233badf6a3f3b27e45bbf0a46d86943430be2e080d25b1e085f4231b9b3b27c94317aa04116efb40b592184066f4 - languageName: node - linkType: hard - -"jest-circus@npm:26.6.0": - version: 26.6.0 - resolution: "jest-circus@npm:26.6.0" - dependencies: - "@babel/traverse": ^7.1.0 - "@jest/environment": ^26.6.0 - "@jest/test-result": ^26.6.0 - "@jest/types": ^26.6.0 - "@types/babel__traverse": ^7.0.4 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - expect: ^26.6.0 - is-generator-fn: ^2.0.0 - jest-each: ^26.6.0 - jest-matcher-utils: ^26.6.0 - jest-message-util: ^26.6.0 - jest-runner: ^26.6.0 - jest-runtime: ^26.6.0 - jest-snapshot: ^26.6.0 - jest-util: ^26.6.0 - pretty-format: ^26.6.0 - stack-utils: ^2.0.2 - throat: ^5.0.0 - checksum: acc354223964bafd40fd1caae4099b58ccb1551bc93a394398b441274c225552f1941ce9903d126fb0adc3952a108e2994270c6a50a3e7e5af931b65b8c170f0 - languageName: node - linkType: hard - -"jest-cli@npm:^26.6.0": - version: 26.6.3 - resolution: "jest-cli@npm:26.6.3" - dependencies: - "@jest/core": ^26.6.3 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - import-local: ^3.0.2 - is-ci: ^2.0.0 - jest-config: ^26.6.3 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - prompts: ^2.0.1 - yargs: ^15.4.1 - bin: - jest: bin/jest.js - checksum: c8554147be756f09f5566974f0026485f78742e8642d2723f8fbee5746f50f44fb72b17aad181226655a8446d3ecc8ad8ed0a11a8a55686fa2b9c10d85700121 - languageName: node - linkType: hard - -"jest-config@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-config@npm:26.6.3" - dependencies: - "@babel/core": ^7.1.0 - "@jest/test-sequencer": ^26.6.3 - "@jest/types": ^26.6.2 - babel-jest: ^26.6.3 - chalk: ^4.0.0 - deepmerge: ^4.2.2 - glob: ^7.1.1 - graceful-fs: ^4.2.4 - jest-environment-jsdom: ^26.6.2 - jest-environment-node: ^26.6.2 - jest-get-type: ^26.3.0 - jest-jasmine2: ^26.6.3 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 - peerDependencies: - ts-node: ">=9.0.0" - peerDependenciesMeta: - ts-node: - optional: true - checksum: 303c798582d3c5d4b4e6ab8a4d91a83ded28e4ebbc0bcfc1ad271f9864437ef5409b7c7773010143811bc8176b0695c096717b91419c6484b56dcc032560a74b - languageName: node - linkType: hard - -"jest-diff@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-diff@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: d00d297f31e1ac0252127089892432caa7a11c69bde29cf3bb6c7a839c8afdb95cf1fd401f9df16a4422745da2e6a5d94b428b30666a2540c38e1c5699915c2d - languageName: node - linkType: hard - -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 - languageName: node - linkType: hard - -"jest-docblock@npm:^26.0.0": - version: 26.0.0 - resolution: "jest-docblock@npm:26.0.0" - dependencies: - detect-newline: ^3.0.0 - checksum: e03ef104ee8c571335e6fa394b8fc8d2bd87eec9fe8b3d7d9aac056ada7de288f37ee8ac4922bb3a4222ac304db975d8832d5abc85486092866c534a16847cd5 - languageName: node - linkType: hard - -"jest-each@npm:^26.6.0, jest-each@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-each@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - jest-get-type: ^26.3.0 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - checksum: 4e00ea4667e4fe015b894dc698cce0ae695cf458e021e5da62d4a5b052cd2c0a878da93f8c97cbdde60bcecf70982e8d3a7a5d63e1588f59531cc797a18c39ef - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-jsdom@npm:26.6.2" - dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - jsdom: ^16.4.0 - checksum: 8af9ffdf1b147362a19032bfe9ed51b709d43c74dc4b1c45e56d721808bf6cabdca8c226855b55a985ea196ce51cdb171bfe420ceec3daa2d13818d5c1915890 - languageName: node - linkType: hard - -"jest-environment-node@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-node@npm:26.6.2" - dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: 0b69b481e6d6f2350ed241c2dabc70b0b1f3a00f9a410b7dad97c8ab38e88026acf7445ca663eb314f46ff50acee0133100b1006bf4ebda5298ffb02763a6861 - languageName: node - linkType: hard - -"jest-fail-on-console@npm:^3.0.2": - version: 3.2.0 - resolution: "jest-fail-on-console@npm:3.2.0" - checksum: 389aa581484825a285fc27f959369a674d4a81ede7474218a27d3596cfc8ed6ea13a0f99053e5d08d7fa43b68246ab8ff51592a70fdb9b4e2b355ca9a165221a - languageName: node - linkType: hard - -"jest-get-type@npm:^26.3.0": - version: 26.3.0 - resolution: "jest-get-type@npm:26.3.0" - checksum: 1cc6465ae4f5e880be22ba52fd270fa64c21994915f81b41f8f7553a7957dd8e077cc8d03035de9412e2d739f8bad6a032ebb5dab5805692a5fb9e20dd4ea666 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 - languageName: node - linkType: hard - -"jest-haste-map@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-haste-map@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@types/graceful-fs": ^4.1.2 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.1.2 - graceful-fs: ^4.2.4 - jest-regex-util: ^26.0.0 - jest-serializer: ^26.6.2 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - micromatch: ^4.0.2 - sane: ^4.0.3 - walker: ^1.0.7 - dependenciesMeta: - fsevents: - optional: true - checksum: 8ad5236d5646d2388d2bd58a57ea53698923434f43d59ea9ebdc58bce4d0b8544c8de2f7acaa9a6d73171f04460388b2b6d7d6b6c256aea4ebb8780140781596 - languageName: node - linkType: hard - -"jest-jasmine2@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-jasmine2@npm:26.6.3" - dependencies: - "@babel/traverse": ^7.1.0 - "@jest/environment": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^26.6.2 - is-generator-fn: ^2.0.0 - jest-each: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - throat: ^5.0.0 - checksum: 41df0b993ae0cdeb2660fb3d8e88e2dcc83aec6b5c27d85eb233c2d507b546f8dce45fc54898ffbefa48ccc4633f225d0e023fd0979b8f7f2f1626074a69a9a3 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-leak-detector@npm:26.6.2" - dependencies: - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 364dd4d021347e26c66ba9c09da8a30477f14a3a8a208d2d7d64e4c396db81b85d8cb6b6834bcfc47a61b5938e274553957d11a7de2255f058c9d55d7f8fdfe7 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^26.6.0, jest-matcher-utils@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-matcher-utils@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 74d2165c1ac7fe98fe27cd2b5407499478e6b2fe99dd54e26d8ee5c9f5f913bdd7bdc07c7221b9b04df0c15e9be0e866ff3455b03e38cc66c480d9996d6d5405 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd - languageName: node - linkType: hard - -"jest-message-util@npm:^26.6.0, jest-message-util@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-message-util@npm:26.6.2" - dependencies: - "@babel/code-frame": ^7.0.0 - "@jest/types": ^26.6.2 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 - slash: ^3.0.0 - stack-utils: ^2.0.2 - checksum: ffe5a715591c41240b9ed4092faf10f3eaf9ddfdf25d257a0c9f903aaa8d9eed5baa7e38016d2ec4f610fd29225e0f5231a91153e087a043e62824972c83d015 - languageName: node - linkType: hard - -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - 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 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 - languageName: node - linkType: hard - -"jest-mock@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-mock@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@types/node": "*" - checksum: 6c0fe028ff0cdc87b5d63b9ca749af04cae6c5577aaab234f602e546cae3f4b932adac9d77e6de2abb24955ee00978e1e5d5a861725654e2f9a42317d91fbc1f - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^26.0.0": - version: 26.0.0 - resolution: "jest-regex-util@npm:26.0.0" - checksum: 930a00665e8dfbedc29140678b4a54f021b41b895cf35050f76f557c1da3ac48ff42dd7b18ba2ccba6f4e518c6445d6753730d03ec7049901b93992db1ef0483 - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-resolve-dependencies@npm:26.6.3" - dependencies: - "@jest/types": ^26.6.2 - jest-regex-util: ^26.0.0 - jest-snapshot: ^26.6.2 - checksum: 533ea1e271426006ff02c03c9802b108fcd68f2144615b6110ae59f3a0a2cc4a7abb3f44c3c65299c76b3a725d5d8220aaed9c58b79c8c8c508c18699a96e3f7 - languageName: node - linkType: hard - -"jest-resolve@npm:26.6.0": - version: 26.6.0 - resolution: "jest-resolve@npm:26.6.0" - dependencies: - "@jest/types": ^26.6.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - jest-pnp-resolver: ^1.2.2 - jest-util: ^26.6.0 - read-pkg-up: ^7.0.1 - resolve: ^1.17.0 - slash: ^3.0.0 - checksum: c5d0277d4aa22f9f38693ba3e5d6176edf2e367af2f0c38e16c88e9b80b2292ee4d9df9b3675607f5d0c0b2652b4e3f69d8155f9fedd83ddd0ef937cfb6230c0 - languageName: node - linkType: hard - -"jest-resolve@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-resolve@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - jest-pnp-resolver: ^1.2.2 - jest-util: ^26.6.2 - read-pkg-up: ^7.0.1 - resolve: ^1.18.1 - slash: ^3.0.0 - checksum: d6264d3f39b098753802a237c8c54f3109f5f3b3b7fa6f8d7aec7dca01b357ddf518ce1c33a68454357c15f48fb3c6026a92b9c4f5d72f07e24e80f04bcc8d58 - languageName: node - linkType: hard - -"jest-runner@npm:^26.6.0, jest-runner@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runner@npm:26.6.3" - dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.7.1 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-docblock: ^26.0.0 - jest-haste-map: ^26.6.2 - jest-leak-detector: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 - jest-runtime: ^26.6.3 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - source-map-support: ^0.5.6 - throat: ^5.0.0 - checksum: ccd69918baa49a5efa45985cf60cfa1fbb1686b32d7a86296b7b55f89684e36d1f08e62598c4b7be7e81f2cf2e245d1a65146ea7bdcaedfa6ed176d3e645d7e2 - languageName: node - linkType: hard - -"jest-runtime@npm:^26.6.0, jest-runtime@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runtime@npm:26.6.3" - dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/globals": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/yargs": ^15.0.0 - chalk: ^4.0.0 - cjs-module-lexer: ^0.6.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - slash: ^3.0.0 - strip-bom: ^4.0.0 - yargs: ^15.4.1 - bin: - jest-runtime: bin/jest-runtime.js - checksum: 867922b49f9ab4cf2f5f1356ac3d9962c4477c7a2ff696cc841ea4c600ea389e7d6dfcbf945fec6849e606f81980addf31e4f34d63eaa3d3415f4901de2f605a - languageName: node - linkType: hard - -"jest-serializer@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-serializer@npm:26.6.2" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.4 - checksum: dbecfb0d01462fe486a0932cf1680cf6abb204c059db2a8f72c6c2a7c9842a82f6d256874112774cea700764ed8f38fc9e3db982456c138d87353e3390e746fe - languageName: node - linkType: hard - -"jest-snapshot@npm:^26.6.0, jest-snapshot@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-snapshot@npm:26.6.2" - dependencies: - "@babel/types": ^7.0.0 - "@jest/types": ^26.6.2 - "@types/babel__traverse": ^7.0.4 - "@types/prettier": ^2.0.0 - chalk: ^4.0.0 - expect: ^26.6.2 - graceful-fs: ^4.2.4 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - jest-haste-map: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 - natural-compare: ^1.4.0 - pretty-format: ^26.6.2 - semver: ^7.3.2 - checksum: 53f1de055b1d3840bc6e851fd674d5991b844d4695dadbd07354c93bf191048d8767b8606999847e97c4214a485b9afb45c1d2411772befa1870414ac973b3e2 - languageName: node - linkType: hard - -"jest-util@npm:^26.1.0, jest-util@npm:^26.6.0, jest-util@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-util@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - "@types/node": "*" - chalk: ^4.0.0 - graceful-fs: ^4.2.4 - is-ci: ^2.0.0 - micromatch: ^4.0.2 - checksum: 3c6a5fba05c4c6892cd3a9f66196ea8867087b77a5aa1a3f6cd349c785c3f1ca24abfd454664983aed1a165cab7846688e44fe8630652d666ba326b08625bc3d - languageName: node - linkType: hard - -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - 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 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - -"jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca - languageName: node - linkType: hard - -"jest-validate@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-validate@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - camelcase: ^6.0.0 - chalk: ^4.0.0 - jest-get-type: ^26.3.0 - leven: ^3.1.0 - pretty-format: ^26.6.2 - checksum: bac11d6586d9b8885328a4a66eec45b692e45ac23034a5c09eb0ee32de324f2d3d52b073e0c34e9c222b3642b083d1152a736cf24c52109e4957537d731ca62b - languageName: node - linkType: hard - -"jest-watch-typeahead@npm:0.6.1": - version: 0.6.1 - resolution: "jest-watch-typeahead@npm:0.6.1" - dependencies: - ansi-escapes: ^4.3.1 - chalk: ^4.0.0 - jest-regex-util: ^26.0.0 - jest-watcher: ^26.3.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - peerDependencies: - jest: ^26.0.0 - checksum: a65dfd080e68b79ce7c861ec07791a0768820049a1d6a471d01f3fc41ee88723db29b434e19c917421e7f34ec567bcade368f3671e234c557288e206f7fd4257 - languageName: node - linkType: hard - -"jest-watcher@npm:^26.3.0, jest-watcher@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-watcher@npm:26.6.2" - dependencies: - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - jest-util: ^26.6.2 - string-length: ^4.0.1 - checksum: 401137f1a73bf23cdf390019ebffb3f6f89c53ca49d48252d1dd6daf17a68787fef75cc55a623de28b63d87d0e8f13d8972d7dd06740f2f64f7b2a0409d119d2 - languageName: node - linkType: hard - -"jest-worker@npm:^24.9.0": - version: 24.9.0 - resolution: "jest-worker@npm:24.9.0" - dependencies: - merge-stream: ^2.0.0 - supports-color: ^6.1.0 - checksum: bd23b6c8728dcf3bad0d84543ea1bc4a95ccd3b5a40f9e2796d527ab0e87dc6afa6c30cc7b67845dce1cfe7894753812d19793de605db1976b7ac08930671bff - languageName: node - linkType: hard - -"jest-worker@npm:^26.5.0, jest-worker@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-worker@npm:26.6.2" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^7.0.0 - checksum: f9afa3b88e3f12027901e4964ba3ff048285b5783b5225cab28fac25b4058cea8ad54001e9a1577ee2bed125fac3ccf5c80dc507b120300cc1bbcb368796533e - languageName: node - linkType: hard - -"jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 - languageName: node - linkType: hard - -"jest@npm:26.6.0": - version: 26.6.0 - resolution: "jest@npm:26.6.0" - dependencies: - "@jest/core": ^26.6.0 - import-local: ^3.0.2 - jest-cli: ^26.6.0 - bin: - jest: bin/jest.js - checksum: e0d3efff0dc2a31c453a3f7d87586e5d6c0f008c9b827bb9204edde09288f922ddfb3a8917480bf68f4ac0298be28637daef98ebaaac65ea23d3cb754a6620c4 - languageName: node - linkType: hard - -"joycon@npm:^3.1.1": - version: 3.1.1 - resolution: "joycon@npm:3.1.1" - checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 - languageName: node - linkType: hard - -"js-levenshtein@npm:^1.1.6": - version: 1.1.6 - resolution: "js-levenshtein@npm:1.1.6" - checksum: 409f052a7f1141be4058d97da7860e08efd97fc588b7a4c5cfa0548bc04f6d576644dae65ab630266dff685d56fb90d494e03d4d79cb484c287746b4f1bf0694 - languageName: node - linkType: hard - -"js-sha3@npm:0.8.0": - version: 0.8.0 - resolution: "js-sha3@npm:0.8.0" - checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 - languageName: node - linkType: hard - -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 - languageName: node - linkType: hard - -"jsdom@npm:^16.4.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - 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 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 - languageName: node - linkType: hard - -"json-bigint@npm:^1.0.0": - version: 1.0.0 - resolution: "json-bigint@npm:1.0.0" - dependencies: - bignumber.js: ^9.0.0 - checksum: c67bb93ccb3c291e60eb4b62931403e378906aab113ec1c2a8dd0f9a7f065ad6fd9713d627b732abefae2e244ac9ce1721c7a3142b2979532f12b258634ce6f6 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 - languageName: node - linkType: hard - -"json-parse-better-errors@npm:^1.0.1, json-parse-better-errors@npm:^1.0.2": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 - languageName: node - linkType: hard - -"json5@npm:^1.0.1, json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 - languageName: node - linkType: hard - -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: ^4.1.6 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: ^4.1.6 - universalify: ^2.0.0 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 - languageName: node - linkType: hard - -"jsonpath@npm:^1.1.1": - version: 1.1.1 - resolution: "jsonpath@npm:1.1.1" - dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - checksum: 5480d8e9e424fe2ed4ade6860b6e2cefddb21adb3a99abe0254cd9428e8ef9b0c9fb5729d6a5a514e90df50d645ccea9f3be48d627570e6222dd5dadc28eba7b - languageName: node - linkType: hard - -"jsonwebtoken@npm:^8.5.1": - version: 8.5.1 - resolution: "jsonwebtoken@npm:8.5.1" - 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 - checksum: 93c9e3f23c59b758ac88ba15f4e4753b3749dfce7a6f7c40fb86663128a1e282db085eec852d4e0cbca4cefdcd3a8275ee255dbd08fcad0df26ad9f6e4cc853a - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": - version: 3.3.5 - resolution: "jsx-ast-utils@npm:3.3.5" - dependencies: - array-includes: ^3.1.6 - array.prototype.flat: ^1.3.1 - object.assign: ^4.1.4 - object.values: ^1.1.6 - checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a - languageName: node - linkType: hard - -"jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: ^5.0.1 - checksum: ff30ea7c2dcc61f3ed2098d868bf89d43701605090c5b21b5544b512843ec6fd9e028381a4dda466cbcdb885c2d1150f7c62e7168394ee07941b4098e1035e2f - languageName: node - linkType: hard - -"jwa@npm:^2.0.0": - version: 2.0.0 - resolution: "jwa@npm:2.0.0" - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: ^5.0.1 - checksum: 8f00b71ad5fe94cb55006d0d19202f8f56889109caada2f7eeb63ca81755769ce87f4f48101967f398462e3b8ae4faebfbd5a0269cb755dead5d63c77ba4d2f1 - languageName: node - linkType: hard - -"jws@npm:^3.2.2": - version: 3.2.2 - resolution: "jws@npm:3.2.2" - dependencies: - jwa: ^1.4.1 - safe-buffer: ^5.0.1 - checksum: f0213fe5b79344c56cd443428d8f65c16bf842dc8cb8f5aed693e1e91d79c20741663ad6eff07a6d2c433d1831acc9814e8d7bada6a0471fbb91d09ceb2bf5c2 - languageName: node - linkType: hard - -"jws@npm:^4.0.0": - version: 4.0.0 - resolution: "jws@npm:4.0.0" - dependencies: - jwa: ^2.0.0 - safe-buffer: ^5.0.1 - checksum: d68d07aa6d1b8cb35c363a9bd2b48f15064d342a5d9dc18a250dbbce8dc06bd7e4792516c50baa16b8d14f61167c19e851fd7f66b59ecc68b7f6a013759765f7 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 - languageName: node - linkType: hard - -"killable@npm:^1.0.1": - version: 1.0.1 - resolution: "killable@npm:1.0.1" - checksum: 911a85c6e390c19d72c4e3149347cf44042cbd7d18c3c6c5e4f706fdde6e0ed532473392e282c7ef27f518407e6cb7d2a0e71a2ae8d8d8f8ffdb68891a29a68a - languageName: node - linkType: hard - -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 - languageName: node - linkType: hard - -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: ^1.1.5 - checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - -"klona@npm:^2.0.4": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 - languageName: node - linkType: hard - -"language-subtag-registry@npm:^0.3.20": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a - languageName: node - linkType: hard - -"language-tags@npm:^1.0.9": - version: 1.0.9 - resolution: "language-tags@npm:1.0.9" - dependencies: - language-subtag-registry: ^0.3.20 - checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78 - languageName: node - linkType: hard - -"last-call-webpack-plugin@npm:^3.0.0": - version: 3.0.0 - resolution: "last-call-webpack-plugin@npm:3.0.0" - dependencies: - lodash: ^4.17.5 - webpack-sources: ^1.1.0 - checksum: 23c25a2397c9f75b769b5238ab798873e857baf2363d471d186c9f05212457943f0de16181f33aeecbfd42116b72a0f343fe8910d5d8010f24956d95d536c743 - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 - languageName: node - linkType: hard - -"load-tsconfig@npm:^0.2.0": - version: 0.2.5 - resolution: "load-tsconfig@npm:0.2.5" - checksum: 631740833c4a7157bb7b6eeae6e1afb6a6fac7416b7ba91bd0944d5c5198270af2d68bf8347af3cc2ba821adc4d83ef98f66278bd263bc284c863a09ec441503 - languageName: node - linkType: hard - -"loader-runner@npm:^2.4.0": - version: 2.4.0 - resolution: "loader-runner@npm:2.4.0" - checksum: e27eebbca5347a03f6b1d1bce5b2736a4984fb742f872c0a4d68e62de10f7637613e79a464d3bcd77c246d9c70fcac112bb4a3123010eb527e8b203a614647db - languageName: node - linkType: hard - -"loader-utils@npm:2.0.0": - version: 2.0.0 - resolution: "loader-utils@npm:2.0.0" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 - languageName: node - linkType: hard - -"loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": - version: 1.4.2 - resolution: "loader-utils@npm:1.4.2" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^1.0.1 - checksum: eb6fb622efc0ffd1abdf68a2022f9eac62bef8ec599cf8adb75e94d1d338381780be6278534170e99edc03380a6d29bc7eb1563c89ce17c5fed3a0b17f1ad804 - languageName: node - linkType: hard - -"loader-utils@npm:^2.0.0": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 - languageName: node - linkType: hard - -"local-pkg@npm:^0.4.3": - version: 0.4.3 - resolution: "local-pkg@npm:0.4.3" - checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 - languageName: node - linkType: hard - -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: ^3.0.0 - path-exists: ^3.0.0 - checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"lodash-es@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash-es@npm:4.17.21" - checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 - languageName: node - linkType: hard - -"lodash._reinterpolate@npm:^3.0.0": - version: 3.0.0 - resolution: "lodash._reinterpolate@npm:3.0.0" - checksum: 06d2d5f33169604fa5e9f27b6067ed9fb85d51a84202a656901e5ffb63b426781a601508466f039c720af111b0c685d12f1a5c14ff8df5d5f27e491e562784b2 - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 - languageName: node - linkType: hard - -"lodash.flow@npm:^3.5.0": - version: 3.5.0 - resolution: "lodash.flow@npm:3.5.0" - checksum: a9a62ad344e3c5a1f42bc121da20f64dd855aaafecee24b1db640f29b88bd165d81c37ff7e380a7191de6f70b26f5918abcebbee8396624f78f3618a0b18634c - languageName: node - linkType: hard - -"lodash.includes@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.includes@npm:4.3.0" - checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6 - languageName: node - linkType: hard - -"lodash.isboolean@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isboolean@npm:3.0.3" - checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250 - languageName: node - linkType: hard - -"lodash.isinteger@npm:^4.0.4": - version: 4.0.4 - resolution: "lodash.isinteger@npm:4.0.4" - checksum: 6034821b3fc61a2ffc34e7d5644bb50c5fd8f1c0121c554c21ac271911ee0c0502274852845005f8651d51e199ee2e0cfebfe40aaa49c7fe617f603a8a0b1691 - languageName: node - linkType: hard - -"lodash.isnumber@npm:^3.0.3": - version: 3.0.3 - resolution: "lodash.isnumber@npm:3.0.3" - checksum: 913784275b565346255e6ae6a6e30b760a0da70abc29f3e1f409081585875105138cda4a429ff02577e1bc0a7ae2a90e0a3079a37f3a04c3d6c5aaa532f4cab2 - languageName: node - linkType: hard - -"lodash.isplainobject@npm:^4.0.6": - version: 4.0.6 - resolution: "lodash.isplainobject@npm:4.0.6" - checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 - languageName: node - linkType: hard - -"lodash.isstring@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.isstring@npm:4.0.1" - checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 - languageName: node - linkType: hard - -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"lodash.once@npm:^4.0.0": - version: 4.1.1 - resolution: "lodash.once@npm:4.1.1" - checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245 - languageName: node - linkType: hard - -"lodash.template@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.template@npm:4.5.0" - dependencies: - lodash._reinterpolate: ^3.0.0 - lodash.templatesettings: ^4.0.0 - checksum: ca64e5f07b6646c9d3dbc0fe3aaa995cb227c4918abd1cef7a9024cd9c924f2fa389a0ec4296aa6634667e029bc81d4bbdb8efbfde11df76d66085e6c529b450 - languageName: node - linkType: hard - -"lodash.templatesettings@npm:^4.0.0": - version: 4.2.0 - resolution: "lodash.templatesettings@npm:4.2.0" - dependencies: - lodash._reinterpolate: ^3.0.0 - checksum: 863e025478b092997e11a04e9d9e735875eeff1ffcd6c61742aa8272e3c2cddc89ce795eb9726c4e74cef5991f722897ff37df7738a125895f23fc7d12a7bb59 - languageName: node - linkType: hard - -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 - languageName: node - linkType: hard - -"lodash.uniq@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.uniq@npm:4.5.0" - checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d - languageName: node - linkType: hard - -"lodash@npm:4.x, lodash@npm:>=3.5 <5, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:^4.7.0": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - -"log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: ^4.1.0 - is-unicode-supported: ^0.1.0 - checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 - languageName: node - linkType: hard - -"loglevel@npm:^1.6.8": - version: 1.9.1 - resolution: "loglevel@npm:1.9.1" - checksum: e1c8586108c4d566122e91f8a79c8df728920e3a714875affa5120566761a24077ec8ec9e5fc388b022e39fc411ec6e090cde1b5775871241b045139771eeb06 - languageName: node - linkType: hard - -"loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - -"loupe@npm:^2.3.6": - version: 2.3.7 - resolution: "loupe@npm:2.3.7" - dependencies: - get-func-name: ^2.0.1 - checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b - languageName: node - linkType: hard - -"lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": - version: 1.5.0 - resolution: "lz-string@npm:1.5.0" - bin: - lz-string: bin/bin.js - checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d - languageName: node - linkType: hard - -"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a - languageName: node - linkType: hard - -"magic-string@npm:^0.30.0": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" - dependencies: - "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 - languageName: node - linkType: hard - -"make-dir@npm:^2.0.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: ^4.0.1 - semver: ^5.6.0 - checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab - languageName: node - linkType: hard - -"make-dir@npm:^3.0.2": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: ^7.5.3 - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a - languageName: node - linkType: hard - -"make-error@npm:1.x, make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" - dependencies: - "@npmcli/agent": ^2.0.0 - cacache: ^18.0.0 - http-cache-semantics: ^4.1.1 - is-lambda: ^1.0.1 - minipass: ^7.0.2 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - ssri: ^10.0.0 - checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" - dependencies: - object-visit: ^1.0.0 - checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a - languageName: node - linkType: hard - -"match-sorter@npm:^6.0.2": - version: 6.3.4 - resolution: "match-sorter@npm:6.3.4" - dependencies: - "@babel/runtime": ^7.23.8 - remove-accents: 0.5.0 - checksum: 950c1600173a639e216947559a389b64258d52f33aea3a6ddb97500589888b83c976a028f731f40bc08d9d8af20de7916992fabb403f38330183a1df44c7634b - languageName: node - linkType: hard - -"md5.js@npm:^1.3.4": - version: 1.3.5 - resolution: "md5.js@npm:1.3.5" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c - languageName: node - linkType: hard - -"mdast-util-definitions@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-util-definitions@npm:4.0.0" - dependencies: - unist-util-visit: ^2.0.0 - checksum: 2325f20b82b3fb8cb5fda77038ee0bbdd44f82cfca7c48a854724b58bc1fe5919630a3ce7c45e210726df59d46c881d020b2da7a493bfd1ee36eb2bbfef5d78e - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^0.8.0": - version: 0.8.5 - resolution: "mdast-util-from-markdown@npm:0.8.5" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-string: ^2.0.0 - micromark: ~2.11.0 - parse-entities: ^2.0.0 - unist-util-stringify-position: ^2.0.0 - checksum: 5a9d0d753a42db763761e874c22365d0c7c9934a5a18b5ff76a0643610108a208a041ffdb2f3d3dd1863d3d915225a4020a0aade282af0facfd0df110601eee6 - languageName: node - linkType: hard - -"mdast-util-to-hast@npm:^10.2.0": - version: 10.2.0 - resolution: "mdast-util-to-hast@npm:10.2.0" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - mdast-util-definitions: ^4.0.0 - mdurl: ^1.0.0 - unist-builder: ^2.0.0 - unist-util-generated: ^1.0.0 - unist-util-position: ^3.0.0 - unist-util-visit: ^2.0.0 - checksum: 72df2dd9bfa2d07b4750a333444f82e0f3752dae75b6e300cf0a716407a185eb75095a54ecad90cbd6f6d133b20dea8844ff76c1ea78612550de170b43d4fa85 - languageName: node - linkType: hard - -"mdast-util-to-string@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-to-string@npm:2.0.0" - checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.14": - version: 2.0.14 - resolution: "mdn-data@npm:2.0.14" - checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.4": - version: 2.0.4 - resolution: "mdn-data@npm:2.0.4" - checksum: add3c95e6d03d301b8a8bcfee3de33f4d07e4c5eee5b79f18d6d737de717e22472deadf67c1a8563983c0b603e10d7df40aa8e5fddf18884dfe118ccec7ae329 - languageName: node - linkType: hard - -"mdurl@npm:^1.0.0": - version: 1.0.1 - resolution: "mdurl@npm:1.0.1" - checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 - languageName: node - linkType: hard - -"memory-fs@npm:^0.4.1": - version: 0.4.1 - resolution: "memory-fs@npm:0.4.1" - dependencies: - errno: ^0.1.3 - readable-stream: ^2.0.1 - checksum: 6db6c8682eff836664ca9b5b6052ae38d21713dda9d0ef4700fa5c0599a8bc16b2093bee75ac3dedbe59fb2222d368f25bafaa62ba143c41051359cbcb005044 - languageName: node - linkType: hard - -"memory-fs@npm:^0.5.0": - version: 0.5.0 - resolution: "memory-fs@npm:0.5.0" - dependencies: - errno: ^0.1.3 - readable-stream: ^2.0.1 - checksum: a9f25b0a8ecfb7324277393f19ef68e6ba53b9e6e4b526bbf2ba23055c5440fbf61acc7bf66bfd980e9eb4951a4790f6f777a9a3abd36603f22c87e8a64d3d6b - languageName: node - linkType: hard - -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"methods@npm:^1.1.2, methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a - languageName: node - linkType: hard - -"microevent.ts@npm:~0.1.1": - version: 0.1.1 - resolution: "microevent.ts@npm:0.1.1" - checksum: 7874fcdb3f0dfa4e996d3ea63b3b9882874ae7d22be28d51ae20da24c712e9e28e5011d988095c27dd2b32e37c0ad7425342a71b89adb8e808ec7194fadf4a7a - languageName: node - linkType: hard - -"micromark@npm:~2.11.0": - version: 2.11.4 - resolution: "micromark@npm:2.11.4" - dependencies: - debug: ^4.0.0 - parse-entities: ^2.0.0 - checksum: f8a5477d394908a5d770227aea71657a76423d420227c67ea0699e659a5f62eb39d504c1f7d69ec525a6af5aaeb6a7bffcdba95614968c03d41d3851edecb0d6 - languageName: node - linkType: hard - -"micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - braces: ^2.3.1 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - extglob: ^2.0.4 - fragment-cache: ^0.2.1 - kind-of: ^6.0.2 - nanomatch: ^1.2.9 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.2 - checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc - languageName: node - linkType: hard - -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"microseconds@npm:0.2.0": - version: 0.2.0 - resolution: "microseconds@npm:0.2.0" - checksum: 22bfa8553f92c7d95afff6de0aeb2aecf750680d41b8c72b02098ccc5bbbb0a384380ff539292dbd3788f5dfc298682f9d38a2b4c101f5ee2c9471d53934c5fa - languageName: node - linkType: hard - -"miller-rabin@npm:^4.0.0": - version: 4.0.1 - resolution: "miller-rabin@npm:4.0.1" - dependencies: - bn.js: ^4.0.0 - brorand: ^1.0.1 - bin: - miller-rabin: bin/miller-rabin - checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece - languageName: node - linkType: hard - -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 - languageName: node - linkType: hard - -"mime@npm:2.6.0, mime@npm:^2.4.4": - version: 2.6.0 - resolution: "mime@npm:2.6.0" - bin: - mime: cli.js - checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - -"min-indent@npm:^1.0.0": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 - languageName: node - linkType: hard - -"mini-css-extract-plugin@npm:0.11.3": - version: 0.11.3 - resolution: "mini-css-extract-plugin@npm:0.11.3" - dependencies: - loader-utils: ^1.1.0 - normalize-url: 1.9.1 - schema-utils: ^1.0.0 - webpack-sources: ^1.1.0 - peerDependencies: - webpack: ^4.4.0 || ^5.0.0 - checksum: 14fbdf1338fe0264a2f7f87b3fc640809b7443f6434c6532bdbec1c5ab113502325fec958e9cf0667c3790087dc1e83c02e1f4d7463c10c956b0d6ebe56ea99e - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimalistic-crypto-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-crypto-utils@npm:1.0.1" - checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed - languageName: node - linkType: hard - -"minimatch@npm:3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" - dependencies: - brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" - dependencies: - brace-expansion: ^2.0.1 - checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 - languageName: node - linkType: hard - -"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: ^7.0.3 - checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0, minipass@npm:^3.1.1": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mississippi@npm:^3.0.0": - version: 3.0.0 - resolution: "mississippi@npm:3.0.0" - dependencies: - concat-stream: ^1.5.0 - duplexify: ^3.4.2 - end-of-stream: ^1.1.0 - flush-write-stream: ^1.0.0 - from2: ^2.1.0 - parallel-transform: ^1.1.0 - pump: ^3.0.0 - pumpify: ^1.3.3 - stream-each: ^1.1.0 - through2: ^2.0.0 - checksum: 84b3d9889621d293f9a596bafe60df863b330c88fc19215ced8f603c605fc7e1bf06f8e036edf301bd630a03fd5d9d7d23d5d6b9a4802c30ca864d800f0bd9f8 - languageName: node - linkType: hard - -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: ^1.0.2 - is-extendable: ^1.0.1 - checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d - languageName: node - linkType: hard - -"mkdirp@npm:1.x, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: ^1.2.6 - bin: - mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - -"mlly@npm:^1.4.0, mlly@npm:^1.6.1": - version: 1.6.1 - resolution: "mlly@npm:1.6.1" - dependencies: - acorn: ^8.11.3 - pathe: ^1.1.2 - pkg-types: ^1.0.3 - ufo: ^1.3.2 - checksum: c40a547dba8f6b2a5a840899d49f4c9550c233d47fd7bd75f4ac27f388047bad655ad86684329809c1640df4373b45bec77304f73530ca4354bc1199700e2a46 - languageName: node - linkType: hard - -"move-concurrently@npm:^1.0.1": - version: 1.0.1 - resolution: "move-concurrently@npm:1.0.1" - dependencies: - aproba: ^1.1.1 - copy-concurrently: ^1.0.0 - fs-write-stream-atomic: ^1.0.8 - mkdirp: ^0.5.1 - rimraf: ^2.5.4 - run-queue: ^1.0.3 - checksum: 4ea3296c150b09e798177847f673eb5783f8ca417ba806668d2c631739f653e1a735f19fb9b6e2f5e25ee2e4c0a6224732237a8e4f84c764e99d7462d258209e - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"msw@npm:^0.44.2": - version: 0.44.2 - resolution: "msw@npm:0.44.2" - dependencies: - "@mswjs/cookies": ^0.2.2 - "@mswjs/interceptors": ^0.17.2 - "@open-draft/until": ^1.0.3 - "@types/cookie": ^0.4.1 - "@types/js-levenshtein": ^1.1.1 - chalk: 4.1.1 - chokidar: ^3.4.2 - cookie: ^0.4.2 - graphql: ^16.3.0 - headers-polyfill: ^3.0.4 - inquirer: ^8.2.0 - is-node-process: ^1.0.1 - js-levenshtein: ^1.1.6 - node-fetch: ^2.6.7 - outvariant: ^1.3.0 - path-to-regexp: ^6.2.0 - statuses: ^2.0.0 - strict-event-emitter: ^0.2.0 - type-fest: ^1.2.2 - yargs: ^17.3.1 - peerDependencies: - typescript: ">= 4.2.x <= 4.7.x" - peerDependenciesMeta: - typescript: - optional: true - bin: - msw: cli/index.js - checksum: 739d536ee09d1c0a2cbc9dbe917f167c42115a6548f99780850ce9a63a5e7c377cf9b5f1a3b497e85ce7304025ab22966e997fe73adbd8d2ab968b8685f15a24 - languageName: node - linkType: hard - -"multer@npm:^1.4.5-lts.1": - version: 1.4.5-lts.1 - resolution: "multer@npm:1.4.5-lts.1" - dependencies: - append-field: ^1.0.0 - busboy: ^1.0.0 - concat-stream: ^1.5.2 - mkdirp: ^0.5.4 - object-assign: ^4.1.1 - type-is: ^1.6.4 - xtend: ^4.0.0 - checksum: d6dfa78a6ec592b74890412f8962da8a87a3dcfe20f612e039b735b8e0faa72c735516c447f7de694ee0d981eb0a1b892fb9e2402a0348dc6091d18c38d89ecc - languageName: node - linkType: hard - -"multicast-dns-service-types@npm:^1.1.0": - version: 1.1.0 - resolution: "multicast-dns-service-types@npm:1.1.0" - checksum: 0979fca1cce85484d256e4db3af591d941b41a61f134da3607213d2624c12ed5b8a246565cb19a9b3cb542819e8fbc71a90b07e77023ee6a9515540fe1d371f7 - languageName: node - linkType: hard - -"multicast-dns@npm:^6.0.1": - version: 6.2.3 - resolution: "multicast-dns@npm:6.2.3" - dependencies: - dns-packet: ^1.3.1 - thunky: ^1.0.2 - bin: - multicast-dns: cli.js - checksum: f515b49ca964429ab48a4ac8041fcf969c927aeb49ab65288bd982e52c849a870fc3b03565780b0d194a1a02da8821f28b6425e48e95b8107bc9fcc92f571a6f - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 - languageName: node - linkType: hard - -"nan@npm:^2.12.1": - version: 2.19.0 - resolution: "nan@npm:2.19.0" - dependencies: - node-gyp: latest - checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600 - languageName: node - linkType: hard - -"nano-time@npm:1.0.0": - version: 1.0.0 - resolution: "nano-time@npm:1.0.0" - dependencies: - big-integer: ^1.6.16 - checksum: eef8548546cc1020625f8e44751a7263e9eddf0412a6a1a6c80a8d2be2ea7973622804a977cdfe796807b85b20ff6c8ba340e8dd20effcc7078193ed5edbb5d4 - languageName: node - linkType: hard - -"nanoclone@npm:^0.2.1": - version: 0.2.1 - resolution: "nanoclone@npm:0.2.1" - checksum: 96b2954e22f70561f41e20d69856266c65583c2a441dae108f1dc71b716785d2c8038dac5f1d5e92b117aed3825f526b53139e2e5d6e6db8a77cfa35b3b8bf40 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" - bin: - nanoid: bin/nanoid.cjs - checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 - languageName: node - linkType: hard - -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - fragment-cache: ^0.2.1 - is-windows: ^1.0.2 - kind-of: ^6.0.2 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 - languageName: node - linkType: hard - -"native-url@npm:^0.2.6": - version: 0.2.6 - resolution: "native-url@npm:0.2.6" - dependencies: - querystring: ^0.2.0 - checksum: d56a67b32e635c4944985f551a9976dfe609a3947810791c50f5c37cff1d9dd5fe040184989d104be8752582b79dc4e726f2a9c075d691ecce86b31ae9387f1b - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - -"next-tick@npm:^1.1.0": - version: 1.1.0 - resolution: "next-tick@npm:1.1.0" - checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b - languageName: node - linkType: hard - -"nice-try@npm:^1.0.4": - version: 1.0.5 - resolution: "nice-try@npm:1.0.5" - checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff - languageName: node - linkType: hard - -"no-case@npm:^3.0.4": - version: 3.0.4 - resolution: "no-case@npm:3.0.4" - dependencies: - lower-case: ^2.0.2 - tslib: ^2.0.3 - checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 - languageName: node - linkType: hard - -"node-forge@npm:^0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 5aa6dc9922e424a20ef101d2f517418e2bc9cfc0255dd22e0701c0fad1568445f510ee67f6f3fcdf085812c4ca1b847b8ba45683b34776828e41f5c1794e42e1 - languageName: node - linkType: hard - -"node-forge@npm:^1.3.1": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^10.3.10 - graceful-fs: ^4.2.6 - make-fetch-happen: ^13.0.0 - nopt: ^7.0.0 - proc-log: ^3.0.0 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^4.0.0 - bin: - node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - -"node-libs-browser@npm:^2.2.1": - version: 2.2.1 - resolution: "node-libs-browser@npm:2.2.1" - dependencies: - assert: ^1.1.1 - browserify-zlib: ^0.2.0 - buffer: ^4.3.0 - console-browserify: ^1.1.0 - constants-browserify: ^1.0.0 - crypto-browserify: ^3.11.0 - domain-browser: ^1.1.1 - events: ^3.0.0 - https-browserify: ^1.0.0 - os-browserify: ^0.3.0 - path-browserify: 0.0.1 - process: ^0.11.10 - punycode: ^1.2.4 - querystring-es3: ^0.2.0 - readable-stream: ^2.3.3 - stream-browserify: ^2.0.1 - stream-http: ^2.7.2 - string_decoder: ^1.0.0 - timers-browserify: ^2.0.4 - tty-browserify: 0.0.0 - url: ^0.11.0 - util: ^0.11.0 - vm-browserify: ^1.0.1 - checksum: 41fa7927378edc0cb98a8cc784d3f4a47e43378d3b42ec57a23f81125baa7287c4b54d6d26d062072226160a3ce4d8b7a62e873d2fb637aceaddf71f5a26eca0 - languageName: node - linkType: hard - -"node-notifier@npm:^8.0.0": - version: 8.0.2 - resolution: "node-notifier@npm:8.0.2" - dependencies: - growly: ^1.3.0 - is-wsl: ^2.2.0 - semver: ^7.3.2 - shellwords: ^0.1.1 - uuid: ^8.3.0 - which: ^2.0.2 - checksum: 7db1683003f6aaa4324959dfa663cd56e301ccc0165977a9e7737989ffe3b4763297f9fc85f44d0662b63a4fd85516eda43411b492a4d2fae207afb23773f912 - languageName: node - linkType: hard - -"node-releases@npm:^1.1.61": - version: 1.1.77 - resolution: "node-releases@npm:1.1.77" - checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 - languageName: node - linkType: hard - -"nodemailer@npm:^6.9.1": - version: 6.9.13 - resolution: "nodemailer@npm:6.9.13" - checksum: 1b591ef480be2ff69480127cbff819e6593b1ef263b6f920e1a4e83e40280582daf7a14a809ef92f9828e2a70bdb3ce22b11924e209f2afe4975f9ff37e08e9d - languageName: node - linkType: hard - -"nodemon@npm:^2.0.16": - version: 2.0.22 - resolution: "nodemon@npm:2.0.22" - dependencies: - chokidar: ^3.5.2 - debug: ^3.2.7 - ignore-by-default: ^1.0.1 - minimatch: ^3.1.2 - pstree.remy: ^1.1.8 - semver: ^5.7.1 - simple-update-notifier: ^1.0.7 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 9c987e139748f5b5c480c6c9080bdc97304ee7d29172b7b3da1a7db590b1323ad57b96346304e9b522b0e445c336dc393ccd3f9f45c73b20d476d2347890dcd0 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" - dependencies: - abbrev: ^2.0.0 - bin: - nopt: bin/nopt.js - checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 - languageName: node - linkType: hard - -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: ^2.1.4 - resolve: ^1.10.0 - semver: 2 || 3 || 4 || 5 - validate-npm-package-license: ^3.0.1 - checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: ^1.0.1 - checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - -"normalize-url@npm:1.9.1": - version: 1.9.1 - resolution: "normalize-url@npm:1.9.1" - dependencies: - object-assign: ^4.0.1 - prepend-http: ^1.0.0 - query-string: ^4.1.0 - sort-keys: ^1.0.0 - checksum: 4b03c22bebbb822874ce3b9204367ad1f27c314ae09b13aa201de730b3cf95f00dadf378277a56062322968c95c06e5764d01474d26af8b43d20bc4c8c491f84 - languageName: node - linkType: hard - -"normalize-url@npm:^3.0.0": - version: 3.3.0 - resolution: "normalize-url@npm:3.3.0" - checksum: f6aa4a1a94c3b799812f3e7fc987fb4599d869bfa8e9a160b6f2c5a2b4e62ada998d64dca30d9e20769d8bd95d3da1da3d4841dba2cc3c4d85364e1eb46219a2 - languageName: node - linkType: hard - -"npm-run-path@npm:^2.0.0": - version: 2.0.2 - resolution: "npm-run-path@npm:2.0.2" - dependencies: - path-key: ^2.0.0 - checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.0": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - -"nth-check@npm:^1.0.2": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: ~1.0.0 - checksum: 59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c - languageName: node - linkType: hard - -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 - languageName: node - linkType: hard - -"num2fraction@npm:^1.2.2": - version: 1.2.2 - resolution: "num2fraction@npm:1.2.2" - checksum: 1da9c6797b505d3f5b17c7f694c4fa31565bdd5c0e5d669553253aed848a580804cd285280e8a73148bd9628839267daee4967f24b53d4e893e44b563e412635 - languageName: node - linkType: hard - -"nwsapi@npm:^2.2.0": - version: 2.2.9 - resolution: "nwsapi@npm:2.2.9" - checksum: 3ab2bc47d5507a76e2fdee5aae7ea2875c6def912d0401126cad3e39825a7decb7a02622810c855a7902bd31e917e606b37882dca12b0ae54b4d3b70275de927 - languageName: node - linkType: hard - -"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: ^0.1.0 - define-property: ^0.2.5 - kind-of: ^3.0.3 - checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f - languageName: node - linkType: hard - -"object-is@npm:^1.1.5": - version: 1.1.6 - resolution: "object-is@npm:1.1.6" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: ^3.0.0 - checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" - dependencies: - call-bind: ^1.0.5 - define-properties: ^1.2.1 - has-symbols: ^1.0.3 - object-keys: ^1.1.1 - checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 - languageName: node - linkType: hard - -"object.entries@npm:^1.1.0, object.entries@npm:^1.1.7": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.7": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0": - version: 2.1.8 - resolution: "object.getownpropertydescriptors@npm:2.1.8" - dependencies: - array.prototype.reduce: ^1.0.6 - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - gopd: ^1.0.1 - safe-array-concat: ^1.1.2 - checksum: 073e492700a7f61ff6c471a2ed96e72473b030a7a105617f03cab192fb4bbc0e6068ef76534ec56afd34baf26b5dc5408de59cb0140ec8abde781e00faa3e63e - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.1": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 - languageName: node - linkType: hard - -"object.hasown@npm:^1.1.3": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" - dependencies: - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 - languageName: node - linkType: hard - -"object.pick@npm:^1.3.0": - version: 1.3.0 - resolution: "object.pick@npm:1.3.0" - dependencies: - isobject: ^3.0.1 - checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a - languageName: node - linkType: hard - -"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa - languageName: node - linkType: hard - -"oblivious-set@npm:1.0.0": - version: 1.0.0 - resolution: "oblivious-set@npm:1.0.0" - checksum: f31740ea9c3a8242ad2324e4ebb9a35359fbc2e6e7131731a0fc1c8b7b1238eb07e4c8c631a38535243a7b8e3042b7e89f7dc2a95d2989afd6f80bd5793b0aab - languageName: node - linkType: hard - -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": - version: 1.1.2 - resolution: "obuf@npm:1.1.2" - checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f - languageName: node - linkType: hard - -"on-finished@npm:2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: 1.1.1 - checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.2": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - -"open@npm:^7.0.2": - version: 7.4.2 - resolution: "open@npm:7.4.2" - dependencies: - is-docker: ^2.0.0 - is-wsl: ^2.1.1 - checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 - languageName: node - linkType: hard - -"opn@npm:^5.5.0": - version: 5.5.0 - resolution: "opn@npm:5.5.0" - dependencies: - is-wsl: ^1.1.0 - checksum: 35b677b5a1fd6c8cb1996b0607671ba79f7ce9fa029217d54eafaf6bee13eb7e700691c6a415009140fd02a435fffdfd143875f3b233b60f3f9d631c6f6b81a0 - languageName: node - linkType: hard - -"optimize-css-assets-webpack-plugin@npm:5.0.4": - version: 5.0.4 - resolution: "optimize-css-assets-webpack-plugin@npm:5.0.4" - dependencies: - cssnano: ^4.1.10 - last-call-webpack-plugin: ^3.0.0 - peerDependencies: - webpack: ^4.0.0 - checksum: bcd509eaab2a6f0ed8396fe847f4f0da73655a54f4c418fa30dc1fc4a0b1b620f38e2fcd6bcb369e2a6cf4530995b371e9d12011566ac7ffe6ac6aec2ab0a4fb - languageName: node - linkType: hard - -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - 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 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - -"optionator@npm:^0.9.1": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" - 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 - checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: ^4.1.0 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-spinners: ^2.5.0 - is-interactive: ^1.0.0 - is-unicode-supported: ^0.1.0 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 - languageName: node - linkType: hard - -"os-browserify@npm:^0.3.0": - version: 0.3.0 - resolution: "os-browserify@npm:0.3.0" - checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - -"outvariant@npm:^1.2.1, outvariant@npm:^1.3.0": - version: 1.4.2 - resolution: "outvariant@npm:1.4.2" - checksum: 5d9e2b3edb1cc8be9cbfc1c8c97e8b05137c4384bbfc56e0a465de26c5d2f023e65732ddcda9d46599b06d667fbc0de32c30d2ecd11f6f3f43bcf8ce0d320918 - languageName: node - linkType: hard - -"p-each-series@npm:^2.1.0": - version: 2.2.0 - resolution: "p-each-series@npm:2.2.0" - checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 - languageName: node - linkType: hard - -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-limit@npm:^4.0.0": - version: 4.0.0 - resolution: "p-limit@npm:4.0.0" - dependencies: - yocto-queue: ^1.0.0 - checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b - languageName: node - linkType: hard - -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: ^2.0.0 - checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"p-queue@npm:^6.6.1": - version: 6.6.2 - resolution: "p-queue@npm:6.6.2" - dependencies: - eventemitter3: ^4.0.4 - p-timeout: ^3.2.0 - checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c - languageName: node - linkType: hard - -"p-retry@npm:^3.0.1": - version: 3.0.1 - resolution: "p-retry@npm:3.0.1" - dependencies: - retry: ^0.12.0 - checksum: 702efc63fc13ef7fc0bab9a1b08432ab38a0236efcbce64af0cf692030ba6ed8009f29ba66e3301cb98dc69ef33e7ccab29ba1ac2bea897f802f81f4f7e468dd - languageName: node - linkType: hard - -"p-retry@npm:^4.0.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" - dependencies: - "@types/retry": 0.12.0 - retry: ^0.13.1 - checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e - languageName: node - linkType: hard - -"p-timeout@npm:^3.2.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: ^1.0.0 - checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"pako@npm:^1.0.10, pako@npm:^1.0.11, pako@npm:^1.0.6, pako@npm:~1.0.5": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 - languageName: node - linkType: hard - -"parallel-transform@npm:^1.1.0": - version: 1.2.0 - resolution: "parallel-transform@npm:1.2.0" - dependencies: - cyclist: ^1.0.1 - inherits: ^2.0.3 - readable-stream: ^2.1.5 - checksum: ab6ddc1a662cefcfb3d8d546a111763d3b223f484f2e9194e33aefd8f6760c319d0821fd22a00a3adfbd45929b50d2c84cc121389732f013c2ae01c226269c27 - languageName: node - linkType: hard - -"param-case@npm:^3.0.3, param-case@npm:^3.0.4": - version: 3.0.4 - resolution: "param-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": - version: 5.1.7 - resolution: "parse-asn1@npm:5.1.7" - dependencies: - asn1.js: ^4.10.1 - browserify-aes: ^1.2.0 - evp_bytestokey: ^1.0.3 - hash-base: ~3.0 - pbkdf2: ^3.1.2 - safe-buffer: ^5.2.1 - checksum: 93c7194c1ed63a13e0b212d854b5213ad1aca0ace41c66b311e97cca0519cf9240f79435a0306a3b412c257f0ea3f1953fd0d9549419a0952c9e995ab361fd6c - languageName: node - linkType: hard - -"parse-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "parse-entities@npm:2.0.0" - dependencies: - character-entities: ^1.0.0 - character-entities-legacy: ^1.0.0 - character-reference-invalid: ^1.0.0 - is-alphanumerical: ^1.0.0 - is-decimal: ^1.0.0 - is-hexadecimal: ^1.0.0 - checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce - languageName: node - linkType: hard - -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: ^1.3.1 - json-parse-better-errors: ^1.0.1 - checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - 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 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - -"pascal-case@npm:^3.1.2": - version: 3.1.2 - resolution: "pascal-case@npm:3.1.2" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e - languageName: node - linkType: hard - -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"path-browserify@npm:0.0.1": - version: 0.0.1 - resolution: "path-browserify@npm:0.0.1" - checksum: ae8dcd45d0d3cfbaf595af4f206bf3ed82d77f72b4877ae7e77328079e1468c84f9386754bb417d994d5a19bf47882fd253565c18441cd5c5c90ae5187599e35 - languageName: node - linkType: hard - -"path-case@npm:^3.0.4": - version: 3.0.4 - resolution: "path-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d - languageName: node - linkType: hard - -"path-dirname@npm:^1.0.0": - version: 1.0.2 - resolution: "path-dirname@npm:1.0.2" - checksum: 0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-is-inside@npm:^1.0.2": - version: 1.0.2 - resolution: "path-is-inside@npm:1.0.2" - checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb - languageName: node - linkType: hard - -"path-key@npm:^2.0.0, path-key@npm:^2.0.1": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.2": - version: 1.10.2 - resolution: "path-scurry@npm:1.10.2" - dependencies: - lru-cache: ^10.2.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 - languageName: node - linkType: hard - -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce - languageName: node - linkType: hard - -"path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" - dependencies: - isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd - languageName: node - linkType: hard - -"path-to-regexp@npm:^6.2.0": - version: 6.2.2 - resolution: "path-to-regexp@npm:6.2.2" - checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"pathe@npm:^1.1.1, pathe@npm:^1.1.2": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 - languageName: node - linkType: hard - -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 - languageName: node - linkType: hard - -"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" - dependencies: - create-hash: ^1.1.2 - create-hmac: ^1.1.4 - ripemd160: ^2.0.1 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 - languageName: node - linkType: hard - -"pdf-lib@npm:^1.17.1": - version: 1.17.1 - resolution: "pdf-lib@npm:1.17.1" - dependencies: - "@pdf-lib/standard-fonts": ^1.0.0 - "@pdf-lib/upng": ^1.0.1 - pako: ^1.0.11 - tslib: ^1.11.1 - checksum: 0dae766f23de60ff071368073990cca0d30fb5d104c50a17fee00f0659a491f66e45ce80b1bbfe254e6915a5bc9079f42501dfff2e37f8f76a8807d3e321b19a - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - -"picocolors@npm:^0.2.1": - version: 0.2.1 - resolution: "picocolors@npm:0.2.1" - checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"pify@npm:^2.0.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde - languageName: node - linkType: hard - -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b - languageName: node - linkType: hard - -"pinkie-promise@npm:^2.0.0": - version: 2.0.1 - resolution: "pinkie-promise@npm:2.0.1" - dependencies: - pinkie: ^2.0.0 - checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca - languageName: node - linkType: hard - -"pinkie@npm:^2.0.0": - version: 2.0.4 - resolution: "pinkie@npm:2.0.4" - checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db - languageName: node - linkType: hard - -"pirates@npm:^4.0.1": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 - languageName: node - linkType: hard - -"pkg-dir@npm:^3.0.0": - version: 3.0.0 - resolution: "pkg-dir@npm:3.0.0" - dependencies: - find-up: ^3.0.0 - checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - -"pkg-types@npm:^1.0.3": - version: 1.1.0 - resolution: "pkg-types@npm:1.1.0" - dependencies: - confbox: ^0.1.7 - mlly: ^1.6.1 - pathe: ^1.1.2 - checksum: 9cd3684e308c622db79efc8edc9291662e01cb42ed624ea2fa5400fb6eab94679b4e5b28808e9b763298a023c2381fd72a363a1c84a9073c96609af4c5c59f8f - languageName: node - linkType: hard - -"pkg-up@npm:3.1.0": - version: 3.1.0 - resolution: "pkg-up@npm:3.1.0" - dependencies: - find-up: ^3.0.0 - checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 - languageName: node - linkType: hard - -"pnp-webpack-plugin@npm:1.6.4": - version: 1.6.4 - resolution: "pnp-webpack-plugin@npm:1.6.4" - dependencies: - ts-pnp: ^1.1.6 - checksum: 0606a63db96400b07f182300168298da9518727a843f9e10cf5045d2a102a4be06bb18c73dc481281e3e0f1ed8d04ef0d285a342b6dcd0eff1340e28e5d2328d - languageName: node - linkType: hard - -"portfinder@npm:^1.0.26": - version: 1.0.32 - resolution: "portfinder@npm:1.0.32" - dependencies: - async: ^2.6.4 - debug: ^3.2.7 - mkdirp: ^0.5.6 - checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d - languageName: node - linkType: hard - -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae - languageName: node - linkType: hard - -"postcss-attribute-case-insensitive@npm:^4.0.1": - version: 4.0.2 - resolution: "postcss-attribute-case-insensitive@npm:4.0.2" - dependencies: - postcss: ^7.0.2 - postcss-selector-parser: ^6.0.2 - checksum: e9cf4b61f443bf302dcd1110ef38d6a808fa38ae5d85bfd0aaaa6d35bef3825e0434f1aed8eb9596a5d88f21580ce8b9cd0098414d8490293ef71149695cae9a - languageName: node - linkType: hard - -"postcss-browser-comments@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-browser-comments@npm:3.0.0" - dependencies: - postcss: ^7 - peerDependencies: - browserslist: ^4 - checksum: 6e8cfae4c71cf7b5d4741e19021f3e3d81d772372a9e12f5c675e25bc3ea45fe5154fd0ee055ee041aee8b484c59875fdf15df3cec5e7fd4cf3209bc5ef0b515 - languageName: node - linkType: hard - -"postcss-calc@npm:^7.0.1": - version: 7.0.5 - resolution: "postcss-calc@npm:7.0.5" - dependencies: - postcss: ^7.0.27 - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.0.2 - checksum: 03640d493fb0e557634ab23e5d1eb527b014fb491ac3e62b45e28f5a6ef57e25a209f82040ce54c40d5a1a7307597a55d3fa6e8cece0888261a66bc75e39a68b - languageName: node - linkType: hard - -"postcss-color-functional-notation@npm:^2.0.1": - version: 2.0.1 - resolution: "postcss-color-functional-notation@npm:2.0.1" - dependencies: - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: 0bfd1fa93bc54a07240d821d091093256511f70f0df5349e27e4d8b034ee3345f0ae58674ce425be6a91cc934325b2ce36ecddbf958fa8805fed6647cf671348 - languageName: node - linkType: hard - -"postcss-color-gray@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-color-gray@npm:5.0.0" - dependencies: - "@csstools/convert-colors": ^1.4.0 - postcss: ^7.0.5 - postcss-values-parser: ^2.0.0 - checksum: 81a62b3e2c170ffadc085c1643a7b5f1c153837d7ca228b07df88b9aeb0ec9088a92f8d919a748137ead3936e8dac2606e32b14b5166a59143642c8573949db5 - languageName: node - linkType: hard - -"postcss-color-hex-alpha@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-color-hex-alpha@npm:5.0.3" - dependencies: - postcss: ^7.0.14 - postcss-values-parser: ^2.0.1 - checksum: 0a0ccb42c7c6a271ffd3c8b123b9c67744827d4b810b759731bc702fea1e00f05f08479ec7cbd8dfa47bc20510830a69f1e316a5724b9e53d5fdc6fabf90afc4 - languageName: node - linkType: hard - -"postcss-color-mod-function@npm:^3.0.3": - version: 3.0.3 - resolution: "postcss-color-mod-function@npm:3.0.3" - dependencies: - "@csstools/convert-colors": ^1.4.0 - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: ecbf74e9395527aaf3e83b90b1a6c9bba0a1904038d8acef1f530d50a68d912d6b1af8df690342f942be8b89fa7dfaa35ae67cb5fb48013cb389ecb8c74deadb - languageName: node - linkType: hard - -"postcss-color-rebeccapurple@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-color-rebeccapurple@npm:4.0.1" - dependencies: - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: a7b1a204dfc5163ac4195cc3cb0c7b1bba9561feab49d24be8a17d695d6b69fd92f3da23d638260fe7e9d5076cf81bb798b25134fa2a2fbf7f74b0dda2829a96 - languageName: node - linkType: hard - -"postcss-colormin@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-colormin@npm:4.0.3" - dependencies: - browserslist: ^4.0.0 - color: ^3.0.0 - has: ^1.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 9b2eab73cd227cbf296f1a2a6466047f6c70b918c3844535531fd87f31d7878e1a8d81e8803ffe2ee8c3330ea5bec65e358a0e0f33defcd758975064e07fe928 - languageName: node - linkType: hard - -"postcss-convert-values@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-convert-values@npm:4.0.1" - dependencies: - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 71cac73f5befeb8bc16274e2aaabe1b8e0cb42a8b8641dc2aa61b1c502697b872a682c36f370cce325553bbfc859c38f2b064fae6f6469b1cada79e733559261 - languageName: node - linkType: hard - -"postcss-custom-media@npm:^7.0.8": - version: 7.0.8 - resolution: "postcss-custom-media@npm:7.0.8" - dependencies: - postcss: ^7.0.14 - checksum: 3786eb10f238b22dc620cfcc9257779e27d8cee4510b3209d0ab67310e07dc68b69f3359db7a911f5e76df466f73d078fc80100943fe2e8fa9bcacf226705a2d - languageName: node - linkType: hard - -"postcss-custom-properties@npm:^8.0.11": - version: 8.0.11 - resolution: "postcss-custom-properties@npm:8.0.11" - dependencies: - postcss: ^7.0.17 - postcss-values-parser: ^2.0.1 - checksum: cb1b47459a23ff2e48714c5d48d50070d573ef829dc7e57189d1b38c6fba0de7084f1acefbd84c61dd67e30bd9a7d154b22f195547728a9dc5f76f7d3f03ffea - languageName: node - linkType: hard - -"postcss-custom-selectors@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-custom-selectors@npm:5.1.2" - dependencies: - postcss: ^7.0.2 - postcss-selector-parser: ^5.0.0-rc.3 - checksum: 26c83d348448f4ab5931cc1621606b09a6b1171e25fac2404073f3e298e77494ac87d4a21009679503b4895452810e93e618b5af26b4c7180a9013f283bb8088 - languageName: node - linkType: hard - -"postcss-dir-pseudo-class@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-dir-pseudo-class@npm:5.0.0" - dependencies: - postcss: ^7.0.2 - postcss-selector-parser: ^5.0.0-rc.3 - checksum: 703156fc65f259ec2e86ba51d18370a6d3b71f2e6473c7d65694676a8f0152137b1997bc0a53f7f373c8c3e4d63c72f7b5e2049f2ef3a7276b49409395722044 - languageName: node - linkType: hard - -"postcss-discard-comments@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-discard-comments@npm:4.0.2" - dependencies: - postcss: ^7.0.0 - checksum: b087d47649160b7c6236aba028d27f1796a0dcb21e9ffd0da62271171fc31b7f150ee6c7a24fa97e3f5cd1af92e0dc41cb2e2680a175da53f1e536c441bda56a - languageName: node - linkType: hard - -"postcss-discard-duplicates@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-discard-duplicates@npm:4.0.2" - dependencies: - postcss: ^7.0.0 - checksum: bd83647a8e5ea34b0cfe563d0c1410a0c9e742011aa67955709c5ecd2d2bb03b7016053781e975e4c802127d2f9a0cd9c22f1f2783b9d7b1c35487d60f7ea540 - languageName: node - linkType: hard - -"postcss-discard-empty@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-discard-empty@npm:4.0.1" - dependencies: - postcss: ^7.0.0 - checksum: 529b177bd2417fa5c8887891369b4538b858d767461192974a796814265794e08e0e624a9f4c566ed9f841af3faddb7e7a9c05c45cbbe2fb1f092f65bd227f5c - languageName: node - linkType: hard - -"postcss-discard-overridden@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-discard-overridden@npm:4.0.1" - dependencies: - postcss: ^7.0.0 - checksum: b34d8cf58e4d13d99a3a9459f4833f1248ca897316bbb927375590feba35c24a0304084a6174a7bf3fe4ba3d5e5e9baf15ea938e7e5744e56915fa7ef6d91ee0 - languageName: node - linkType: hard - -"postcss-double-position-gradients@npm:^1.0.0": - version: 1.0.0 - resolution: "postcss-double-position-gradients@npm:1.0.0" - dependencies: - postcss: ^7.0.5 - postcss-values-parser: ^2.0.0 - checksum: d2c4515b38a131ece44dba331aea2b3f9de646e30873b49f03fa8906179a3c43ddc43183bc4df609d8af0834e7c266ec3a63eaa4b3e96aa445d98ecdc12d2544 - languageName: node - linkType: hard - -"postcss-env-function@npm:^2.0.2": - version: 2.0.2 - resolution: "postcss-env-function@npm:2.0.2" - dependencies: - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: 0cfa2e6cad5123cce39dcf5af332ec3b0e3e09b54d5142225f255914079d2afda3f1052e60f4b6d3bccf7eb9d592325b7421f1ecc6674ccb13c267a721fc3128 - languageName: node - linkType: hard - -"postcss-flexbugs-fixes@npm:4.2.1": - version: 4.2.1 - resolution: "postcss-flexbugs-fixes@npm:4.2.1" - dependencies: - postcss: ^7.0.26 - checksum: 51a626bc80dbe42fcc8b0895b4f23a558bb809ec52cdc05aa27fb24cdffd4c9dc53f25218085ddf407c53d76573bc6d7568219c912161609f02532a8f5f59b43 - languageName: node - linkType: hard - -"postcss-focus-visible@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-focus-visible@npm:4.0.0" - dependencies: - postcss: ^7.0.2 - checksum: a3c93fbb578608f60c5256d0989ae32fd9100f76fa053880e82bfeb43751e81a3a9e69bd8338e06579b7f56b230a80fb2cc671eff134f2682dcbec9bbb8658ae - languageName: node - linkType: hard - -"postcss-focus-within@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-focus-within@npm:3.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 2a31292cd9b929a2dd3171fc4ed287ea4a93c6ec8df1d634503fb97b8b30b33a2970b5e0df60634c60ff887923ab28641b624d566533096950e0a384705e9b90 - languageName: node - linkType: hard - -"postcss-font-variant@npm:^4.0.0": - version: 4.0.1 - resolution: "postcss-font-variant@npm:4.0.1" - dependencies: - postcss: ^7.0.2 - checksum: d09836cd848e8c24d144484b6b9b175df26dca59e1a1579e790c7f3dcaea00944a8d0b6ac543f4c128de7b30fab9a0aef544d54789b3b55fd850770b172d980d - languageName: node - linkType: hard - -"postcss-gap-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "postcss-gap-properties@npm:2.0.0" - dependencies: - postcss: ^7.0.2 - checksum: c842d105c9403e34a8fac7bdef33a63fcb6bde038b04b20cae1e719e1966632887545576af99a4a6f302c98ca029c6f0d746419f498ef7f6821177ba676e6c25 - languageName: node - linkType: hard - -"postcss-image-set-function@npm:^3.0.1": - version: 3.0.1 - resolution: "postcss-image-set-function@npm:3.0.1" - dependencies: - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: 43958d7c1f80077e60e066bdf61bc326bcac64c272f17fd7a0585a6934fb1ffc7ba7f560a39849f597e4d28b8ae3addd9279c7145b9478d2d91a7c54c2fefd8b - languageName: node - linkType: hard - -"postcss-initial@npm:^3.0.0": - version: 3.0.4 - resolution: "postcss-initial@npm:3.0.4" - dependencies: - postcss: ^7.0.2 - checksum: 710ab6cabc5970912c04314099f5334e7d901235014bb1462657e29f8dc97b6e51caa35f0beba7e5dbe440589ef9c1df13a89bc53d6e6aa664573b945f1630bb - languageName: node - linkType: hard - -"postcss-lab-function@npm:^2.0.1": - version: 2.0.1 - resolution: "postcss-lab-function@npm:2.0.1" - dependencies: - "@csstools/convert-colors": ^1.4.0 - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: 598229a7a05803b18cccde28114833e910367c5954341bea03c7d7b7b5a667dfb6a77ef9dd4a16d80fdff8b10dd44c478602a7d56e43687c8687af3710b4706f - languageName: node - linkType: hard - -"postcss-load-config@npm:^2.0.0": - version: 2.1.2 - resolution: "postcss-load-config@npm:2.1.2" - dependencies: - cosmiconfig: ^5.0.0 - import-cwd: ^2.0.0 - checksum: 2e6d3a499512a03c19b0090f4143861612d613511d57122879d9fd545558d2a9fcbe85a2b0faf2ec32bbce0e62d22d2b544d91cbc4d4dfb3f22f841f8271fbc6 - languageName: node - linkType: hard - -"postcss-loader@npm:3.0.0": - version: 3.0.0 - resolution: "postcss-loader@npm:3.0.0" - dependencies: - loader-utils: ^1.1.0 - postcss: ^7.0.0 - postcss-load-config: ^2.0.0 - schema-utils: ^1.0.0 - checksum: a6a922cbcc225ef57fb88c8248f91195869cd11e0d2b0b0fe84bc89a3074437d592d79a9fc39e50218677b7ba3a41b0e1c7e8f9666e59d41a196d7ab022c5805 - languageName: node - linkType: hard - -"postcss-logical@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-logical@npm:3.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 5278661b78a093661c9cac8c04666d457734bf156f83d8c67f6034c00e8d4b3a26fce32a8a4a251feae3c7587f42556412dca980e100d0c920ee55e878f7b8ee - languageName: node - linkType: hard - -"postcss-media-minmax@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-media-minmax@npm:4.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 8a4d94e25089bb5a66c6742bcdd263fce2fea391438151a85b442b7f8b66323bbca552b59a93efd6bcabcfd41845ddd4149bd56d156b008f8d7d04bc84d9fb11 - languageName: node - linkType: hard - -"postcss-merge-longhand@npm:^4.0.11": - version: 4.0.11 - resolution: "postcss-merge-longhand@npm:4.0.11" - dependencies: - css-color-names: 0.0.4 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - stylehacks: ^4.0.0 - checksum: 45082b492d4d771c1607707d04dbcaece85a100011109886af9460a7868720de1121e290a6442360e2668db510edef579194197d1b534e9fb6c8df7a6cb86a4d - languageName: node - linkType: hard - -"postcss-merge-rules@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-merge-rules@npm:4.0.3" - dependencies: - browserslist: ^4.0.0 - caniuse-api: ^3.0.0 - cssnano-util-same-parent: ^4.0.0 - postcss: ^7.0.0 - postcss-selector-parser: ^3.0.0 - vendors: ^1.0.0 - checksum: ed0f3880e1076e5b2a08e4cff35b50dc7dfbd337e6ba16a0ca157e28268cfa1d6c6d821e902d319757f32a7d36f944cad51be76f8b34858d1d7a637e7b585919 - languageName: node - linkType: hard - -"postcss-minify-font-values@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-minify-font-values@npm:4.0.2" - dependencies: - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: add296b3bc88501283d65b54ad83552f47c98dd403740a70d8dfeef6d30a21d4a1f40191ffef1029a9474e9580a73e84ef644e99ede76c5a2474579b583f4b34 - languageName: node - linkType: hard - -"postcss-minify-gradients@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-minify-gradients@npm:4.0.2" - dependencies: - cssnano-util-get-arguments: ^4.0.0 - is-color-stop: ^1.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: b83de019cc392192d64182fa6f609383904ef69013d71cda5d06fadab92b4daa73f5be0d0254c5eb0805405e5e1b9c44e49ca6bc629c4c7a24a8164a30b40d46 - languageName: node - linkType: hard - -"postcss-minify-params@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-minify-params@npm:4.0.2" - dependencies: - alphanum-sort: ^1.0.0 - browserslist: ^4.0.0 - cssnano-util-get-arguments: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - uniqs: ^2.0.0 - checksum: 15e7f196b3408ab3f55f1a7c9fa8aeea7949fdd02be28af232dd2e47bb7722e0e0a416d6b2c4550ba333a485b775da1bc35c19c9be7b6de855166d2e85d7b28f - languageName: node - linkType: hard - -"postcss-minify-selectors@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-minify-selectors@npm:4.0.2" - dependencies: - alphanum-sort: ^1.0.0 - has: ^1.0.0 - postcss: ^7.0.0 - postcss-selector-parser: ^3.0.0 - checksum: a214809b620e50296417838804c3978d5f0a5ddfd48916780d77c1e0348c9ed0baa4b1f3905511b0f06b77340b5378088cc3188517c0848e8b7a53a71ef36c2b - languageName: node - linkType: hard - -"postcss-modules-extract-imports@npm:1.1.0": - version: 1.1.0 - resolution: "postcss-modules-extract-imports@npm:1.1.0" - dependencies: - postcss: ^6.0.1 - checksum: 3dc9ed98509f654c1220bb8ec7489b30fa4441f2797eb5c894badfd6f4ab1b086f8002f59d47845d827a3f23a40400ba4c18959c7a3702285d4e5bfcfcd180d4 - languageName: node - linkType: hard - -"postcss-modules-extract-imports@npm:^2.0.0": - version: 2.0.0 - resolution: "postcss-modules-extract-imports@npm:2.0.0" - dependencies: - postcss: ^7.0.5 - checksum: 154790fe5954aaa12f300aa9aa782fae8b847138459c8f533ea6c8f29439dd66b4d9a49e0bf6f8388fa0df898cc03d61c84678e3b0d4b47cac5a4334a7151a9f - languageName: node - linkType: hard - -"postcss-modules-local-by-default@npm:1.2.0": - version: 1.2.0 - resolution: "postcss-modules-local-by-default@npm:1.2.0" - dependencies: - css-selector-tokenizer: ^0.7.0 - postcss: ^6.0.1 - checksum: c8bbe0a9584e0a02339f4143125bf5febbcbfdbabedc33a5f2debdc5b0089f5c238b236101dbf923ea66c11637c0dee8bcf91d1692ed0443762203286b864ea2 - languageName: node - linkType: hard - -"postcss-modules-local-by-default@npm:^3.0.3": - version: 3.0.3 - resolution: "postcss-modules-local-by-default@npm:3.0.3" - dependencies: - icss-utils: ^4.1.1 - postcss: ^7.0.32 - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.1.0 - checksum: 0267633eaf80e72a3abf391b6e34c5b344a1bdfb1421543d3ed43fc757e053e0fcc1a2eb06d959a8f435776e8dc80288b59bfc34d61e5e021d47b747c417c5a1 - languageName: node - linkType: hard - -"postcss-modules-scope@npm:1.1.0": - version: 1.1.0 - resolution: "postcss-modules-scope@npm:1.1.0" - dependencies: - css-selector-tokenizer: ^0.7.0 - postcss: ^6.0.1 - checksum: e1b7dd8b1aabb0dc719015352835c6865a5b80ef469cf956749540847b751ccac860d7f0f5659aa2c4b8a484c4a9291098895e5c91c9707e02c7f79a7288297e - languageName: node - linkType: hard - -"postcss-modules-scope@npm:^2.2.0": - version: 2.2.0 - resolution: "postcss-modules-scope@npm:2.2.0" - dependencies: - postcss: ^7.0.6 - postcss-selector-parser: ^6.0.0 - checksum: c611181df924275ca1ffea261149c229488d6921054896879ca98feeb0913f9b00f4f160654beb2cb243a2989036c269baa96778eeacaaa399a4604b6e2fea17 - languageName: node - linkType: hard - -"postcss-modules-values@npm:1.3.0": - version: 1.3.0 - resolution: "postcss-modules-values@npm:1.3.0" - dependencies: - icss-replace-symbols: ^1.1.0 - postcss: ^6.0.1 - checksum: c1d542f71df43ec8b998808ea8de5e74e215a2428e92a8c157da436724aacf246b77440da1cd3d5daae610c875b46e7f8a845b52e1a49afdc37668093de8e3e7 - languageName: node - linkType: hard - -"postcss-modules-values@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-modules-values@npm:3.0.0" - dependencies: - icss-utils: ^4.0.0 - postcss: ^7.0.6 - checksum: f1aea0b9c6798b39ec02a6d2310924bb9bfbddb4579668c2d4e2205ca7a68c656b85d5720f9bba3629d611f36667fe04ab889ea3f9a6b569a0a0d57b4f2f4e99 - languageName: node - linkType: hard - -"postcss-nesting@npm:^7.0.0": - version: 7.0.1 - resolution: "postcss-nesting@npm:7.0.1" - dependencies: - postcss: ^7.0.2 - checksum: 4056be95759e8b25477f19aff7202b57dd27eeef41d31f7ca14e4c87d16ffb40e4db3f518fc85bd28b20e183f5e5399b56b52fcc79affd556e13a98bbc678169 - languageName: node - linkType: hard - -"postcss-normalize-charset@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-normalize-charset@npm:4.0.1" - dependencies: - postcss: ^7.0.0 - checksum: f233f48d61eb005da217e5bfa58f4143165cb525ceea2de4fd88e4172a33712e8b63258ffa089c867875a498c408f293a380ea9e6f40076de550d8053f50e5bc - languageName: node - linkType: hard - -"postcss-normalize-display-values@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-display-values@npm:4.0.2" - dependencies: - cssnano-util-get-match: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: c5b857ca05f30a3efc6211cdaa5c9306f3eb0dbac141047d451a418d2bfd3e54be0bd4481d61c640096152d3078881a8dc3dec61913ff7f01ab4fc6df1a14732 - languageName: node - linkType: hard - -"postcss-normalize-positions@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-positions@npm:4.0.2" - dependencies: - cssnano-util-get-arguments: ^4.0.0 - has: ^1.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 291612d0879e6913010937f1193ab56ae1cfd8a274665330ccbedbe72f59c36db3f688b0a3faa4c6689cfd03dff0c27702c6acfce9b1f697a022bfcee3cd4fc4 - languageName: node - linkType: hard - -"postcss-normalize-repeat-style@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-repeat-style@npm:4.0.2" - dependencies: - cssnano-util-get-arguments: ^4.0.0 - cssnano-util-get-match: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 2160b2a6fe4f9671ad5d044755f0e04cfb5f255db607505fd4c74e7c806315c9dca914e74bb02f5f768de7b70939359d05c3f9b23ae8f72551d8fdeabf79a1fb - languageName: node - linkType: hard - -"postcss-normalize-string@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-string@npm:4.0.2" - dependencies: - has: ^1.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 9d40753ceb4f7854ed690ecd5fe4ea142280b14441dd11e188e573e58af93df293efdc77311f1c599431df785a3bb614dfe4bdacc3081ee3fe8c95916c849b2f - languageName: node - linkType: hard - -"postcss-normalize-timing-functions@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-timing-functions@npm:4.0.2" - dependencies: - cssnano-util-get-match: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 8dfd711f5cdb49b823a92d1cd56d40f66f3686e257804495ef59d5d7f71815b6d19412a1ff25d40971bf6e146b1fa0517a6cc1a4c286b36c5cee6ed08a1952db - languageName: node - linkType: hard - -"postcss-normalize-unicode@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-normalize-unicode@npm:4.0.1" - dependencies: - browserslist: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 2b1da17815f8402651a72012fd385b5111e84002baf98b649e0c1fc91298b65bb0e431664f6df8a99b23217259ecec242b169c0f18bf26e727af02eaf475fb07 - languageName: node - linkType: hard - -"postcss-normalize-url@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-normalize-url@npm:4.0.1" - dependencies: - is-absolute-url: ^2.0.0 - normalize-url: ^3.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: fcaab832d8b773568197b41406517a9e5fc7704f2fac7185bd0e13b19961e1ce9f1c762e4ffa470de7baa6a82ae8ae5ccf6b1bbeec6e95216d22ce6ab514fe04 - languageName: node - linkType: hard - -"postcss-normalize-whitespace@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-normalize-whitespace@npm:4.0.2" - dependencies: - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 378a6eadb09ccc5ca2289e8daf98ce7366ae53342c4df7898ef5fae68138884d6c1241493531635458351b2805218bf55ceecae0fd289e5696ab15c78966abbb - languageName: node - linkType: hard - -"postcss-normalize@npm:8.0.1": - version: 8.0.1 - resolution: "postcss-normalize@npm:8.0.1" - dependencies: - "@csstools/normalize.css": ^10.1.0 - browserslist: ^4.6.2 - postcss: ^7.0.17 - postcss-browser-comments: ^3.0.0 - sanitize.css: ^10.0.0 - checksum: 3109075389b91a09a790c3cd62a4e8c147bab2113cffa7ea2e776982352796816bc56b7f08ed7f7175c24e5d9c46171a07f95eeee00cfecddac6e3b4c9888dd0 - languageName: node - linkType: hard - -"postcss-ordered-values@npm:^4.1.2": - version: 4.1.2 - resolution: "postcss-ordered-values@npm:4.1.2" - dependencies: - cssnano-util-get-arguments: ^4.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: 4a6f6a427a0165e1fa4f04dbe53a88708c73ea23e5b23ce312366ca8d85d83af450154a54f0e5df6c5712f945c180b6a364c3682dc995940b93228bb26658a96 - languageName: node - linkType: hard - -"postcss-overflow-shorthand@npm:^2.0.0": - version: 2.0.0 - resolution: "postcss-overflow-shorthand@npm:2.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 553be1b7f9645017d33b654f9a436ce4f4406066c3056ca4c7ee06c21c2964fbe3437a9a3f998137efb6a17c1a79ee7e8baa39332c7dd9874aac8b69a3ad08b0 - languageName: node - linkType: hard - -"postcss-page-break@npm:^2.0.0": - version: 2.0.0 - resolution: "postcss-page-break@npm:2.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 65a4453883e904ca0f337d3a988a1b5a090e2e8bc2855913cb0b4b741158e6ea2e4eed9b33f5989e7ae55faa0f7b83cdc09693d600ac4c86ce804ae381ec48a4 - languageName: node - linkType: hard - -"postcss-place@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-place@npm:4.0.1" - dependencies: - postcss: ^7.0.2 - postcss-values-parser: ^2.0.0 - checksum: 26b2a443b0a8fcb6774d00036fa351633798a655ccd609da2d561fbd6561b0ba6f6b6d89e15fb074389fadb7da4cbc59c48ba75f1f5fdc478c020febb4e2b557 - languageName: node - linkType: hard - -"postcss-preset-env@npm:6.7.0": - version: 6.7.0 - resolution: "postcss-preset-env@npm:6.7.0" - dependencies: - autoprefixer: ^9.6.1 - browserslist: ^4.6.4 - caniuse-lite: ^1.0.30000981 - css-blank-pseudo: ^0.1.4 - css-has-pseudo: ^0.10.0 - css-prefers-color-scheme: ^3.1.1 - cssdb: ^4.4.0 - postcss: ^7.0.17 - postcss-attribute-case-insensitive: ^4.0.1 - postcss-color-functional-notation: ^2.0.1 - postcss-color-gray: ^5.0.0 - postcss-color-hex-alpha: ^5.0.3 - postcss-color-mod-function: ^3.0.3 - postcss-color-rebeccapurple: ^4.0.1 - postcss-custom-media: ^7.0.8 - postcss-custom-properties: ^8.0.11 - postcss-custom-selectors: ^5.1.2 - postcss-dir-pseudo-class: ^5.0.0 - postcss-double-position-gradients: ^1.0.0 - postcss-env-function: ^2.0.2 - postcss-focus-visible: ^4.0.0 - postcss-focus-within: ^3.0.0 - postcss-font-variant: ^4.0.0 - postcss-gap-properties: ^2.0.0 - postcss-image-set-function: ^3.0.1 - postcss-initial: ^3.0.0 - postcss-lab-function: ^2.0.1 - postcss-logical: ^3.0.0 - postcss-media-minmax: ^4.0.0 - postcss-nesting: ^7.0.0 - postcss-overflow-shorthand: ^2.0.0 - postcss-page-break: ^2.0.0 - postcss-place: ^4.0.1 - postcss-pseudo-class-any-link: ^6.0.0 - postcss-replace-overflow-wrap: ^3.0.0 - postcss-selector-matches: ^4.0.0 - postcss-selector-not: ^4.0.0 - checksum: 209cbb63443a1631aa97ccfc3b95b1ff519ddaeb672f84d6af501bd9e9ad6727680b5b1bffb8209322e47d93029a69df6064f75cd0b7633b6df943cbef33f22e - languageName: node - linkType: hard - -"postcss-pseudo-class-any-link@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-pseudo-class-any-link@npm:6.0.0" - dependencies: - postcss: ^7.0.2 - postcss-selector-parser: ^5.0.0-rc.3 - checksum: d7dc3bba45df2966f8512c082a9cc341e63edac14d915ad9f41c62c452cd306d82da6baeee757dd4e7deafe3fa33b26c16e5236c670916bbb7ff4b4723453541 - languageName: node - linkType: hard - -"postcss-reduce-initial@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-reduce-initial@npm:4.0.3" - dependencies: - browserslist: ^4.0.0 - caniuse-api: ^3.0.0 - has: ^1.0.0 - postcss: ^7.0.0 - checksum: 5ad1a955cb20f5b1792ff8cc35894621edc23ee77397cc7e9692d269882fb4451655633947e0407fe20bd127d09d0b7e693034c64417bf8bf1034a83c6e71668 - languageName: node - linkType: hard - -"postcss-reduce-transforms@npm:^4.0.2": - version: 4.0.2 - resolution: "postcss-reduce-transforms@npm:4.0.2" - dependencies: - cssnano-util-get-match: ^4.0.0 - has: ^1.0.0 - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - checksum: e6a351d5da7ecf276ddda350635b15bce8e14af08aee1c8a0e8d9c2ab2631eab33b06f3c2f31c6f9c76eedbfc23f356d86da3539e011cde3e335a2cac9d91dc1 - languageName: node - linkType: hard - -"postcss-replace-overflow-wrap@npm:^3.0.0": - version: 3.0.0 - resolution: "postcss-replace-overflow-wrap@npm:3.0.0" - dependencies: - postcss: ^7.0.2 - checksum: 8c5b512a1172dd3d7b4a06d56d3b64c76dea01ca0950b546f83ae993f83aa95f933239e18deed0a5f3d2ef47840de55fa73498c4a46bfbe7bd892eb0dd8b606c - languageName: node - linkType: hard - -"postcss-safe-parser@npm:5.0.2": - version: 5.0.2 - resolution: "postcss-safe-parser@npm:5.0.2" - dependencies: - postcss: ^8.1.0 - checksum: b786eca091f856f2d31856d903c24c1b591ecbc0b607af0824e1cf12b9b254b5e1f24bc842cc2b95bc561f097d8b358fb4c9e04c73c1ba9c118d21bde9a83253 - languageName: node - linkType: hard - -"postcss-selector-matches@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-selector-matches@npm:4.0.0" - dependencies: - balanced-match: ^1.0.0 - postcss: ^7.0.2 - checksum: 724f6cb345477691909468268a456f978ad3bae9ecd9908b2bb55c55c5f3c6d54a1fe50ce3956d93b122d05fc36677a8e4a34eed07bccda969c3f8baa43669a6 - languageName: node - linkType: hard - -"postcss-selector-not@npm:^4.0.0": - version: 4.0.1 - resolution: "postcss-selector-not@npm:4.0.1" - dependencies: - balanced-match: ^1.0.0 - postcss: ^7.0.2 - checksum: 08fbd3e5ca273f3b767bd35d6bd033647a68f59b596d8aec19a9089b750539bdf85121ed7fd00a7763174a55c75c22a309d75d306127e23dc396069781efbaa4 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^3.0.0": - version: 3.1.2 - resolution: "postcss-selector-parser@npm:3.1.2" - dependencies: - dot-prop: ^5.2.0 - indexes-of: ^1.0.1 - uniq: ^1.0.1 - checksum: 85b754bf3b5f671cddd75a199589e5b03da114ec119aa4628ab7f35f76134b25296d18a68f745e39780c379d66d3919ae7a1b6129aeec5049cedb9ba4c660803 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^5.0.0-rc.3, postcss-selector-parser@npm:^5.0.0-rc.4": - version: 5.0.0 - resolution: "postcss-selector-parser@npm:5.0.0" - dependencies: - cssesc: ^2.0.0 - indexes-of: ^1.0.1 - uniq: ^1.0.1 - checksum: e49d21455e06d2cb9bf2a615bf3e605e0603c2c430a84c37a34f8baedaf3e8f9d0059a085d3e0483cbfa04c0d4153c7da28e7ac0ada319efdefe407df11dc1d4 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2": - version: 6.0.16 - resolution: "postcss-selector-parser@npm:6.0.16" - dependencies: - cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: e1cd68e33a39e3dc1e1e5bd8717be5bbe3cc23a4cecb466c3acb2f3a77daad7a47df4d6137a76f8db74cf160d2fb16b2cfdb4ccbebdfda844690f8d545fe281d - languageName: node - linkType: hard - -"postcss-svgo@npm:^4.0.3": - version: 4.0.3 - resolution: "postcss-svgo@npm:4.0.3" - dependencies: - postcss: ^7.0.0 - postcss-value-parser: ^3.0.0 - svgo: ^1.0.0 - checksum: 6f5264241193ca3ba748fdf43c88ef692948d2ae38787398dc90089061fed884064ec14ee244fce07f19c419d1b058c77e135407d0932b09e93e528581ce3e10 - languageName: node - linkType: hard - -"postcss-unique-selectors@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-unique-selectors@npm:4.0.1" - dependencies: - alphanum-sort: ^1.0.0 - postcss: ^7.0.0 - uniqs: ^2.0.0 - checksum: 272eb1fa17d6ea513b5f4d2f694ef30fa690795ce388aef7bf3967fd3bcec7a9a3c8da380e74961ded8d98253a6ed18fb380b29da00e2fe03e74813e7765ea71 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^3.0.0": - version: 3.3.1 - resolution: "postcss-value-parser@npm:3.3.1" - checksum: 62cd26e1cdbcf2dcc6bcedf3d9b409c9027bc57a367ae20d31dd99da4e206f730689471fd70a2abe866332af83f54dc1fa444c589e2381bf7f8054c46209ce16 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f - languageName: node - linkType: hard - -"postcss-values-parser@npm:^2.0.0, postcss-values-parser@npm:^2.0.1": - version: 2.0.1 - resolution: "postcss-values-parser@npm:2.0.1" - dependencies: - flatten: ^1.0.2 - indexes-of: ^1.0.1 - uniq: ^1.0.1 - checksum: 050877880937e15af8d18bf48902e547e2123d7cc32c1f215b392642bc5e2598a87a341995d62f38e450aab4186b8afeb2c9541934806d458ad8b117020b2ebf - languageName: node - linkType: hard - -"postcss@npm:6.0.1": - version: 6.0.1 - resolution: "postcss@npm:6.0.1" - dependencies: - chalk: ^1.1.3 - source-map: ^0.5.6 - supports-color: ^3.2.3 - checksum: 2533d218b6c23dad42fffb98979f3fd2b98bbe11c923e3245ed8f83da9591c176a5de2403ad3ebaedea819f50d5f6c88c40d322265c59b6b10ed8a02c12fd4bc - languageName: node - linkType: hard - -"postcss@npm:7.0.36": - version: 7.0.36 - resolution: "postcss@npm:7.0.36" - dependencies: - chalk: ^2.4.2 - source-map: ^0.6.1 - supports-color: ^6.1.0 - checksum: 4cfc0989b9ad5d0e8971af80d87f9c5beac5c84cb89ff22ad69852edf73c0a2fa348e7e0a135b5897bf893edad0fe86c428769050431ad9b532f072ff530828d - languageName: node - linkType: hard - -"postcss@npm:^6.0.1": - version: 6.0.23 - resolution: "postcss@npm:6.0.23" - dependencies: - chalk: ^2.4.1 - source-map: ^0.6.1 - supports-color: ^5.4.0 - checksum: cc6cb2c1dbcdefa6f57a71d67fe535c9e96543298bbe28f9a6a64c4f1e21b6127113890dd4cda8873d3f4e6613a0566b7b4bbb230204f3a9a309190bda065d81 - languageName: node - linkType: hard - -"postcss@npm:^7, postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.26, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.5, postcss@npm:^7.0.6": - version: 7.0.39 - resolution: "postcss@npm:7.0.39" - dependencies: - picocolors: ^0.2.1 - source-map: ^0.6.1 - checksum: 4ac793f506c23259189064bdc921260d869a115a82b5e713973c5af8e94fbb5721a5cc3e1e26840500d7e1f1fa42a209747c5b1a151918a9bc11f0d7ed9048e3 - languageName: node - linkType: hard - -"postcss@npm:^8.1.0, postcss@npm:^8.4.27": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" - dependencies: - nanoid: ^3.3.7 - picocolors: ^1.0.0 - source-map-js: ^1.2.0 - checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - -"prepend-http@npm:^1.0.0": - version: 1.0.4 - resolution: "prepend-http@npm:1.0.4" - checksum: 01e7baf4ad38af02257b99098543469332fc42ae50df33d97a124bf8172295907352fa6138c9b1610c10c6dd0847ca736e53fda736387cc5cf8fcffe96b47f29 - languageName: node - linkType: hard - -"prettier-linter-helpers@npm:^1.0.0": - version: 1.0.0 - resolution: "prettier-linter-helpers@npm:1.0.0" - dependencies: - fast-diff: ^1.1.2 - checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 - languageName: node - linkType: hard - -"prettier@npm:^2.0.5": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 - languageName: node - linkType: hard - -"pretty-bytes@npm:^5.3.0": - version: 5.6.0 - resolution: "pretty-bytes@npm:5.6.0" - checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd - languageName: node - linkType: hard - -"pretty-error@npm:^2.1.1": - version: 2.1.2 - resolution: "pretty-error@npm:2.1.2" - dependencies: - lodash: ^4.17.20 - renderkid: ^2.0.4 - checksum: 16775d06f9a695d17103414d610b1281f9535ee1f2da1ce1e1b9be79584a114aa7eac6dcdcc5ef151756d3c014dfd4ac1c7303ed8016d0cec12437cfdf4021c6 - languageName: node - linkType: hard - -"pretty-format@npm:^26.6.0, pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^17.0.1 - checksum: e3b808404d7e1519f0df1aa1f25cee0054ab475775c6b2b8c5568ff23194a92d54bf93274139b6f584ca70fd773be4eaa754b0e03f12bb0a8d1426b07f079976 - languageName: node - linkType: hard - -"pretty-format@npm:^27.0.2": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" - dependencies: - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 - languageName: node - linkType: hard - -"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0, pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": ^29.6.3 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 - languageName: node - linkType: hard - -"prisma@npm:^4.4.0": - version: 4.16.2 - resolution: "prisma@npm:4.16.2" - dependencies: - "@prisma/engines": 4.16.2 - bin: - prisma: build/index.js - prisma2: build/index.js - checksum: 1d0ed616abd7f8de22441e333b976705f1cb05abcb206965df3fc6a7ea03911ef467dd484a4bc51fdc6cff72dd9857b9852be5f232967a444af0a98c49bfdb76 - languageName: node - linkType: hard - -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 - languageName: node - linkType: hard - -"progress@npm:^2.0.0": - version: 2.0.3 - resolution: "progress@npm:2.0.3" - checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"promise@npm:^8.1.0": - version: 8.3.0 - resolution: "promise@npm:8.3.0" - dependencies: - asap: ~2.0.6 - checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 - languageName: node - linkType: hard - -"prompts@npm:2.4.0": - version: 2.4.0 - resolution: "prompts@npm:2.4.0" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: 96c7bef8eb3c0bb2076d2bc5ee473f06e6d8ac01ac4d0f378dfeb0ddaf2f31c339360ec8f0f8486f78601d16ebef7c6bd9886d44b937ba01bab568b937190265 - languageName: node - linkType: hard - -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - -"prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - -"property-expr@npm:^2.0.4": - version: 2.0.6 - resolution: "property-expr@npm:2.0.6" - checksum: 89977f4bb230736c1876f460dd7ca9328034502fd92e738deb40516d16564b850c0bbc4e052c3df88b5b8cd58e51c93b46a94bea049a3f23f4a022c038864cab - languageName: node - linkType: hard - -"property-information@npm:^5.3.0": - version: 5.6.0 - resolution: "property-information@npm:5.6.0" - dependencies: - xtend: ^4.0.0 - checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 - languageName: node - linkType: hard - -"proxy-addr@npm:~2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 - languageName: node - linkType: hard - -"prr@npm:~1.0.1": - version: 1.0.1 - resolution: "prr@npm:1.0.1" - checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 - languageName: node - linkType: hard - -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d - languageName: node - linkType: hard - -"public-encrypt@npm:^4.0.0": - version: 4.0.3 - resolution: "public-encrypt@npm:4.0.3" - dependencies: - bn.js: ^4.1.0 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - parse-asn1: ^5.0.0 - randombytes: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 - languageName: node - linkType: hard - -"pump@npm:^2.0.0": - version: 2.0.1 - resolution: "pump@npm:2.0.1" - dependencies: - end-of-stream: ^1.1.0 - once: ^1.3.1 - checksum: e9f26a17be00810bff37ad0171edb35f58b242487b0444f92fb7d78bc7d61442fa9b9c5bd93a43fd8fd8ddd3cc75f1221f5e04c790f42907e5baab7cf5e2b931 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: ^1.1.0 - once: ^1.3.1 - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - -"pumpify@npm:^1.3.3": - version: 1.5.1 - resolution: "pumpify@npm:1.5.1" - dependencies: - duplexify: ^3.6.0 - inherits: ^2.0.3 - pump: ^2.0.0 - checksum: 26ca412ec8d665bd0d5e185c1b8f627728eff603440d75d22a58e421e3c66eaf86ec6fc6a6efc54808ecef65979279fa8e99b109a23ec1fa8d79f37e6978c9bd - languageName: node - linkType: hard - -"punycode@npm:^1.2.4, punycode@npm:^1.4.1": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 - languageName: node - linkType: hard - -"q@npm:^1.1.2": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 - languageName: node - linkType: hard - -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 - languageName: node - linkType: hard - -"qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.7.0": - version: 6.12.1 - resolution: "qs@npm:6.12.1" - dependencies: - side-channel: ^1.0.6 - checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 - languageName: node - linkType: hard - -"query-string@npm:^4.1.0": - version: 4.3.4 - resolution: "query-string@npm:4.3.4" - dependencies: - object-assign: ^4.1.0 - strict-uri-encode: ^1.0.0 - checksum: 3b2bae6a8454cf0edf11cf1aa4d1f920398bbdabc1c39222b9bb92147e746fcd97faf00e56f494728fb66b2961b495ba0fde699d5d3bd06b11472d664b36c6cf - languageName: node - linkType: hard - -"querystring-es3@npm:^0.2.0": - version: 0.2.1 - resolution: "querystring-es3@npm:0.2.1" - checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 - languageName: node - linkType: hard - -"querystring@npm:^0.2.0": - version: 0.2.1 - resolution: "querystring@npm:0.2.1" - checksum: 7b83b45d641e75fd39cd6625ddfd44e7618e741c61e95281b57bbae8fde0afcc12cf851924559e5cc1ef9baa3b1e06e22b164ea1397d65dd94b801f678d9c8ce - languageName: node - linkType: hard - -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: ^2.1.0 - checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 - languageName: node - linkType: hard - -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"randomfill@npm:^1.0.3": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: ^2.0.5 - safe-buffer: ^5.1.0 - checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 - languageName: node - linkType: hard - -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 - languageName: node - linkType: hard - -"react-app-polyfill@npm:^2.0.0": - version: 2.0.0 - resolution: "react-app-polyfill@npm:2.0.0" - dependencies: - core-js: ^3.6.5 - object-assign: ^4.1.1 - promise: ^8.1.0 - raf: ^3.4.1 - regenerator-runtime: ^0.13.7 - whatwg-fetch: ^3.4.1 - checksum: 99e52a6b2229c7ca730cfd44ac95640f955be71d144225bd6c24fa47922a742658a371d0a2f0876d732533f1055b7cd7e9d534c89c29f8ca889ecd1b8d15f065 - languageName: node - linkType: hard - -"react-dev-utils@npm:^11.0.3": - version: 11.0.4 - resolution: "react-dev-utils@npm:11.0.4" - dependencies: - "@babel/code-frame": 7.10.4 - address: 1.1.2 - browserslist: 4.14.2 - chalk: 2.4.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 2.0.0 - filesize: 6.1.0 - find-up: 4.1.0 - fork-ts-checker-webpack-plugin: 4.1.6 - global-modules: 2.0.0 - globby: 11.0.1 - gzip-size: 5.1.1 - immer: 8.0.1 - is-root: 2.1.0 - loader-utils: 2.0.0 - open: ^7.0.2 - pkg-up: 3.1.0 - prompts: 2.4.0 - react-error-overlay: ^6.0.9 - recursive-readdir: 2.2.2 - shell-quote: 1.7.2 - strip-ansi: 6.0.0 - text-table: 0.2.0 - checksum: b41c95010a4fb60d4ea6309423520e6268757b68df34de7e9e8dbc72549236a1f5a698ff99ad72a034ac51b042aa79ee53994330ce4df05bf867e63c5464bb3f - languageName: node - linkType: hard - -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - scheduler: ^0.23.0 - peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc - languageName: node - linkType: hard - -"react-error-boundary@npm:^3.1.0": - version: 3.1.4 - resolution: "react-error-boundary@npm:3.1.4" - dependencies: - "@babel/runtime": ^7.12.5 - peerDependencies: - react: ">=16.13.1" - checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b - languageName: node - linkType: hard - -"react-error-overlay@npm:^6.0.9": - version: 6.0.11 - resolution: "react-error-overlay@npm:6.0.11" - checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42 - languageName: node - linkType: hard - -"react-fast-compare@npm:^3.1.1": - version: 3.2.2 - resolution: "react-fast-compare@npm:3.2.2" - checksum: 2071415b4f76a3e6b55c84611c4d24dcb12ffc85811a2840b5a3f1ff2d1a99be1020d9437ee7c6e024c9f4cbb84ceb35e48cf84f28fcb00265ad2dfdd3947704 - languageName: node - linkType: hard - -"react-google-charts@npm:^4.0.0": - version: 4.0.1 - resolution: "react-google-charts@npm:4.0.1" - peerDependencies: - react: ">=16.3.0" - react-dom: ">=16.3.0" - checksum: 874a552b07cc67d6b830718dd5e71055c46fbd0c7a12bca14078c0744111d8fead833e36a16bd0b0ea5c26f6cff0eb84b4b6de62845c945b3c47c6cc75233f9d - languageName: node - linkType: hard - -"react-google-login@npm:^5.2.2": - version: 5.2.2 - resolution: "react-google-login@npm:5.2.2" - dependencies: - "@types/react": "*" - prop-types: ^15.6.0 - peerDependencies: - react: ^16 || ^17 - react-dom: ^16 || ^17 - checksum: 29199c7035c3c1070a82241dc4063628d693f35a1736d292e3db736e52da825e8a53f9287b0b12b08a50d676973ce1349a4d8243cd849ca25fed6a4284378880 - languageName: node - linkType: hard - -"react-helmet@npm:^6.1.0": - version: 6.1.0 - resolution: "react-helmet@npm:6.1.0" - dependencies: - object-assign: ^4.1.1 - prop-types: ^15.7.2 - react-fast-compare: ^3.1.1 - react-side-effect: ^2.1.0 - peerDependencies: - react: ">=16.3.0" - checksum: a4998479dab7fc1c2799eddefb1870a9d881b5f71cfdf97979a9882e42f4bb50402d55335f308f461e735e01a06f46b16cc7b4e6bcb22c7a4a6f85a753c5c106 - languageName: node - linkType: hard - -"react-hook-form@npm:^7.34.0": - version: 7.51.3 - resolution: "react-hook-form@npm:7.51.3" - peerDependencies: - react: ^16.8.0 || ^17 || ^18 - checksum: 4ac71033b66ae0b7b9d75a1bc2053a6747fb37f68c6895ee85a72cabb890168d82990c8ca7bddd271e80fdbf58f471d14d6a0e0714400d017590d4f56b3d241f - languageName: node - linkType: hard - -"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f - languageName: node - linkType: hard - -"react-is@npm:^17.0.0, react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0, react-is@npm:^18.2.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - -"react-markdown@npm:^6.0.0": - version: 6.0.3 - resolution: "react-markdown@npm:6.0.3" - dependencies: - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.3 - comma-separated-tokens: ^1.0.0 - prop-types: ^15.7.2 - property-information: ^5.3.0 - react-is: ^17.0.0 - remark-parse: ^9.0.0 - remark-rehype: ^8.0.0 - space-separated-tokens: ^1.1.0 - style-to-object: ^0.3.0 - unified: ^9.0.0 - unist-util-visit: ^2.0.0 - vfile: ^4.0.0 - peerDependencies: - "@types/react": ">=16" - react: ">=16" - checksum: 5176e6a314a397b4747570213ae6c092f76c5c3dc67c748731243a0d4108e002134a9061cea87df1bea00db46cc7d238e092bae1609de74983c844e8386c0554 - languageName: node - linkType: hard - -"react-query@npm:*": - version: 3.39.3 - resolution: "react-query@npm:3.39.3" - dependencies: - "@babel/runtime": ^7.5.5 - broadcast-channel: ^3.4.1 - match-sorter: ^6.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad - languageName: node - linkType: hard - -"react-query@npm:3.17.0": - version: 3.17.0 - resolution: "react-query@npm:3.17.0" - dependencies: - "@babel/runtime": ^7.5.5 - broadcast-channel: ^3.4.1 - match-sorter: ^6.0.2 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 1aaa6ccb556373b11a8146885e873c09e563d297caad24e557910663be3046a7cca128ac48173745bb67928b63c92c1342b939fcc2fe984ecf8d607b8e692170 - languageName: node - linkType: hard - -"react-refresh@npm:^0.14.0": - version: 0.14.0 - resolution: "react-refresh@npm:0.14.0" - checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 - languageName: node - linkType: hard - -"react-refresh@npm:^0.8.3": - version: 0.8.3 - resolution: "react-refresh@npm:0.8.3" - checksum: 3cffe5a9cbac1c5d59bf74bf9fff43c987d87ef32098b9092ea94b6637377d86c08565b9374d9397f446b3fbcd95de986ec77220a16f979687cb39b7b89e2f91 - languageName: node - linkType: hard - -"react-router-dom@npm:^5.2.0": - version: 5.3.4 - resolution: "react-router-dom@npm:5.3.4" - dependencies: - "@babel/runtime": ^7.12.13 - history: ^4.9.0 - loose-envify: ^1.3.1 - prop-types: ^15.6.2 - react-router: 5.3.4 - tiny-invariant: ^1.0.2 - tiny-warning: ^1.0.0 - peerDependencies: - react: ">=15" - checksum: b86a6f2f5222f041e38adf4e4b32c7643d6735a1a915ef25855b2db285fd059d72ba8d62e5bcd5d822b8ef9520a80453209e55077f5a90d0f72e908979b8f535 - languageName: node - linkType: hard - -"react-router@npm:5.3.4": - version: 5.3.4 - resolution: "react-router@npm:5.3.4" - dependencies: - "@babel/runtime": ^7.12.13 - history: ^4.9.0 - hoist-non-react-statics: ^3.1.0 - loose-envify: ^1.3.1 - path-to-regexp: ^1.7.0 - prop-types: ^15.6.2 - react-is: ^16.6.0 - tiny-invariant: ^1.0.2 - tiny-warning: ^1.0.0 - peerDependencies: - react: ">=15" - checksum: 892d4e274a23bf4f39abc2efca54472fb646d3aed4b584020cf49654d2f50d09a2bacebe7c92b4ec7cb8925077376dfcd0664bad6442a73604397cefec9f01f9 - languageName: node - linkType: hard - -"react-scripts@npm:^4.0.1": - version: 4.0.3 - resolution: "react-scripts@npm:4.0.3" - dependencies: - "@babel/core": 7.12.3 - "@pmmmwh/react-refresh-webpack-plugin": 0.4.3 - "@svgr/webpack": 5.5.0 - "@typescript-eslint/eslint-plugin": ^4.5.0 - "@typescript-eslint/parser": ^4.5.0 - babel-eslint: ^10.1.0 - babel-jest: ^26.6.0 - babel-loader: 8.1.0 - babel-plugin-named-asset-import: ^0.3.7 - babel-preset-react-app: ^10.0.0 - bfj: ^7.0.2 - camelcase: ^6.1.0 - case-sensitive-paths-webpack-plugin: 2.3.0 - css-loader: 4.3.0 - dotenv: 8.2.0 - dotenv-expand: 5.1.0 - eslint: ^7.11.0 - eslint-config-react-app: ^6.0.0 - eslint-plugin-flowtype: ^5.2.0 - eslint-plugin-import: ^2.22.1 - eslint-plugin-jest: ^24.1.0 - eslint-plugin-jsx-a11y: ^6.3.1 - eslint-plugin-react: ^7.21.5 - eslint-plugin-react-hooks: ^4.2.0 - eslint-plugin-testing-library: ^3.9.2 - eslint-webpack-plugin: ^2.5.2 - file-loader: 6.1.1 - fs-extra: ^9.0.1 - fsevents: ^2.1.3 - html-webpack-plugin: 4.5.0 - identity-obj-proxy: 3.0.0 - jest: 26.6.0 - jest-circus: 26.6.0 - jest-resolve: 26.6.0 - jest-watch-typeahead: 0.6.1 - mini-css-extract-plugin: 0.11.3 - optimize-css-assets-webpack-plugin: 5.0.4 - pnp-webpack-plugin: 1.6.4 - postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 3.0.0 - postcss-normalize: 8.0.1 - postcss-preset-env: 6.7.0 - postcss-safe-parser: 5.0.2 - prompts: 2.4.0 - react-app-polyfill: ^2.0.0 - react-dev-utils: ^11.0.3 - react-refresh: ^0.8.3 - resolve: 1.18.1 - resolve-url-loader: ^3.1.2 - sass-loader: ^10.0.5 - semver: 7.3.2 - style-loader: 1.3.0 - terser-webpack-plugin: 4.2.3 - ts-pnp: 1.2.0 - url-loader: 4.1.1 - webpack: 4.44.2 - webpack-dev-server: 3.11.1 - webpack-manifest-plugin: 2.2.0 - workbox-webpack-plugin: 5.1.4 - peerDependencies: - react: ">= 16" - typescript: ^3.2.1 || ^4 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - typescript: - optional: true - bin: - react-scripts: ./bin/react-scripts.js - checksum: a05a46ce3145b42ac8b57633d3b90b6689c24697c1449bccf219349996d718a3cd0796e4910f4ab6abb5b024982cafd62345e88c8e7b42a45efca3bef1a0eb87 - languageName: node - linkType: hard - -"react-side-effect@npm:^2.1.0": - version: 2.1.2 - resolution: "react-side-effect@npm:2.1.2" - peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" - 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" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 - languageName: node - linkType: hard - -"react-use-measure@npm:^2.1.1": - version: 2.1.1 - resolution: "react-use-measure@npm:2.1.1" - dependencies: - debounce: ^1.2.1 - peerDependencies: - react: ">=16.13" - react-dom: ">=16.13" - checksum: b8e8939229d463c3c505f7b617925c0228efae0cd6f651371f463846417b06c9170be57df51293a61027c41770f8a090fdb8a08717c4e36290ccb496e0318f1f - languageName: node - linkType: hard - -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: ^4.1.0 - read-pkg: ^5.2.0 - type-fest: ^0.8.1 - checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 - languageName: node - linkType: hard - -"read-pkg@npm:^4.0.1": - version: 4.0.1 - resolution: "read-pkg@npm:4.0.1" - dependencies: - normalize-package-data: ^2.3.2 - parse-json: ^4.0.0 - pify: ^3.0.0 - checksum: 56193535486c50a0a40039e4a92f68676362f5a7160628ca4d856c62509e125220f69c562a32940dcc51e3dcd38211af69756bbb5b8a1aed1d09be1bedd1e1a5 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": ^2.4.0 - normalize-package-data: ^2.5.0 - parse-json: ^5.0.0 - type-fest: ^0.6.0 - checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 - languageName: node - linkType: hard - -"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - 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 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 - languageName: node - linkType: hard - -"readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"readdirp@npm:^2.2.1": - version: 2.2.1 - resolution: "readdirp@npm:2.2.1" - dependencies: - graceful-fs: ^4.1.11 - micromatch: ^3.1.10 - readable-stream: ^2.0.2 - checksum: 3879b20f1a871e0e004a14fbf1776e65ee0b746a62f5a416010808b37c272ac49b023c47042c7b1e281cba75a449696635bc64c397ed221ea81d853a8f2ed79a - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"recursive-readdir@npm:2.2.2": - version: 2.2.2 - resolution: "recursive-readdir@npm:2.2.2" - dependencies: - minimatch: 3.0.4 - checksum: a6b22994d76458443d4a27f5fd7147ac63ad31bba972666a291d511d4d819ee40ff71ba7524c14f6a565b8cfaf7f48b318f971804b913cf538d58f04e25d1fee - languageName: node - linkType: hard - -"redent@npm:^3.0.0": - version: 3.0.0 - resolution: "redent@npm:3.0.0" - dependencies: - indent-string: ^4.0.0 - strip-indent: ^3.0.0 - checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.4": - version: 1.0.6 - resolution: "reflect.getprototypeof@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.1 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.3 - which-builtin-type: ^1.1.3 - checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" - dependencies: - regenerate: ^1.4.2 - checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.7": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-runtime@npm:0.14.1" - checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 - languageName: node - linkType: hard - -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: ^3.0.2 - safe-regex: ^1.1.0 - checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 - languageName: node - linkType: hard - -"regex-parser@npm:^2.2.11": - version: 2.3.0 - resolution: "regex-parser@npm:2.3.0" - checksum: bcd1eb7e9b0775b6f44928ceb0280ad5b6e4da91e1070d3e9a653fcf72d2d04873c44190fb569141b6897fe94e9514fee1f3ac7ba112ccd9c9b5ad6eabab6bbd - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": - version: 1.5.2 - resolution: "regexp.prototype.flags@npm:1.5.2" - dependencies: - call-bind: ^1.0.6 - define-properties: ^1.2.1 - es-errors: ^1.3.0 - set-function-name: ^2.0.1 - checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 - languageName: node - linkType: hard - -"regexpp@npm:^3.1.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 - languageName: node - linkType: hard - -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - 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 - checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc - languageName: node - linkType: hard - -"relateurl@npm:^0.2.7": - version: 0.2.7 - resolution: "relateurl@npm:0.2.7" - checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 - languageName: node - linkType: hard - -"remark-parse@npm:^9.0.0": - version: 9.0.0 - resolution: "remark-parse@npm:9.0.0" - dependencies: - mdast-util-from-markdown: ^0.8.0 - checksum: 50104880549639b7dd7ae6f1e23c214915fe9c054f02f3328abdaee3f6de6d7282bf4357c3c5b106958fe75e644a3c248c2197755df34f9955e8e028fc74868f - languageName: node - linkType: hard - -"remark-rehype@npm:^8.0.0": - version: 8.1.0 - resolution: "remark-rehype@npm:8.1.0" - dependencies: - mdast-util-to-hast: ^10.2.0 - checksum: e1152464cfa83c14b570b1cb85eb9b3667795b5bed2f6b16d1c6e96c369816b07945a3c04eb0e1fd57a19cc1837969527d0056d5b6d179f1290688db2a7e2c5f - languageName: node - linkType: hard - -"remove-accents@npm:0.5.0": - version: 0.5.0 - resolution: "remove-accents@npm:0.5.0" - checksum: 7045b37015acb03df406d21f9cbe93c3fcf2034189f5d2e33b1dace9c7d6bdcd839929905ced21a5d76c58553557e1a42651930728702312a5774179d5b9147b - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 - languageName: node - linkType: hard - -"renderkid@npm:^2.0.4": - version: 2.0.7 - resolution: "renderkid@npm:2.0.7" - dependencies: - css-select: ^4.1.3 - dom-converter: ^0.2.0 - htmlparser2: ^6.1.0 - lodash: ^4.17.21 - strip-ansi: ^3.0.1 - checksum: d3d7562531fb8104154d4aa6aa977707783616318014088378a6c5bbc36318ada9289543d380ede707e531b7f5b96229e87d1b8944f675e5ec3686e62692c7c7 - languageName: node - linkType: hard - -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.6.1": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - -"reselect@npm:^4.1.6": - version: 4.1.8 - resolution: "reselect@npm:4.1.8" - checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e - languageName: node - linkType: hard - -"reserved-words@npm:^0.1.2": - version: 0.1.2 - resolution: "reserved-words@npm:0.1.2" - checksum: 72e80f71dcde1e2d697e102473ad6d597e1659118836092c63cc4db68a64857f07f509176d239c8675b24f7f03574336bf202a780cc1adb39574e2884d1fd1fa - languageName: node - linkType: hard - -"resolve-cwd@npm:^2.0.0": - version: 2.0.0 - resolution: "resolve-cwd@npm:2.0.0" - dependencies: - resolve-from: ^3.0.0 - checksum: e7c16880c460656e77f102d537a6dc82b3657d9173697cd6ea82ffce37df96f6c1fc79d0bb35fd73fff8871ac13f21b4396958b5f0a13e5b99c97d69f5e319fa - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-from@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-from@npm:3.0.0" - checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve-pathname@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-pathname@npm:3.0.0" - checksum: 6147241ba42c423dbe83cb067a2b4af4f60908c3af57e1ea567729cc71416c089737fe2a73e9e79e7a60f00f66c91e4b45ad0d37cd4be2d43fec44963ef14368 - languageName: node - linkType: hard - -"resolve-url-loader@npm:^3.1.2": - version: 3.1.5 - resolution: "resolve-url-loader@npm:3.1.5" - dependencies: - adjust-sourcemap-loader: 3.0.0 - camelcase: 5.3.1 - compose-function: 3.0.3 - convert-source-map: 1.7.0 - es6-iterator: 2.0.3 - loader-utils: ^1.2.3 - postcss: 7.0.36 - rework: 1.0.1 - rework-visit: 1.0.0 - source-map: 0.6.1 - checksum: eb52911eff20723f07409cc12138d254fa0dd4a4f3b1ba11ee1b29912afb03f1272aaddb523658be1e3a946e0d1bf6f603d0e107753ab83d48ad2116cf04b7f6 - languageName: node - linkType: hard - -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 - languageName: node - linkType: hard - -"resolve@npm:1.18.1": - version: 1.18.1 - resolution: "resolve@npm:1.18.1" - dependencies: - is-core-module: ^2.0.0 - path-parse: ^1.0.6 - checksum: bab3686fa87576ac7e7f68481e25494f99b8413f3bc5048c5284eabe021f98917a50c625f8a1920a87ffc347b076c12a4a685d46d5fc98f337cf2dd3792014f4 - languageName: node - linkType: hard - -"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.22.4, resolve@npm:^1.3.2": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.5": - version: 2.0.0-next.5 - resolution: "resolve@npm:2.0.0-next.5" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f - languageName: node - linkType: hard - -"resolve@patch:resolve@1.18.1#~builtin": - version: 1.18.1 - resolution: "resolve@patch:resolve@npm%3A1.18.1#~builtin::version=1.18.1&hash=07638b" - dependencies: - is-core-module: ^2.0.0 - path-parse: ^1.0.6 - checksum: 7439c8f3d8fa00c9dc800ef3c8ed0bd8e8772823e6e4948b1a77487759e0fb905381808caae96398d135619af90654d8e74cac778e5b8c9d7138f2dd52bb2bba - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.3.2#~builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 - languageName: node - linkType: hard - -"resolve@patch:resolve@^2.0.0-next.5#~builtin": - version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: ^5.1.0 - signal-exit: ^3.0.2 - checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"retry@npm:^0.13.1": - version: 0.13.1 - resolution: "retry@npm:0.13.1" - checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - -"rework-visit@npm:1.0.0": - version: 1.0.0 - resolution: "rework-visit@npm:1.0.0" - checksum: 969ca1f4e5bf4a1755c464a9b498da51eb3f28a798cf73da2cf0a3a3ab7b21a2f05c9d3bfa5fb81c8aaf5487dd31679efa67b8d0f418277ef5deb2a230b17c81 - languageName: node - linkType: hard - -"rework@npm:1.0.1": - version: 1.0.1 - resolution: "rework@npm:1.0.1" - dependencies: - convert-source-map: ^0.3.3 - css: ^2.0.0 - checksum: 13e5054d81ac84eee488fd4bacd20d08f35683bd8e296b4358e7f0a41b2d30a959313b7794f388f336705ad18d36af6ee7080e1b6c1313ecf33bc51d1bd95971 - languageName: node - linkType: hard - -"rgb-regex@npm:^1.0.1": - version: 1.0.1 - resolution: "rgb-regex@npm:1.0.1" - checksum: b270ce8bc14782d2d21d3184c1e6c65b465476d8f03e72b93ef57c95710a452b2fe280e1d516c88873aec06efd7f71373e673f114b9d99f3a4f9a0393eb00126 - languageName: node - linkType: hard - -"rgba-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "rgba-regex@npm:1.0.0" - checksum: 7f2cd271572700faea50753d82524cb2b98f17a5b9722965c7076f6cd674fe545f28145b7ef2cccabc9eca2475c793db16862cd5e7b3784a9f4b8d6496431057 - languageName: node - linkType: hard - -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd - languageName: node - linkType: hard - -"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": - version: 2.0.2 - resolution: "ripemd160@npm:2.0.2" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 - languageName: node - linkType: hard - -"rollup-plugin-babel@npm:^4.3.3": - version: 4.4.0 - resolution: "rollup-plugin-babel@npm:4.4.0" - dependencies: - "@babel/helper-module-imports": ^7.0.0 - rollup-pluginutils: ^2.8.1 - peerDependencies: - "@babel/core": 7 || ^7.0.0-rc.2 - rollup: ">=0.60.0 <3" - checksum: 5b8ed7c0a4192d7c74689074c910c1670eb07dfc875b1f4af5694a94c46bcb168ba85e2c9753030131efd6261ece7c252b9695953d0ea96d944977c6e79930d3 - languageName: node - linkType: hard - -"rollup-plugin-terser@npm:^5.3.1": - version: 5.3.1 - resolution: "rollup-plugin-terser@npm:5.3.1" - dependencies: - "@babel/code-frame": ^7.5.5 - jest-worker: ^24.9.0 - rollup-pluginutils: ^2.8.2 - serialize-javascript: ^4.0.0 - terser: ^4.6.2 - peerDependencies: - rollup: ">=0.66.0 <3" - checksum: 50f9e8fa6737fa5e8aeca6a52b59ea3bc66faebe743bdfe9ce0484298cd1978082026721b182d79bcc88240429842dc58feae88d6c238b47cafc1684e0320a73 - languageName: node - linkType: hard - -"rollup-pluginutils@npm:^2.8.1, rollup-pluginutils@npm:^2.8.2": - version: 2.8.2 - resolution: "rollup-pluginutils@npm:2.8.2" - dependencies: - estree-walker: ^0.6.1 - checksum: 339fdf866d8f4ff6e408fa274c0525412f7edb01dc46b5ccda51f575b7e0d20ad72965773376fb5db95a77a7fcfcab97bf841ec08dbadf5d6b08af02b7a2cf5e - languageName: node - linkType: hard - -"rollup@npm:^1.31.1": - version: 1.32.1 - resolution: "rollup@npm:1.32.1" - dependencies: - "@types/estree": "*" - "@types/node": "*" - acorn: ^7.1.0 - bin: - rollup: dist/bin/rollup - checksum: 3a02731c20c71321fae647c9c9cab0febee0580c6af029fdcd5dd6f424b8c85119d92c8554c6837327fd323c2458e92d955bbebc90ca6bed87cc626695e7c31f - languageName: node - linkType: hard - -"rollup@npm:^3.27.1": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" - dependencies: - fsevents: ~2.3.2 - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e - languageName: node - linkType: hard - -"rsvp@npm:^4.8.4": - version: 4.8.5 - resolution: "rsvp@npm:4.8.5" - checksum: 2d8ef30d8febdf05bdf856ccca38001ae3647e41835ca196bc1225333f79b94ae44def733121ca549ccc36209c9b689f6586905e2a043873262609744da8efc1 - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"run-queue@npm:^1.0.0, run-queue@npm:^1.0.3": - version: 1.0.3 - resolution: "run-queue@npm:1.0.3" - dependencies: - aproba: ^1.1.1 - checksum: c4541e18b5e056af60f398f2f1b3d89aae5c093d1524bf817c5ee68bcfa4851ad9976f457a9aea135b1d0d72ee9a91c386e3d136bcd95b699c367cd09c70be53 - languageName: node - linkType: hard - -"rxjs@npm:^6.5.2": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: ^1.9.0 - checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: ^2.1.0 - checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.1.2": - version: 1.1.2 - resolution: "safe-array-concat@npm:1.1.2" - dependencies: - call-bind: ^1.0.7 - get-intrinsic: ^1.2.4 - has-symbols: ^1.0.3 - isarray: ^2.0.5 - checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 - languageName: node - linkType: hard - -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.0.3": - version: 1.0.3 - resolution: "safe-regex-test@npm:1.0.3" - dependencies: - call-bind: ^1.0.6 - es-errors: ^1.3.0 - is-regex: ^1.1.4 - checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 - languageName: node - linkType: hard - -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" - dependencies: - ret: ~0.1.10 - checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"sane@npm:^4.0.3": - version: 4.1.0 - resolution: "sane@npm:4.1.0" - dependencies: - "@cnakazawa/watch": ^1.0.3 - anymatch: ^2.0.0 - capture-exit: ^2.0.0 - exec-sh: ^0.3.2 - execa: ^1.0.0 - fb-watchman: ^2.0.0 - micromatch: ^3.1.4 - minimist: ^1.1.1 - walker: ~1.0.5 - bin: - sane: ./src/cli.js - checksum: 97716502d456c0d38670a902a4ea943d196dcdf998d1e40532d8f3e24e25d7eddfd4c3579025a1eee8eac09a48dfd05fba61a2156c56704e7feaa450eb249f7c - languageName: node - linkType: hard - -"sanitize.css@npm:^10.0.0": - version: 10.0.0 - resolution: "sanitize.css@npm:10.0.0" - checksum: 99932e53e864b83562a421f57383c9747ab03c51872437eb56170639cd6c634a945517e25d1b7005d10c8dc863f71c61c573e3452474d4ef25bcf5f7344e4ce3 - languageName: node - linkType: hard - -"sass-loader@npm:^10.0.5": - version: 10.5.2 - resolution: "sass-loader@npm:10.5.2" - dependencies: - klona: ^2.0.4 - loader-utils: ^2.0.0 - neo-async: ^2.6.2 - schema-utils: ^3.0.0 - semver: ^7.3.2 - peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - webpack: ^4.36.0 || ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - checksum: 416909a9d685aafeb4342d91575439b293f4e1d6fdf7f8f970e4b3158af38e3e7379b87c0a82d7b7b32165b1f54bcd7eca3c132ad143405a5105ea4ba79cdac2 - languageName: node - linkType: hard - -"sass@npm:^1.54.0": - version: 1.75.0 - resolution: "sass@npm:1.75.0" - dependencies: - chokidar: ">=3.0.0 <4.0.0" - immutable: ^4.0.0 - source-map-js: ">=0.6.2 <2.0.0" - bin: - sass: sass.js - checksum: bfb9f5ddb6a2e1fe0c1ba6191cdb17afa7b40c1eb892c7152f6a29ff2b06dc7a510bdb648f8cca0179dcb3965920ebeb8894f0710b0b450a99db563831345033 - languageName: node - linkType: hard - -"sax@npm:~1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe - languageName: node - linkType: hard - -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 - languageName: node - linkType: hard - -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" - dependencies: - loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a - languageName: node - linkType: hard - -"schema-utils@npm:^1.0.0": - version: 1.0.0 - resolution: "schema-utils@npm:1.0.0" - dependencies: - ajv: ^6.1.0 - ajv-errors: ^1.0.0 - ajv-keywords: ^3.1.0 - checksum: e8273b4f6eff9ddf4a4f4c11daf7b96b900237bf8859c86fa1e9b4fab416b72d7ea92468f8db89c18a3499a1070206e1c8a750c83b42d5325fc659cbb55eee88 - languageName: node - linkType: hard - -"schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0, schema-utils@npm:^2.7.1": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": ^7.0.5 - ajv: ^6.12.4 - ajv-keywords: ^3.5.2 - checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b - languageName: node - linkType: hard - -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1": - version: 3.3.0 - resolution: "schema-utils@npm:3.3.0" - dependencies: - "@types/json-schema": ^7.0.8 - ajv: ^6.12.5 - ajv-keywords: ^3.5.2 - checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 - languageName: node - linkType: hard - -"select-hose@npm:^2.0.0": - version: 2.0.0 - resolution: "select-hose@npm:2.0.0" - checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb - languageName: node - linkType: hard - -"selfsigned@npm:^1.10.8": - version: 1.10.14 - resolution: "selfsigned@npm:1.10.14" - dependencies: - node-forge: ^0.10.0 - checksum: 616d131b18516ba2876398f0230987511d50a13816e0709b9f0d20246a524a2e83dfb27ea46ce2bfe331519583a156afa67bc3ece8bf0f9804aec06e2e8c7a21 - languageName: node - linkType: hard - -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.1": - version: 5.7.2 - resolution: "semver@npm:5.7.2" - bin: - semver: bin/semver - checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 - languageName: node - linkType: hard - -"semver@npm:7.3.2": - version: 7.3.2 - resolution: "semver@npm:7.3.2" - bin: - semver: bin/semver.js - checksum: 692f4900dadb43919614b0df9af23fe05743051cda0d1735b5e4d76f93c9e43a266fae73cfc928f5d1489f022c5c0e65dfd2900fcf5b1839c4e9a239729afa7b - languageName: node - linkType: hard - -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3": - version: 7.6.0 - resolution: "semver@npm:7.6.0" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 - languageName: node - linkType: hard - -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 - languageName: node - linkType: hard - -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: ~1.2.1 - statuses: 2.0.1 - checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 - languageName: node - linkType: hard - -"sentence-case@npm:^3.0.4": - version: 3.0.4 - resolution: "sentence-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 - languageName: node - linkType: hard - -"serialize-javascript@npm:^4.0.0": - version: 4.0.0 - resolution: "serialize-javascript@npm:4.0.0" - dependencies: - randombytes: ^2.1.0 - checksum: 3273b3394b951671fcf388726e9577021870dfbf85e742a1183fb2e91273e6101bdccea81ff230724f6659a7ee4cef924b0ff9baca32b79d9384ec37caf07302 - languageName: node - linkType: hard - -"serialize-javascript@npm:^5.0.1": - version: 5.0.1 - resolution: "serialize-javascript@npm:5.0.1" - dependencies: - randombytes: ^2.1.0 - checksum: bb45a427690c3d2711e28499de0fbf25036af1e23c63c6a9237ed0aa572fd0941fcdefe50a2dccf26d9df8c8b86ae38659e19d8ba7afd3fbc1f1c7539a2a48d2 - languageName: node - linkType: hard - -"serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "serve-index@npm:1.9.1" - 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 - checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f - languageName: node - linkType: hard - -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" - dependencies: - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"set-cookie-parser@npm:^2.4.6": - version: 2.6.0 - resolution: "set-cookie-parser@npm:2.6.0" - checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.1": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.2 - checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - functions-have-names: ^1.2.3 - has-property-descriptors: ^1.0.2 - checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f - languageName: node - linkType: hard - -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": - version: 2.0.1 - resolution: "set-value@npm:2.0.1" - dependencies: - extend-shallow: ^2.0.1 - is-extendable: ^0.1.1 - is-plain-object: ^2.0.3 - split-string: ^3.0.1 - checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.4": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd - languageName: node - linkType: hard - -"setprototypeof@npm:1.1.0": - version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0" - checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 - languageName: node - linkType: hard - -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 - languageName: node - linkType: hard - -"shared@1.0.0, shared@workspace:src/shared": - version: 0.0.0-use.local - resolution: "shared@workspace:src/shared" - dependencies: - "@types/node": 18.17.1 - ts-node: ^8.10.1 - typescript: ^4.1.5 - languageName: unknown - linkType: soft - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: ^1.0.0 - checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shell-quote@npm:1.7.2": - version: 1.7.2 - resolution: "shell-quote@npm:1.7.2" - checksum: efad426fb25d8a54d06363f1f45774aa9e195f62f14fa696d542b44bfe418ab41206448b63af18d726c62e099e66d9a3f4f44858b9ea2ce4b794b41b802672d1 - languageName: node - linkType: hard - -"shellwords@npm:^0.1.1": - version: 0.1.1 - resolution: "shellwords@npm:0.1.1" - checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - object-inspect: ^1.13.1 - checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 - languageName: node - linkType: hard - -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: ^0.3.1 - checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 - languageName: node - linkType: hard - -"simple-update-notifier@npm:^1.0.7": - version: 1.1.0 - resolution: "simple-update-notifier@npm:1.1.0" - dependencies: - semver: ~7.0.0 - checksum: 1012e9b6c504e559a948078177b3eedbb9d7e4d15878e2bda56314d08db609ca5da485be4ac9f838759faae8057935ee0246fcdf63f1233c86bd9fecb2a5544b - languageName: node - linkType: hard - -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"snake-case@npm:^3.0.4": - version: 3.0.4 - resolution: "snake-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 - languageName: node - linkType: hard - -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" - dependencies: - define-property: ^1.0.0 - isobject: ^3.0.0 - snapdragon-util: ^3.0.1 - checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd - languageName: node - linkType: hard - -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: ^3.2.0 - checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 - languageName: node - linkType: hard - -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" - dependencies: - base: ^0.11.1 - debug: ^2.2.0 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - map-cache: ^0.2.2 - source-map: ^0.5.6 - source-map-resolve: ^0.5.0 - use: ^3.1.0 - checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 - languageName: node - linkType: hard - -"sockjs-client@npm:^1.5.0": - version: 1.6.1 - resolution: "sockjs-client@npm:1.6.1" - dependencies: - debug: ^3.2.7 - eventsource: ^2.0.2 - faye-websocket: ^0.11.4 - inherits: ^2.0.4 - url-parse: ^1.5.10 - checksum: c7623bbc9891f427c1670145550a1c9c2d5379719e174a791606ba4f12c7d92e4cfb9acec6c17f91fda45d910b23c308a1f9fbcad4916ce5db4e982b24079fc7 - languageName: node - linkType: hard - -"sockjs@npm:^0.3.21": - version: 0.3.24 - resolution: "sockjs@npm:0.3.24" - dependencies: - faye-websocket: ^0.11.3 - uuid: ^8.3.2 - websocket-driver: ^0.7.4 - checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" - dependencies: - agent-base: ^7.1.1 - debug: ^4.3.4 - socks: ^2.7.1 - checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 - languageName: node - linkType: hard - -"socks@npm:^2.7.1": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: ^9.0.5 - smart-buffer: ^4.2.0 - checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd - languageName: node - linkType: hard - -"sort-keys@npm:^1.0.0": - version: 1.1.2 - resolution: "sort-keys@npm:1.1.2" - dependencies: - is-plain-obj: ^1.0.0 - checksum: 5963fd191a2a185a5ec86f06e47721e8e04713eda43bb04ae60d2a8afb21241553dd5bc9d863ed2bd7c3d541b609b0c8d0e58836b1a3eb6764c09c094bcc8b00 - languageName: node - linkType: hard - -"source-list-map@npm:^2.0.0": - version: 2.0.1 - resolution: "source-list-map@npm:2.0.1" - checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 - languageName: node - linkType: hard - -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 - languageName: node - linkType: hard - -"source-map-resolve@npm:^0.5.0, source-map-resolve@npm:^0.5.2": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - resolve-url: ^0.2.1 - source-map-url: ^0.4.0 - urix: ^0.1.0 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 - languageName: node - linkType: hard - -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"source-map@npm:^0.5.0, source-map@npm:^0.5.6, source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - -"source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 - languageName: node - linkType: hard - -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 - languageName: node - linkType: hard - -"space-separated-tokens@npm:^1.1.0": - version: 1.1.5 - resolution: "space-separated-tokens@npm:1.1.5" - checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 - languageName: node - linkType: hard - -"spawn-command@npm:^0.0.2-1": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b - languageName: node - linkType: hard - -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.5.0 - resolution: "spdx-exceptions@npm:2.5.0" - checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.17 - resolution: "spdx-license-ids@npm:3.0.17" - checksum: 0aba5d16292ff604dd20982200e23b4d425f6ba364765039bdbde2f6c956b9909fce1ad040a897916a5f87388e85e001f90cb64bf706b6e319f3908cfc445a59 - languageName: node - linkType: hard - -"spdy-transport@npm:^3.0.0": - version: 3.0.0 - resolution: "spdy-transport@npm:3.0.0" - 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 - checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c - languageName: node - linkType: hard - -"spdy@npm:^4.0.2": - version: 4.0.2 - resolution: "spdy@npm:4.0.2" - 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 - checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 - languageName: node - linkType: hard - -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: ^3.0.0 - checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" - dependencies: - minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 - languageName: node - linkType: hard - -"ssri@npm:^6.0.1": - version: 6.0.2 - resolution: "ssri@npm:6.0.2" - dependencies: - figgy-pudding: ^3.5.1 - checksum: 7c2e5d442f6252559c8987b7114bcf389fe5614bf65de09ba3e6f9a57b9b65b2967de348fcc3acccff9c069adb168140dd2c5fc2f6f4a779e604a27ef1f7d551 - languageName: node - linkType: hard - -"ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" - dependencies: - minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 - languageName: node - linkType: hard - -"stable@npm:^0.1.8": - version: 0.1.8 - resolution: "stable@npm:0.1.8" - checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.2, stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 - languageName: node - linkType: hard - -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 - languageName: node - linkType: hard - -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d - languageName: node - linkType: hard - -"static-eval@npm:2.0.2": - version: 2.0.2 - resolution: "static-eval@npm:2.0.2" - dependencies: - escodegen: ^1.8.1 - checksum: 335a923c5ccb29add404ac23d0a55c0da6cee3071f6f67a7053aeac0dedc6dbfc53ac9269e9c25f403f5b7603a291ef47d7114f99bde241184f7aa3f9286dc32 - languageName: node - linkType: hard - -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: ^0.2.5 - object-copy: ^0.1.0 - checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - -"statuses@npm:2.0.1, statuses@npm:^2.0.0": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb - languageName: node - linkType: hard - -"statuses@npm:>= 1.4.0 < 2": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c - languageName: node - linkType: hard - -"std-env@npm:^3.3.3": - version: 3.7.0 - resolution: "std-env@npm:3.7.0" - checksum: 4f489d13ff2ab838c9acd4ed6b786b51aa52ecacdfeaefe9275fcb220ff2ac80c6e95674723508fd29850a694569563a8caaaea738eb82ca16429b3a0b50e510 - languageName: node - linkType: hard - -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" - dependencies: - internal-slot: ^1.0.4 - checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 - languageName: node - linkType: hard - -"stream-browserify@npm:^2.0.1": - version: 2.0.2 - resolution: "stream-browserify@npm:2.0.2" - dependencies: - inherits: ~2.0.1 - readable-stream: ^2.0.2 - checksum: 8de7bcab5582e9a931ae1a4768be7efe8fa4b0b95fd368d16d8cf3e494b897d6b0a7238626de5d71686e53bddf417fd59d106cfa3af0ec055f61a8d1f8fc77b3 - languageName: node - linkType: hard - -"stream-each@npm:^1.1.0": - version: 1.2.3 - resolution: "stream-each@npm:1.2.3" - dependencies: - end-of-stream: ^1.1.0 - stream-shift: ^1.0.0 - checksum: f243de78e9fcc60757994efc4e8ecae9f01a4b2c6a505d786b11fcaa68b1a75ca54afc1669eac9e08f19ff0230792fc40d0f3e3e2935d76971b4903af18b76ab - languageName: node - linkType: hard - -"stream-http@npm:^2.7.2": - version: 2.8.3 - resolution: "stream-http@npm:2.8.3" - dependencies: - builtin-status-codes: ^3.0.0 - inherits: ^2.0.1 - readable-stream: ^2.3.6 - to-arraybuffer: ^1.0.0 - xtend: ^4.0.0 - checksum: f57dfaa21a015f72e6ce6b199cf1762074cfe8acf0047bba8f005593754f1743ad0a91788f95308d9f3829ad55742399ad27b4624432f2752a08e62ef4346e05 - languageName: node - linkType: hard - -"stream-shift@npm:^1.0.0": - version: 1.0.3 - resolution: "stream-shift@npm:1.0.3" - checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 - languageName: node - linkType: hard - -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 - languageName: node - linkType: hard - -"strict-event-emitter@npm:^0.2.0, strict-event-emitter@npm:^0.2.4": - version: 0.2.8 - resolution: "strict-event-emitter@npm:0.2.8" - dependencies: - events: ^3.3.0 - checksum: 6ac06fe72a6ee6ae64d20f1dd42838ea67342f1b5f32b03b3050d73ee6ecee44b4d5c4ed2965a7154b47991e215f373d4e789e2b2be2769cd80e356126c2ca53 - languageName: node - linkType: hard - -"strict-uri-encode@npm:^1.0.0": - version: 1.1.0 - resolution: "strict-uri-encode@npm:1.1.0" - checksum: 9466d371f7b36768d43f7803f26137657559e4c8b0161fb9e320efb8edba3ae22f8e99d4b0d91da023b05a13f62ec5412c3f4f764b5788fac11d1fea93720bb3 - languageName: node - linkType: hard - -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-natural-compare@npm:^3.0.1": - version: 3.0.1 - resolution: "string-natural-compare@npm:3.0.1" - checksum: 65910d9995074086e769a68728395effbba9b7186be5b4c16a7fad4f4ef50cae95ca16e3e9086e019cbb636ae8daac9c7b8fe91b5f21865c5c0f26e3c0725406 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: ^7.0.1 - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^5.1.0 - checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: ^0.2.0 - emoji-regex: ^9.2.2 - strip-ansi: ^7.0.1 - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.10": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" - 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 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - regexp.prototype.flags: ^1.5.2 - set-function-name: ^2.0.2 - side-channel: ^1.0.6 - checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.9": - version: 1.2.9 - resolution: "string.prototype.trim@npm:1.2.9" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.0 - es-object-atoms: ^1.0.0 - checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimend@npm:1.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 - languageName: node - linkType: hard - -"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - -"stringify-object@npm:^3.3.0": - version: 3.3.0 - resolution: "stringify-object@npm:3.3.0" - dependencies: - get-own-enumerable-property-symbols: ^3.0.0 - is-obj: ^1.0.1 - is-regexp: ^1.0.0 - checksum: 6827a3f35975cfa8572e8cd3ed4f7b262def260af18655c6fde549334acdac49ddba69f3c861ea5a6e9c5a4990fe4ae870b9c0e6c31019430504c94a83b7a154 - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-ansi@npm:6.0.0": - version: 6.0.0 - resolution: "strip-ansi@npm:6.0.0" - dependencies: - ansi-regex: ^5.0.0 - checksum: 04c3239ede44c4d195b0e66c0ad58b932f08bec7d05290416d361ff908ad282ecdaf5d9731e322c84f151d427436bde01f05b7422c3ec26dd927586736b0e5d0 - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 - languageName: node - linkType: hard - -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: ^4.1.0 - checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: ^6.0.1 - checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-comments@npm:^1.0.2": - version: 1.0.2 - resolution: "strip-comments@npm:1.0.2" - dependencies: - babel-extract-comments: ^1.0.0 - babel-plugin-transform-object-rest-spread: ^6.26.0 - checksum: 19e6f659a617566aef011b29ef9ce50da0db24556073d9c8065c73072f89bf1238d1fcaaa485933fee038a50a09bb04493097f66e622cdfc3a114f5e9e99ee24 - languageName: node - linkType: hard - -"strip-eof@npm:^1.0.0": - version: 1.0.0 - resolution: "strip-eof@npm:1.0.0" - checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - -"strip-indent@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-indent@npm:3.0.0" - dependencies: - min-indent: ^1.0.0 - checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"strip-literal@npm:^1.0.1": - version: 1.3.0 - resolution: "strip-literal@npm:1.3.0" - dependencies: - acorn: ^8.10.0 - checksum: f5fa7e289df8ebe82e90091fd393974faf8871be087ca50114327506519323cf15f2f8fee6ebe68b5e58bfc795269cae8bdc7cb5a83e27b02b3fe953f37b0a89 - languageName: node - linkType: hard - -"style-loader@npm:1.3.0": - version: 1.3.0 - resolution: "style-loader@npm:1.3.0" - dependencies: - loader-utils: ^2.0.0 - schema-utils: ^2.7.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 1be9e8705307f5b8eb89e80f3703fa27296dccec349d790eace7aabe212f08c7c8f3ea6b6cb97bc53e82fbebfb9aa0689259671a8315f4655e24a850781e062a - languageName: node - linkType: hard - -"style-to-object@npm:^0.3.0": - version: 0.3.0 - resolution: "style-to-object@npm:0.3.0" - dependencies: - inline-style-parser: 0.1.1 - checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 - languageName: node - linkType: hard - -"stylehacks@npm:^4.0.0": - version: 4.0.3 - resolution: "stylehacks@npm:4.0.3" - dependencies: - browserslist: ^4.0.0 - postcss: ^7.0.0 - postcss-selector-parser: ^3.0.0 - checksum: 8acf28ea609bee6d7ba40121bcf53af8d899c1ec04f2c08de9349b8292b84b8aa7f82e14c623ae6956decf5b7a7eeea5472ab8e48de7bdcdb6d76640444f6753 - languageName: node - linkType: hard - -"stylis@npm:4.2.0": - version: 4.2.0 - resolution: "stylis@npm:4.2.0" - checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 - languageName: node - linkType: hard - -"superagent@npm:^8.1.2": - version: 8.1.2 - resolution: "superagent@npm:8.1.2" - dependencies: - component-emitter: ^1.3.0 - cookiejar: ^2.1.4 - debug: ^4.3.4 - fast-safe-stringify: ^2.1.1 - form-data: ^4.0.0 - formidable: ^2.1.2 - methods: ^1.1.2 - mime: 2.6.0 - qs: ^6.11.0 - semver: ^7.3.8 - checksum: f3601c5ccae34d5ba684a03703394b5d25931f4ae2e1e31a1de809f88a9400e997ece037f9accf148a21c408f950dc829db1e4e23576a7f9fe0efa79fd5c9d2f - languageName: node - linkType: hard - -"supertest@npm:^6.2.4": - version: 6.3.4 - resolution: "supertest@npm:6.3.4" - dependencies: - methods: ^1.1.2 - superagent: ^8.1.2 - checksum: 875c6fa7940f21e5be9bb646579cdb030d4057bf2da643e125e1f0480add1200395d2b17e10b8e54e1009efc63e047422501e9eb30e12828668498c0910f295f - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 - languageName: node - linkType: hard - -"supports-color@npm:^3.2.3": - version: 3.2.3 - resolution: "supports-color@npm:3.2.3" - dependencies: - has-flag: ^1.0.0 - checksum: 56afc05fa87d00100d90148c4d0a6e20a0af0d56dca5c54d4d40b2553ee737dab0ca4e8b53c4471afc035227b5b44dfa4824747a7f01ad733173536f7da6fbbb - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0, supports-color@npm:^5.4.0, supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^6.1.0": - version: 6.1.0 - resolution: "supports-color@npm:6.1.0" - dependencies: - has-flag: ^3.0.0 - checksum: 74358f9535c83ee113fbaac354b11e808060f6e7d8722082ee43af3578469134e89d00026dce2a6b93ce4e5b89d0e9a10f638b2b9f64c7838c2fb2883a47b3d5 - languageName: node - linkType: hard - -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"svg-parser@npm:^2.0.2": - version: 2.0.4 - resolution: "svg-parser@npm:2.0.4" - checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf - languageName: node - linkType: hard - -"svgo@npm:^1.0.0, svgo@npm:^1.2.2": - version: 1.3.2 - resolution: "svgo@npm:1.3.2" - 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 - checksum: 28a5680a61245eb4a1603bc03459095bb01ad5ebd23e95882d886c3c81752313c0a9a9fe48dd0bcbb9a27c52e11c603640df952971573b2b550d9e15a9ee6116 - languageName: node - linkType: hard - -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - -"table@npm:^6.0.9": - version: 6.8.2 - resolution: "table@npm:6.8.2" - dependencies: - ajv: ^8.0.1 - lodash.truncate: ^4.4.2 - slice-ansi: ^4.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - checksum: 61188652f53a980d1759ca460ca8dea5c5322aece3210457e7084882f053c2b6a870041295e08a82cb1d676e31b056406845d94b0abf3c79a4b104777bec413b - languageName: node - linkType: hard - -"tapable@npm:^1.0.0, tapable@npm:^1.1.3": - version: 1.1.3 - resolution: "tapable@npm:1.1.3" - checksum: 53ff4e7c3900051c38cc4faab428ebfd7e6ad0841af5a7ac6d5f3045c5b50e88497bfa8295b4b3fbcadd94993c9e358868b78b9fb249a76cb8b018ac8dccafd7 - languageName: node - linkType: hard - -"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c - languageName: node - linkType: hard - -"temp-dir@npm:^1.0.0": - version: 1.0.0 - resolution: "temp-dir@npm:1.0.0" - checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 - languageName: node - linkType: hard - -"tempy@npm:^0.3.0": - version: 0.3.0 - resolution: "tempy@npm:0.3.0" - dependencies: - temp-dir: ^1.0.0 - type-fest: ^0.3.1 - unique-string: ^1.0.0 - checksum: f81ef72a7ee6d512439af8d8891e4fc6595309451910d7ac9d760f1242a1f87272b2b97c830c8f74aaa93a3aa550483bb16db17e6345601f64d614d240edc322 - languageName: node - linkType: hard - -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:4.2.3": - version: 4.2.3 - resolution: "terser-webpack-plugin@npm:4.2.3" - dependencies: - cacache: ^15.0.5 - find-cache-dir: ^3.3.1 - jest-worker: ^26.5.0 - p-limit: ^3.0.2 - schema-utils: ^3.0.0 - serialize-javascript: ^5.0.1 - source-map: ^0.6.1 - terser: ^5.3.4 - webpack-sources: ^1.4.3 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: ec1b3a85e2645c57e359d5e4831f3e1d78eca2a0c94b156db70eb846ae35b5e6e98ad8784b12e153fc273e57445ce69d017075bbe9fc42868a258ef121f11537 - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:^1.4.3": - version: 1.4.5 - resolution: "terser-webpack-plugin@npm:1.4.5" - dependencies: - cacache: ^12.0.2 - find-cache-dir: ^2.1.0 - is-wsl: ^1.1.0 - schema-utils: ^1.0.0 - serialize-javascript: ^4.0.0 - source-map: ^0.6.1 - terser: ^4.1.2 - webpack-sources: ^1.4.0 - worker-farm: ^1.7.0 - peerDependencies: - webpack: ^4.0.0 - checksum: 02aada80927d3c8105d69cb00384d307b73aed67d180db5d20023a8d649149f3803ad50f9cd2ef9eb2622005de87e677198ecc5088f51422bfac5d4d57472d0e - languageName: node - linkType: hard - -"terser@npm:^4.1.2, terser@npm:^4.6.2, terser@npm:^4.6.3": - version: 4.8.1 - resolution: "terser@npm:4.8.1" - dependencies: - commander: ^2.20.0 - source-map: ~0.6.1 - source-map-support: ~0.5.12 - bin: - terser: bin/terser - checksum: b342819bf7e82283059aaa3f22bb74deb1862d07573ba5a8947882190ad525fd9b44a15074986be083fd379c58b9a879457a330b66dcdb77b485c44267f9a55a - languageName: node - linkType: hard - -"terser@npm:^5.3.4": - version: 5.30.4 - resolution: "terser@npm:5.30.4" - 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 - checksum: 4e33a98d451a1175c83f668cb1dd34e1b4573890ba3081e0389e71e6552ca501ebfda5b15cddeab33585f7b4c13f2e7ad9ba9613655b9e36bc919fde48ba2dcd - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - -"text-table@npm:0.2.0, text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"throat@npm:^5.0.0": - version: 5.0.0 - resolution: "throat@npm:5.0.0" - checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 - languageName: node - linkType: hard - -"through2@npm:^2.0.0": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:^2.3.6": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - -"thunky@npm:^1.0.2": - version: 1.1.0 - resolution: "thunky@npm:1.1.0" - checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 - languageName: node - linkType: hard - -"timers-browserify@npm:^2.0.4": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" - dependencies: - setimmediate: ^1.0.4 - checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 - languageName: node - linkType: hard - -"timsort@npm:^0.3.0": - version: 0.3.0 - resolution: "timsort@npm:0.3.0" - checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a - languageName: node - linkType: hard - -"tiny-invariant@npm:^1.0.2": - version: 1.3.3 - resolution: "tiny-invariant@npm:1.3.3" - checksum: 5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe - languageName: node - linkType: hard - -"tiny-warning@npm:^1.0.0": - version: 1.0.3 - resolution: "tiny-warning@npm:1.0.3" - checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 - languageName: node - linkType: hard - -"tinybench@npm:^2.5.0": - version: 2.8.0 - resolution: "tinybench@npm:2.8.0" - checksum: 024a307c6a71f6e2903e110952457ee3dfa606093b45d7f49efcfd01d452650e099474080677ff650b0fd76b49074425ac68ff2a70561699a78515a278bf0862 - languageName: node - linkType: hard - -"tinypool@npm:^0.5.0": - version: 0.5.0 - resolution: "tinypool@npm:0.5.0" - checksum: 4e0dfd8f28666d541c1d92304222edc4613f05d74fe2243c8520d466a2cc6596011a7072c1c41a7de7522351b82fda07e8038198e8f43673d8d69401c5903f8c - languageName: node - linkType: hard - -"tinyspy@npm:^2.1.1": - version: 2.2.1 - resolution: "tinyspy@npm:2.2.1" - checksum: 170d6232e87f9044f537b50b406a38fbfd6f79a261cd12b92879947bd340939a833a678632ce4f5c4a6feab4477e9c21cd43faac3b90b68b77dd0536c4149736 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - -"to-arraybuffer@npm:^1.0.0": - version: 1.0.1 - resolution: "to-arraybuffer@npm:1.0.1" - checksum: 31433c10b388722729f5da04c6b2a06f40dc84f797bb802a5a171ced1e599454099c6c5bc5118f4b9105e7d049d3ad9d0f71182b77650e4fdb04539695489941 - languageName: node - linkType: hard - -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: ^3.0.2 - checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: ^3.0.0 - repeat-string: ^1.6.1 - checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - regex-not: ^1.0.2 - safe-regex: ^1.1.0 - checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 - languageName: node - linkType: hard - -"toposort@npm:^2.0.2": - version: 2.0.2 - resolution: "toposort@npm:2.0.2" - checksum: d64c74b570391c9432873f48e231b439ee56bc49f7cb9780b505cfdf5cb832f808d0bae072515d93834dd6bceca5bb34448b5b4b408335e4d4716eaf68195dcb - languageName: node - linkType: hard - -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 - languageName: node - linkType: hard - -"tough-cookie@npm:^4.0.0": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 - languageName: node - linkType: hard - -"tree-kill@npm:^1.2.2": - version: 1.2.2 - resolution: "tree-kill@npm:1.2.2" - bin: - tree-kill: cli.js - checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 - languageName: node - linkType: hard - -"trough@npm:^1.0.0": - version: 1.0.5 - resolution: "trough@npm:1.0.5" - checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 - languageName: node - linkType: hard - -"tryer@npm:^1.0.1": - version: 1.0.1 - resolution: "tryer@npm:1.0.1" - checksum: 1cf14d7f67c79613f054b569bfc9a89c7020d331573a812dfcf7437244e8f8e6eb6893b210cbd9cc217f67c1d72617f89793df231e4fe7d53634ed91cf3a89d1 - languageName: node - linkType: hard - -"ts-jest@npm:^26.2.0": - version: 26.5.6 - resolution: "ts-jest@npm:26.5.6" - dependencies: - bs-logger: 0.x - buffer-from: 1.x - fast-json-stable-stringify: 2.x - jest-util: ^26.1.0 - json5: 2.x - lodash: 4.x - make-error: 1.x - mkdirp: 1.x - semver: 7.x - yargs-parser: 20.x - peerDependencies: - jest: ">=26 <27" - typescript: ">=3.8 <5.0" - bin: - ts-jest: cli.js - checksum: 6f65ad4fe67ab3f0fd4c7f9954acbee863af05b2b3f88dd0f490bbcdc58002960fac908b2cb9f009ec14da6fe13cb00a39e291260d6e555abe72448d1c0a017f - languageName: node - linkType: hard - -"ts-node@npm:^10.9.1": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac - languageName: node - linkType: hard - -"ts-node@npm:^8.10.1": - version: 8.10.2 - resolution: "ts-node@npm:8.10.2" - dependencies: - arg: ^4.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - source-map-support: ^0.5.17 - yn: 3.1.1 - peerDependencies: - typescript: ">=2.7" - bin: - ts-node: dist/bin.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 480adb076fdab6dbabd726c6056d651ddc567feda0d3e4770d809c01d000715a0f61f80be0e4a92ef87b7f4a494b79d9595d62de4a3931d740122ae26f0e10d8 - languageName: node - linkType: hard - -"ts-pnp@npm:1.2.0, ts-pnp@npm:^1.1.6": - version: 1.2.0 - resolution: "ts-pnp@npm:1.2.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: c2a698b85d521298fe6f2435fbf2d3dc5834b423ea25abd321805ead3f399dbeedce7ca09492d7eb005b9d2c009c6b9587055bc3ab273dc6b9e40eefd7edb5b2 - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": ^0.0.29 - json5: ^1.0.2 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 - languageName: node - linkType: hard - -"tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd - languageName: node - linkType: hard - -"tslib@npm:^2.0.3, tslib@npm:^2.1.0": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad - languageName: node - linkType: hard - -"tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: ^1.8.1 - 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" - checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 - languageName: node - linkType: hard - -"tty-browserify@npm:0.0.0": - version: 0.0.0 - resolution: "tty-browserify@npm:0.0.0" - checksum: a06f746acc419cb2527ba19b6f3bd97b4a208c03823bfb37b2982629d2effe30ebd17eaed0d7e2fc741f3c4f2a0c43455bd5fb4194354b378e78cfb7ca687f59 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - -"type-fest@npm:^0.3.1": - version: 0.3.1 - resolution: "type-fest@npm:0.3.1" - checksum: 347ff46c2285616635cb59f722e7f396bee81b8988b6fc1f1536b725077f2abf6ccfa22ab7a78e9b6ce7debea0e6614bbf5946cbec6674ec1bde12113af3a65c - languageName: node - linkType: hard - -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f - languageName: node - linkType: hard - -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 - languageName: node - linkType: hard - -"type-fest@npm:^1.2.2": - version: 1.4.0 - resolution: "type-fest@npm:1.4.0" - checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 - languageName: node - linkType: hard - -"type-is@npm:^1.6.4, type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: 0.3.0 - mime-types: ~2.1.24 - checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 - languageName: node - linkType: hard - -"type@npm:^2.7.2": - version: 2.7.2 - resolution: "type@npm:2.7.2" - checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-buffer@npm:1.0.2" - dependencies: - call-bind: ^1.0.7 - es-errors: ^1.3.0 - is-typed-array: ^1.1.13 - checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" - dependencies: - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-byte-offset@npm:1.0.2" - dependencies: - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - possible-typed-array-names: ^1.0.0 - checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c - languageName: node - linkType: hard - -"typed-scss-modules@npm:^6.5.0": - version: 6.6.0 - resolution: "typed-scss-modules@npm:6.6.0" - dependencies: - bundle-require: ^3.0.4 - chalk: 4.1.2 - change-case: ^4.1.2 - chokidar: ^3.5.3 - css-modules-loader-core: ^1.1.0 - esbuild: ^0.14.21 - glob: ^7.2.0 - joycon: ^3.1.1 - reserved-words: ^0.1.2 - slash: ^3.0.0 - yargs: ^17.3.1 - peerDependencies: - node-sass: ^4.12.0 - sass: ^1.49.7 - peerDependenciesMeta: - node-sass: - optional: true - sass: - optional: true - bin: - typed-scss-modules: dist/lib/cli.js - checksum: aa039f1c26cb3a3fa5a445f25bf7f3f9754bcc55a9701b7d55fb380ac767eeb60ca2c17f1d983ad8cec4c9e92779e9f8bd57f2859a991ec8f31d6c3acd56856b - languageName: node - linkType: hard - -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 - languageName: node - linkType: hard - -"typescript@npm:^4.1.5": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db - languageName: node - linkType: hard - -"typescript@patch:typescript@^4.1.5#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=7ad353" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 - languageName: node - linkType: hard - -"ufo@npm:^1.3.2": - version: 1.5.3 - resolution: "ufo@npm:1.5.3" - checksum: 2f54fa543b2e689cc4ab341fe2194937afe37c5ee43cd782e6ecc184e36859e84d4197a43ae4cd6e9a56f793ca7c5b950dfff3f16fadaeef9b6b88b05c88c8ef - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - has-bigints: ^1.0.2 - has-symbols: ^1.0.3 - which-boxed-primitive: ^1.0.2 - checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 - languageName: node - linkType: hard - -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc - languageName: node - linkType: hard - -"underscore@npm:1.12.1": - version: 1.12.1 - resolution: "underscore@npm:1.12.1" - checksum: ec327603aa112b99fe9d74cd9bf3b3b7451465a9d2610ceab269a532e3f191650ab017903be34dc86fe406a11d04d8905a3b04dd4c129493e51bee09a3f3074c - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: ^2.0.0 - unicode-property-aliases-ecmascript: ^2.0.0 - checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b - languageName: node - linkType: hard - -"unified@npm:^9.0.0": - version: 9.2.2 - resolution: "unified@npm:9.2.2" - dependencies: - bail: ^1.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^2.0.0 - trough: ^1.0.0 - vfile: ^4.0.0 - checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 - languageName: node - linkType: hard - -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" - dependencies: - arr-union: ^3.1.0 - get-value: ^2.0.6 - is-extendable: ^0.1.1 - set-value: ^2.0.1 - checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba - languageName: node - linkType: hard - -"uniq@npm:^1.0.1": - version: 1.0.1 - resolution: "uniq@npm:1.0.1" - checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 - languageName: node - linkType: hard - -"uniqs@npm:^2.0.0": - version: 2.0.0 - resolution: "uniqs@npm:2.0.0" - checksum: 5ace63e0521fd1ae2c161b3fa167cf6846fc45a71c00496729e0146402c3ae467c6f025a68fbd6766300a9bfbac9f240f2f0198164283bef48012b39db83f81f - languageName: node - linkType: hard - -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" - dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" - dependencies: - imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 - languageName: node - linkType: hard - -"unique-string@npm:^1.0.0": - version: 1.0.0 - resolution: "unique-string@npm:1.0.0" - dependencies: - crypto-random-string: ^1.0.0 - checksum: 588f16bd4ec99b5130f237793d1a5694156adde20460366726573238e41e93b739b87987e863792aeb2392b26f8afb292490ace119c82ed12c46816c9c859f5f - languageName: node - linkType: hard - -"unist-builder@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-builder@npm:2.0.3" - checksum: e946fdf77dbfc320feaece137ce4959ae2da6614abd1623bd39512dc741a9d5f313eb2ba79f8887d941365dccddec7fef4e953827475e392bf49b45336f597f6 - languageName: node - linkType: hard - -"unist-util-generated@npm:^1.0.0": - version: 1.1.6 - resolution: "unist-util-generated@npm:1.1.6" - checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f - languageName: node - linkType: hard - -"unist-util-is@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-is@npm:4.1.0" - checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea - languageName: node - linkType: hard - -"unist-util-position@npm:^3.0.0": - version: 3.1.0 - resolution: "unist-util-position@npm:3.1.0" - checksum: 10b3952e32a1ffabbecad41c3946237f7059f5bb6436796da05531a285f50b97e4f37cfc2f7164676d041063f40fe1ad92fbb8ca38d3ae8747328ebe738d738f - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-util-stringify-position@npm:2.0.3" - dependencies: - "@types/unist": ^2.0.2 - checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^3.0.0": - version: 3.1.1 - resolution: "unist-util-visit-parents@npm:3.1.1" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 - languageName: node - linkType: hard - -"unist-util-visit@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-util-visit@npm:2.0.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - unist-util-visit-parents: ^3.0.0 - checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f - languageName: node - linkType: hard - -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff - languageName: node - linkType: hard - -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 - languageName: node - linkType: hard - -"unload@npm:2.2.0": - version: 2.2.0 - resolution: "unload@npm:2.2.0" - dependencies: - "@babel/runtime": ^7.6.2 - detect-node: ^2.0.4 - checksum: 88ba950c5ff83ab4f9bbd8f63bbf19ba09687ed3c434efd43b7338cc595bc574df8f9b155ee6eee7a435de3d3a4a226726988428977a68ba4907045f1fac5d41 - languageName: node - linkType: hard - -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 - languageName: node - linkType: hard - -"unquote@npm:~1.1.1": - version: 1.1.1 - resolution: "unquote@npm:1.1.1" - checksum: 71745867d09cba44ba2d26cb71d6dda7045a98b14f7405df4faaf2b0c90d24703ad027a9d90ba9a6e0d096de2c8d56f864fd03f1c0498c0b7a3990f73b4c8f5f - languageName: node - linkType: hard - -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: ^0.3.1 - isobject: ^3.0.0 - checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 - languageName: node - linkType: hard - -"upath@npm:^1.1.1, upath@npm:^1.1.2, upath@npm:^1.2.0": - version: 1.2.0 - resolution: "upath@npm:1.2.0" - checksum: 4c05c094797cb733193a0784774dbea5b1889d502fc9f0572164177e185e4a59ba7099bf0b0adf945b232e2ac60363f9bf18aac9b2206fb99cbef971a8455445 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.13": - version: 1.0.13 - resolution: "update-browserslist-db@npm:1.0.13" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 - languageName: node - linkType: hard - -"upper-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case-first@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 - languageName: node - linkType: hard - -"upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - -"url-loader@npm:4.1.1": - version: 4.1.1 - resolution: "url-loader@npm:4.1.1" - dependencies: - loader-utils: ^2.0.0 - mime-types: ^2.1.27 - schema-utils: ^3.0.0 - peerDependencies: - file-loader: "*" - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - file-loader: - optional: true - checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd - languageName: node - linkType: hard - -"url-parse@npm:^1.5.10, url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - -"url-template@npm:^2.0.8": - version: 2.0.8 - resolution: "url-template@npm:2.0.8" - checksum: 4183fccd74e3591e4154134d4443dccecba9c455c15c7df774f1f1e3fa340fd9bffb903b5beec347196d15ce49c34edf6dec0634a95d170ad6e78c0467d6e13e - languageName: node - linkType: hard - -"url@npm:^0.11.0": - version: 0.11.3 - resolution: "url@npm:0.11.3" - dependencies: - punycode: ^1.4.1 - qs: ^6.11.2 - checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e - languageName: node - linkType: hard - -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"util.promisify@npm:1.0.0": - version: 1.0.0 - resolution: "util.promisify@npm:1.0.0" - dependencies: - define-properties: ^1.1.2 - object.getownpropertydescriptors: ^2.0.3 - checksum: 482e857d676adee506c5c3a10212fd6a06a51d827a9b6d5396a8e593db53b4bb7064f77c5071357d8cd76072542de5cc1c08bc6d7c10cf43fa22dc3bc67556f1 - languageName: node - linkType: hard - -"util.promisify@npm:~1.0.0": - version: 1.0.1 - resolution: "util.promisify@npm:1.0.1" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.2 - has-symbols: ^1.0.1 - object.getownpropertydescriptors: ^2.1.0 - checksum: d823c75b3fc66510018596f128a6592c98991df38bc0464a633bdf9134e2de0a1a33199c5c21cc261048a3982d7a19e032ecff8835b3c587f843deba96063e37 - languageName: node - linkType: hard - -"util@npm:^0.10.4": - version: 0.10.4 - resolution: "util@npm:0.10.4" - dependencies: - inherits: 2.0.3 - checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf - languageName: node - linkType: hard - -"util@npm:^0.11.0": - version: 0.11.1 - resolution: "util@npm:0.11.1" - dependencies: - inherits: 2.0.3 - checksum: 80bee6a2edf5ab08dcb97bfe55ca62289b4e66f762ada201f2c5104cb5e46474c8b334f6504d055c0e6a8fda10999add9bcbd81ba765e7f37b17dc767331aa55 - languageName: node - linkType: hard - -"util@npm:^0.12.3": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: ^2.0.3 - is-arguments: ^1.0.4 - is-generator-function: ^1.0.7 - is-typed-array: ^1.1.3 - which-typed-array: ^1.1.2 - checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a - languageName: node - linkType: hard - -"utila@npm:~0.4": - version: 0.4.0 - resolution: "utila@npm:0.4.0" - checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 - languageName: node - linkType: hard - -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 - languageName: node - linkType: hard - -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f - languageName: node - linkType: hard - -"uuid@npm:^8.3.0, uuid@npm:^8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - -"uuid@npm:^9.0.0": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" - bin: - uuid: dist/bin/uuid - checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"v8-compile-cache@npm:^2.0.3": - version: 2.4.0 - resolution: "v8-compile-cache@npm:2.4.0" - checksum: 8eb6ddb59d86f24566503f1e6ca98f3e6f43599f05359bd3ab737eaaf1585b338091478a4d3d5c2646632cf8030288d7888684ea62238cdce15a65ae2416718f - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^7.0.0": - version: 7.1.2 - resolution: "v8-to-istanbul@npm:7.1.2" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: e52b48764f55aed62ff87f2b5f710c874f992cd1313eac8f438bf65aeeb0689153d85bb76e39514fd90ba3521d6ebea929a8ae1339b6d7b0cf18fb0ed13d8b40 - languageName: node - linkType: hard - -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad - languageName: node - linkType: hard - -"validator@npm:^13.9.0": - version: 13.11.0 - resolution: "validator@npm:13.11.0" - checksum: d1e0c27022681420756da25bc03eb08d5f0c66fb008f8ff02ebc95812b77c6be6e03d3bd05cf80ca702e23eeb73dadd66b4b3683173ea2a0bc7cc72820bee131 - languageName: node - linkType: hard - -"value-equal@npm:^1.0.1": - version: 1.0.1 - resolution: "value-equal@npm:1.0.1" - checksum: bb7ae1facc76b5cf8071aeb6c13d284d023fdb370478d10a5d64508e0e6e53bb459c4bbe34258df29d82e6f561f874f0105eba38de0e61fe9edd0bdce07a77a2 - languageName: node - linkType: hard - -"vary@npm:^1, vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b - languageName: node - linkType: hard - -"vendors@npm:^1.0.0": - version: 1.0.4 - resolution: "vendors@npm:1.0.4" - checksum: 4b16e0bc18dbdd7ac8dd745c776c08f6c73e9a7f620ffd9faf94a3d86a35feaf4c6cb1bbdb304d2381548a30d0abe69b83eeb1b7b1bf5bb33935e64b28812681 - languageName: node - linkType: hard - -"vfile-message@npm:^2.0.0": - version: 2.0.4 - resolution: "vfile-message@npm:2.0.4" - dependencies: - "@types/unist": ^2.0.0 - unist-util-stringify-position: ^2.0.0 - checksum: 1bade499790f46ca5aba04bdce07a1e37c2636a8872e05cf32c26becc912826710b7eb063d30c5754fdfaeedc8a7658e78df10b3bc535c844890ec8a184f5643 - languageName: node - linkType: hard - -"vfile@npm:^4.0.0": - version: 4.2.1 - resolution: "vfile@npm:4.2.1" - dependencies: - "@types/unist": ^2.0.0 - is-buffer: ^2.0.0 - unist-util-stringify-position: ^2.0.0 - vfile-message: ^2.0.0 - checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 - languageName: node - linkType: hard - -"vite-node@npm:0.32.4": - version: 0.32.4 - resolution: "vite-node@npm:0.32.4" - dependencies: - cac: ^6.7.14 - debug: ^4.3.4 - mlly: ^1.4.0 - pathe: ^1.1.1 - picocolors: ^1.0.0 - vite: ^3.0.0 || ^4.0.0 - bin: - vite-node: vite-node.mjs - checksum: 6edb7aafcc30b97213435e7b3bfa43e2133feadd46680c0e54b44064f9e38f9b6e3a75f7c0ccde6bf3b6f34cb9681ec6510fb966a11f9ca7239e9473200a4a24 - languageName: node - linkType: hard - -"vite@npm:^3.0.0 || ^4.0.0, vite@npm:^4.4.5": - version: 4.5.3 - resolution: "vite@npm:4.5.3" - dependencies: - esbuild: ^0.18.10 - fsevents: ~2.3.2 - postcss: ^8.4.27 - rollup: ^3.27.1 - peerDependencies: - "@types/node": ">= 14" - less: "*" - lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c - languageName: node - linkType: hard - -"vitest@npm:^0.32.1": - version: 0.32.4 - resolution: "vitest@npm:0.32.4" - dependencies: - "@types/chai": ^4.3.5 - "@types/chai-subset": ^1.3.3 - "@types/node": "*" - "@vitest/expect": 0.32.4 - "@vitest/runner": 0.32.4 - "@vitest/snapshot": 0.32.4 - "@vitest/spy": 0.32.4 - "@vitest/utils": 0.32.4 - acorn: ^8.9.0 - acorn-walk: ^8.2.0 - cac: ^6.7.14 - chai: ^4.3.7 - debug: ^4.3.4 - local-pkg: ^0.4.3 - magic-string: ^0.30.0 - pathe: ^1.1.1 - picocolors: ^1.0.0 - std-env: ^3.3.3 - strip-literal: ^1.0.1 - tinybench: ^2.5.0 - tinypool: ^0.5.0 - vite: ^3.0.0 || ^4.0.0 - vite-node: 0.32.4 - why-is-node-running: ^2.2.2 - peerDependencies: - "@edge-runtime/vm": "*" - "@vitest/browser": "*" - "@vitest/ui": "*" - happy-dom: "*" - jsdom: "*" - playwright: "*" - safaridriver: "*" - webdriverio: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - bin: - vitest: vitest.mjs - checksum: 0f3347aac5656e6ba14c2f82d8fc5bfa333766ec745f7250f02a28d4cf6b35e645a300f0116a7db542430f59edb96cfeb3d2bc87856b84c776c25d10581f051b - languageName: node - linkType: hard - -"vm-browserify@npm:^1.0.1": - version: 1.1.2 - resolution: "vm-browserify@npm:1.1.2" - checksum: 10a1c50aab54ff8b4c9042c15fc64aefccce8d2fb90c0640403242db0ee7fb269f9b102bdb69cfb435d7ef3180d61fd4fb004a043a12709abaf9056cfd7e039d - languageName: node - linkType: hard - -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b - languageName: node - linkType: hard - -"walker@npm:^1.0.7, walker@npm:~1.0.5": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - -"watchpack-chokidar2@npm:^2.0.1": - version: 2.0.1 - resolution: "watchpack-chokidar2@npm:2.0.1" - dependencies: - chokidar: ^2.1.8 - checksum: acf0f9ebca0c0b2fd1fe87ba557670477a6c0410bf1a653a726e68eb0620aa94fd9a43027a160a76bc793a21ea12e215e1e87dafe762682c13ef92ad4daf7b58 - languageName: node - linkType: hard - -"watchpack@npm:^1.7.4": - version: 1.7.5 - resolution: "watchpack@npm:1.7.5" - dependencies: - chokidar: ^3.4.1 - graceful-fs: ^4.1.2 - neo-async: ^2.5.0 - watchpack-chokidar2: ^2.0.1 - dependenciesMeta: - chokidar: - optional: true - watchpack-chokidar2: - optional: true - checksum: 8b7cb8c8df8f4dd0e8ac47693c0141c4f020a4b031411247d600eca31522fde6f1f9a3a6f6518b46e71f7971b0ed5734c08c60d7fdd2530e7262776286f69236 - languageName: node - linkType: hard - -"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": - version: 1.7.3 - resolution: "wbuf@npm:1.7.3" - dependencies: - minimalistic-assert: ^1.0.0 - checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: ^1.0.3 - checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c - languageName: node - linkType: hard - -"web-encoding@npm:^1.1.5": - version: 1.1.5 - resolution: "web-encoding@npm:1.1.5" - dependencies: - "@zxing/text-encoding": 0.9.0 - util: ^0.12.3 - dependenciesMeta: - "@zxing/text-encoding": - optional: true - checksum: 2234a2b122f41006ce07859b3c0bf2e18f46144fda2907d5db0b571b76aa5c26977c646100ad9c00d2f8a4f6f2b848bc02147845d8c447ab365ec4eff376338d - languageName: node - linkType: hard - -"web-vitals@npm:^0.2.4": - version: 0.2.4 - resolution: "web-vitals@npm:0.2.4" - checksum: 128a4e87730b0a02fb6af3eef7d31f9a79b4646e83cfe4465aa8ce6054fe16f7b1f4125a384f1b4f039091bd9513cb54b4e559c0b10ae953c01900786a16b1c2 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c - languageName: node - linkType: hard - -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - -"webpack-dev-middleware@npm:^3.7.2": - version: 3.7.3 - resolution: "webpack-dev-middleware@npm:3.7.3" - dependencies: - memory-fs: ^0.4.1 - mime: ^2.4.4 - mkdirp: ^0.5.1 - range-parser: ^1.2.1 - webpack-log: ^2.0.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: faa3cdd7b82d23c35b8f45903556eadd92b0795c76f3e08e234d53f7bab3de13331096a71968e7e9905770ae5de7a4f75ddf09f66d1e0bbabfecbb30db0f71e3 - languageName: node - linkType: hard - -"webpack-dev-server@npm:3.11.1": - version: 3.11.1 - resolution: "webpack-dev-server@npm:3.11.1" - dependencies: - ansi-html: 0.0.7 - bonjour: ^3.5.0 - chokidar: ^2.1.8 - compression: ^1.7.4 - connect-history-api-fallback: ^1.6.0 - debug: ^4.1.1 - del: ^4.1.1 - express: ^4.17.1 - html-entities: ^1.3.1 - http-proxy-middleware: 0.19.1 - import-local: ^2.0.0 - internal-ip: ^4.3.0 - ip: ^1.1.5 - is-absolute-url: ^3.0.3 - killable: ^1.0.1 - loglevel: ^1.6.8 - opn: ^5.5.0 - p-retry: ^3.0.1 - portfinder: ^1.0.26 - schema-utils: ^1.0.0 - selfsigned: ^1.10.8 - semver: ^6.3.0 - serve-index: ^1.9.1 - sockjs: ^0.3.21 - sockjs-client: ^1.5.0 - spdy: ^4.0.2 - strip-ansi: ^3.0.1 - supports-color: ^6.1.0 - url: ^0.11.0 - webpack-dev-middleware: ^3.7.2 - webpack-log: ^2.0.0 - ws: ^6.2.1 - yargs: ^13.3.2 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack-dev-server: bin/webpack-dev-server.js - checksum: 6c6e6b6c207c192585f9943fc9945058832a39a12bbf0368798d73a96264b813ab816cb14985c1ca3c90cc567f59fcad6f2fada8f30f2f0136904cfaf43eb87d - languageName: node - linkType: hard - -"webpack-log@npm:^2.0.0": - version: 2.0.0 - resolution: "webpack-log@npm:2.0.0" - dependencies: - ansi-colors: ^3.0.0 - uuid: ^3.3.2 - checksum: 4757179310995e20633ec2d77a8c1ac11e4135c84745f57148692f8195f1c0f8ec122c77d0dc16fc484b7d301df6674f36c9fc6b1ff06b5cf142abaaf5d24f4f - languageName: node - linkType: hard - -"webpack-manifest-plugin@npm:2.2.0": - version: 2.2.0 - resolution: "webpack-manifest-plugin@npm:2.2.0" - dependencies: - fs-extra: ^7.0.0 - lodash: ">=3.5 <5" - object.entries: ^1.1.0 - tapable: ^1.0.0 - peerDependencies: - webpack: 2 || 3 || 4 - checksum: ed1387774031a59bc1bd5f79150e7a49dcf5048a6d5e9652672637bed7f93df6220cbd88b2e371e7c8c8e7640b3a8ed6895f771c6b05a8bb90b721f82001ac25 - languageName: node - linkType: hard - -"webpack-sources@npm:^1.1.0, webpack-sources@npm:^1.3.0, webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1, webpack-sources@npm:^1.4.3": - version: 1.4.3 - resolution: "webpack-sources@npm:1.4.3" - dependencies: - source-list-map: ^2.0.0 - source-map: ~0.6.1 - checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 - languageName: node - linkType: hard - -"webpack@npm:4.44.2": - version: 4.44.2 - resolution: "webpack@npm:4.44.2" - dependencies: - "@webassemblyjs/ast": 1.9.0 - "@webassemblyjs/helper-module-context": 1.9.0 - "@webassemblyjs/wasm-edit": 1.9.0 - "@webassemblyjs/wasm-parser": 1.9.0 - acorn: ^6.4.1 - ajv: ^6.10.2 - ajv-keywords: ^3.4.1 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^4.3.0 - eslint-scope: ^4.0.3 - json-parse-better-errors: ^1.0.2 - loader-runner: ^2.4.0 - loader-utils: ^1.2.3 - memory-fs: ^0.4.1 - micromatch: ^3.1.10 - mkdirp: ^0.5.3 - neo-async: ^2.6.1 - node-libs-browser: ^2.2.1 - schema-utils: ^1.0.0 - tapable: ^1.1.3 - terser-webpack-plugin: ^1.4.3 - watchpack: ^1.7.4 - webpack-sources: ^1.4.1 - peerDependenciesMeta: - webpack-cli: - optional: true - webpack-command: - optional: true - bin: - webpack: bin/webpack.js - checksum: 3d42ee6af7a0ff14fc00136d02f4a36381fd5b6ad0636b95a8b83e6d99bc7e02f888f4994c095ae986e567033fe7bb1d445e27afe49d2872b8fe5c3a57d20de6 - languageName: node - linkType: hard - -"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": - version: 0.7.4 - resolution: "websocket-driver@npm:0.7.4" - dependencies: - http-parser-js: ">=0.5.1" - safe-buffer: ">=5.1.0" - websocket-extensions: ">=0.1.1" - checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 - languageName: node - linkType: hard - -"websocket-extensions@npm:>=0.1.1": - version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4" - checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 - languageName: node - linkType: hard - -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-fetch@npm:^3.4.1": - version: 3.6.20 - resolution: "whatwg-fetch@npm:3.6.20" - checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: ~0.0.3 - webidl-conversions: ^3.0.0 - checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c - languageName: node - linkType: hard - -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" - 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 - checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" - 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 - checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.1": - version: 1.0.2 - resolution: "which-collection@npm:1.0.2" - dependencies: - is-map: ^2.0.3 - is-set: ^2.0.3 - is-weakmap: ^2.0.2 - is-weakset: ^2.0.3 - checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": - version: 1.1.15 - resolution: "which-typed-array@npm:1.1.15" - dependencies: - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.2 - checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 - languageName: node - linkType: hard - -"which@npm:^1.2.9, which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: ^2.0.0 - bin: - which: ./bin/which - checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: ^3.1.1 - bin: - node-which: bin/which.js - checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 - languageName: node - linkType: hard - -"why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" - dependencies: - siginfo: ^2.0.0 - stackback: 0.0.2 - bin: - why-is-node-running: cli.js - checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a - languageName: node - linkType: hard - -"word-wrap@npm:~1.2.3": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb - languageName: node - linkType: hard - -"workbox-background-sync@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-background-sync@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: 14655d0254813d2580935c88fe4768eb4794158a3c0700505aa06784dcd8d7498563e8b55152f0a4afb609163e76787a3a3eb61813b810bd76830c866d6ceb9e - languageName: node - linkType: hard - -"workbox-broadcast-update@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-broadcast-update@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: b56df2fde652c2efa8afbb8880562aaac6932be313ddcbbb688bb48beeb3164c928a644407f359168789a31592c765f63526608afe6cd803ac89402f786064d1 - languageName: node - linkType: hard - -"workbox-build@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-build@npm:5.1.4" - dependencies: - "@babel/core": ^7.8.4 - "@babel/preset-env": ^7.8.4 - "@babel/runtime": ^7.8.4 - "@hapi/joi": ^15.1.0 - "@rollup/plugin-node-resolve": ^7.1.1 - "@rollup/plugin-replace": ^2.3.1 - "@surma/rollup-plugin-off-main-thread": ^1.1.1 - common-tags: ^1.8.0 - fast-json-stable-stringify: ^2.1.0 - fs-extra: ^8.1.0 - glob: ^7.1.6 - lodash.template: ^4.5.0 - pretty-bytes: ^5.3.0 - rollup: ^1.31.1 - rollup-plugin-babel: ^4.3.3 - rollup-plugin-terser: ^5.3.1 - source-map: ^0.7.3 - source-map-url: ^0.4.0 - stringify-object: ^3.3.0 - strip-comments: ^1.0.2 - tempy: ^0.3.0 - upath: ^1.2.0 - workbox-background-sync: ^5.1.4 - workbox-broadcast-update: ^5.1.4 - workbox-cacheable-response: ^5.1.4 - workbox-core: ^5.1.4 - workbox-expiration: ^5.1.4 - workbox-google-analytics: ^5.1.4 - workbox-navigation-preload: ^5.1.4 - workbox-precaching: ^5.1.4 - workbox-range-requests: ^5.1.4 - workbox-routing: ^5.1.4 - workbox-strategies: ^5.1.4 - workbox-streams: ^5.1.4 - workbox-sw: ^5.1.4 - workbox-window: ^5.1.4 - checksum: 873833d0ea5c39c3f9adae9b2cd8ff33c013ff57f189dbec94d4d02917281495f38bbfa508d24425176ea8d31d6a27590658c83c30d44d9d5a9f4eb4d0798694 - languageName: node - linkType: hard - -"workbox-cacheable-response@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-cacheable-response@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: 3d8940dbee11880fdd86d76f85c063cf0a42d722be828332acf2f69ff5eaaedc8a0d779e44175adba4e8485f98392052539b2126df79125cebcec57dea0bee3c - languageName: node - linkType: hard - -"workbox-core@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-core@npm:5.1.4" - checksum: 6062bc3131bb7fcf1922be619cbc28ba528b033ba18acced5e42eb62b6c0a763814e905106c081c1c100a5d520ef104957e99e592e5e954767df76db49a7c874 - languageName: node - linkType: hard - -"workbox-expiration@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-expiration@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: c4648a008d19ee1281d5d588e10f14bd01530d8601c6ebf27e63b109663530fd381709539f1dd8a32e75d68a04e40e5f31ec6fbcc9ea052ee39000a2d76ade50 - languageName: node - linkType: hard - -"workbox-google-analytics@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-google-analytics@npm:5.1.4" - dependencies: - workbox-background-sync: ^5.1.4 - workbox-core: ^5.1.4 - workbox-routing: ^5.1.4 - workbox-strategies: ^5.1.4 - checksum: 2783e93f8a5aeccc038f51a9960c05aebd104fd8d113b5fd78a09bac2da8ed8e2be4c9fd7d8a6751682301d6b5e36ba055240a74a3591b4e887aabb2784cd531 - languageName: node - linkType: hard - -"workbox-navigation-preload@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-navigation-preload@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: ed6b19f063f17e2dd12ef08594ea338fcf96d994ea8f7d9b2987099cb08a890c73f139a23b68c9c5523308fba4634f24aca079deb7d00684c8d76fdfb07b0fc9 - languageName: node - linkType: hard - -"workbox-precaching@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-precaching@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: 5593c5b9c3c928bb5d3b4c998625be610d05a3b55523e5abb0fc5f12ff2e32412114e933e60d54ba9e2661fa3cbbbab7e11f91c7170742cfe9525437d1c44ae8 - languageName: node - linkType: hard - -"workbox-range-requests@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-range-requests@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: c67b467023e85a45599c411079907585c4d4b7aab77205dd905cd0d8b1487aa248469bc2f89045e8bd4a08eed4ede14795fc9089d01beff65ff3c6f2f1deff45 - languageName: node - linkType: hard - -"workbox-routing@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-routing@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: 4199a02b433eb645dfcaf2a5056a04d79f337b6f368b1ab5aa18262857835d4b995536062c294d6f4db6da236235b5736af4b29d0ea1b0c3f0db339b04d3cd40 - languageName: node - linkType: hard - -"workbox-strategies@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-strategies@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - workbox-routing: ^5.1.4 - checksum: 6ed247bfc0037331043cd0e772c6fd8d48e487875fac75d6692eb3936536ca2d4ac5ac9d12ec9b0ad5eefd4a69afd1ad2a993829ce3a373390880a019fd33d3d - languageName: node - linkType: hard - -"workbox-streams@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-streams@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - workbox-routing: ^5.1.4 - checksum: daaedb22dae6eb4723e7a21d758854adb36b75f1fa2453a914b6768628d91555e3db76fccb70a101f5cf1a39056e783eab1c8b0f4a59649f7ef4fad173c6f7d3 - languageName: node - linkType: hard - -"workbox-sw@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-sw@npm:5.1.4" - checksum: eda970f62c26715b806828cab3000240843bab2e6577c341ccd30747a77a60d23f4f08d8d85fba680bfefa95c673c4d48a62a969a2540916dcf6506c627c69cc - languageName: node - linkType: hard - -"workbox-webpack-plugin@npm:5.1.4": - version: 5.1.4 - resolution: "workbox-webpack-plugin@npm:5.1.4" - dependencies: - "@babel/runtime": ^7.5.5 - fast-json-stable-stringify: ^2.0.0 - source-map-url: ^0.4.0 - upath: ^1.1.2 - webpack-sources: ^1.3.0 - workbox-build: ^5.1.4 - peerDependencies: - webpack: ^4.0.0 - checksum: 7a9093d4ccfedc27ee6716443bcb7ce12d1f92831f48d09e6cf829a62d2ba7948a84ed38964923136d6b296e8f60bda359645a82c5a19e2c5a8e8aab6dae0a55 - languageName: node - linkType: hard - -"workbox-window@npm:^5.1.4": - version: 5.1.4 - resolution: "workbox-window@npm:5.1.4" - dependencies: - workbox-core: ^5.1.4 - checksum: bd5bc967ea1202c555db4360892518f5479027d05e4bd02fd38ebef3faf6605ee7e3887225e0920624cd2685e5217c3c4bd43a7d458860d186400c12f410df5b - languageName: node - linkType: hard - -"worker-farm@npm:^1.7.0": - version: 1.7.0 - resolution: "worker-farm@npm:1.7.0" - dependencies: - errno: ~0.1.7 - checksum: eab917530e1feddf157ec749e9c91b73a886142daa7fdf3490bccbf7b548b2576c43ab8d0a98e72ac755cbc101ca8647a7b1ff2485fddb9e8f53c40c77f5a719 - languageName: node - linkType: hard - -"worker-rpc@npm:^0.1.0": - version: 0.1.1 - resolution: "worker-rpc@npm:0.1.1" - dependencies: - microevent.ts: ~0.1.1 - checksum: 8f8607506172f44c05490f3ccf13e5c1f430eeb9b6116a405919c186b8b17add13bbb22467a0dbcd18ec7fcb080709a15738182e0003c5fbe2144721ea00f357 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrap-ansi@npm:^5.1.0": - version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0" - dependencies: - ansi-styles: ^3.2.0 - string-width: ^3.0.0 - strip-ansi: ^5.0.0 - checksum: 9b48c862220e541eb0daa22661b38b947973fc57054e91be5b0f2dcc77741a6875ccab4ebe970a394b4682c8dfc17e888266a105fb8b0a9b23c19245e781ceae - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" - dependencies: - imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - -"ws@npm:^6.2.1": - version: 6.2.2 - resolution: "ws@npm:6.2.2" - dependencies: - async-limiter: ~1.0.0 - checksum: aec3154ec51477c094ac2cb5946a156e17561a581fa27005cbf22c53ac57f8d4e5f791dd4bbba6a488602cb28778c8ab7df06251d590507c3c550fd8ebeee949 - languageName: node - linkType: hard - -"ws@npm:^7.4.6": - version: 7.5.9 - resolution: "ws@npm:7.5.9" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - -"xtend@npm:^4.0.0, xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yaml@npm:^1.10.0": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f - languageName: node - linkType: hard - -"yargs-parser@npm:20.x": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - -"yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - -"yargs@npm:^13.3.0, yargs@npm:^13.3.2": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" - dependencies: - cliui: ^5.0.0 - find-up: ^3.0.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^3.0.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^13.1.2 - checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 - languageName: node - linkType: hard - -"yargs@npm:^15.4.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: ^6.0.0 - decamelize: ^1.2.0 - find-up: ^4.1.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^4.2.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^18.1.2 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 - languageName: node - linkType: hard - -"yargs@npm:^17.3.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard - -"yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 - languageName: node - linkType: hard - -"yup@npm:^0.32.11": - version: 0.32.11 - resolution: "yup@npm:0.32.11" - dependencies: - "@babel/runtime": ^7.15.4 - "@types/lodash": ^4.14.175 - lodash: ^4.17.21 - lodash-es: ^4.17.21 - nanoclone: ^0.2.1 - property-expr: ^2.0.4 - toposort: ^2.0.2 - checksum: 43a16786b47cc910fed4891cebdd89df6d6e31702e9462e8f969c73eac88551ce750732608012201ea6b93802c8847cb0aa27b5d57370640f4ecf30f9f97d4b0 - languageName: node - linkType: hard From d699ebc2e88eaa6fc6fcaa4412249acc654c83cc Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 19:09:14 -0500 Subject: [PATCH 133/320] #2797-reverted yar.lock --- yarn.lock | 21976 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 21976 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..6586f5c64b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,21976 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@adobe/css-tools@npm:^4.0.1": + version: 4.4.0 + resolution: "@adobe/css-tools@npm:4.4.0" + checksum: 1f08fb49bf17fc7f2d1a86d3e739f29ca80063d28168307f1b0a962ef37501c5667271f6771966578897f2e94e43c4770fd802728a6e6495b812da54112d506a + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 + languageName: node + linkType: hard + +"@babel/code-frame@npm:7.10.4": + version: 7.10.4 + resolution: "@babel/code-frame@npm:7.10.4" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019 + languageName: node + linkType: hard + +"@babel/code-frame@npm:7.12.11": + version: 7.12.11 + resolution: "@babel/code-frame@npm:7.12.11" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.5.5": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": ^7.24.7 + picocolors: ^1.0.0 + checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/compat-data@npm:7.24.7" + checksum: 1fc276825dd434fe044877367dfac84171328e75a8483a6976aa28bf833b32367e90ee6df25bdd97c287d1aa8019757adcccac9153de70b1932c0d243a978ae9 + languageName: node + linkType: hard + +"@babel/core@npm:7.12.3": + version: 7.12.3 + resolution: "@babel/core@npm:7.12.3" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/generator": ^7.12.1 + "@babel/helper-module-transforms": ^7.12.1 + "@babel/helpers": ^7.12.1 + "@babel/parser": ^7.12.3 + "@babel/template": ^7.10.4 + "@babel/traverse": ^7.12.1 + "@babel/types": ^7.12.1 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.1 + json5: ^2.1.2 + lodash: ^4.17.19 + resolve: ^1.3.2 + semver: ^5.4.1 + source-map: ^0.5.0 + checksum: 29ee14dd7ae66c1af84d1b2864e1e9e1bec23b89f41e414917b10151ae1fcb6d3b6a8a25d028a7e22dba3bb7b69eb1f7f0d844797341357e36fa71ff967fb4a5 + languageName: node + linkType: hard + +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.5, @babel/core@npm:^7.24.5, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": + version: 7.24.7 + resolution: "@babel/core@npm:7.24.7" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.24.7 + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helpers": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/template": ^7.24.7 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 017497e2a1b4683a885219eef7d2aee83c1c0cf353506b2e180b73540ec28841d8ef1ea1837fa69f8c561574b24ddd72f04764b27b87afedfe0a07299ccef24d + languageName: node + linkType: hard + +"@babel/eslint-parser@npm:^7.16.3": + version: 7.24.7 + resolution: "@babel/eslint-parser@npm:7.24.7" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + eslint-visitor-keys: ^2.1.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 0e08ccecfe48cf9dacd96fb46747014b9c3683882ae6886a17a666533f0d5e99b61e31e3992ffee0efc67d805ae8be9b2a6342ce5d66a36de8d99d88c9a244a0 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/generator@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^2.5.1 + checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 71a6158a9fdebffb82fdc400d5555ba8f2e370cea81a0d578155877bdc4db7d5252b75c43b2fdf3f72b3f68348891f99bd35ae315542daad1b7ace8322b1abcb + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-compilation-targets@npm:7.24.7" + dependencies: + "@babel/compat-data": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + browserslist: ^4.22.2 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: dfc88bc35e223ade796c7267901728217c665adc5bc2e158f7b0ae850de14f1b7941bec4fe5950ae46236023cfbdeddd9c747c276acf9b39ca31f8dd97dc6cc6 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-function-name": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.7 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/helper-replace-supers": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 371a181a1717a9b0cebc97727c8ea9ca6afa34029476a684b6030f9d1ad94dcdafd7de175da10b63ae3ba79e4e82404db8ed968ebf264b768f097e5d64faab71 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + regexpu-core: ^5.3.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 17c59fa222af50f643946eca940ce1d474ff2da1f4afed2312687ab9d708ebbb8c9372754ddbdf44b6e21ead88b8fc144644f3a7b63ccb886de002458cef3974 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": + version: 0.6.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" + 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 + checksum: 2bba965ea9a4887ddf9c11d51d740ab473bd7597b787d042c325f6a45912dfe908c2d6bb1d837bf82f7e9fa51e6ad5150563c58131d2bb85515e63d971414a9c + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-environment-visitor@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-function-name@npm:7.24.7" + dependencies: + "@babel/template": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-hoist-variables@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 9fecf412f85fa23b7cf55d19eb69de39f8240426a028b141c9df2aed8cfedf20b3ec3318d40312eb7a3dec9eea792828ce0d590e0ff62da3da532482f537192c + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-transforms@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ddff3b41c2667876b4e4e73d961168f48a5ec9560c95c8c2d109e6221f9ca36c6f90c6317eb7a47f2a3c99419c356e529a86b79174cad0d4f7a61960866b88ca + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.7 + resolution: "@babel/helper-plugin-utils@npm:7.24.7" + checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-wrap-function": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: bab7be178f875350f22a2cb9248f67fe3a8a8128db77a25607096ca7599fd972bc7049fb11ed9e95b45a3f1dd1fac3846a3279f9cbac16f337ecb0e6ca76e1fc + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-replace-supers@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.7 + "@babel/helper-optimise-call-expression": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2bf0d113355c60d86a04e930812d36f5691f26c82d4ec1739e5ec0a4c982c9113dad3167f7c74f888a96328bd5e696372232406d8200e5979e6e0dc2af5e7c76 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" + dependencies: + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-split-export-declaration@npm:7.24.7" + dependencies: + "@babel/types": ^7.24.7 + checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-string-parser@npm:7.24.7" + checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-option@npm:7.24.7" + checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-wrap-function@npm:7.24.7" + dependencies: + "@babel/helper-function-name": ^7.24.7 + "@babel/template": ^7.24.7 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 085bf130ed08670336e3976f5841ae44e3e10001131632e22ef234659341978d2fd37e65785f59b6cb1745481347fc3bce84b33a685cacb0a297afbe1d2b03af + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helpers@npm:7.24.7" + dependencies: + "@babel/template": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 934da58098a3670ca7f9f42425b9c44d0ca4f8fad815c0f51d89fc7b64c5e0b4c7d5fec038599de691229ada737edeaf72fad3eba8e16dd5842e8ea447f76b66 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.7.0": + version: 7.24.7 + resolution: "@babel/parser@npm:7.24.7" + bin: + parser: ./bin/babel-parser.js + checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 68d315642b53af143aa17a71eb976cf431b51339aee584e29514a462b81c998636dd54219c2713b5f13e1df89eaf130dfab59683f9116825608708c81696b96c + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 7eb4e7ce5e3d6db4b0fdbdfaaa301c2e58f38a7ee39d5a4259a1fda61a612e83d3e4bc90fc36fb0345baf57e1e1a071e0caffeb80218623ad163f2fdc2e53a54 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.7 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 07b92878ac58a98ea1fdf6a8b4ec3413ba4fa66924e28b694d63ec5b84463123fbf4d7153b56cf3cedfef4a3482c082fe3243c04f8fb2c041b32b0e29b4a9e21 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8324d458db57060590942c7c2e9603880d07718ccb6450ec935105b8bd3c4393c4b8ada88e178c232258d91f33ffdcf2b1043d54e07a86989e50667ee100a32e + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.16.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-decorators@npm:^7.16.4": + version: 7.24.7 + resolution: "@babel/plugin-proposal-decorators@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-decorators": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 75aa5ff5537d5ff77f0e52eb161a2f67c7d2bfd8f2000be710dedb1dd238b43ce53d2f734f84bda95b3f013b69de126403f84167f4eddb1d35e8f26257ee07c8 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.16.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.16.0": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" + 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 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-methods@npm:^7.16.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.16.0": + version: 7.21.11 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" + 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 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1b880543bc5f525b360b53d97dd30807302bb82615cd42bf931968f59003cac75629563d6b104868db50abd22235b3271fdf679fea5db59a267181a99cc0c265 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-decorators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-decorators@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: dc303bcc1f5df61638f1eddc69dd55e65574bd43d8a4a098d3589f5a742e93a4ca3a173967b34eb95e4eaa994799b4c72bfed8688036e43c634be7f24db01ac5 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-flow@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 43b78b5fcdedb2a6d80c3d02a1a564fbfde86b73b442d616a8f318f673caa6ce0151513af5a00fcae42a512f144e70ef259d368b9537ee35d40336a6c895a7d4 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c4d67be4eb1d4637e361477dbe01f5b392b037d17c1f861cfa0faa120030e137aab90a9237931b8040fd31d1e5d159e11866fa1165f78beef7a3be876a391a17 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 590dbb5d1a15264f74670b427b8d18527672c3d6c91d7bae7e65f80fd810edbc83d90e68065088644cbad3f2457ed265a54a9956fb789fcb9a5b521822b3a275 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 56fe84f3044ecbf038977281648db6b63bd1301f2fff6595820dc10ee276c1d1586919d48d52a8d497ecae32c958be38f42c1c8d174dc58aad856c516dc5b35a + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 707c209b5331c7dc79bd326128c6a6640dbd62a78da1653c844db20c4f36bf7b68454f1bc4d2d051b3fde9136fa291f276ec03a071bb00ee653069ff82f91010 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.7" + dependencies: + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-remap-async-to-generator": ^7.24.7 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 112e3b18f9c496ebc01209fc27f0b41a3669c479c7bc44f7249383172b432ebaae1e523caa7c6ecbd2d0d7adcb7e5769fe2798f8cb01c08cd57232d1bb6d8ad4 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" + dependencies: + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-remap-async-to-generator": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13704fb3b83effc868db2b71bfb2c77b895c56cb891954fc362e95e200afd523313b0e7cf04ce02f45b05e76017c5b5fa8070c92613727a35131bb542c253a36 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 249cdcbff4e778b177245f9652b014ea4f3cd245d83297f10a7bf6d97790074089aa62bcde8c08eb299c5e68f2faed346b587d3ebac44d625ba9a83a4ee27028 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 039206155533600f079f3a455f85888dd7d4970ff7ffa85ef44760f4f5acb9f19c9d848cc1fec1b9bdbc0dfec9e8a080b90d0ab66ad2bdc7138b5ca4ba96e61c + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1348d7ce74da38ba52ea85b3b4289a6a86913748569ef92ef0cff30702a9eb849e5eaf59f1c6f3517059aa68115fb3067e389735dccacca39add4e2b0c67e291 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 324049263504f18416f1c3e24033baebfafd05480fdd885c8ebe6f2b415b0fc8e0b98d719360f9e30743cc78ac387fabc0b3c6606d2b54135756ffb92963b382 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-classes@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-function-name": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-replace-supers": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f01cb31143730d425681e9816020cbb519c7ddb3b6ca308dfaf2821eda5699a746637fc6bf19811e2fb42cfdf8b00a21b31c754da83771a5c280077925677354 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/template": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0cf8c1b1e4ea57dec8d4612460d84fd4cdbf71a7499bb61ee34632cf89018a59eee818ffca88a8d99ee7057c20a4257044d7d463fda6daef9bf1db9fa81563cb + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b9637b27faf9d24a8119bc5a1f98a2f47c69e6441bd8fc71163500be316253a72173308a93122bcf27d8d314ace43344c976f7291cf6376767f408350c8149d4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 67b10fc6abb1f61f0e765288eb4c6d63d1d0f9fc0660e69f6f2170c56fa16bc74e49857afc644beda112b41771cd90cf52df0940d11e97e52617c77c7dcff171 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d1da2ff85ecb56a63f4ccfd9dc9ae69400d85f0dadf44ecddd9e71c6e5c7a9178e74e3a9637555f415a2bb14551e563f09f98534ab54f53d25e8439fdde6ba2d + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 776509ff62ab40c12be814a342fc56a5cc09b91fb63032b2633414b635875fd7da03734657be0f6db2891fe6e3033b75d5ddb6f2baabd1a02e4443754a785002 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 23c84a23eb56589fdd35a3540f9a1190615be069110a2270865223c03aee3ba4e0fc68fe14850800cf36f0712b26e4964d3026235261f58f0405a29fe8dac9b1 + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3bd3a10038f10ae0dea1ee42137f3edcf7036b5e9e570a0d1cbd0865f03658990c6c2d84fa2475f87a754e7dc5b46766c16f7ce5c9b32c3040150b6a21233a80 + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.16.0": + version: 7.24.7 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-flow": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 260bd95b1a90ff4af11bf8e21e6dd35b1b7863daffb12a5b2018e2806fec033a7883114dc5f0b67d594ca93fe6f2c9894944c865dd2c51affb7da0f9a6473872 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-for-of@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a53b42dc93ab4b7d1ebd3c695b52be22b3d592f6a3dbdb3dc2fea2c8e0a7e1508fe919864c455cde552aec44ce7518625fccbb70c7063373ca228d884f4f49ea + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-function-name@npm:7.24.7" + dependencies: + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-function-name": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8eb1a67894a124910b5a67630bed4307757504381f39f0fb5cf82afc7ae8647dbc03b256d13865b73a749b9071b68e9fb8a28cef2369917b4299ebb93fd66146 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 88874d0b7a1ddea66c097fc0abb68801ffae194468aa44b828dde9a0e20ac5d8647943793de86092eabaa2911c96f67a6b373793d4bb9c932ef81b2711c06c2e + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3c075cc093a3dd9e294b8b7d6656e65f889e7ca2179ca27978dcd65b4dc4885ebbfb327408d7d8f483c55547deed00ba840956196f3ac8a3c3d2308a330a8c23 + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3367ce0be243704dc6fce23e86a592c4380f01998ee5dd9f94c54b1ef7b971ac6f8a002901eb51599ac6cbdc0d067af8d1a720224fca1c40fde8bb8aab804aac + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2720c57aa3bf70576146ba7d6ea03227f4611852122d76d237924f7b008dafc952e6ae61a19e5024f26c665f44384bbd378466f01b6bd1305b3564a3b7fb1a5d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f1dd0fb2f46c0f8f21076b8c7ccd5b33a85ce6dcb31518ea4c648d9a5bb2474cd4bd87c9b1b752e68591e24b022e334ba0d07631fef2b6b4d8a4b85cf3d581f5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bfda2a0297197ed342e2a02e5f9847a489a3ae40a4a7d7f00f4aeb8544a85e9006e0c5271c8f61f39bc97975ef2717b5594cf9486694377a53433162909d64c1 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.7" + dependencies: + "@babel/helper-hoist-variables": ^7.24.7 + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8af7a9db2929991d82cfdf41fb175dee344274d39b39122f8c35f24b5d682f98368e3d8f5130401298bd21412df21d416a7d8b33b59c334fae3d3c762118b1d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ff1c464892efe042952ba778468bda6131b196a2729615bdcc3f24cdc94014f016a4616ee5643c5845bade6ba698f386833e61056d7201314b13a7fd69fac88 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f1c6c7b5d60a86b6d7e4dd098798e1d393d55e993a0b57a73b53640c7a94985b601a96bdacee063f809a9a700bcea3a2ff18e98fa561554484ac56b761d774bd + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-new-target@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3cb94cd1076b270f768f91fdcf9dd2f6d487f8dbfff3df7ca8d07b915900b86d02769a35ba1407d16fe49499012c8f055e1741299e2c880798b953d942a8fa1b + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4a9221356401d87762afbc37a9e8e764afc2daf09c421117537820f8cfbed6876888372ad3a7bcfae2d45c95f026651f050ab4020b777be31d3ffb00908dbdd3 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 561b5f1d08b2c3f92ce849f092751558b5e6cfeb7eb55c79e7375c34dd9c3066dce5e630bb439affef6adcf202b6cbcaaa23870070276fa5bb429c8f5b8c7514 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-assign@npm:^7.18.6": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-assign@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e208760295511ba086131dd828903b2f1b12724a8bdbb6708b62534c17b3796d8ba4d38820d1b75a8861b3dbd8cccda7d17324c6796d42e2a4f33ae12dc68838 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" + dependencies: + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 169d257b9800c13e1feb4c37fb05dae84f702e58b342bb76e19e82e6692b7b5337c9923ee89e3916a97c0dd04a3375bdeca14f5e126f110bbacbeb46d1886ca2 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-super@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-replace-supers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f71e607a830ee50a22fa1a2686524d3339440cf9dea63032f6efbd865cfe4e35000e1e3f3492459e5c986f7c0c07dc36938bf3ce61fc9ba5f8ab732d0b64ab37 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7229f3a5a4facaab40f4fdfc7faabc157dc38a67d66bed7936599f4bc509e0bff636f847ac2aa45294881fce9cf8a0a460b85d2a465b7b977de9739fce9b18f6 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 877e7ce9097d475132c7f4d1244de50bb2fd37993dc4580c735f18f8cbc49282f6e77752821bcad5ca9d3528412d2c8a7ee0aa7ca71bb680ff82648e7a5fed25 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-parameters@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ab534b03ac2eff94bc79342b8f39a4584666f5305a6c63c1964afda0b1b004e6b861e49d1683548030defe248e3590d3ff6338ee0552cb90c064f7e1479968c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c151548e34909be2adcceb224d8fdd70bafa393bc1559a600906f3f647317575bf40db670470934a360e90ee8084ef36dffa34ec25d387d414afd841e74cf3fe + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8cee9473095305cc787bb653fd681719b49363281feabf677db8a552e8e41c94441408055d7e5fd5c7d41b315e634fa70b145ad0c7c54456216049df4ed57350 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9aeefc3aab6c6bf9d1fae1cf3a2d38c7d886fd3c6c81b7c608c477f5758aee2e7abf52f32724310fe861da61af934ee2508b78a5b5f234b9740c9134e1c14437 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-constant-elements@npm:^7.12.1": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 15a50645d5bd5139a65a57cc1ca8d731921bf4b3d453ed14150760a16891bdd8c0d6e870a85e3a580a00686415732fd74ff2c669a823e641a6124ac9489d8ed4 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a05bf83bf5e7b31f7a3b56da1bf8e2eeec76ef52ae44435ceff66363a1717fcda45b7b4b931a2c115982175f481fc3f2d0fab23f0a43c44e6d983afc396858f0 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 653d32ea5accb12d016e324ec5a584b60a8f39e60c6a5101194b73553fdefbfa3c3f06ec2410216ec2033fddae181a2f146a1d6ed59f075c488fc4570cad2e7b + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d72c33664e614031b8a03fc2d4cfd185e99efb1d681cbde4b0b4ab379864b31d83ee923509892f6d94b2c5893c309f0217d33bcda3e470ed42297f958138381 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c9afcb2259dd124a2de76f8a578589c18bd2f24dbcf78fe02b53c5cbc20c493c4618369604720e4e699b52be10ba0751b97140e1ef8bc8f0de0a935280e9d5b7 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-jsx": ^7.24.7 + "@babel/types": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ddfe494eb4b6ad567ebf0c029246df55d006512b1eb4beead73427b83af2e7e91b6d6e6954e275a92c81a5111d1e6e1fb4a62fdfc6f77c847cc7581650a7c452 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d859ada3cbeb829fa3d9978a29b2d36657fcc9dcc1e4c3c3af84ec5a044a8f8db26ada406baa309e5d4d512aca53d07c520d991b891ff943bec7d8f01aae0419 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 20c6c3fb6fc9f407829087316653388d311e8c1816b007609bb09aeef254092a7157adace8b3aaa8f34be752503717cb85c88a5fe482180a9b11bcbd676063be + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d5876954d5914d7270819479504f30c4bf5452a65c677f44e2dab2db50b3c9d4b47793c45dfad7abf4f377035dd79e4b3f554ae350df9f422201d370ce9f8dd + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.16.4": + version: 7.24.7 + resolution: "@babel/plugin-transform-runtime@npm:7.24.7" + dependencies: + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.1 + babel-plugin-polyfill-regenerator: ^0.6.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 98bcbbdc833d5c451189a6325f88820fe92973e119c59ce74bf28681cf4687c8280decb55b6c47f22e98c3973ae3a13521c4f51855a2b8577b230ecb1b4ca5b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7b524245814607188212b8eb86d8c850e5974203328455a30881b4a92c364b93353fae14bc2af5b614ef16300b75b8c1d3b8f3a08355985b4794a7feb240adc3 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-spread@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4c4254c8b9cceb1a8f975fa9b92257ddb08380a35c0a3721b8f4b9e13a3d82e403af2e0fba577b9f2452dd8f06bc3dea71cc53b1e2c6af595af5db52a13429d6 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 118fc7a7ebf7c20411b670c8a030535fdfe4a88bc5643bb625a584dbc4c8a468da46430a20e6bf78914246962b0f18f1b9d6a62561a7762c4f34a038a5a77179 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ad44e5826f5a98c1575832dbdbd033adfe683cdff195e178528ead62507564bf02f479b282976cfd3caebad8b06d5fd7349c1cdb880dec3c56daea4f1f179619 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6bd16b9347614d44187d8f8ee23ebd7be30dabf3632eed5ff0415f35a482e827de220527089eae9cdfb75e85aa72db0e141ebc2247c4b1187c1abcdacdc34895 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-typescript@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-typescript": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b367d1e3d6bdbe438878a76436fc6903e2b4fd7c31fa036d43865570d282679ec3f7c0306399851f2866a9b36686a0ea8c343df3750f70d427f1fe20ca54310 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4af0a193e1ddea6ff82b2b15cc2501b872728050bd625740b813c8062fec917d32d530ff6b41de56c15e7296becdf3336a58db81f5ca8e7c445c1306c52f3e01 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aae13350c50973f5802ca7906d022a6a0cc0e3aebac9122d0450bbd51e78252d4c2032ad69385e2759fcbdd3aac5d571bd7e26258907f51f8e1a51b53be626c2 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1cb4e70678906e431da0a05ac3f8350025fee290304ad7482d9cfaa1ca67b2e898654de537c9268efbdad5b80d3ebadf42b4a88ea84609bd8a4cce7b11b48afd + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 08a2844914f33dacd2ce1ab021ce8c1cc35dc6568521a746d8bf29c21571ee5be78787b454231c4bb3526cbbe280f1893223c82726cec5df2be5dae0a3b51837 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4": + version: 7.24.7 + resolution: "@babel/preset-env@npm:7.24.7" + dependencies: + "@babel/compat-data": ^7.24.7 + "@babel/helper-compilation-targets": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.7 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.7 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.7 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.24.7 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.24.7 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoped-functions": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.24.7 + "@babel/plugin-transform-class-properties": ^7.24.7 + "@babel/plugin-transform-class-static-block": ^7.24.7 + "@babel/plugin-transform-classes": ^7.24.7 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.7 + "@babel/plugin-transform-dotall-regex": ^7.24.7 + "@babel/plugin-transform-duplicate-keys": ^7.24.7 + "@babel/plugin-transform-dynamic-import": ^7.24.7 + "@babel/plugin-transform-exponentiation-operator": ^7.24.7 + "@babel/plugin-transform-export-namespace-from": ^7.24.7 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.24.7 + "@babel/plugin-transform-json-strings": ^7.24.7 + "@babel/plugin-transform-literals": ^7.24.7 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-member-expression-literals": ^7.24.7 + "@babel/plugin-transform-modules-amd": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.7 + "@babel/plugin-transform-modules-systemjs": ^7.24.7 + "@babel/plugin-transform-modules-umd": ^7.24.7 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-new-target": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-object-super": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.7 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-property-literals": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-reserved-words": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-template-literals": ^7.24.7 + "@babel/plugin-transform-typeof-symbol": ^7.24.7 + "@babel/plugin-transform-unicode-escapes": ^7.24.7 + "@babel/plugin-transform-unicode-property-regex": ^7.24.7 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/plugin-transform-unicode-sets-regex": ^7.24.7 + "@babel/preset-modules": 0.1.6-no-external-plugins + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.4 + babel-plugin-polyfill-regenerator: ^0.6.1 + core-js-compat: ^3.31.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1a82c883c7404359b19b7436d0aab05f8dd4e89e8b1f7de127cc65d0ff6a9b1c345211d9c038f5b6e8f93d26f091fa9c73812d82851026ab4ec93f5ed0f0d675 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + 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 + checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6": + version: 7.24.7 + resolution: "@babel/preset-react@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.24.7 + "@babel/plugin-transform-react-jsx-development": ^7.24.7 + "@babel/plugin-transform-react-pure-annotations": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 76d0365b6bca808be65c4ccb3f3384c0792084add15eb537f16b3e44184216b82fa37f945339b732ceee6f06e09ba1f39f75c45e69b9811ddcc479f05555ea9c + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.18.6": + version: 7.24.7 + resolution: "@babel/preset-typescript@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + "@babel/plugin-syntax-jsx": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 12929b24757f3bd6548103475f86478eda4c872bc7cefd920b29591eee8f4a4f350561d888e133d632d0c9402b8615fdcec9138e5127a6567dcb22f804ff207f + languageName: node + linkType: hard + +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.10.2": + version: 7.24.7 + resolution: "@babel/runtime-corejs3@npm:7.24.7" + dependencies: + core-js-pure: ^3.30.2 + regenerator-runtime: ^0.14.0 + checksum: fb5cae960a2d4cbcb2144059dfa9dbe5530d027fa210a5bc37c67c3014226c32390f221320066124872f3d6c4830af17a19da09c10ab114da9b6fa8ab4377cea + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.8, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.24.6, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.24.7 + resolution: "@babel/runtime@npm:7.24.7" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: d17f29eed6f848ac15cdf4202a910b741facfb0419a9d79e5c7fa37df6362fc3227f1cc2e248cc6db5e53ddffb4caa6686c488e6e80ce3d29c36a4e74c8734ea + languageName: node + linkType: hard + +"@babel/template@npm:^7.10.4, @babel/template@npm:^7.24.7, @babel/template@npm:^7.3.3": + version: 7.24.7 + resolution: "@babel/template@npm:7.24.7" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.7.0": + version: 7.24.7 + resolution: "@babel/traverse@npm:7.24.7" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.24.7 + "@babel/helper-environment-visitor": ^7.24.7 + "@babel/helper-function-name": ^7.24.7 + "@babel/helper-hoist-variables": ^7.24.7 + "@babel/helper-split-export-declaration": ^7.24.7 + "@babel/parser": ^7.24.7 + "@babel/types": ^7.24.7 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 7cd366afe9e7ee77e493779fdf24f67bf5595247289364f4689e29688572505eaeb886d7a8f20ebb9c29fc2de7d0895e4ff9e203e78e39ac67239724d45aa83b + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.8.3": + version: 7.24.7 + resolution: "@babel/types@npm:7.24.7" + dependencies: + "@babel/helper-string-parser": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + to-fast-properties: ^2.0.0 + checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@cnakazawa/watch@npm:^1.0.3": + version: 1.0.4 + resolution: "@cnakazawa/watch@npm:1.0.4" + dependencies: + exec-sh: ^0.3.2 + minimist: ^1.2.0 + bin: + watch: cli.js + checksum: 88f395ca0af2f3c0665b8ce7bb29e83647ec5d141e8735712aeeee4117081555436712966b6957aa1c461f6f826a4d23b0034e379c443a10e919f81c8748bf29 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@csstools/convert-colors@npm:^1.4.0": + version: 1.4.0 + resolution: "@csstools/convert-colors@npm:1.4.0" + checksum: 26069eeb845a506934c821c203feb97f5de634c5fbeb9978505a2271d6cfdb0ce400240fca9620a4ef2e68953928ea25aab92ea8454e0edf5cd074066d9ad57b + languageName: node + linkType: hard + +"@csstools/normalize.css@npm:^10.1.0": + version: 10.1.0 + resolution: "@csstools/normalize.css@npm:10.1.0" + checksum: c0adedd58e16b73b6588377ca505bfbc3f6273ab1ba1b55dd343aa5e4c0bf81bd74f051a1317a0d383bdcd59af665ba34db00b0c51c7dbc176c1a536175c2b03 + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/runtime": ^7.18.3 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/serialize": ^1.1.2 + 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 + checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" + dependencies: + "@emotion/memoize": ^0.8.1 + "@emotion/sheet": ^1.2.2 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + stylis: 4.2.0 + checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" + dependencies: + "@emotion/memoize": ^0.8.1 + checksum: 61f6b128ea62b9f76b47955057d5d86fcbe2a6989d2cd1e583daac592901a950475a37d049b9f7a7c6aa8758a33b408735db759fdedfd1f629df0f85ab60ea25 + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.10.4": + version: 11.11.4 + resolution: "@emotion/react@npm:11.11.4" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/cache": ^11.11.0 + "@emotion/serialize": ^1.1.3 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + hoist-non-react-statics: ^3.3.1 + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6abaa7a05c5e1db31bffca7ac79169f5456990022cbb3794e6903221536609a60420f2b4888dd3f84e9634a304e394130cb88dc32c243a1dedc263e50da329f8 + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": + version: 1.1.4 + resolution: "@emotion/serialize@npm:1.1.4" + dependencies: + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/unitless": ^0.8.1 + "@emotion/utils": ^1.2.1 + csstype: ^3.0.2 + checksum: 71b99f816a9c1d61a87c62cf4928da3894bb62213f3aff38b1ea9790b3368f084af98a3e5453b5055c2f36a7d70318d2fa9955b7b5676c2065b868062375df39 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.10.4": + version: 11.11.5 + resolution: "@emotion/styled@npm:11.11.5" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/is-prop-valid": ^1.2.2 + "@emotion/serialize": ^1.1.4 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: ad5fc42d00e8aa9597f6d9665986036d5ebe0e8f8155af6d95831c5e8fb2319fb837724e6c5cd59e5346f14c3263711b7ce7271d34688e974d1f32ffeecb37ba + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" + peerDependencies: + react: ">=16.8.0" + checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 + languageName: node + linkType: hard + +"@emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm64@npm:0.18.20" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-arm@npm:0.18.20" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/android-x64@npm:0.18.20" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-arm64@npm:0.18.20" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/darwin-x64@npm:0.18.20" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-arm64@npm:0.18.20" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/freebsd-x64@npm:0.18.20" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm64@npm:0.18.20" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-arm@npm:0.18.20" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ia32@npm:0.18.20" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.14.54": + version: 0.14.54 + resolution: "@esbuild/linux-loong64@npm:0.14.54" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-loong64@npm:0.18.20" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-mips64el@npm:0.18.20" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-ppc64@npm:0.18.20" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-riscv64@npm:0.18.20" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-s390x@npm:0.18.20" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/linux-x64@npm:0.18.20" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/netbsd-x64@npm:0.18.20" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/openbsd-x64@npm:0.18.20" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/sunos-x64@npm:0.18.20" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-arm64@npm:0.18.20" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-ia32@npm:0.18.20" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.18.20": + version: 0.18.20 + resolution: "@esbuild/win32-x64@npm:0.18.20" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0": + version: 4.10.1 + resolution: "@eslint-community/regexpp@npm:4.10.1" + checksum: 1e04bc366fb8152c9266258cd25e3fded102f1d212a9476928e3cb98c48be645df6d676728d1c596053992fb9134879fe0de23c9460035b342cceb22d3af1776 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^0.4.3": + version: 0.4.3 + resolution: "@eslint/eslintrc@npm:0.4.3" + dependencies: + ajv: ^6.12.4 + debug: ^4.1.1 + espree: ^7.3.0 + globals: ^13.9.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^3.13.1 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.0.0": + version: 1.6.2 + resolution: "@floating-ui/core@npm:1.6.2" + dependencies: + "@floating-ui/utils": ^0.2.0 + checksum: a161b2c8e14b6e185960ec19398f4b893ef3cd6620d535c348c1dc877fb4ffc9f701eb7156f6a30a89b7826093ba28ea223fc2fd1996c0b2464741208725ac8f + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.0.0": + version: 1.6.5 + resolution: "@floating-ui/dom@npm:1.6.5" + dependencies: + "@floating-ui/core": ^1.0.0 + "@floating-ui/utils": ^0.2.0 + checksum: 767295173cfc9024b2187b65d3c1a0c8d8596a1f827d57c86288e52edf91b41508b3679643e24e0ef9f522d86aab59ef97354b456b39be4f6f5159d819cc807d + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.8": + version: 2.1.0 + resolution: "@floating-ui/react-dom@npm:2.1.0" + dependencies: + "@floating-ui/dom": ^1.0.0 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 371ab3b14627026c637f4a2b8ca3dbfb7f67f1d51e74af5448b8e5bc76b8ccf30fed5e66d855f1ac1a6de28d79acc6dffcbcca4744a327a5e8d47f3515b0b52a + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.2.0": + version: 0.2.2 + resolution: "@floating-ui/utils@npm:0.2.2" + checksum: 3d8d46fd1b071c98e10d374e2dcf54d1eb9de0aa75ed2b994c9132ebf6f783f896f979053be71450bdb6d60021120cfc24d25a5c84ebb3db0994080e13d9762f + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.0.1": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + languageName: node + linkType: hard + +"@hapi/address@npm:2.x.x": + version: 2.1.4 + resolution: "@hapi/address@npm:2.1.4" + checksum: 10341c3b650746c79ac2c57118efb05d45d850b33aef82a6f2ba89419fdbf1b6d337c8b085cc9bc1af7a5fb18379c07edaf3be7584426f40bd370ed6de29e965 + languageName: node + linkType: hard + +"@hapi/bourne@npm:1.x.x": + version: 1.3.2 + resolution: "@hapi/bourne@npm:1.3.2" + checksum: 8403a2e8297fbb49a0e4fca30e874590d96ecaf7165740804037ff30625f3fdea6353d9f7f4422607eb069a3f471900a3037df34285a95135d15c6a8b10094b0 + languageName: node + linkType: hard + +"@hapi/hoek@npm:8.x.x, @hapi/hoek@npm:^8.3.0": + version: 8.5.1 + resolution: "@hapi/hoek@npm:8.5.1" + checksum: 8f8ce36be4f5e5d7a712072d4a028a4a95beec7a7da3a7a6e9a0c07d697f04c19b37d93751db352c314ea831f7e2120569a035dc6a351ed8c0444f1d3b275621 + languageName: node + linkType: hard + +"@hapi/joi@npm:^15.1.0": + version: 15.1.1 + resolution: "@hapi/joi@npm:15.1.1" + dependencies: + "@hapi/address": 2.x.x + "@hapi/bourne": 1.x.x + "@hapi/hoek": 8.x.x + "@hapi/topo": 3.x.x + checksum: 5bc3df9d43d4a53c41fd172d2958a4a846dbacbe2a2abe16830059109c436776d7be98144f14af9d328ebd107dbebafe55e00a9032a905aef45aadff988b54bf + languageName: node + linkType: hard + +"@hapi/topo@npm:3.x.x": + version: 3.1.6 + resolution: "@hapi/topo@npm:3.1.6" + dependencies: + "@hapi/hoek": ^8.3.0 + checksum: 34278bc13b4023d6d0d7c913605a254b2d728dc6489cd465269eebaa7d8d2d81cda3f2157398dca87d3cb9e1a8aa8a1158ce2564c71a8e289b807c144e3b4c1e + languageName: node + linkType: hard + +"@hello-pangea/dnd@npm:^16.6.0": + version: 16.6.0 + resolution: "@hello-pangea/dnd@npm:16.6.0" + dependencies: + "@babel/runtime": ^7.24.1 + css-box-model: ^1.2.1 + memoize-one: ^6.0.0 + raf-schd: ^4.0.3 + react-redux: ^8.1.3 + redux: ^4.2.1 + use-memo-one: ^1.1.3 + peerDependencies: + react: ^16.8.5 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 + checksum: 00dcf9c2a7632e56c13e4a38c888081f65cec6bac0640b975b6cd17f2afa8995e8df02735db6f17de3a7ade3779386fc8375d7cedc884f8704e2e6c2977ebcec + languageName: node + linkType: hard + +"@hookform/resolvers@npm:^2.9.7": + version: 2.9.11 + resolution: "@hookform/resolvers@npm:2.9.11" + peerDependencies: + react-hook-form: ^7.0.0 + checksum: 977ea038bb94457ac9f6c7ca65438ce8fcd0cf7643b9925d8bc4d66df6faa0f49ad642bee7362f86a4d3ff7ff53d18b7aea0597085993971cae00e86bf6eda73 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.5.0": + version: 0.5.0 + resolution: "@humanwhocodes/config-array@npm:0.5.0" + dependencies: + "@humanwhocodes/object-schema": ^1.2.0 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + 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" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + 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 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/console@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^26.6.2 + jest-util: ^26.6.2 + slash: ^3.0.0 + checksum: 69a9ca6ba357d7634fd537e3b87c64369865ffb59f57fe6661223088bd62273d0c1d660fefce3625a427f42a37d32590f6b291e1295ea6d6b7cb31ddae36a737 + languageName: node + linkType: hard + +"@jest/core@npm:^26.6.0, @jest/core@npm:^26.6.3": + version: 26.6.3 + resolution: "@jest/core@npm:26.6.3" + dependencies: + "@jest/console": ^26.6.2 + "@jest/reporters": ^26.6.2 + "@jest/test-result": ^26.6.2 + "@jest/transform": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.4 + jest-changed-files: ^26.6.2 + jest-config: ^26.6.3 + jest-haste-map: ^26.6.2 + jest-message-util: ^26.6.2 + jest-regex-util: ^26.0.0 + jest-resolve: ^26.6.2 + jest-resolve-dependencies: ^26.6.3 + jest-runner: ^26.6.3 + jest-runtime: ^26.6.3 + jest-snapshot: ^26.6.2 + jest-util: ^26.6.2 + jest-validate: ^26.6.2 + jest-watcher: ^26.6.2 + micromatch: ^4.0.2 + p-each-series: ^2.1.0 + rimraf: ^3.0.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + checksum: f52b26ffe9b923ed67b3ff30e170b3a434d4263990f78d96cd43acbd0aa8ad36aecad2f1822f376da3a80228714fd6b7f7acd51744133cfcd2780ba0e3da537b + languageName: node + linkType: hard + +"@jest/environment@npm:^26.6.0, @jest/environment@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/environment@npm:26.6.2" + dependencies: + "@jest/fake-timers": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + jest-mock: ^26.6.2 + checksum: 7748081b2a758161785aff161780b05084dccaff908c8ed82c04f7da5d5e5439e77b5eb667306d5c4e1422653c7a67ed2955f26704f48c65c404195e1e21780a + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/expect-utils@npm:28.1.3" + dependencies: + jest-get-type: ^28.0.2 + checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/fake-timers@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@sinonjs/fake-timers": ^6.0.1 + "@types/node": "*" + jest-message-util: ^26.6.2 + jest-mock: ^26.6.2 + jest-util: ^26.6.2 + checksum: c732658fac4014a424e6629495296c3b2e8697787518df34c74539ec139625e7141ad792b8a4d3c8392b47954ad01be9846b7c57cc8c631490969e7cafa84e6a + languageName: node + linkType: hard + +"@jest/globals@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/globals@npm:26.6.2" + dependencies: + "@jest/environment": ^26.6.2 + "@jest/types": ^26.6.2 + expect: ^26.6.2 + checksum: 49b28d0cc7e99898eeaf23e6899e3c9ee25a2a4831caa3eb930ec1722de2e92a0e8a6a6f649438fdd20ff0c0d5e522dd78cb719466a57f011a88d60419b903c5 + languageName: node + linkType: hard + +"@jest/reporters@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/reporters@npm:26.6.2" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^26.6.2 + "@jest/test-result": ^26.6.2 + "@jest/transform": ^26.6.2 + "@jest/types": ^26.6.2 + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.2 + graceful-fs: ^4.2.4 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^4.0.3 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.0.2 + jest-haste-map: ^26.6.2 + jest-resolve: ^26.6.2 + jest-util: ^26.6.2 + jest-worker: ^26.6.2 + node-notifier: ^8.0.0 + slash: ^3.0.0 + source-map: ^0.6.0 + string-length: ^4.0.1 + terminal-link: ^2.0.0 + v8-to-istanbul: ^7.0.0 + dependenciesMeta: + node-notifier: + optional: true + checksum: 53c7a697c562becb7682a9a6248ea553013bf7048c08ddce5bf9fb53b975fc9f799ca163f7494e0be6c4d3cf181c8bc392976268da52b7de8ce4470b971ed84e + languageName: node + linkType: hard + +"@jest/schemas@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/schemas@npm:28.1.3" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/source-map@npm:26.6.2" + dependencies: + callsites: ^3.0.0 + graceful-fs: ^4.2.4 + source-map: ^0.6.0 + checksum: b171cef442738887dda85527ab78229996db5946c6435ddb56d442c2851889ba493729a9de73100f1a31b9a31a91207b55bc75656ae7df9843d65078b925385e + languageName: node + linkType: hard + +"@jest/test-result@npm:^26.6.0, @jest/test-result@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/test-result@npm:26.6.2" + dependencies: + "@jest/console": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: dcb6175825231e9377e43546aed4edd6acc22f1788d5f099bbba36bb55b9115a92f760e88426c076bcdeff5a50d8f697327a920db0cd1fb339781fc3713fa8c7 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^26.6.3": + version: 26.6.3 + resolution: "@jest/test-sequencer@npm:26.6.3" + dependencies: + "@jest/test-result": ^26.6.2 + graceful-fs: ^4.2.4 + jest-haste-map: ^26.6.2 + jest-runner: ^26.6.3 + jest-runtime: ^26.6.3 + checksum: a3450b3d7057f74da1828bb7b3658f228a7c049dc4082c5c49b8bafbd8f69d102a8a99007b7ed5d43464712f7823f53fe3564fda17787f178c219cccf329a461 + languageName: node + linkType: hard + +"@jest/transform@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/transform@npm:26.6.2" + dependencies: + "@babel/core": ^7.1.0 + "@jest/types": ^26.6.2 + babel-plugin-istanbul: ^6.0.0 + chalk: ^4.0.0 + convert-source-map: ^1.4.0 + fast-json-stable-stringify: ^2.0.0 + graceful-fs: ^4.2.4 + jest-haste-map: ^26.6.2 + jest-regex-util: ^26.0.0 + jest-util: ^26.6.2 + micromatch: ^4.0.2 + pirates: ^4.0.1 + slash: ^3.0.0 + source-map: ^0.6.1 + write-file-atomic: ^3.0.0 + checksum: 31667b925a2f3b310d854495da0ab67be8f5da24df76ecfc51162e75f1140aed5d18069ba190cb5e0c7e492b04272c8c79076ddf5bbcff530ee80a16a02c4545 + languageName: node + linkType: hard + +"@jest/types@npm:^26.6.0, @jest/types@npm:^26.6.2": + version: 26.6.2 + resolution: "@jest/types@npm:26.6.2" + 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 + checksum: a0bd3d2f22f26ddb23f41fddf6e6a30bf4fab2ce79ec1cb6ce6fdfaf90a72e00f4c71da91ec61e13db3b10c41de22cf49d07c57ff2b59171d64b29f909c1d8d6 + languageName: node + linkType: hard + +"@jest/types@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/types@npm:28.1.3" + 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 + checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.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 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + +"@mswjs/cookies@npm:^0.2.2": + version: 0.2.2 + resolution: "@mswjs/cookies@npm:0.2.2" + dependencies: + "@types/set-cookie-parser": ^2.4.0 + set-cookie-parser: ^2.4.6 + checksum: 23b1ef56d57efcc1b44600076f531a1fb703855af342a31e01bad4adaf0dab51f6d3b5595a95a7988c3f612ba075835f9a06c52833205284d101eb9a51dd72b0 + languageName: node + linkType: hard + +"@mswjs/interceptors@npm:^0.17.2": + version: 0.17.10 + resolution: "@mswjs/interceptors@npm:0.17.10" + dependencies: + "@open-draft/until": ^1.0.3 + "@types/debug": ^4.1.7 + "@xmldom/xmldom": ^0.8.3 + debug: ^4.3.3 + headers-polyfill: 3.2.5 + outvariant: ^1.2.1 + strict-event-emitter: ^0.2.4 + web-encoding: ^1.1.5 + checksum: 0e6d32f399144b5cefe6fd7620f2776c83adc9bbbbccf2eb4ea347332be059f585136c44168c09b544c41cd3d686f88e43432e10192227a24fbb0c98a2f52dc8 + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-beta.40": + version: 5.0.0-beta.40 + resolution: "@mui/base@npm:5.0.0-beta.40" + 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 + 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 + checksum: 9c084ee67de372411a71af5eca9a5367db9f5bce57bb43973629c522760fe64fa2a43d2934dccd24d6dcbcd0ed399c5fc5c461226c86104f5767de1c9b8deba2 + languageName: node + linkType: hard + +"@mui/base@npm:^5.0.0-beta.22": + version: 5.0.0-dev.20240529-082515-213b5e33ab + resolution: "@mui/base@npm:5.0.0-dev.20240529-082515-213b5e33ab" + dependencies: + "@babel/runtime": ^7.24.6 + "@floating-ui/react-dom": ^2.0.8 + "@mui/types": ^7.2.14-dev.20240529-082515-213b5e33ab + "@mui/utils": ^6.0.0-dev.20240529-082515-213b5e33ab + "@popperjs/core": ^2.11.8 + clsx: ^2.1.1 + prop-types: ^15.8.1 + 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 + checksum: 7ca5d369c5f4dfa2bb36fe49d721f3dc28a6d067bd74492e8f4531671ff9debe33bade579d0cdcb7d5f899bfc5003c8f710b1f9422edd22f06d805dbc68c9f4e + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.15.19": + version: 5.15.19 + resolution: "@mui/core-downloads-tracker@npm:5.15.19" + checksum: 32dd442d72a4cf4abea0e5c0a325707c3f8aba16b7b40ed674da2c068ed10d686f1941240e527407d685e00ed12931c331d99265e1ed570630c856ffbe291c23 + languageName: node + linkType: hard + +"@mui/icons-material@npm:^5.10.3": + version: 5.15.19 + resolution: "@mui/icons-material@npm:5.15.19" + dependencies: + "@babel/runtime": ^7.23.9 + 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 + checksum: 365d9e93bef6cd19b7c8862ee926e2afd96c815df0c777670cca6e9c348f1fc0178ad0e060684c34f6953bb8a1a5f87648ff0a129ec23a9664964dbe0a8d2026 + languageName: node + linkType: hard + +"@mui/material@npm:^5.10.3": + version: 5.15.19 + resolution: "@mui/material@npm:5.15.19" + dependencies: + "@babel/runtime": ^7.23.9 + "@mui/base": 5.0.0-beta.40 + "@mui/core-downloads-tracker": ^5.15.19 + "@mui/system": ^5.15.15 + "@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 + 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 + checksum: 001095973c5d8581c97b05bca888d9aae51876684c9bcf7e1841635287c225ac9af94ca13a8baaa410f60b16b1ebb3003efa85a008d7338e23c12272cbf29ecb + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/private-theming@npm:5.15.14" + dependencies: + "@babel/runtime": ^7.23.9 + "@mui/utils": ^5.15.14 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 1b1ef54e8281c9b13fcc58f4c39682efc610946a68402283c19fcfbce8a7d7a231d61b536d6df9bf7a59a1426591bd403a453a59eb8efb9689437fb58554dc8c + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/styled-engine@npm:5.15.14" + dependencies: + "@babel/runtime": ^7.23.9 + "@emotion/cache": ^11.11.0 + csstype: ^3.1.3 + prop-types: ^15.8.1 + 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 + checksum: 23b45c859a4f0d2b10933d06a6082c0ff093f7b6d8d32a2bfe3a6e515fe46d7a38ca9e7150d45c025a2e98d963bae9a5991d131cf4748b62670075ef0fa321ed + languageName: node + linkType: hard + +"@mui/system@npm:^5.10.16, @mui/system@npm:^5.15.15": + version: 5.15.15 + resolution: "@mui/system@npm:5.15.15" + 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 + 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 + checksum: 9ca96d5f66b2a9d6471909cc98c671eea5ec0a6d58a7ec071073b9e5200b95c3f017f0ca5cc946abc7f83074bd11830ca18f5e30bc98e25cd6ca217bd1b3a26f + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.14, @mui/types@npm:^7.2.14-dev.20240529-082515-213b5e33ab": + version: 7.2.14 + resolution: "@mui/types@npm:7.2.14" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 615c9f9110933157f5d3c4fee69d6e70b98fc0d9ebc3b63079b6a1e23e6b389748687a25ab4ac15b56166fc228885da87c3929503b41fa322cfdee0f6d411206 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.10.3, @mui/utils@npm:^5.14.16, @mui/utils@npm:^5.15.14": + version: 5.15.14 + resolution: "@mui/utils@npm:5.15.14" + dependencies: + "@babel/runtime": ^7.23.9 + "@types/prop-types": ^15.7.11 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 36543ba7e3b65fb3219ed27e8f1455aff15b47a74c9b642c63e60774e22baa6492a196079e72bcfa5a570421dab32160398f892110bd444428bcf8b266b11893 + languageName: node + linkType: hard + +"@mui/utils@npm:^6.0.0-dev.20240529-082515-213b5e33ab": + version: 6.0.0-dev.20240529-082515-213b5e33ab + resolution: "@mui/utils@npm:6.0.0-dev.20240529-082515-213b5e33ab" + dependencies: + "@babel/runtime": ^7.24.6 + "@types/prop-types": ^15.7.12 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6869a031b5f725933e3f028c6efc7890a42601ec7b8498edc396fd9a93d8eeff8726b696ceaada1b89aa55a00a00d6371ebb5d144a3926e5429356edc806c8e0 + languageName: node + linkType: hard + +"@mui/x-data-grid@npm:^5.16.0": + version: 5.17.26 + resolution: "@mui/x-data-grid@npm:5.17.26" + dependencies: + "@babel/runtime": ^7.18.9 + "@mui/utils": ^5.10.3 + clsx: ^1.2.1 + prop-types: ^15.8.1 + reselect: ^4.1.6 + peerDependencies: + "@mui/material": ^5.4.1 + "@mui/system": ^5.4.1 + react: ^17.0.2 || ^18.0.0 + react-dom: ^17.0.2 || ^18.0.0 + checksum: 521d9c76c7275836dda0b7ace197553142a33de702cb172cfdfbaf505379faa7566da5340eb9bdf7980909e8034b1fe0eae2b7aca6a499667ecb76f4442dc9e7 + languageName: node + linkType: hard + +"@mui/x-date-pickers@npm:^6.19.4": + version: 6.20.1 + resolution: "@mui/x-date-pickers@npm:6.20.1" + dependencies: + "@babel/runtime": ^7.23.2 + "@mui/base": ^5.0.0-beta.22 + "@mui/utils": ^5.14.16 + "@types/react-transition-group": ^4.4.8 + clsx: ^2.0.0 + prop-types: ^15.8.1 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.9.0 + "@emotion/styled": ^11.8.1 + "@mui/material": ^5.8.6 + "@mui/system": ^5.8.0 + date-fns: ^2.25.0 || ^3.2.0 + date-fns-jalali: ^2.13.0-0 + dayjs: ^1.10.7 + luxon: ^3.0.2 + moment: ^2.29.4 + moment-hijri: ^2.1.2 + moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.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 + date-fns: + optional: true + date-fns-jalali: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + moment-hijri: + optional: true + moment-jalaali: + optional: true + checksum: bffd715cd2e5d6449627aa25fa58563deb632abce771f137b2bfa66a3806e82c0da63acfea8986bbf22112d0600dcd5268c99dcbf002960c21bad3c276fd5b2b + languageName: node + linkType: hard + +"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": + version: 5.1.1-v1 + resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" + dependencies: + eslint-scope: 5.1.1 + checksum: f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^1.0.0": + version: 1.1.1 + resolution: "@npmcli/fs@npm:1.1.1" + dependencies: + "@gar/promisify": ^1.0.1 + semver: ^7.3.5 + checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^1.0.1": + version: 1.1.2 + resolution: "@npmcli/move-file@npm:1.1.2" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + languageName: node + linkType: hard + +"@open-draft/until@npm:^1.0.3": + version: 1.0.3 + resolution: "@open-draft/until@npm:1.0.3" + checksum: 323e92ebef0150ed0f8caedc7d219b68cdc50784fa4eba0377eef93533d3f46514eb2400ced83dda8c51bddc3d2c7b8e9cf95e5ec85ab7f62dfc015d174f62f2 + languageName: node + linkType: hard + +"@pdf-lib/standard-fonts@npm:^1.0.0": + version: 1.0.0 + resolution: "@pdf-lib/standard-fonts@npm:1.0.0" + dependencies: + pako: ^1.0.6 + checksum: 7dc629b83862424a64b10c7ae34d789e0045a1a589f34a66a7f8e197f177cdb410969424e5d90f67b35c848db8b045cfa0a664941bdfb2d9b5413dbf44232981 + languageName: node + linkType: hard + +"@pdf-lib/upng@npm:^1.0.1": + version: 1.0.1 + resolution: "@pdf-lib/upng@npm:1.0.1" + dependencies: + pako: ^1.0.10 + checksum: acd8ac0974a3c2ed12c4e21d6340c4f77f8dde6727a74075b2faf69fb9dc4051b9e576479caf8e870f67d1bb37b953dfe50c4784892b466f01a29b55272d5e1f + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3": + version: 0.4.3 + resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.3" + dependencies: + ansi-html: ^0.0.7 + error-stack-parser: ^2.0.6 + html-entities: ^1.2.1 + native-url: ^0.2.6 + schema-utils: ^2.6.5 + source-map: ^0.7.3 + peerDependencies: + "@types/webpack": 4.x + react-refresh: ">=0.8.3 <0.10.0" + sockjs-client: ^1.4.0 + type-fest: ^0.13.1 + webpack: ">=4.43.0 <6.0.0" + webpack-dev-server: 3.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 + checksum: 36a7b0c63f0aabde856a2b43f3f3bfa7919920afa67b4fbcf7d4980b286c7c11e34ada13654d81bf30c3d3e2c12a5b9eef6c15e21a200003b8030809d3ddd6c6 + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 + languageName: node + linkType: hard + +"@prisma/client@npm:^5.7.1": + version: 5.15.0 + resolution: "@prisma/client@npm:5.15.0" + peerDependencies: + prisma: "*" + peerDependenciesMeta: + prisma: + optional: true + checksum: 1ecb1e6a0db6e38b5d510f4764cd3531c85302c7a7e514d4d78a60504b24d08434b3bb3831045d64f4b1fc220ce8618822a2222e4a332b489619cd6d17c13e8c + languageName: node + linkType: hard + +"@prisma/debug@npm:5.15.0": + version: 5.15.0 + resolution: "@prisma/debug@npm:5.15.0" + checksum: 3189f558c7f3550451d20aa5f347ff015e4e85e4edffd0adc7c9688c73d7433cf1bf5e0401d4dbaef79a0c66e9b18fcc0ecb50712d83a7b4722605ddaef44d12 + languageName: node + linkType: hard + +"@prisma/engines-version@npm:5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022": + version: 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 + resolution: "@prisma/engines-version@npm:5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022" + checksum: c669a0087da307228783739c7aa394c9077a7b171d36627b8599bc4cefbbd2733681b32ea42f88fc9b3dab64ad91ee2004ea693a3dcb91e7d82955d8ef4445ad + languageName: node + linkType: hard + +"@prisma/engines@npm:5.15.0": + version: 5.15.0 + resolution: "@prisma/engines@npm:5.15.0" + dependencies: + "@prisma/debug": 5.15.0 + "@prisma/engines-version": 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 + "@prisma/fetch-engine": 5.15.0 + "@prisma/get-platform": 5.15.0 + checksum: b386b4a34ce5dc6c6d9b556b02dc1a8e079a706ce1faf4445860a1abf7f934d84aa3c7c6de40495b89a7382594767bc3b1b3af5a6baede354a7493732655af60 + languageName: node + linkType: hard + +"@prisma/fetch-engine@npm:5.15.0": + version: 5.15.0 + resolution: "@prisma/fetch-engine@npm:5.15.0" + dependencies: + "@prisma/debug": 5.15.0 + "@prisma/engines-version": 5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022 + "@prisma/get-platform": 5.15.0 + checksum: 133c9578ec52b723d8664e0aef1de1340a5712ca4d9f65cb99b3393c795b8e858db0d16f02b9e7a3f798d9b81b73de443e9bff7d4509fe66cc9145ac972665b2 + languageName: node + linkType: hard + +"@prisma/get-platform@npm:5.15.0": + version: 5.15.0 + resolution: "@prisma/get-platform@npm:5.15.0" + dependencies: + "@prisma/debug": 5.15.0 + checksum: 18358b490e1fdbb44a9b4e8b77eec1b5e428c0d71460042663e6de1809c95afdfddfac4a80d6c6a1efecb4f086d7e32a881fe02e38aa8c7ca3590fbe9240dde5 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^7.1.1": + version: 7.1.3 + resolution: "@rollup/plugin-node-resolve@npm:7.1.3" + dependencies: + "@rollup/pluginutils": ^3.0.8 + "@types/resolve": 0.0.8 + builtin-modules: ^3.1.0 + is-module: ^1.0.0 + resolve: ^1.14.2 + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: e787c35f123652762d212b63f8cfaf577307434a935466397021c31b71d0d94357c6fa4e326b49bf44b959e22e41bc21f5648470eabec086566e7c36c5d041b1 + languageName: node + linkType: hard + +"@rollup/plugin-replace@npm:^2.3.1": + version: 2.4.2 + resolution: "@rollup/plugin-replace@npm:2.4.2" + dependencies: + "@rollup/pluginutils": ^3.1.0 + magic-string: ^0.25.7 + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + checksum: b2f1618ee5526d288e2f8ae328dcb326e20e8dc8bd1f60d3e14d6708a5832e4aa44811f7d493f4aed2deeadca86e3b6b0503cd39bf50cfb4b595bb9da027fad0 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.0.8, @rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": 0.0.39 + estree-walker: ^1.0.1 + picomatch: ^2.2.2 + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 8be16e27863c219edbb25a4e6ec2fe0e1e451d9e917b6a43cf2ae5bc025a6b8faaa40f82a6e53b66d0de37b58ff472c6c3d57a83037ae635041f8df959d6d9aa + languageName: node + linkType: hard + +"@rushstack/eslint-patch@npm:^1.1.0": + version: 1.10.3 + resolution: "@rushstack/eslint-patch@npm:1.10.3" + checksum: 1042779367ee102576a3c132f052d718d7111fee9f815758a72b21e8145620f7d3403c14fcde3b4cfa1cbc14b08b8519151ff77d0f353bf647f0a0a16eafdef5 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^1.7.0": + version: 1.8.6 + resolution: "@sinonjs/commons@npm:1.8.6" + dependencies: + type-detect: 4.0.8 + checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^6.0.1": + version: 6.0.1 + resolution: "@sinonjs/fake-timers@npm:6.0.1" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 + languageName: node + linkType: hard + +"@slack/logger@npm:^3.0.0": + version: 3.0.0 + resolution: "@slack/logger@npm:3.0.0" + dependencies: + "@types/node": ">=12.0.0" + checksum: 6512d0e9e4be47ea465705ab9b6e6901f36fa981da0d4a657fde649d452b567b351002049b5ee0a22569b5119bf6c2f61befd5b8022d878addb7a99c91b03389 + languageName: node + linkType: hard + +"@slack/types@npm:^2.11.0": + version: 2.12.0 + resolution: "@slack/types@npm:2.12.0" + checksum: 490e92f93163aac46bb0e1df8d94e577c61b47efe72e6e4981b34145acbff84cd83fdab067dd72377944e46f07410407bb460f8525ee0990d5743b40704720bc + languageName: node + linkType: hard + +"@slack/web-api@npm:^6.7.2": + version: 6.12.0 + resolution: "@slack/web-api@npm:6.12.0" + dependencies: + "@slack/logger": ^3.0.0 + "@slack/types": ^2.11.0 + "@types/is-stream": ^1.1.0 + "@types/node": ">=12.0.0" + axios: ^1.6.5 + eventemitter3: ^3.1.0 + form-data: ^2.5.0 + is-electron: 2.2.2 + is-stream: ^1.1.0 + p-queue: ^6.6.1 + p-retry: ^4.0.0 + checksum: d0cc16a2981167f3780a07542b4c88d31fc836a743de04e52e9f8fe8a82281781103f8821b3db5aa9de55471b6e550f044e767dbf482045865bd713b90fddd65 + languageName: node + linkType: hard + +"@surma/rollup-plugin-off-main-thread@npm:^1.1.1": + version: 1.4.2 + resolution: "@surma/rollup-plugin-off-main-thread@npm:1.4.2" + dependencies: + ejs: ^2.6.1 + magic-string: ^0.25.0 + checksum: da721792036a0e1253911f9b5280e6cb236024d7d2255bde3b6e87587c0ea8f46404224c8c032a27ee11ab3244eda752587fb37ec78c2e64eb53e10557373102 + languageName: node + linkType: hard + +"@svgr/babel-plugin-add-jsx-attribute@npm:^5.4.0": + version: 5.4.0 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:5.4.0" + checksum: 1c538cf312b486598c6aea17f9b72d7fc308eb5dd32effd804630206a185493b8a828ff980ceb29d57d8319c085614c7cea967be709c71ae77702a4c30037011 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-attribute@npm:^5.4.0": + version: 5.4.0 + resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:5.4.0" + checksum: ad2231bfcb14daa944201df66236c222cde05a07c4cffaecab1d36d33f606b6caf17bda21844fc435780c1a27195e49beb8397536fe5e7545dfffcfbbcecb7f8 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^5.0.1": + version: 5.0.1 + resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:5.0.1" + checksum: 175c8f13ddcb0744f7c3910ebed3799cfb961a75bff130e1ed2071c87ca8b8df8964825c988e511b2e3c5dbf48ad3d4fbbb6989edc53294253df40cf2a24375e + languageName: node + linkType: hard + +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^5.0.1": + version: 5.0.1 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:5.0.1" + checksum: 68f4e2a5b95eca44e22fce485dc2ddd10adabe2b38f6db3ef9071b35e84bf379685f7acab6c05b7a82f722328c02f6424f8252c6dd5c2c4ed2f00104072b1dfe + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-dynamic-title@npm:^5.4.0": + version: 5.4.0 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:5.4.0" + checksum: c46feb52454acea32031d1d881a81334f2e5f838ed25a2d9014acb5e9541d404405911e86dbee8bee9f1e43c9e07118123a07dc297962dbed0c4c5a86bdc4be9 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-em-dimensions@npm:^5.4.0": + version: 5.4.0 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:5.4.0" + checksum: 0d19b26147bbba932bd973258dab4a80a7ea6b9d674713186f0e10fa21a9e3aa4327326b2bf1892e8051712bce0ea30561eb187ca27bb241d33c350cea51ac88 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-react-native-svg@npm:^5.4.0": + version: 5.4.0 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:5.4.0" + checksum: 8ac5dc9fb2dee24addc74dbcb169860c95a69247606f986eabb0618fb300dd08e8f220891b758e62c051428ba04d8dd50f2c2bf877e15fa190e6d384d1ccd2ad + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-svg-component@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:5.5.0" + checksum: 94c3fed490deb8544af4ea32a5d78a840334cdcc8a5a33fe8ea9f1c220a4d714d57c9e10934492de99b7e1acc17963b1749a49927e27b1e839a4dc3c893605c7 + languageName: node + linkType: hard + +"@svgr/babel-preset@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/babel-preset@npm:5.5.0" + 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 + checksum: 5d396c4499c9ff2df9db6d08a160d10386b9f459cb9c2bb5ee183ab03b2f46c8ef3c9a070f1eee93f4e4433a5f00704e7632b1386078eb697ad8a2b38edb8522 + languageName: node + linkType: hard + +"@svgr/core@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/core@npm:5.5.0" + dependencies: + "@svgr/plugin-jsx": ^5.5.0 + camelcase: ^6.2.0 + cosmiconfig: ^7.0.0 + checksum: 39b230151e30b9ca8551d10674e50efb821d1a49ce10969b09587af130780eba581baa1e321b0922f48331943096f05590aa6ae92d88d011d58093a89dd34158 + languageName: node + linkType: hard + +"@svgr/hast-util-to-babel-ast@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/hast-util-to-babel-ast@npm:5.5.0" + dependencies: + "@babel/types": ^7.12.6 + checksum: a03c1c7ab92b1a6dbd7671b0b78df4c07e8d808ff092671554a78752ec0c0425c03b6c82569a5f33903d191c73379eedf631f23aeb30b7a70185f5f2fc67fae6 + languageName: node + linkType: hard + +"@svgr/plugin-jsx@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/plugin-jsx@npm:5.5.0" + 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 + checksum: e053f8dd6bfcd72377b432dd5b1db3c89d503d29839639a87f85b597a680d0b69e33a4db376f5a1074a89615f7157cd36f63f94bdb4083a0fd5bbe918c7fcb9b + languageName: node + linkType: hard + +"@svgr/plugin-svgo@npm:^5.5.0": + version: 5.5.0 + resolution: "@svgr/plugin-svgo@npm:5.5.0" + dependencies: + cosmiconfig: ^7.0.0 + deepmerge: ^4.2.2 + svgo: ^1.2.2 + checksum: bef5d09581349afdf654209f82199670649cc749b81ff5f310ce4a3bbad749cde877c9b1a711dd9ced51224e2b5b5a720d242bdf183fa0f83e08e8d5e069b0b6 + languageName: node + linkType: hard + +"@svgr/webpack@npm:5.5.0": + version: 5.5.0 + resolution: "@svgr/webpack@npm:5.5.0" + 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 + checksum: 540391bd63791625d26d6b5e0dd3c716ef51176bfba53bf0979a1ac4781afd2672f4bef2d76cf3d9cdc8e9ee61bda6863ed405a237b10406633ede4cd524f1cc + languageName: node + linkType: hard + +"@testing-library/dom@npm:^7.28.1": + version: 7.31.2 + resolution: "@testing-library/dom@npm:7.31.2" + 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 + checksum: 54fbedd1ecdfe1d47be2e592b98d18b2ab9d7e731f57231caf9b152593fe7329fe5ebe219e0e5d1e0df5b1ab803121cb8acd8b73bd1fb292bfdc2c55663eb01d + languageName: node + linkType: hard + +"@testing-library/dom@npm:^8.19.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^5.11.9": + version: 5.17.0 + resolution: "@testing-library/jest-dom@npm:5.17.0" + 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 + checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b + languageName: node + linkType: hard + +"@testing-library/react-hooks@npm:^8.0.1": + version: 8.0.1 + resolution: "@testing-library/react-hooks@npm:8.0.1" + dependencies: + "@babel/runtime": ^7.12.5 + react-error-boundary: ^3.1.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + checksum: 7fe44352e920deb5cb1876f80d64e48615232072c9d5382f1e0284b3aab46bb1c659a040b774c45cdf084a5257b8fe463f7e08695ad8480d8a15635d4d3d1f6d + languageName: node + linkType: hard + +"@testing-library/react@npm:^11.2.5": + version: 11.2.7 + resolution: "@testing-library/react@npm:11.2.7" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^7.28.1 + peerDependencies: + react: "*" + react-dom: "*" + checksum: 64e07cb96e40dbdbd3c46a09c47bed14446b30efafaa65a5d4fed5a7553878990cda108578f2b114422a775f31c635d51fd50b752f6163ddd6b8474e0e5fc2ce + languageName: node + linkType: hard + +"@testing-library/user-event@npm:^12.6.3": + version: 12.8.3 + resolution: "@testing-library/user-event@npm:12.8.3" + dependencies: + "@babel/runtime": ^7.12.5 + peerDependencies: + "@testing-library/dom": ">=7.21.4" + checksum: c9fb5ee07cbe79ddf32d81e1a353e556d02a1f1619456ccfad6abcdf1b7db400fdc9d7a8e0be3994f456e7135a0dfb7fa10b29fb98a0f5fc417b99fce0ce8166 + languageName: node + linkType: hard + +"@tootallnate/once@npm:1": + version: 1.1.2 + resolution: "@tootallnate/once@npm:1.1.2" + checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/aria-query@npm:^4.2.0": + version: 4.2.2 + resolution: "@types/aria-query@npm:4.2.2" + checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 + languageName: node + linkType: hard + +"@types/aria-query@npm:^5.0.1": + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.20.5": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": ^7.0.0 + checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": ^7.20.7 + checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 + languageName: node + linkType: hard + +"@types/chai-subset@npm:^1.3.3": + version: 1.3.5 + resolution: "@types/chai-subset@npm:1.3.5" + dependencies: + "@types/chai": "*" + checksum: 715c46d3e90f87482c2769389d560456bb257b225716ff44c275c231bdb62c8a30629f355f412bac0ecab07ebc036c1806d9ed9dde9792254f8ef4f07f76033b + languageName: node + linkType: hard + +"@types/chai@npm:*, @types/chai@npm:^4.3.5": + version: 4.3.16 + resolution: "@types/chai@npm:4.3.16" + checksum: bb5f52d1b70534ed8b4bf74bd248add003ffe1156303802ea367331607c06b494da885ffbc2b674a66b4f90c9ee88759790a5f243879f6759f124f22328f5e95 + languageName: node + linkType: hard + +"@types/concat-stream@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/concat-stream@npm:2.0.3" + dependencies: + "@types/node": "*" + checksum: e829fde246528665b31a9b8f64c369ffc66aa2a1337d2bab1d38f4d4145701480af7c67e877dd09a7fa97fcbaa0f3baa816ed1b3e71c3ad430930acd37f4eb1f + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "*" + checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 + languageName: node + linkType: hard + +"@types/cookie-parser@npm:^1.4.3": + version: 1.4.7 + resolution: "@types/cookie-parser@npm:1.4.7" + dependencies: + "@types/express": "*" + checksum: 7b87c59420598e686a57e240be6e0db53967c3c8814be9326bf86609ee2fc39c4b3b9f2263e1deba43526090121d1df88684b64c19f7b494a80a4437caf3d40b + languageName: node + linkType: hard + +"@types/cookie@npm:^0.4.1": + version: 0.4.1 + resolution: "@types/cookie@npm:0.4.1" + checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 + languageName: node + linkType: hard + +"@types/cookiejar@npm:^2.1.5": + version: 2.1.5 + resolution: "@types/cookiejar@npm:2.1.5" + checksum: 04d5990e87b6387532d15a87d9ec9b2eb783039291193863751dcfd7fc723a3b3aa30ce4c06b03975cba58632e933772f1ff031af23eaa3ac7f94e71afa6e073 + languageName: node + linkType: hard + +"@types/cors@npm:^2.8.12": + version: 2.8.17 + resolution: "@types/cors@npm:2.8.17" + dependencies: + "@types/node": "*" + checksum: 469bd85e29a35977099a3745c78e489916011169a664e97c4c3d6538143b0a16e4cc72b05b407dc008df3892ed7bf595f9b7c0f1f4680e169565ee9d64966bde + languageName: node + linkType: hard + +"@types/debug@npm:^4.1.7": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + +"@types/eslint@npm:^7.29.0": + version: 7.29.0 + resolution: "@types/eslint@npm:7.29.0" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf + languageName: node + linkType: hard + +"@types/estree@npm:*": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a + languageName: node + linkType: hard + +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 412fb5b9868f2c418126451821833414189b75cc6bf84361156feed733e3d92ec220b9d74a89e52722e03d5e241b2932732711b7497374a404fad49087adc248 + languageName: node + linkType: hard + +"@types/express-jwt@npm:^6.0.4": + version: 6.0.4 + resolution: "@types/express-jwt@npm:6.0.4" + dependencies: + "@types/express": "*" + "@types/express-unless": "*" + checksum: bf4b80b10fbeb9d45491e605c79d4b2925823af76929ca833a208c13f73be45a7ab639e76054d0185457f97fef10b0232833dcc3f44dfcf14baabae26801420e + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.19.3 + resolution: "@types/express-serve-static-core@npm:4.19.3" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: fff38a7f43baeb6a62380682d39846c9d92047e0dce1737d76ebd944528619abc18addc4f0548bf43dbf4514090a1bd5140ba36695024656f941a87424b8ed7d + languageName: node + linkType: hard + +"@types/express-unless@npm:*": + version: 0.5.3 + resolution: "@types/express-unless@npm:0.5.3" + dependencies: + "@types/express": "*" + checksum: 5c76425ff7490123f3c072c942ae6d18bb3cbf91d5d9857c52fca1f9a3d11b72413dbfb3e4af28fdd7f745d1a443f90daadbcf7daff714d608eef10bd7c8763c + languageName: node + linkType: hard + +"@types/express@npm:*, @types/express@npm:^4.17.6": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 + languageName: node + linkType: hard + +"@types/file-saver@npm:^2.0.5": + version: 2.0.7 + resolution: "@types/file-saver@npm:2.0.7" + checksum: c3d1cd80eab1214767922cabac97681f3fb688e82b74890450d70deaca49537949bbc96d80d363d91e8f0a4752c7164909cc8902d9721c5c4809baafc42a3801 + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.1": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" + dependencies: + "@types/minimatch": "*" + "@types/node": "*" + checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.2": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + +"@types/hast@npm:^2.0.0": + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" + dependencies: + "@types/unist": ^2 + checksum: 41531b7fbf590b02452996fc63272479c20a07269e370bd6514982cbcd1819b4b84d3ea620f2410d1b9541a23d08ce2eeb0a592145d05e00e249c3d56700d460 + languageName: node + linkType: hard + +"@types/history@npm:^4.7.11": + version: 4.7.11 + resolution: "@types/history@npm:4.7.11" + checksum: c92e2ba407dcab0581a9afdf98f533aa41b61a71133420a6d92b1ca9839f741ab1f9395b17454ba5b88cb86020b70b22d74a1950ccfbdfd9beeaa5459fdc3464 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.5 + resolution: "@types/hoist-non-react-statics@npm:3.3.5" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: b645b062a20cce6ab1245ada8274051d8e2e0b2ee5c6bd58215281d0ec6dae2f26631af4e2e7c8abe238cdcee73fcaededc429eef569e70908f82d0cc0ea31d7 + languageName: node + linkType: hard + +"@types/html-minifier-terser@npm:^5.0.0": + version: 5.1.2 + resolution: "@types/html-minifier-terser@npm:5.1.2" + checksum: 4bca779c44d2aebe4cc4036c5db370abe7466249038e9c5996cb3c192debeff1c75b7a2ab78e5fd2a014ad24ebf0f357f9a174a4298540dc1e1317d43aa69cfa + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 + languageName: node + linkType: hard + +"@types/is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "@types/is-stream@npm:1.1.0" + dependencies: + "@types/node": "*" + checksum: 23fcb06cd8adc0124d4c44071bd4b447c41f5e4c2eccb6166789c7fc0992b566e2e8b628a3800ff4472b686d9085adbec203925068bf72e350e085650e83adec + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + +"@types/jest@npm:*": + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c + languageName: node + linkType: hard + +"@types/jest@npm:^28.1.6": + version: 28.1.8 + resolution: "@types/jest@npm:28.1.8" + dependencies: + expect: ^28.0.0 + pretty-format: ^28.0.0 + checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 + languageName: node + linkType: hard + +"@types/js-levenshtein@npm:^1.1.1": + version: 1.1.3 + resolution: "@types/js-levenshtein@npm:1.1.3" + checksum: eb338696da976925ea8448a42d775d7615a14323dceeb08909f187d0b3d3b4c1f67a1c36ef586b1c2318b70ab141bba8fc58311ba1c816711704605aec09db8b + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/jsonwebtoken@npm:^8.5.8, @types/jsonwebtoken@npm:^8.5.9": + version: 8.5.9 + resolution: "@types/jsonwebtoken@npm:8.5.9" + dependencies: + "@types/node": "*" + checksum: 33815ab02d1371b423118316b7706d2f2ec03eeee5e1494be72da50425d2384e5e0a09ea193f7a5ab4b4f6a9c5847147305f50e965f3d927a95bdf8adb471b2a + languageName: node + linkType: hard + +"@types/lodash@npm:^4.14.175": + version: 4.17.4 + resolution: "@types/lodash@npm:4.17.4" + checksum: 268e652fd52d49189f155bc89b49bd4535aa44f0b6b0ed9ce7e50318307bda58147c49539d2047f39ca37cf5b5ea38dfb801d0dbcdbc8b019c95c1afc346b05a + languageName: node + linkType: hard + +"@types/mdast@npm:^3.0.0": + version: 3.0.15 + resolution: "@types/mdast@npm:3.0.15" + dependencies: + "@types/unist": ^2 + checksum: af85042a4e3af3f879bde4059fa9e76c71cb552dffc896cdcc6cf9dc1fd38e37035c2dbd6245cfa6535b433f1f0478f5549696234ccace47a64055a10c656530 + languageName: node + linkType: hard + +"@types/methods@npm:^1.1.4": + version: 1.1.4 + resolution: "@types/methods@npm:1.1.4" + checksum: ad2a7178486f2fd167750f3eb920ab032a947ff2e26f55c86670a6038632d790b46f52e5b6ead5823f1e53fc68028f1e9ddd15cfead7903e04517c88debd72b1 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 + languageName: node + linkType: hard + +"@types/minimatch@npm:*": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + languageName: node + linkType: hard + +"@types/multer@npm:^1.4.7": + version: 1.4.11 + resolution: "@types/multer@npm:1.4.11" + dependencies: + "@types/express": "*" + checksum: 3d80b2acdfbc9f3e9027d4467e948925810b67e5622a3017f42f58a3598d34b25376890801e55d0c03973ccc34573abf5218af334e8292ec455832f4ade3e5f5 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=12.0.0": + version: 20.14.2 + resolution: "@types/node@npm:20.14.2" + dependencies: + undici-types: ~5.26.4 + checksum: 265362479b8f3b50fcd1e3f9e9af6121feb01a478dff0335ae67cccc3babfe45d0f12209d3d350595eebd7e67471762697b877c380513f8e5d27a238fa50c805 + languageName: node + linkType: hard + +"@types/node@npm:18.17.1": + version: 18.17.1 + resolution: "@types/node@npm:18.17.1" + checksum: 56201bda9a2d05d68602df63b4e67b0545ac8c6d0280bd5fb31701350a978a577a027501fbf49db99bf177f2242ebd1244896bfd35e89042d5bd7dfebff28d4e + languageName: node + linkType: hard + +"@types/nodemailer@npm:^6.4.0": + version: 6.4.15 + resolution: "@types/nodemailer@npm:6.4.15" + dependencies: + "@types/node": "*" + checksum: f6f9a2f8a669703ecc3ca6359c12345b16f6b2e5691b93c406b9af7de639c02092ec00133526e6fecd8c60d884890a7cd0f967d8e64bedab46d5c3d8be0882d7 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 + languageName: node + linkType: hard + +"@types/prettier@npm:^2.0.0": + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 + languageName: node + linkType: hard + +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11, @types/prop-types@npm:^15.7.12": + version: 15.7.12 + resolution: "@types/prop-types@npm:15.7.12" + checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe + languageName: node + linkType: hard + +"@types/q@npm:^1.5.1": + version: 1.5.8 + resolution: "@types/q@npm:1.5.8" + checksum: ff3b7f09c2746d068dee8d39501f09dbf71728c4facdc9cb0e266ea6615ad97e61267c0606ab3da88d11ef1609ce904cef45a9c56b2b397f742388d7f15bb740 + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.15 + resolution: "@types/qs@npm:6.9.15" + checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a + languageName: node + linkType: hard + +"@types/react-dom@npm:17.0.1": + version: 17.0.1 + resolution: "@types/react-dom@npm:17.0.1" + dependencies: + "@types/react": "*" + checksum: bbe68efb2936053562785c9495d5cae9ea1fa2b02c93b68458f8ba71517a5f2afcda2629d8a2c073476e4909cf11ca99ad746d9cd5383fbe7c1d61209209870d + languageName: node + linkType: hard + +"@types/react-helmet@npm:^6.1.6": + version: 6.1.11 + resolution: "@types/react-helmet@npm:6.1.11" + dependencies: + "@types/react": "*" + checksum: e329d8ad82c365fec7dd7d91c8b6d167faac30cef0d9f1e27d7e895172a0ebfa65829fb4acabbe79283b01cbbe5840a845caeb50148ceef6f3fad42b3c2c4bdc + languageName: node + linkType: hard + +"@types/react-query@npm:^1.2.9": + version: 1.2.9 + resolution: "@types/react-query@npm:1.2.9" + dependencies: + react-query: "*" + checksum: 9bddd0e810f3453276c8145450b294674c14f69daba75da9fdc953f0a6329ab533b64db6fe212267dc79ba61485f6eb673a9c2ad119c072b2ecae59c2bb593e4 + languageName: node + linkType: hard + +"@types/react-router-dom@npm:^5.1.7": + version: 5.3.3 + resolution: "@types/react-router-dom@npm:5.3.3" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + "@types/react-router": "*" + checksum: 28c4ea48909803c414bf5a08502acbb8ba414669b4b43bb51297c05fe5addc4df0b8fd00e0a9d1e3535ec4073ef38aaafac2c4a2b95b787167d113bc059beff3 + languageName: node + linkType: hard + +"@types/react-router@npm:*": + version: 5.1.20 + resolution: "@types/react-router@npm:5.1.20" + dependencies: + "@types/history": ^4.7.11 + "@types/react": "*" + checksum: 128764143473a5e9457ddc715436b5d49814b1c214dde48939b9bef23f0e77f52ffcdfa97eb8d3cc27e2c229869c0cdd90f637d887b62f2c9f065a87d6425419 + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.4.10, @types/react-transition-group@npm:^4.4.8": + version: 4.4.10 + resolution: "@types/react-transition-group@npm:4.4.10" + dependencies: + "@types/react": "*" + checksum: fe2ea11f70251e9f79f368e198c18fd469b1d4f1e1d44e4365845b44e15974b0ec925100036f449b023b0ca3480a82725c5f0a73040e282ad32ec7b0def9b57c + languageName: node + linkType: hard + +"@types/react@npm:17.0.1": + version: 17.0.1 + resolution: "@types/react@npm:17.0.1" + dependencies: + "@types/prop-types": "*" + csstype: ^3.0.2 + checksum: 592d7a33898550f2139e69c1bb21397ab6f351f406623397cd7f9a4aea20140c779dd23f2934789d40b0bd87995a86c766434ba07bdd1de9533045d0f3596b68 + languageName: node + linkType: hard + +"@types/resolve@npm:0.0.8": + version: 0.0.8 + resolution: "@types/resolve@npm:0.0.8" + dependencies: + "@types/node": "*" + checksum: f241bb773ab14b14500623ac3b57c52006ce32b20426b6d8bf2fe5fdc0344f42c77ac0f94ff57b443ae1d320a1a86c62b4e47239f0321699404402fbeb24bad6 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: cf4db48251bbb03cd6452b4de6e8e09e2d75390a92fd798eca4a803df06444adc94ed050246c94c7ed46fb97be1f63607f0e1f13c3ce83d71788b3e08640e5e0 + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.7 + resolution: "@types/serve-static@npm:1.15.7" + dependencies: + "@types/http-errors": "*" + "@types/node": "*" + "@types/send": "*" + checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6 + languageName: node + linkType: hard + +"@types/set-cookie-parser@npm:^2.4.0": + version: 2.4.7 + resolution: "@types/set-cookie-parser@npm:2.4.7" + dependencies: + "@types/node": "*" + checksum: 01ef803e24b8cd33e49fe7463f32a562da45ce3f960381b90cccf67ea71b1830d2273df044255b040069c0a92ea25b4bf21c39ac2f85b50c01818ded5e918554 + languageName: node + linkType: hard + +"@types/source-list-map@npm:*": + version: 0.1.6 + resolution: "@types/source-list-map@npm:0.1.6" + checksum: 9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/superagent@npm:*": + version: 8.1.7 + resolution: "@types/superagent@npm:8.1.7" + dependencies: + "@types/cookiejar": ^2.1.5 + "@types/methods": ^1.1.4 + "@types/node": "*" + checksum: 8f80c72bd1cc9a9295a2e1e8a7a8de9bef09348db63f33cc4f61e457917662064ab86ce013f28249c34d7239d9a4415c1a597dc70d4391b2ad83b338a63a3b73 + languageName: node + linkType: hard + +"@types/supertest@npm:^2.0.12": + version: 2.0.16 + resolution: "@types/supertest@npm:2.0.16" + dependencies: + "@types/superagent": "*" + checksum: 2fc998ea698e0467cdbe3bea0ebce2027ea3a45a13e51a6cecb0435f44b486faecf99c34d8702d2d7fe033e6e09fdd2b374af52ecc8d0c69a1deec66b8c0dd52 + languageName: node + linkType: hard + +"@types/tapable@npm:^1, @types/tapable@npm:^1.0.5": + version: 1.0.12 + resolution: "@types/tapable@npm:1.0.12" + checksum: 5312fbc01e0135bd11b44cfea2bf29943807cd9675c10bbed13873ad0e73f656993fb88bb6ceaf05b12a55c570e6acc0267faf59e9c4d2f032fc833bafcf0597 + languageName: node + linkType: hard + +"@types/testing-library__jest-dom@npm:^5.9.1": + version: 5.14.9 + resolution: "@types/testing-library__jest-dom@npm:5.14.9" + dependencies: + "@types/jest": "*" + checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 + languageName: node + linkType: hard + +"@types/uglify-js@npm:*": + version: 3.17.5 + resolution: "@types/uglify-js@npm:3.17.5" + dependencies: + source-map: ^0.6.1 + checksum: ffed5d63637c6ea5c155469121ee40d9b652e677e6d9eb07b72ff72bb4029ffad19049a0af6e91a5021bad6c481cff2572fbf6367e319c6885cf1537c20d861d + languageName: node + linkType: hard + +"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": + version: 2.0.10 + resolution: "@types/unist@npm:2.0.10" + checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + +"@types/webpack-sources@npm:*": + version: 3.2.3 + resolution: "@types/webpack-sources@npm:3.2.3" + dependencies: + "@types/node": "*" + "@types/source-list-map": "*" + source-map: ^0.7.3 + checksum: 7b557f242efaa10e4e3e18cc4171a0c98e22898570caefdd4f7b076fe8534b5abfac92c953c6604658dcb7218507f970230352511840fe9fdea31a9af3b9a906 + languageName: node + linkType: hard + +"@types/webpack@npm:^4.41.8": + version: 4.41.38 + resolution: "@types/webpack@npm:4.41.38" + dependencies: + "@types/node": "*" + "@types/tapable": ^1 + "@types/uglify-js": "*" + "@types/webpack-sources": "*" + anymatch: ^3.0.0 + source-map: ^0.6.0 + checksum: d3de65993ef3a7621f75548c2f6f509e8f87f586032238e999743d6067030655c67e38ec5f8b32e04fa5276c83bdfb7a761773bce0e6f28605da87e3fc388e3e + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc + languageName: node + linkType: hard + +"@types/yargs@npm:^15.0.0": + version: 15.0.19 + resolution: "@types/yargs@npm:15.0.19" + dependencies: + "@types/yargs-parser": "*" + checksum: 6a509db36304825674f4f00300323dce2b4d850e75819c3db87e9e9f213ac2c4c6ed3247a3e4eed6e8e45b3f191b133a356d3391dd694d9ea27a0507d914ef4c + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" + dependencies: + "@types/yargs-parser": "*" + checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/eslint-plugin@npm:4.18.0" + dependencies: + "@typescript-eslint/experimental-utils": 4.18.0 + "@typescript-eslint/scope-manager": 4.18.0 + debug: ^4.1.1 + functional-red-black-tree: ^1.0.1 + lodash: ^4.17.15 + regexpp: ^3.0.0 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependencies: + "@typescript-eslint/parser": ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 0e781b0d88ad29badc593a5d3babc53c38a4a5ad8f76161b2d9d47b651c939233f83fb4ce14dd075d86625e834aa25fb07d6f19bb7d98ec55646664eec8c7e29 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^4.5.0": + version: 4.33.0 + resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" + dependencies: + "@typescript-eslint/experimental-utils": 4.33.0 + "@typescript-eslint/scope-manager": 4.33.0 + debug: ^4.3.1 + functional-red-black-tree: ^1.0.1 + ignore: ^5.1.8 + regexpp: ^3.1.0 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.5.0": + version: 5.62.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" + 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 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/experimental-utils@npm:4.18.0" + dependencies: + "@types/json-schema": ^7.0.3 + "@typescript-eslint/scope-manager": 4.18.0 + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/typescript-estree": 4.18.0 + eslint-scope: ^5.0.0 + eslint-utils: ^2.0.0 + peerDependencies: + eslint: "*" + checksum: e3a404cc0102b3a414798daf2f98782657112abc99ca6b83a74978c078a28c86314cb09ff1919ec00356001e10f2f21ea395c1c0b643849f0dec0f70904c1f15 + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": + version: 4.33.0 + resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" + dependencies: + "@types/json-schema": ^7.0.7 + "@typescript-eslint/scope-manager": 4.33.0 + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/typescript-estree": 4.33.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: "*" + checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:^3.10.1": + version: 3.10.1 + resolution: "@typescript-eslint/experimental-utils@npm:3.10.1" + dependencies: + "@types/json-schema": ^7.0.3 + "@typescript-eslint/types": 3.10.1 + "@typescript-eslint/typescript-estree": 3.10.1 + eslint-scope: ^5.0.0 + eslint-utils: ^2.0.0 + peerDependencies: + eslint: "*" + checksum: 635cc1afe466088b04901c2bce0e4c3e48bb74668e61e39aa74a485f856c6f9683482350d4b16b3f4c0112ce40cad2c2c427d4fe5e11a3329b3bb93286d4ab26 + languageName: node + linkType: hard + +"@typescript-eslint/experimental-utils@npm:^5.0.0": + version: 5.62.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/utils": 5.62.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ce55d9f74eac5cb94d66d5db9ead9a5d734f4301519fb5956a57f4b405a5318a115b0316195a3c039e0111489138680411709cb769085d71e1e1db1376ea0949 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/parser@npm:4.18.0" + dependencies: + "@typescript-eslint/scope-manager": 4.18.0 + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/typescript-estree": 4.18.0 + debug: ^4.1.1 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 03ab70d1cb0b04ffa60aa089be45cc45737881c8ae57fac02afe02c38e61c3f1fb281a7d2dfbc6600c88c197c142ca3db83cefed96937e6cc2fce6014f37c410 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^4.5.0": + version: 4.33.0 + resolution: "@typescript-eslint/parser@npm:4.33.0" + 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 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.5.0": + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" + 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 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/scope-manager@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/visitor-keys": 4.18.0 + checksum: 52b6dbac8cac1599d087882d9469fba00eff9d3e4c64dc1118eef3d10a7ba02e59675c0cfe1363af0cd87c8840d31f7375fe3b01a0866c5ff6a69721d52e586d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/scope-manager@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + "@typescript-eslint/visitor-keys": 4.33.0 + checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/type-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:3.10.1": + version: 3.10.1 + resolution: "@typescript-eslint/types@npm:3.10.1" + checksum: 3ea820d37c2595d457acd6091ffda8b531e5d916e1cce708336bf958aa8869126f95cca3268a724f453ce13be11c5388a0a4143bf09bca51be1020ec46635d92 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/types@npm:4.18.0" + checksum: 3397b58099c0a86a13b201b9b6b2313577d92f71dd5be5f87f050559902b36be0de63e54e1d1ceda39e8cf1d57937588cff7374b2481a5a92e8ede5e8c986872 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/types@npm:4.33.0" + checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:3.10.1": + version: 3.10.1 + resolution: "@typescript-eslint/typescript-estree@npm:3.10.1" + dependencies: + "@typescript-eslint/types": 3.10.1 + "@typescript-eslint/visitor-keys": 3.10.1 + debug: ^4.1.1 + glob: ^7.1.6 + is-glob: ^4.0.1 + lodash: ^4.17.15 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 911680da9d26220944f4f8f26f88349917609844fafcff566147cecae37ff0211d66c626eb62a2b24d17fd50d10715f5b0f32b2e7f5d9a88efc46709266d5053 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + "@typescript-eslint/visitor-keys": 4.18.0 + debug: ^4.1.1 + globby: ^11.0.1 + is-glob: ^4.0.1 + semver: ^7.3.2 + tsutils: ^3.17.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 451d329f0086cf1ecabfe1f3b73cc291472e02b3e167d83f2ffa6681a8de9054c1d8c63a6b56f34da22910802483382fc3a456221a94db5013f21e76e83a933b + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" + 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 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + 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 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.58.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + 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 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:3.10.1": + version: 3.10.1 + resolution: "@typescript-eslint/visitor-keys@npm:3.10.1" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 0c4825b9829b1c11258a73aaee70d64834ba6d9b24157e7624e80f27f6537f468861d4dd33ad233c13ad2c6520afb9008c0675da6d792f26e82d75d6bfe9b0c6 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.18.0": + version: 4.18.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.18.0" + dependencies: + "@typescript-eslint/types": 4.18.0 + eslint-visitor-keys: ^2.0.0 + checksum: 4e515d93edff7c2a7c7b558581c448865b845d2dcea912c2a19373b65f8f8949b858a2f2e283f670a3e49302892b9c139a50578de6d8ba8fe7e85cf3f880a5fe + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:4.33.0": + version: 4.33.0 + resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" + dependencies: + "@typescript-eslint/types": 4.33.0 + eslint-visitor-keys: ^2.0.0 + checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + eslint-visitor-keys: ^3.3.0 + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + languageName: node + linkType: hard + +"@vitejs/plugin-react@npm:^4.0.0": + version: 4.3.0 + resolution: "@vitejs/plugin-react@npm:4.3.0" + dependencies: + "@babel/core": ^7.24.5 + "@babel/plugin-transform-react-jsx-self": ^7.24.5 + "@babel/plugin-transform-react-jsx-source": ^7.24.1 + "@types/babel__core": ^7.20.5 + react-refresh: ^0.14.2 + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + checksum: e4642c081e74e701fc07f03f505b44eb428d7105461b8026e7364ecd30dcf7785126bf272767a3bc36899b6abe85479af444612ef6d09509d9bc7d6025cac925 + languageName: node + linkType: hard + +"@vitest/expect@npm:0.32.4": + version: 0.32.4 + resolution: "@vitest/expect@npm:0.32.4" + dependencies: + "@vitest/spy": 0.32.4 + "@vitest/utils": 0.32.4 + chai: ^4.3.7 + checksum: fb44ae0507c3a0298e472e64f4d298f60b159c7ce05201987cbd60ba6b11069a97bed5f689f911ac66096ee573c64ed0c17a2511661ad7823ce31a86244b8cd8 + languageName: node + linkType: hard + +"@vitest/runner@npm:0.32.4": + version: 0.32.4 + resolution: "@vitest/runner@npm:0.32.4" + dependencies: + "@vitest/utils": 0.32.4 + p-limit: ^4.0.0 + pathe: ^1.1.1 + checksum: 06f2b4003963a7f18954bcd690ebd3b917e1d45d998a8c9a23458569a8ae9b50a18fcf511ac100343eeddf1df1e47f8eba870e193afa895ccb348a679e5295de + languageName: node + linkType: hard + +"@vitest/snapshot@npm:0.32.4": + version: 0.32.4 + resolution: "@vitest/snapshot@npm:0.32.4" + dependencies: + magic-string: ^0.30.0 + pathe: ^1.1.1 + pretty-format: ^29.5.0 + checksum: d8907fc0504acfb59df88aaf43a210161f7e2f22eaaa96c6562b7a1c9e28b12d2b572afcd49ae224a8a9947fabf473e956c7ea7c7d25f794d5521d7d45f24b78 + languageName: node + linkType: hard + +"@vitest/spy@npm:0.32.4": + version: 0.32.4 + resolution: "@vitest/spy@npm:0.32.4" + dependencies: + tinyspy: ^2.1.1 + checksum: 742870e7554dd8d478de85bc265c3af051e1f3420093fdc9978fe9871472db37da6da69c66d80ad604029d1dfdc303f1159613d9ccf08dba1c3991eb4e7616a7 + languageName: node + linkType: hard + +"@vitest/utils@npm:0.32.4": + version: 0.32.4 + resolution: "@vitest/utils@npm:0.32.4" + dependencies: + diff-sequences: ^29.4.3 + loupe: ^2.3.6 + pretty-format: ^29.5.0 + checksum: 7d81162c3afaa638d30c47a28b7eced62abb8d7a8c891b10fa2f9756b2b6609d767142162044fe976c2cb8c17911d135fb3950f83e6d2bbd90150a042237bd25 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/ast@npm:1.9.0" + dependencies: + "@webassemblyjs/helper-module-context": 1.9.0 + "@webassemblyjs/helper-wasm-bytecode": 1.9.0 + "@webassemblyjs/wast-parser": 1.9.0 + checksum: 8a9838dc7fdac358aee8daa75eefa35934ab18dafb594092ff7be79c467ebe9dabb2543e58313c905fd802bdcc3cb8320e4e19af7444e49853a7a24e25138f75 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.9.0" + checksum: d3aeb19bc30da26f639698daa28e44e0c18d5aa135359ef3c54148e194eec46451a912d0506099d479a71a94bc3eef6ef52d6ec234799528a25a9744789852de + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-api-error@npm:1.9.0" + checksum: 9179d3148639cc202e89a118145b485cf834613260679a99af6ec487bbc15f238566ca713207394b336160a41bf8c1b75cf2e853b3e96f0cc73c1e5c735b3f64 + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-buffer@npm:1.9.0" + checksum: dcb85f630f8a2e22b7346ad4dd58c3237a2cad1457699423e8fd19592a0bd3eacbc2639178a1b9a873c3ac217bfc7a23a134ff440a099496b590e82c7a4968d5 + languageName: node + linkType: hard + +"@webassemblyjs/helper-code-frame@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-code-frame@npm:1.9.0" + dependencies: + "@webassemblyjs/wast-printer": 1.9.0 + checksum: a28fa057f7beff0fd14bff716561520f8edb8c9c56c7a5559451e6765acfb70aaeb8af718ea2bd2262e7baeba597545af407e28eb2eff8329235afe8605f20d1 + languageName: node + linkType: hard + +"@webassemblyjs/helper-fsm@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-fsm@npm:1.9.0" + checksum: 374cc510c8f5a7a07d4fe9eb7036cc475a96a670b5d25c31f16757ac8295be8d03a2f29657ff53eaefa9e8315670a48824d430ed910e7c1835788ac79f93124e + languageName: node + linkType: hard + +"@webassemblyjs/helper-module-context@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-module-context@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + checksum: 55e8f89c7ea1beaa78fad88403f3753b8413b0f3b6bb32d898ce95078b3e1d1b48ade0919c00b82fc2e3813c0ab6901e415f7a4d4fa9be50944e2431adde75a5 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.9.0" + checksum: 280da4df3c556f73a1a02053277f8a4be481de32df4aa21050b015c8f4d27c46af89f0417eb88e486df117e5df4bccffae593f78cb1e79f212d3b3d4f3ed0f04 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-buffer": 1.9.0 + "@webassemblyjs/helper-wasm-bytecode": 1.9.0 + "@webassemblyjs/wasm-gen": 1.9.0 + checksum: b8f7bb45d4194074c82210211a5d3e402a5b5fa63ecae26d2c356ae3978af5a530e91192fb260f32f9d561b18e2828b3da2e2f41c59efadb5f3c6d72446807f0 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/ieee754@npm:1.9.0" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 7fe4a217ba0f7051e2cfef92919d4a64fac1a63c65411763779bd50907820f33f440255231a474fe3ba03bd1d9ee0328662d1eae3fce4c59b91549d6b62b839b + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/leb128@npm:1.9.0" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 4ca7cbb869530d78d42a414f34ae53249364cb1ecebbfb6ed5d562c2f209fce857502f088822ee82a23876f653a262ddc34ab64e45a7962510a263d39bb3f51a + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/utf8@npm:1.9.0" + checksum: e328a30ac8a503bbd015d32e75176e0dedcb45a21d4be051c25dfe89a00035ca7a6dbd8937b442dd5b4b334de3959d4f5fe0b330037bd226a28b9814cd49e84f + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wasm-edit@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-buffer": 1.9.0 + "@webassemblyjs/helper-wasm-bytecode": 1.9.0 + "@webassemblyjs/helper-wasm-section": 1.9.0 + "@webassemblyjs/wasm-gen": 1.9.0 + "@webassemblyjs/wasm-opt": 1.9.0 + "@webassemblyjs/wasm-parser": 1.9.0 + "@webassemblyjs/wast-printer": 1.9.0 + checksum: 1997e0c2f4051c33239587fb143242919320bc861a0af03a873c7150a27d6404bd2e063c658193288b0aa88c35aadbe0c4fde601fe642bae0743a8c8eda52717 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wasm-gen@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-wasm-bytecode": 1.9.0 + "@webassemblyjs/ieee754": 1.9.0 + "@webassemblyjs/leb128": 1.9.0 + "@webassemblyjs/utf8": 1.9.0 + checksum: 2456e84e8e6bedb7ab47f6333a0ee170f7ef62842c90862ca787c08528ca8041061f3f8bc257fc2a01bf6e8d1a76fddaddd43418c738f681066e5b50f88fe7df + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wasm-opt@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-buffer": 1.9.0 + "@webassemblyjs/wasm-gen": 1.9.0 + "@webassemblyjs/wasm-parser": 1.9.0 + checksum: 91242205bdbd1aa8045364a5338bfb34880cb2c65f56db8dd19382894209673699fb31a0e5279f25c7e5bcd8f3097d6c9ca84d8969d9613ef2cf166450cc3515 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wasm-parser@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-api-error": 1.9.0 + "@webassemblyjs/helper-wasm-bytecode": 1.9.0 + "@webassemblyjs/ieee754": 1.9.0 + "@webassemblyjs/leb128": 1.9.0 + "@webassemblyjs/utf8": 1.9.0 + checksum: 493f6cfc63a5e16073056c81ff0526a9936f461327379ef3c83cc841000e03623b6352704f6bf9f7cb5b3610f0032020a61f9cca78c91b15b8e995854b29c098 + languageName: node + linkType: hard + +"@webassemblyjs/wast-parser@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wast-parser@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/floating-point-hex-parser": 1.9.0 + "@webassemblyjs/helper-api-error": 1.9.0 + "@webassemblyjs/helper-code-frame": 1.9.0 + "@webassemblyjs/helper-fsm": 1.9.0 + "@xtuc/long": 4.2.2 + checksum: 705dd48fbbceec7f6bed299b8813631b242fd9312f9594dbb2985dda86c9688048692357d684f6080fc2c5666287cefaa26b263d01abadb6a9049d4c8978b9db + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.9.0": + version: 1.9.0 + resolution: "@webassemblyjs/wast-printer@npm:1.9.0" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/wast-parser": 1.9.0 + "@xtuc/long": 4.2.2 + checksum: 3d1e1b2e84745a963f69acd1c02425b321dd2e608e11dabc467cae0c9a808962bc769ec9afc46fbcea7188cc1e47d72370da762d258f716fb367cb1a7865c54b + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.8.3": + version: 0.8.10 + resolution: "@xmldom/xmldom@npm:0.8.10" + checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"@zxing/text-encoding@npm:0.9.0": + version: 0.9.0 + resolution: "@zxing/text-encoding@npm:0.9.0" + checksum: c23b12aee7639382e4949961304a1294776afaffa40f579e09ffecd0e5e68cf26ef3edd75009de46da8a536e571448755ca68b3e2ea707d53793c0edb2e2c34a + languageName: node + linkType: hard + +"abab@npm:^2.0.3, abab@npm:^2.0.5": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn-globals@npm:^6.0.0": + version: 6.0.0 + resolution: "acorn-globals@npm:6.0.0" + dependencies: + acorn: ^7.1.1 + acorn-walk: ^7.1.1 + checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.1": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^7.1.1": + version: 7.2.0 + resolution: "acorn-walk@npm:7.2.0" + checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 + languageName: node + linkType: hard + +"acorn@npm:^6.4.1": + version: 6.4.2 + resolution: "acorn@npm:6.4.2" + bin: + acorn: bin/acorn + checksum: 44b07053729db7f44d28343eed32247ed56dc4a6ec6dff2b743141ecd6b861406bbc1c20bf9d4f143ea7dd08add5dc8c290582756539bc03a8db605050ce2fb4 + languageName: node + linkType: hard + +"acorn@npm:^7.1.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 + languageName: node + linkType: hard + +"acorn@npm:^8.10.0, acorn@npm:^8.11.3, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + languageName: node + linkType: hard + +"address@npm:1.1.2": + version: 1.1.2 + resolution: "address@npm:1.1.2" + checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 + languageName: node + linkType: hard + +"address@npm:^1.0.1": + version: 1.2.2 + resolution: "address@npm:1.2.2" + checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 + languageName: node + linkType: hard + +"adjust-sourcemap-loader@npm:3.0.0": + version: 3.0.0 + resolution: "adjust-sourcemap-loader@npm:3.0.0" + dependencies: + loader-utils: ^2.0.0 + regex-parser: ^2.2.11 + checksum: 5ceabea85219fcafed06f7d1aafb37dc761c6435e4ded2a8c6b01c69844250aa94ef65a4d07210dc7566c2d8b4c9ba8897518db596a550461eed26fbeb76b96f + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-errors@npm:^1.0.0": + version: 1.0.1 + resolution: "ajv-errors@npm:1.0.1" + peerDependencies: + ajv: ">=5.0.0" + checksum: 2c9fc02cf58f9aae5bace61ebd1b162e1ea372ae9db5999243ba5e32a9a78c0d635d29ae085f652c61c941a43af0b2b1acdb255e29d44dc43a6e021085716d8c + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.1.0, ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + 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 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ajv@npm:^8.0.1": + version: 8.16.0 + resolution: "ajv@npm:8.16.0" + dependencies: + fast-deep-equal: ^3.1.3 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.4.1 + checksum: bdf3d4c9f1d11e220850051ef4cd89346e951cfb933d6d41be36d45053c1092af1523ee6c62525cce567355caf0a4f4c19a08a93851649c1fa32b4a39b7c4858 + languageName: node + linkType: hard + +"alphanum-sort@npm:^1.0.0": + version: 1.0.2 + resolution: "alphanum-sort@npm:1.0.2" + checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 + languageName: node + linkType: hard + +"ansi-colors@npm:^3.0.0": + version: 3.2.4 + resolution: "ansi-colors@npm:3.2.4" + checksum: 026c51880e9f8eb59b112669a87dbea4469939ff94b131606303bbd697438a6691b16b9db3027aa9bf132a244214e83ab1508b998496a34d2aea5b437ac9e62d + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-html@npm:0.0.7, ansi-html@npm:^0.0.7": + version: 0.0.7 + resolution: "ansi-html@npm:0.0.7" + bin: + ansi-html: ./bin/ansi-html + checksum: 9b839ce99650b4c2d83621d67d68622d27e7948b54f7a4386f2218a3997ee4e684e5a6e8d290880c3f3260e8d90c2613c59c7028f04992ad5c8d99d3a0fcc02c + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:^2.0.0": + version: 2.0.0 + resolution: "anymatch@npm:2.0.0" + dependencies: + micromatch: ^3.1.4 + normalize-path: ^2.1.1 + checksum: f7bb1929842b4585cdc28edbb385767d499ce7d673f96a8f11348d2b2904592ffffc594fe9229b9a1e9e4dccb9329b7692f9f45e6a11dcefbb76ecdc9ab740f6 + languageName: node + linkType: hard + +"anymatch@npm:^3.0.0, anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"append-field@npm:^1.0.0": + version: 1.0.0 + resolution: "append-field@npm:1.0.0" + checksum: 482ba08acc0ecef00fe7da6bf2f8e48359a9905ee1af525f3120c9260c02e91eedf0579b59d898e8d8455b6c199e340bc0a2fd4b9e02adaa29a8a86c722b37f9 + languageName: node + linkType: hard + +"aproba@npm:^1.1.1": + version: 1.2.0 + resolution: "aproba@npm:1.2.0" + checksum: 0fca141966559d195072ed047658b6e6c4fe92428c385dd38e288eacfc55807e7b4989322f030faff32c0f46bb0bc10f1e0ac32ec22d25315a1e5bbc0ebb76dc + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b + languageName: node + linkType: hard + +"aria-query@npm:^4.2.2": + version: 4.2.2 + resolution: "aria-query@npm:4.2.2" + dependencies: + "@babel/runtime": ^7.10.2 + "@babel/runtime-corejs3": ^7.10.2 + checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665 + languageName: node + linkType: hard + +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 + languageName: node + linkType: hard + +"arity-n@npm:^1.0.4": + version: 1.0.4 + resolution: "arity-n@npm:1.0.4" + checksum: 3d76e16907f7b8a9452690c1efc301d0fbecea457365797eccfbade9b8d1653175b2c38343201bf26fdcbf0bcbb31eab6d912e7c008c6d19042301dc0be80a73 + languageName: node + linkType: hard + +"arr-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "arr-diff@npm:4.0.0" + checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 + languageName: node + linkType: hard + +"arr-flatten@npm:^1.1.0": + version: 1.1.0 + resolution: "arr-flatten@npm:1.1.0" + checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 + languageName: node + linkType: hard + +"arr-union@npm:^3.1.0": + version: 3.1.0 + resolution: "arr-union@npm:3.1.0" + checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + +"array-flatten@npm:^2.1.0": + version: 2.1.2 + resolution: "array-flatten@npm:2.1.2" + checksum: e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + is-string: ^1.0.7 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 + languageName: node + linkType: hard + +"array-union@npm:^1.0.1": + version: 1.0.2 + resolution: "array-union@npm:1.0.2" + dependencies: + array-uniq: ^1.0.1 + checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array-uniq@npm:^1.0.1": + version: 1.0.3 + resolution: "array-uniq@npm:1.0.3" + checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e + languageName: node + linkType: hard + +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 + languageName: node + linkType: hard + +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + 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 + checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + 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 + checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + +"array.prototype.reduce@npm:^1.0.6": + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-array-method-boxes-properly: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + is-string: ^1.0.7 + checksum: 90303617bd70c8e9a81ebff041d3e10fad1a97f163699cb015b7c84a3f9e6960d9bb161a30f1d0309d6e476f166af5668c1e24f7add3202213d25f7c7f15475d + languageName: node + linkType: hard + +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" + 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 + checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + 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 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + +"arrify@npm:^2.0.0, arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"asap@npm:^2.0.0, asap@npm:~2.0.6": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"asn1.js@npm:^4.10.1": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" + dependencies: + bn.js: ^4.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 + languageName: node + linkType: hard + +"assert@npm:^1.1.1": + version: 1.5.1 + resolution: "assert@npm:1.5.1" + dependencies: + object.assign: ^4.1.4 + util: ^0.10.4 + checksum: bfc539da97545f9b2989395d6b85be40b70649ce57464f3cc6e61f4975fb097ba0689c386f95bdb4c3ab867931e40a565c9e193ae3c02263a8e92acb17c9dc93 + languageName: node + linkType: hard + +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + +"assign-symbols@npm:^1.0.0": + version: 1.0.0 + resolution: "assign-symbols@npm:1.0.0" + checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c + languageName: node + linkType: hard + +"ast-types-flow@npm:^0.0.8": + version: 0.0.8 + resolution: "ast-types-flow@npm:0.0.8" + checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8 + languageName: node + linkType: hard + +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 + languageName: node + linkType: hard + +"async-each@npm:^1.0.1": + version: 1.0.6 + resolution: "async-each@npm:1.0.6" + checksum: d237e8c39348d5f1441edbd3893692912afbacaf83a2ccce8978ebeea804529a8838654b12208fbbc08c8b0411a1248948ee9bf9291ebe1921aabd5b613bc5db + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + +"async@npm:^2.6.4": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a + languageName: node + linkType: hard + +"autoprefixer@npm:^9.6.1": + version: 9.8.8 + resolution: "autoprefixer@npm:9.8.8" + dependencies: + browserslist: ^4.12.0 + caniuse-lite: ^1.0.30001109 + normalize-range: ^0.1.2 + num2fraction: ^1.2.2 + picocolors: ^0.2.1 + postcss: ^7.0.32 + postcss-value-parser: ^4.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 8f017672fbac248db0cf4e86aa707d8b148d9abadb842b5cf4c6be306d80fa6a654fadefd17e46213234c1f0947612acce2864f93e903f3e736b183fc1aedc45 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + +"axe-core@npm:=4.7.0": + version: 4.7.0 + resolution: "axe-core@npm:4.7.0" + checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a + languageName: node + linkType: hard + +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + +"axios@npm:^1.6.5": + version: 1.7.2 + resolution: "axios@npm:1.7.2" + dependencies: + follow-redirects: ^1.15.6 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: e457e2b0ab748504621f6fa6609074ac08c824bf0881592209dfa15098ece7e88495300e02cd22ba50b3468fd712fe687e629dcb03d6a3f6a51989727405aedf + languageName: node + linkType: hard + +"axobject-query@npm:^3.2.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" + dependencies: + dequal: ^2.0.3 + checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 + languageName: node + linkType: hard + +"babel-eslint@npm:^10.1.0": + version: 10.1.0 + resolution: "babel-eslint@npm:10.1.0" + dependencies: + "@babel/code-frame": ^7.0.0 + "@babel/parser": ^7.7.0 + "@babel/traverse": ^7.7.0 + "@babel/types": ^7.7.0 + eslint-visitor-keys: ^1.0.0 + resolve: ^1.12.0 + peerDependencies: + eslint: ">= 4.12.1" + checksum: bdc1f62b6b0f9c4d5108c96d835dad0c0066bc45b7c020fcb2d6a08107cf69c9217a99d3438dbd701b2816896190c4283ba04270ed9a8349ee07bd8dafcdc050 + languageName: node + linkType: hard + +"babel-extract-comments@npm:^1.0.0": + version: 1.0.0 + resolution: "babel-extract-comments@npm:1.0.0" + dependencies: + babylon: ^6.18.0 + checksum: 6345c688ccb56a7b750223afb42c1ddc83865b8ac33d7b808b5ad5e3619624563cf8324fbacdcf41cf073a40d935468a05f806e1a7622b0186fa5dad1232a07b + languageName: node + linkType: hard + +"babel-jest@npm:^26.6.0, babel-jest@npm:^26.6.3": + version: 26.6.3 + resolution: "babel-jest@npm:26.6.3" + dependencies: + "@jest/transform": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/babel__core": ^7.1.7 + babel-plugin-istanbul: ^6.0.0 + babel-preset-jest: ^26.6.2 + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5917233f0d381e719e195b69b81e46da90293432d10288d79f8f59b8f3f9ac030e14701f3d9f90893fb739481df1d132446f1b983d841e65e2623775db100897 + languageName: node + linkType: hard + +"babel-loader@npm:8.1.0": + version: 8.1.0 + resolution: "babel-loader@npm:8.1.0" + dependencies: + find-cache-dir: ^2.1.0 + loader-utils: ^1.4.0 + mkdirp: ^0.5.3 + pify: ^4.0.1 + schema-utils: ^2.6.5 + peerDependencies: + "@babel/core": ^7.0.0 + webpack: ">=2" + checksum: fdbcae91cc43366206320a1cbe40d358a64ba2dfaa561fbd690efe0db6256c9d27ab7600f7c84041fbc4c2a6f0279175b1f8d1fa5ed17ec30bbd734da84a1bc0 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.0.0": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + 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 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^26.6.2": + version: 26.6.2 + resolution: "babel-plugin-jest-hoist@npm:26.6.2" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.0.0 + "@types/babel__traverse": ^7.0.6 + checksum: abe3732fdf20f96e91cbf788a54d776b30bd7a6054cb002a744d7071c656813e26e77a780dc2a6f6b197472897e220836cd907bda3fadb9d0481126bfd6c3783 + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": ^7.12.5 + cosmiconfig: ^7.0.0 + resolve: ^1.19.0 + checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 + languageName: node + linkType: hard + +"babel-plugin-named-asset-import@npm:^0.3.7": + version: 0.3.8 + resolution: "babel-plugin-named-asset-import@npm:0.3.8" + peerDependencies: + "@babel/core": ^7.1.0 + checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.11 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.6.2 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f098353ce7c7dde1a1d2710858e01b471e85689110c9e37813e009072347eb8c55d5f84d20d3bf1cab31755f20078ba90f8855fdc4686a9daa826a95ff280bd7 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": + version: 0.10.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.1 + core-js-compat: ^3.36.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 150233571072b6b3dfe946242da39cba8587b7f908d1c006f7545fc88b0e3c3018d445739beb61e7a75835f0c2751dbe884a94ff9b245ec42369d9267e0e1b3f + languageName: node + linkType: hard + +"babel-plugin-syntax-object-rest-spread@npm:^6.8.0": + version: 6.13.0 + resolution: "babel-plugin-syntax-object-rest-spread@npm:6.13.0" + checksum: 14083f2783c760f5f199160f48e42ad4505fd35fc7cf9c4530812b176705259562b77db6d3ddc5e3cbce9e9b2b61ec9db3065941f0949b68e77cae3e395a6eef + languageName: node + linkType: hard + +"babel-plugin-transform-object-rest-spread@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-plugin-transform-object-rest-spread@npm:6.26.0" + dependencies: + babel-plugin-syntax-object-rest-spread: ^6.8.0 + babel-runtime: ^6.26.0 + checksum: aad583fb0d08073678838f77fa822788b9a0b842ba33e34f8d131246852f7ed31cfb5fdf57644dec952f84dcae862a27dbf3d12ccbee6bdb0aed6e7ed13ca9ba + languageName: node + linkType: hard + +"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": + version: 0.4.24 + resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" + checksum: 54afe56d67f0d118c9da23996f39948e502a152b3f582eb6e8f163fcb76c2c1ea4e0cdd4f9fac5c0ef050eab4fe0a950b0b74aae6237bcc0d31d8fc4cc808d1a + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + 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 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^26.6.2": + version: 26.6.2 + resolution: "babel-preset-jest@npm:26.6.2" + dependencies: + babel-plugin-jest-hoist: ^26.6.2 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1d9bef3a7ac6751a09d29ceb84be8b1998abd210fafa12223689c744db4f2a63ab90cba7986a71f3154d9aceda9dbeca563178731d21cbaf793b4096ed3a4d01 + languageName: node + linkType: hard + +"babel-preset-react-app@npm:^10.0.0, babel-preset-react-app@npm:^10.0.1": + version: 10.0.1 + resolution: "babel-preset-react-app@npm:10.0.1" + 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 + checksum: ee66043484e67b8aef2541976388299691478ea00834f3bb14b6b3d5edcd316a5ac95351f6ec084b41ee555cad820d4194280ad38ce51884fedc7e8946a57b74 + languageName: node + linkType: hard + +"babel-runtime@npm:^6.26.0": + version: 6.26.0 + resolution: "babel-runtime@npm:6.26.0" + dependencies: + core-js: ^2.4.0 + regenerator-runtime: ^0.11.0 + checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 + languageName: node + linkType: hard + +"babylon@npm:^6.18.0": + version: 6.18.0 + resolution: "babylon@npm:6.18.0" + bin: + babylon: ./bin/babylon.js + checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d + languageName: node + linkType: hard + +"backend@workspace:src/backend": + version: 0.0.0-use.local + resolution: "backend@workspace:src/backend" + dependencies: + "@prisma/client": ^5.7.1 + "@slack/web-api": ^6.7.2 + "@types/concat-stream": ^2.0.0 + "@types/cookie-parser": ^1.4.3 + "@types/cors": ^2.8.12 + "@types/express": ^4.17.6 + "@types/express-jwt": ^6.0.4 + "@types/jsonwebtoken": ^8.5.9 + "@types/multer": ^1.4.7 + "@types/node": 18.17.1 + "@types/nodemailer": ^6.4.0 + "@types/supertest": ^2.0.12 + body-parser: ^1.19.0 + concat-stream: ^2.0.0 + cookie-parser: ^1.4.5 + cors: ^2.8.5 + decimal.js: ^10.4.3 + dotenv: ^16.0.1 + express: ^4.17.1 + express-jwt: ^7.7.5 + express-validator: ^6.14.2 + google-auth-library: ^8.1.1 + googleapis: ^118.0.0 + jsonwebtoken: ^8.5.1 + multer: ^1.4.5-lts.1 + nodemailer: ^6.9.1 + nodemon: ^2.0.16 + prisma: ^5.7.1 + shared: 1.0.0 + supertest: ^6.2.4 + ts-jest: ^26.2.0 + ts-node: ^8.10.1 + typescript: ^4.1.5 + vitest: ^0.32.1 + languageName: unknown + linkType: soft + +"bail@npm:^1.0.0": + version: 1.0.5 + resolution: "bail@npm:1.0.5" + checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"base@npm:^0.11.1": + version: 0.11.2 + resolution: "base@npm:0.11.2" + dependencies: + cache-base: ^1.0.1 + class-utils: ^0.3.5 + component-emitter: ^1.2.1 + define-property: ^1.0.0 + isobject: ^3.0.1 + mixin-deep: ^1.2.0 + pascalcase: ^0.1.1 + checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd + languageName: node + linkType: hard + +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f + languageName: node + linkType: hard + +"bfj@npm:^7.0.2": + version: 7.1.0 + resolution: "bfj@npm:7.1.0" + dependencies: + bluebird: ^3.7.2 + check-types: ^11.2.3 + hoopy: ^0.1.4 + jsonpath: ^1.1.1 + tryer: ^1.0.1 + checksum: 36da9ed36c60f377a3f43bb0433092af7dc40442914b8155a1330ae86b1905640baf57e9c195ab83b36d6518b27cf8ed880adff663aa444c193be149e027d722 + languageName: node + linkType: hard + +"big-integer@npm:^1.6.16": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"bignumber.js@npm:^9.0.0": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf + languageName: node + linkType: hard + +"binary-extensions@npm:^1.0.0": + version: 1.13.1 + resolution: "binary-extensions@npm:1.13.1" + checksum: ad7747f33c07e94ba443055de130b50c8b8b130a358bca064c580d91769ca6a69c7ac65ca008ff044ed4541d2c6ad45496e1fadbef5218a68770996b6a2194d7 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 + languageName: node + linkType: hard + +"bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"body-parser@npm:1.20.2, body-parser@npm:^1.19.0": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" + 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 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + languageName: node + linkType: hard + +"bonjour@npm:^3.5.0": + version: 3.5.0 + resolution: "bonjour@npm:3.5.0" + dependencies: + array-flatten: ^2.1.0 + deep-equal: ^1.0.1 + dns-equal: ^1.0.0 + dns-txt: ^2.0.2 + multicast-dns: ^6.0.1 + multicast-dns-service-types: ^1.1.0 + checksum: 2cfbe9fa861f4507b5ff3853eeae3ef03a231ede2b7363efedd80880ea3c0576f64416f98056c96e429ed68ff38dc4a70c0583d1eb4dab72e491ca44a0f03444 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0, boolbase@npm:~1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + +"bootstrap@npm:^4.6.0": + version: 4.6.2 + resolution: "bootstrap@npm:4.6.2" + peerDependencies: + jquery: 1.9.1 - 3 + popper.js: ^1.16.1 + checksum: 3f4e7768ff7d618c49d4bf4f02aa54a9bfb679d4eecb0f3854fa4af1a17b9114b147009c435946432cdd1572efffc71d88ec385c55943a12fa66253cde0876b0 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^2.3.1, braces@npm:^2.3.2": + version: 2.3.2 + resolution: "braces@npm:2.3.2" + dependencies: + arr-flatten: ^1.1.0 + array-unique: ^0.3.2 + extend-shallow: ^2.0.1 + fill-range: ^4.0.0 + isobject: ^3.0.1 + repeat-element: ^1.1.2 + snapdragon: ^0.8.1 + snapdragon-node: ^2.0.1 + split-string: ^3.0.2 + to-regex: ^3.0.1 + checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 + languageName: node + linkType: hard + +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + +"broadcast-channel@npm:^3.4.1": + version: 3.7.0 + resolution: "broadcast-channel@npm:3.7.0" + dependencies: + "@babel/runtime": ^7.7.2 + detect-node: ^2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + checksum: 803794c48dcce7f03aca69797430bd8b1c4cfd70b7de22079cd89567eeffaa126a1db98c7c2d86af8131d9bb41ed367c0fef96dfb446151c927b831572c621fc + languageName: node + linkType: hard + +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browser-process-hrtime@npm:^1.0.0": + version: 1.0.0 + resolution: "browser-process-hrtime@npm:1.0.0" + checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f + languageName: node + linkType: hard + +"browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + dependencies: + buffer-xor: ^1.0.3 + cipher-base: ^1.0.0 + create-hash: ^1.1.0 + evp_bytestokey: ^1.0.3 + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 + languageName: node + linkType: hard + +"browserify-cipher@npm:^1.0.0": + version: 1.0.1 + resolution: "browserify-cipher@npm:1.0.1" + dependencies: + browserify-aes: ^1.0.4 + browserify-des: ^1.0.0 + evp_bytestokey: ^1.0.0 + checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 + languageName: node + linkType: hard + +"browserify-des@npm:^1.0.0": + version: 1.0.2 + resolution: "browserify-des@npm:1.0.2" + dependencies: + cipher-base: ^1.0.1 + des.js: ^1.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 + languageName: node + linkType: hard + +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" + dependencies: + bn.js: ^5.0.0 + randombytes: ^2.0.1 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + languageName: node + linkType: hard + +"browserify-sign@npm:^4.0.0": + version: 4.2.3 + resolution: "browserify-sign@npm:4.2.3" + dependencies: + bn.js: ^5.2.1 + browserify-rsa: ^4.1.0 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + elliptic: ^6.5.5 + hash-base: ~3.0 + inherits: ^2.0.4 + parse-asn1: ^5.1.7 + readable-stream: ^2.3.8 + safe-buffer: ^5.2.1 + checksum: 403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b + languageName: node + linkType: hard + +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: ~1.0.5 + checksum: 5cd9d6a665190fedb4a97dfbad8dabc8698d8a507298a03f42c734e96d58ca35d3c7d4085e283440bbca1cd1938cff85031728079bedb3345310c58ab1ec92d6 + languageName: node + linkType: hard + +"browserslist@npm:4.14.2": + version: 4.14.2 + resolution: "browserslist@npm:4.14.2" + dependencies: + caniuse-lite: ^1.0.30001125 + electron-to-chromium: ^1.3.564 + escalade: ^3.0.2 + node-releases: ^1.1.61 + bin: + browserslist: cli.js + checksum: 44b5d7a444b867e1f027923f37a8ed537b4403f8a85a35869904e7d3e4071b37459df08d41ab4d425f5191f3125f1c5a191cbff9070f81f4d311803dc0a2fb0f + languageName: node + linkType: hard + +"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + 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 + checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 80bb945f5d782a56f374b292770901065bad21420e34936ecbe949e57724b4a13874f735850dd1cc61f078773c4fb5493a41391e7bda40d1fa388d6bd80daaab + languageName: node + linkType: hard + +"buffer-from@npm:1.x, buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-indexof@npm:^1.0.0": + version: 1.1.1 + resolution: "buffer-indexof@npm:1.1.1" + checksum: 0967abc2981a8e7d776324c6b84811e4d84a7ead89b54a3bb8791437f0c4751afd060406b06db90a436f1cf771867331b5ecf5c4aca95b4ccb9f6cb146c22ebc + languageName: node + linkType: hard + +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a + languageName: node + linkType: hard + +"buffer@npm:^4.3.0": + version: 4.9.2 + resolution: "buffer@npm:4.9.2" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + isarray: ^1.0.0 + checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"builtin-modules@npm:^3.1.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d + languageName: node + linkType: hard + +"builtin-status-codes@npm:^3.0.0": + version: 3.0.0 + resolution: "builtin-status-codes@npm:3.0.0" + checksum: 1119429cf4b0d57bf76b248ad6f529167d343156ebbcc4d4e4ad600484f6bc63002595cbb61b67ad03ce55cd1d3c4711c03bbf198bf24653b8392420482f3773 + languageName: node + linkType: hard + +"bundle-require@npm:^3.0.4": + version: 3.1.2 + resolution: "bundle-require@npm:3.1.2" + dependencies: + load-tsconfig: ^0.2.0 + peerDependencies: + esbuild: ">=0.13" + checksum: 71f8cb81bcde97825317b0e516b7e479ec70bd2370f55a8f02795c0df6d541e6562c4b9ec0427cc7b5b835103a8dcf306da04e3846fa468146358471490fcf81 + languageName: node + linkType: hard + +"busboy@npm:^1.0.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: ^1.1.0 + checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e + languageName: node + linkType: hard + +"bytes@npm:3.0.0": + version: 3.0.0 + resolution: "bytes@npm:3.0.0" + checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + +"cacache@npm:^12.0.2": + version: 12.0.4 + resolution: "cacache@npm:12.0.4" + dependencies: + bluebird: ^3.5.5 + chownr: ^1.1.1 + figgy-pudding: ^3.5.1 + glob: ^7.1.4 + graceful-fs: ^4.1.15 + infer-owner: ^1.0.3 + lru-cache: ^5.1.1 + mississippi: ^3.0.0 + mkdirp: ^0.5.1 + move-concurrently: ^1.0.1 + promise-inflight: ^1.0.1 + rimraf: ^2.6.3 + ssri: ^6.0.1 + unique-filename: ^1.1.1 + y18n: ^4.0.0 + checksum: c88a72f36939b2523533946ffb27828443db5bf5995d761b35ae17af1eb6c8e20ac55b00b74c2ca900b2e1e917f0afba6847bf8cc16bee05ccca6aa150e0830c + languageName: node + linkType: hard + +"cacache@npm:^15.0.5": + version: 15.3.0 + resolution: "cacache@npm:15.3.0" + dependencies: + "@npmcli/fs": ^1.0.0 + "@npmcli/move-file": ^1.0.1 + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + glob: ^7.1.4 + infer-owner: ^1.0.4 + lru-cache: ^6.0.0 + minipass: ^3.1.1 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.2 + mkdirp: ^1.0.3 + p-map: ^4.0.0 + promise-inflight: ^1.0.1 + rimraf: ^3.0.2 + ssri: ^8.0.1 + tar: ^6.0.2 + unique-filename: ^1.1.1 + checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.3 + resolution: "cacache@npm:18.0.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + languageName: node + linkType: hard + +"cache-base@npm:^1.0.1": + version: 1.0.1 + resolution: "cache-base@npm:1.0.1" + dependencies: + collection-visit: ^1.0.0 + component-emitter: ^1.2.1 + get-value: ^2.0.6 + has-value: ^1.0.0 + isobject: ^3.0.1 + set-value: ^2.0.0 + to-object-path: ^0.3.0 + union-value: ^1.0.0 + unset-value: ^1.0.0 + checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + 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 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + +"caller-callsite@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-callsite@npm:2.0.0" + dependencies: + callsites: ^2.0.0 + checksum: b685e9d126d9247b320cfdfeb3bc8da0c4be28d8fb98c471a96bc51aab3130099898a2fe3bf0308f0fe048d64c37d6d09f563958b9afce1a1e5e63d879c128a2 + languageName: node + linkType: hard + +"caller-path@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-path@npm:2.0.0" + dependencies: + caller-callsite: ^2.0.0 + checksum: 3e12ccd0c71ec10a057aac69e3ec175b721ca858c640df021ef0d25999e22f7c1d864934b596b7d47038e9b56b7ec315add042abbd15caac882998b50102fb12 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camel-case@npm:^4.1.1, camel-case@npm:^4.1.2": + version: 4.1.2 + resolution: "camel-case@npm:4.1.2" + dependencies: + pascal-case: ^3.1.2 + tslib: ^2.0.3 + checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 + languageName: node + linkType: hard + +"camelcase@npm:5.3.1, camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.0.0, camelcase@npm:^6.1.0, camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-api@npm:^3.0.0": + version: 3.0.0 + resolution: "caniuse-api@npm:3.0.0" + dependencies: + browserslist: ^4.0.0 + caniuse-lite: ^1.0.0 + lodash.memoize: ^4.1.2 + lodash.uniq: ^4.5.0 + checksum: db2a229383b20d0529b6b589dde99d7b6cb56ba371366f58cbbfa2929c9f42c01f873e2b6ef641d4eda9f0b4118de77dbb2805814670bdad4234bf08e720b0b4 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001629 + resolution: "caniuse-lite@npm:1.0.30001629" + checksum: c5e646e1b309b2a70b01499e0f0fca3a54bc111212f121b32614fe925b8f24ff6c1832a4306ddadf35678fbb11a6a97f953be07ccdc96bce5b530a4f84f40c45 + languageName: node + linkType: hard + +"capital-case@npm:^1.0.4": + version: 1.0.4 + resolution: "capital-case@npm:1.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 + languageName: node + linkType: hard + +"capture-exit@npm:^2.0.0": + version: 2.0.0 + resolution: "capture-exit@npm:2.0.0" + dependencies: + rsvp: ^4.8.4 + checksum: 0b9f10daca09e521da9599f34c8e7af14ad879c336e2bdeb19955b375398ae1c5bcc91ac9f2429944343057ee9ed028b1b2fb28816c384e0e55d70c439b226f4 + languageName: node + linkType: hard + +"case-sensitive-paths-webpack-plugin@npm:2.3.0": + version: 2.3.0 + resolution: "case-sensitive-paths-webpack-plugin@npm:2.3.0" + checksum: 2fa78f7a495d7e73e66d1f528eac5abde65df797c9487624eeae9815a409ba6d584d8fbfe8b6c89157292fbb08d0ee6cc3418fe7f8c75b83fb2c8e29c30f205d + languageName: node + linkType: hard + +"chai@npm:^4.3.7": + version: 4.4.1 + resolution: "chai@npm:4.4.1" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 + pathval: ^1.1.1 + type-detect: ^4.0.8 + checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e + languageName: node + linkType: hard + +"chalk@npm:2.4.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:4.1.1": + version: 4.1.1 + resolution: "chalk@npm:4.1.1" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 036e973e665ba1a32c975e291d5f3d549bceeb7b1b983320d4598fb75d70fe20c5db5d62971ec0fe76cdbce83985a00ee42372416abfc3a5584465005a7855ed + languageName: node + linkType: hard + +"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chalk@npm:^1.1.3": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: ^2.2.1 + escape-string-regexp: ^1.0.2 + has-ansi: ^2.0.0 + strip-ansi: ^3.0.0 + supports-color: ^2.0.0 + checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + languageName: node + linkType: hard + +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 + languageName: node + linkType: hard + +"change-case@npm:^4.1.2": + version: 4.1.2 + resolution: "change-case@npm:4.1.2" + dependencies: + camel-case: ^4.1.2 + capital-case: ^1.0.4 + constant-case: ^3.0.4 + dot-case: ^3.0.4 + header-case: ^2.0.4 + no-case: ^3.0.4 + param-case: ^3.0.4 + pascal-case: ^3.1.2 + path-case: ^3.0.4 + sentence-case: ^3.0.4 + snake-case: ^3.0.4 + tslib: ^2.0.3 + checksum: e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 + languageName: node + linkType: hard + +"check-types@npm:^11.2.3": + version: 11.2.3 + resolution: "check-types@npm:11.2.3" + checksum: f99ff09ae65e63cfcfa40a1275c0a70d8c43ffbf9ac35095f3bf030cc70361c92e075a9975a1144329e50b4fe4620be6bedb4568c18abc96071a3e23aed3ed8e + languageName: node + linkType: hard + +"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d + languageName: node + linkType: hard + +"chokidar@npm:^2.1.8": + version: 2.1.8 + resolution: "chokidar@npm:2.1.8" + dependencies: + anymatch: ^2.0.0 + async-each: ^1.0.1 + braces: ^2.3.2 + fsevents: ^1.2.7 + glob-parent: ^3.1.0 + inherits: ^2.0.3 + is-binary-path: ^1.0.0 + is-glob: ^4.0.0 + normalize-path: ^3.0.0 + path-is-absolute: ^1.0.0 + readdirp: ^2.2.1 + upath: ^1.1.1 + dependenciesMeta: + fsevents: + optional: true + checksum: 0c43e89cbf0268ef1e1f41ce8ec5233c7ba022c6f3282c2ef6530e351d42396d389a1148c5a040f291cf1f4083a4c6b2f51dad3f31c726442ea9a337de316bcf + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^0.6.0": + version: 0.6.0 + resolution: "cjs-module-lexer@npm:0.6.0" + checksum: 445b039607efd74561d7db8d0867031c8b6a69f25e83fdd861b0fa1fbc11f12de057ba1db80637f3c9016774354092af5325eebb90505d65ccc5389cae09d1fd + languageName: node + linkType: hard + +"class-utils@npm:^0.3.5": + version: 0.3.6 + resolution: "class-utils@npm:0.3.6" + dependencies: + arr-union: ^3.1.0 + define-property: ^0.2.5 + isobject: ^3.0.0 + static-extend: ^0.1.1 + checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 + languageName: node + linkType: hard + +"classnames@npm:^2.3.1": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: da424a8a6f3a96a2e87d01a432ba19315503294ac7e025f9fece656db6b6a0f7b5003bb1fbb51cbb0d9624d964f1b9bb35a51c73af9b2434c7b292c42231c1e5 + languageName: node + linkType: hard + +"clean-css@npm:^4.2.3": + version: 4.2.4 + resolution: "clean-css@npm:4.2.4" + dependencies: + source-map: ~0.6.0 + checksum: 045ff6fcf4b5c76a084b24e1633e0c78a13b24080338fc8544565a9751559aa32ff4ee5886d9e52c18a644a6ff119bd8e37bc58e574377c05382a1fb7dbe39f8 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 + languageName: node + linkType: hard + +"cliui@npm:^5.0.0": + version: 5.0.0 + resolution: "cliui@npm:5.0.0" + dependencies: + string-width: ^3.1.0 + strip-ansi: ^5.2.0 + wrap-ansi: ^5.1.0 + checksum: 0bb8779efe299b8f3002a73619eaa8add4081eb8d1c17bc4fedc6240557fb4eacdc08fe87c39b002eacb6cfc117ce736b362dbfd8bf28d90da800e010ee97df4 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"clsx@npm:^1.1.1, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0, clsx@npm:^2.1.0, clsx@npm:^2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: acd3e1ab9d8a433ecb3cc2f6a05ab95fe50b4a3cfc5ba47abb6cbf3754585fcb87b84e90c822a1f256c4198e3b41c7f6c391577ffc8678ad587fc0976b24fd57 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"coa@npm:^2.0.2": + version: 2.0.2 + resolution: "coa@npm:2.0.2" + dependencies: + "@types/q": ^1.5.1 + chalk: ^2.4.1 + q: ^1.1.2 + checksum: 44736914aac2160d3d840ed64432a90a3bb72285a0cd6a688eb5cabdf15d15a85eee0915b3f6f2a4659d5075817b1cb577340d3c9cbb47d636d59ab69f819552 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da + languageName: node + linkType: hard + +"collection-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "collection-visit@npm:1.0.0" + dependencies: + map-visit: ^1.0.0 + object-visit: ^1.0.0 + checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + +"color@npm:^3.0.0": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^4.1.1": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb + languageName: node + linkType: hard + +"component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0": + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d + languageName: node + linkType: hard + +"compose-function@npm:3.0.3": + version: 3.0.3 + resolution: "compose-function@npm:3.0.3" + dependencies: + arity-n: ^1.0.4 + checksum: 9f17d431e3ee4797c844f2870e13494079882ac3dbc54c143b7d99967b371908e0ce7ceb71c6aed61e2ecddbcd7bb437d91428a3d0e6569aee17a87fcbc7918f + languageName: node + linkType: hard + +"compressible@npm:~2.0.16": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: ">= 1.43.0 < 2" + checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.7.4 + resolution: "compression@npm:1.7.4" + dependencies: + accepts: ~1.3.5 + bytes: 3.0.0 + compressible: ~2.0.16 + debug: 2.6.9 + on-headers: ~1.0.2 + safe-buffer: 5.1.2 + vary: ~1.1.2 + checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^1.5.0, concat-stream@npm:^1.5.2": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.0.2 + typedarray: ^0.0.6 + checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 + languageName: node + linkType: hard + +"concurrently@npm:^5.2.0": + version: 5.3.0 + resolution: "concurrently@npm:5.3.0" + dependencies: + chalk: ^2.4.2 + date-fns: ^2.0.1 + lodash: ^4.17.15 + read-pkg: ^4.0.1 + rxjs: ^6.5.2 + spawn-command: ^0.0.2-1 + supports-color: ^6.1.0 + tree-kill: ^1.2.2 + yargs: ^13.3.0 + bin: + concurrently: bin/concurrently.js + checksum: e12f32eab48e50fc5b7752dc43db7c78f5b553efc625d3b8741c3dd3088ba0050cb8e506f008c8a5fe30d7980849639d12b359a5aea88fd16707a0161b05babb + languageName: node + linkType: hard + +"confbox@npm:^0.1.7": + version: 0.1.7 + resolution: "confbox@npm:0.1.7" + checksum: bde836c26f5154a348b0c0a757f8a0138929e5737e0553be3c4f07a056abca618b861aa63ac3b22d344789b56be99a1382928933e08cd500df00213bf4d8fb43 + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10, confusing-browser-globals@npm:^1.0.11": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef + languageName: node + linkType: hard + +"connect-history-api-fallback@npm:^1.6.0": + version: 1.6.0 + resolution: "connect-history-api-fallback@npm:1.6.0" + checksum: 804ca2be28c999032ecd37a9f71405e5d7b7a4b3defcebbe41077bb8c5a0a150d7b59f51dcc33b2de30bc7e217a31d10f8cfad27e8e74c2fc7655eeba82d6e7e + languageName: node + linkType: hard + +"console-browserify@npm:^1.1.0": + version: 1.2.0 + resolution: "console-browserify@npm:1.2.0" + checksum: 226591eeff8ed68e451dffb924c1fb750c654d54b9059b3b261d360f369d1f8f70650adecf2c7136656236a4bfeb55c39281b5d8a55d792ebbb99efd3d848d52 + languageName: node + linkType: hard + +"constant-case@npm:^3.0.4": + version: 3.0.4 + resolution: "constant-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case: ^2.0.2 + checksum: 6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 + languageName: node + linkType: hard + +"constants-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "constants-browserify@npm:1.0.0" + checksum: f7ac8c6d0b6e4e0c77340a1d47a3574e25abd580bfd99ad707b26ff7618596cf1a5e5ce9caf44715e9e01d4a5d12cb3b4edaf1176f34c19adb2874815a56e64f + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 + languageName: node + linkType: hard + +"convert-source-map@npm:1.7.0": + version: 1.7.0 + resolution: "convert-source-map@npm:1.7.0" + dependencies: + safe-buffer: ~5.1.1 + checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 + languageName: node + linkType: hard + +"convert-source-map@npm:^0.3.3": + version: 0.3.5 + resolution: "convert-source-map@npm:0.3.5" + checksum: 33b209aa8f33bcaa9a22f2dbf6bfb71f4a429d8e948068d61b6087304e3194c30016d1e02e842184e653b74442c7e2dd2e7db97532b67f556aded3d8b4377a2c + languageName: node + linkType: hard + +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"cookie-parser@npm:^1.4.5": + version: 1.4.6 + resolution: "cookie-parser@npm:1.4.6" + dependencies: + cookie: 0.4.1 + cookie-signature: 1.0.6 + checksum: 1e5a63aa82e8eb4e02d2977c6902983dee87b02e87ec5ec43ac3cb1e72da354003716570cd5190c0ad9e8a454c9d3237f4ad6e2f16d0902205a96a1c72b77ba5 + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.4.1": + version: 0.4.1 + resolution: "cookie@npm:0.4.1" + checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 + languageName: node + linkType: hard + +"cookie@npm:0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 + languageName: node + linkType: hard + +"cookie@npm:^0.4.2": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b + languageName: node + linkType: hard + +"cookiejar@npm:^2.1.4": + version: 2.1.4 + resolution: "cookiejar@npm:2.1.4" + checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b + languageName: node + linkType: hard + +"copy-concurrently@npm:^1.0.0": + version: 1.0.5 + resolution: "copy-concurrently@npm:1.0.5" + dependencies: + aproba: ^1.1.1 + fs-write-stream-atomic: ^1.0.8 + iferr: ^0.1.5 + mkdirp: ^0.5.1 + rimraf: ^2.5.4 + run-queue: ^1.0.0 + checksum: 63c169f582e09445260988f697b2d07793d439dfc31e97c8999707bd188dd94d1c7f2ca3533c7786fb75f03a3f2f54ad1ee08055f95f61bb8d2e862498c1d460 + languageName: node + linkType: hard + +"copy-descriptor@npm:^0.1.0": + version: 0.1.1 + resolution: "copy-descriptor@npm:0.1.1" + checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b + languageName: node + linkType: hard + +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": + version: 3.37.1 + resolution: "core-js-compat@npm:3.37.1" + dependencies: + browserslist: ^4.23.0 + checksum: 5e7430329358bced08c30950512d2081aea0a5652b4c5892cbb3c4a6db05b0d3893a191a955162a07fdb5f4fe74e61b6429fdb503f54e062336d76e43c9555d9 + languageName: node + linkType: hard + +"core-js-pure@npm:^3.30.2": + version: 3.37.1 + resolution: "core-js-pure@npm:3.37.1" + checksum: a13a40e3951975cffef12a0933d3dbf1ecedbf9821e1ec8024884b587744951ad30e3762a86bcb8e2a18fdd4b8d7c8971b2391605329799fc04e1fc1e1397dc1 + languageName: node + linkType: hard + +"core-js@npm:^2.4.0": + version: 2.6.12 + resolution: "core-js@npm:2.6.12" + checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 + languageName: node + linkType: hard + +"core-js@npm:^3.6.5": + version: 3.37.1 + resolution: "core-js@npm:3.37.1" + checksum: 2d58a5c599f05c3e04abc8bc5e64b88eb17d914c0f552f670fb800afa74ec54b4fcc7f231ad6bd45badaf62c0fb0ce30e6fe89cedb6bb6d54e6f19115c3c17ff + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cors@npm:^2.8.5": + version: 2.8.5 + resolution: "cors@npm:2.8.5" + dependencies: + object-assign: ^4 + vary: ^1 + checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 + languageName: node + linkType: hard + +"cosmiconfig@npm:^5.0.0": + version: 5.2.1 + resolution: "cosmiconfig@npm:5.2.1" + dependencies: + import-fresh: ^2.0.0 + is-directory: ^0.3.1 + js-yaml: ^3.13.1 + parse-json: ^4.0.0 + checksum: 8b6f1d3c8a5ffdf663a952f17af0761adf210b7a5933d0fe8988f3ca3a1f0e1e5cbbb74d5b419c15933dd2fdcaec31dbc5cc85cb8259a822342b93b529eff89c + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + 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 + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + languageName: node + linkType: hard + +"create-ecdh@npm:^4.0.0": + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" + dependencies: + bn.js: ^4.1.0 + elliptic: ^6.5.3 + checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: ^1.0.1 + inherits: ^2.0.1 + md5.js: ^1.3.4 + ripemd160: ^2.0.1 + sha.js: ^2.4.0 + checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + dependencies: + cipher-base: ^1.0.3 + create-hash: ^1.1.0 + inherits: ^2.0.1 + ripemd160: ^2.0.0 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.0": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 + languageName: node + linkType: hard + +"crypto-browserify@npm:^3.11.0": + version: 3.12.0 + resolution: "crypto-browserify@npm:3.12.0" + dependencies: + browserify-cipher: ^1.0.0 + browserify-sign: ^4.0.0 + create-ecdh: ^4.0.0 + create-hash: ^1.1.0 + create-hmac: ^1.1.0 + diffie-hellman: ^5.0.0 + inherits: ^2.0.1 + pbkdf2: ^3.0.3 + public-encrypt: ^4.0.0 + randombytes: ^2.0.0 + randomfill: ^1.0.3 + checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 + languageName: node + linkType: hard + +"crypto-random-string@npm:^1.0.0": + version: 1.0.0 + resolution: "crypto-random-string@npm:1.0.0" + checksum: 6fc61a46c18547b49a93da24f4559c4a1c859f4ee730ecc9533c1ba89fa2a9e9d81f390c2789467afbbd0d1c55a6e96a71e4716b6cd3e77736ed5fced7a2df9a + languageName: node + linkType: hard + +"css-blank-pseudo@npm:^0.1.4": + version: 0.1.4 + resolution: "css-blank-pseudo@npm:0.1.4" + dependencies: + postcss: ^7.0.5 + bin: + css-blank-pseudo: cli.js + checksum: f995a6ca5dbb867af4b30c3dc872a8f0b27ad120442c34796eef7f9c4dcf014249522aaa0a2da3c101c4afa5d7d376436bb978ae1b2c02deddec283fad30c998 + languageName: node + linkType: hard + +"css-box-model@npm:^1.2.1": + version: 1.2.1 + resolution: "css-box-model@npm:1.2.1" + dependencies: + tiny-invariant: ^1.0.6 + checksum: 4d113f26fed6b9150e2c314502d00dabe06f12ae43a01a7e9b6e57f3de49b4281dbb0dc46a1158a7349618f8f34d9250af57cb43d7337e9485e73e6b821e470e + languageName: node + linkType: hard + +"css-color-names@npm:0.0.4, css-color-names@npm:^0.0.4": + version: 0.0.4 + resolution: "css-color-names@npm:0.0.4" + checksum: 9c6106320430a9da3a13daab8d8b4def39113edbfb68042444585d9a214af5fd5cb384b9be45124bc75f88261d461b517e00e278f4d2e0ab5a619b182f9f0e2d + languageName: node + linkType: hard + +"css-declaration-sorter@npm:^4.0.1": + version: 4.0.1 + resolution: "css-declaration-sorter@npm:4.0.1" + dependencies: + postcss: ^7.0.1 + timsort: ^0.3.0 + checksum: c38c00245c6706bd1127a6a2807bbdea3a2621c1f4e4bcb4710f6736c15c4ec414e02213adeab2171623351616090cb96374f683b90ec2aad18903066c4526d7 + languageName: node + linkType: hard + +"css-has-pseudo@npm:^0.10.0": + version: 0.10.0 + resolution: "css-has-pseudo@npm:0.10.0" + dependencies: + postcss: ^7.0.6 + postcss-selector-parser: ^5.0.0-rc.4 + bin: + css-has-pseudo: cli.js + checksum: 88d891ba18f821e8a94d821ecdd723c606019462664c7d86e7d8731622bd26f9d55582e494bcc2a62f9399cc7b89049ddc8a9d1e8f1bf1a133c2427739d2d334 + languageName: node + linkType: hard + +"css-loader@npm:4.3.0": + version: 4.3.0 + resolution: "css-loader@npm:4.3.0" + dependencies: + camelcase: ^6.0.0 + cssesc: ^3.0.0 + icss-utils: ^4.1.1 + loader-utils: ^2.0.0 + postcss: ^7.0.32 + postcss-modules-extract-imports: ^2.0.0 + postcss-modules-local-by-default: ^3.0.3 + postcss-modules-scope: ^2.2.0 + postcss-modules-values: ^3.0.0 + postcss-value-parser: ^4.1.0 + schema-utils: ^2.7.1 + semver: ^7.3.2 + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + checksum: 697a8838f0975f86c634e7a920572604879a9738128fcc01e5393fae5ac9a7a1a925c0d14ebb6ed67fa7e14bd17849eec152a99e3299cc92f422f6b0cd4eff73 + languageName: node + linkType: hard + +"css-modules-loader-core@npm:^1.1.0": + version: 1.1.0 + resolution: "css-modules-loader-core@npm:1.1.0" + dependencies: + icss-replace-symbols: 1.1.0 + postcss: 6.0.1 + postcss-modules-extract-imports: 1.1.0 + postcss-modules-local-by-default: 1.2.0 + postcss-modules-scope: 1.1.0 + postcss-modules-values: 1.3.0 + checksum: e2d513cee6a407b46806e50b3eec9d9034355b6ee14f2f7303353ab0853b8dba9600cffc83ec46cebd3efd68fe2b2aa31808a1c906d043f1c405568fd484eaf5 + languageName: node + linkType: hard + +"css-prefers-color-scheme@npm:^3.1.1": + version: 3.1.1 + resolution: "css-prefers-color-scheme@npm:3.1.1" + dependencies: + postcss: ^7.0.5 + bin: + css-prefers-color-scheme: cli.js + checksum: ba69a86b006818ffe3548bcbeb5e4e8139b8b6cf45815a3b3dddd12cd9acf3d8ac3b94e63fe0abd34e0683cf43ed8c2344e3bd472bbf02a6eb40c7bbf565d587 + languageName: node + linkType: hard + +"css-select-base-adapter@npm:^0.1.1": + version: 0.1.1 + resolution: "css-select-base-adapter@npm:0.1.1" + checksum: c107e9cfa53a23427e4537451a67358375e656baa3322345a982d3c2751fb3904002aae7e5d72386c59f766fe6b109d1ffb43eeab1c16f069f7a3828eb17851c + languageName: node + linkType: hard + +"css-select@npm:^2.0.0": + version: 2.1.0 + resolution: "css-select@npm:2.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^3.2.1 + domutils: ^1.7.0 + nth-check: ^1.0.2 + checksum: 0c4099910f2411e2a9103cf92ea6a4ad738b57da75bcf73d39ef2c14a00ef36e5f16cb863211c901320618b24ace74da6333442d82995cafd5040077307de462 + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 + languageName: node + linkType: hard + +"css-selector-tokenizer@npm:^0.7.0": + version: 0.7.3 + resolution: "css-selector-tokenizer@npm:0.7.3" + dependencies: + cssesc: ^3.0.0 + fastparse: ^1.1.2 + checksum: 92560a9616a8bc073b88c678aa04f22c599ac23c5f8587e60f4861069e2d5aeb37b722af581ae3c5fbce453bed7a893d9c3e06830912e6d28badc3b8b99acd24 + languageName: node + linkType: hard + +"css-tree@npm:1.0.0-alpha.37": + version: 1.0.0-alpha.37 + resolution: "css-tree@npm:1.0.0-alpha.37" + dependencies: + mdn-data: 2.0.4 + source-map: ^0.6.1 + checksum: 0e419a1388ec0fbbe92885fba4a557f9fb0e077a2a1fad629b7245bbf7b4ef5df49e6877401b952b09b9057ffe1a3dba74f6fdfbf7b2223a5a35bce27ff2307d + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: 2.0.14 + source-map: ^0.6.1 + checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + languageName: node + linkType: hard + +"css-what@npm:^3.2.1": + version: 3.4.2 + resolution: "css-what@npm:3.4.2" + checksum: 26bb5ec3ae718393d418016365c849fa14bd0de408c735dea3ddf58146b6cc54f3b336fb4afd31d95c06ca79583acbcdfec7ee93d31ff5c1a697df135b38dfeb + languageName: node + linkType: hard + +"css-what@npm:^6.0.1": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe + languageName: node + linkType: hard + +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 + languageName: node + linkType: hard + +"css@npm:^2.0.0": + version: 2.2.4 + resolution: "css@npm:2.2.4" + dependencies: + inherits: ^2.0.3 + source-map: ^0.6.1 + source-map-resolve: ^0.5.2 + urix: ^0.1.0 + checksum: a35d483c5ccc04bcde3b1e7393d58ad3eee1dd6956df0f152de38e46a17c0ee193c30eec6b1e59831ad0e74599385732000e95987fcc9cb2b16c6d951bae49e1 + languageName: node + linkType: hard + +"cssdb@npm:^4.4.0": + version: 4.4.0 + resolution: "cssdb@npm:4.4.0" + checksum: 521dd2135da1ab93612a4161eb1024cfc7b155a35d95f9867d328cc88ad57fdd959aa88ea8f4e6cea3a82bca91b76570dc1abb18bfd902c6889973956a03e497 + languageName: node + linkType: hard + +"cssesc@npm:^2.0.0": + version: 2.0.0 + resolution: "cssesc@npm:2.0.0" + bin: + cssesc: bin/cssesc + checksum: 5e50886c2aca3f492fe808dbd146d30eb1c6f31fbe6093979a8376e39d171d989279199f6f3f1a42464109e082e0e42bc33eeff9467fb69bf346f5ba5853c3c6 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"cssnano-preset-default@npm:^4.0.8": + version: 4.0.8 + resolution: "cssnano-preset-default@npm:4.0.8" + dependencies: + css-declaration-sorter: ^4.0.1 + cssnano-util-raw-cache: ^4.0.1 + postcss: ^7.0.0 + postcss-calc: ^7.0.1 + postcss-colormin: ^4.0.3 + postcss-convert-values: ^4.0.1 + postcss-discard-comments: ^4.0.2 + postcss-discard-duplicates: ^4.0.2 + postcss-discard-empty: ^4.0.1 + postcss-discard-overridden: ^4.0.1 + postcss-merge-longhand: ^4.0.11 + postcss-merge-rules: ^4.0.3 + postcss-minify-font-values: ^4.0.2 + postcss-minify-gradients: ^4.0.2 + postcss-minify-params: ^4.0.2 + postcss-minify-selectors: ^4.0.2 + postcss-normalize-charset: ^4.0.1 + postcss-normalize-display-values: ^4.0.2 + postcss-normalize-positions: ^4.0.2 + postcss-normalize-repeat-style: ^4.0.2 + postcss-normalize-string: ^4.0.2 + postcss-normalize-timing-functions: ^4.0.2 + postcss-normalize-unicode: ^4.0.1 + postcss-normalize-url: ^4.0.1 + postcss-normalize-whitespace: ^4.0.2 + postcss-ordered-values: ^4.1.2 + postcss-reduce-initial: ^4.0.3 + postcss-reduce-transforms: ^4.0.2 + postcss-svgo: ^4.0.3 + postcss-unique-selectors: ^4.0.1 + checksum: eb32c9fdd8bd4683e33d62284b6a9c4eb705b745235f4bb51a5571e1eb6738f636958fc9a6218fb51de43e0e2f74386a705b4c7ff2d1dcc611647953ba6ce159 + languageName: node + linkType: hard + +"cssnano-util-get-arguments@npm:^4.0.0": + version: 4.0.0 + resolution: "cssnano-util-get-arguments@npm:4.0.0" + checksum: 34222a1e848d573b74892eda7d7560c5422efa56f87d2b5242f9791593c6aa4ddc9d55e8e1708fb2f0d6f87c456314b78d93d3eec97d946ff756c63b09b72222 + languageName: node + linkType: hard + +"cssnano-util-get-match@npm:^4.0.0": + version: 4.0.0 + resolution: "cssnano-util-get-match@npm:4.0.0" + checksum: 56eacea0eb3d923359c9714ab25edde5eb4859e495954615d5529e81cdfabc2d41b57055c7f6a2f08e7d89df3a2794ef659306b539505d7f4e7202b897396fc2 + languageName: node + linkType: hard + +"cssnano-util-raw-cache@npm:^4.0.1": + version: 4.0.1 + resolution: "cssnano-util-raw-cache@npm:4.0.1" + dependencies: + postcss: ^7.0.0 + checksum: 66a23e5e5255ff65d0f49f135d0ddfdb96433aeceb2708a31e4b4a652110755f103f6c91e0f439c8f3052818eb2b04ebf6334680a810296290e2c3467c14202b + languageName: node + linkType: hard + +"cssnano-util-same-parent@npm:^4.0.0": + version: 4.0.1 + resolution: "cssnano-util-same-parent@npm:4.0.1" + checksum: 97c6b3f670ee9d1d6342b6a1daf9867d5c08644365dc146bd76defd356069112148e382ca86fc3e6c55adf0687974f03535bba34df95efb468b266d2319c7b66 + languageName: node + linkType: hard + +"cssnano@npm:^4.1.10": + version: 4.1.11 + resolution: "cssnano@npm:4.1.11" + dependencies: + cosmiconfig: ^5.0.0 + cssnano-preset-default: ^4.0.8 + is-resolvable: ^1.0.0 + postcss: ^7.0.0 + checksum: 2453fbe9f9f9e2ffe87dc5c718578f1b801fc7b82eaad12f5564c84bb0faf1774ea52e01874ecd29d1782aa7d0d84f0dbc95001eed9866ebd9bc523638999c9b + languageName: node + linkType: hard + +"csso@npm:^4.0.2": + version: 4.2.0 + resolution: "csso@npm:4.2.0" + dependencies: + css-tree: ^1.1.2 + checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 + languageName: node + linkType: hard + +"cssom@npm:^0.4.4": + version: 0.4.4 + resolution: "cssom@npm:0.4.4" + checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: ~0.3.6 + checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.1.3": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 + languageName: node + linkType: hard + +"customize-cra@npm:^0.9.1": + version: 0.9.1 + resolution: "customize-cra@npm:0.9.1" + dependencies: + lodash.flow: ^3.5.0 + checksum: d616e4c21f231860b7cad445a52ec5c2b658c4fba9db35f4f60d943d00caeecb140562f89f4ef901b6ef4d6b16f3b6bddff3802358389ae1ab0f0eef936a66ab + languageName: node + linkType: hard + +"cyclist@npm:^1.0.1": + version: 1.0.2 + resolution: "cyclist@npm:1.0.2" + checksum: d7c0336565b9b72ee72347831cbd05fadcc59cc9ab89dcf38293b1a64c2c5fb777c9ce44967390dabe8235f9898f5cb222cd6672f4920b757da8861310082716 + languageName: node + linkType: hard + +"d@npm:1, d@npm:^1.0.1, d@npm:^1.0.2": + version: 1.0.2 + resolution: "d@npm:1.0.2" + dependencies: + es5-ext: ^0.10.64 + type: ^2.7.2 + checksum: 775db1e8ced6707cddf64a5840522fcf5475d38ef49a5d615be0ac47f86ef64d15f5a73de1522b09327cc466d4dc35ea83dbfeed456f7a0fdcab138deb800355 + languageName: node + linkType: hard + +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de + languageName: node + linkType: hard + +"data-urls@npm:^2.0.0": + version: 2.0.0 + resolution: "data-urls@npm:2.0.0" + dependencies: + abab: ^2.0.3 + whatwg-mimetype: ^2.3.0 + whatwg-url: ^8.0.0 + checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + +"date-fns@npm:^2.0.1": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": ^7.21.0 + checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 + languageName: node + linkType: hard + +"dayjs@npm:^1.11.10": + version: 1.11.11 + resolution: "dayjs@npm:1.11.11" + checksum: 84788275aad8a87fee4f1ce4be08861df29687aae6b7b43dd65350118a37dda56772a3902f802cb2dc651dfed447a5a8df62d88f0fb900dba8333e411190a5d5 + languageName: node + linkType: hard + +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.5 + resolution: "debug@npm:4.3.5" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + +"dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.3": + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" + dependencies: + type-detect: ^4.0.0 + checksum: 01c3ca78ff40d79003621b157054871411f94228ceb9b2cab78da913c606631c46e8aa79efc4aa0faf3ace3092acd5221255aab3ef0e8e7b438834f0ca9a16c7 + languageName: node + linkType: hard + +"deep-equal@npm:^1.0.1": + version: 1.1.2 + resolution: "deep-equal@npm:1.1.2" + dependencies: + is-arguments: ^1.1.1 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + object-is: ^1.1.5 + object-keys: ^1.1.1 + regexp.prototype.flags: ^1.5.1 + checksum: 2d50f27fff785fb272cdef038ee5365ee5a30ab1aab053976e6a6add44cc60abd99b38179a46a01ac52c5e54ebb220e8f1a3a1954da20678b79c46ef4d97c9db + languageName: node + linkType: hard + +"deep-equal@npm:^2.0.5": + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.5 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.2 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.13 + checksum: ee8852f23e4d20a5626c13b02f415ba443a1b30b4b3d39eaf366d59c4a85e6545d7ec917db44d476a85ae5a86064f7e5f7af7479f38f113995ba869f3a1ddc53 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"default-gateway@npm:^4.2.0": + version: 4.2.0 + resolution: "default-gateway@npm:4.2.0" + dependencies: + execa: ^1.0.0 + ip-regex: ^2.1.0 + checksum: 1f5be765471689c6bab33e0c8b87363c3e2485cc1ab78904d383a8a8293a79f684da2a3303744b112503f986af4ea87d917c63a468ed913e9b0c31588c02d6a4 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"define-property@npm:^0.2.5": + version: 0.2.5 + resolution: "define-property@npm:0.2.5" + dependencies: + is-descriptor: ^0.1.0 + checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 + languageName: node + linkType: hard + +"define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "define-property@npm:1.0.0" + dependencies: + is-descriptor: ^1.0.0 + checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a + languageName: node + linkType: hard + +"define-property@npm:^2.0.2": + version: 2.0.2 + resolution: "define-property@npm:2.0.2" + dependencies: + is-descriptor: ^1.0.2 + isobject: ^3.0.1 + checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 + languageName: node + linkType: hard + +"del@npm:^4.1.1": + version: 4.1.1 + resolution: "del@npm:4.1.1" + dependencies: + "@types/glob": ^7.1.1 + globby: ^6.1.0 + is-path-cwd: ^2.0.0 + is-path-in-cwd: ^2.0.0 + p-map: ^2.0.0 + pify: ^4.0.1 + rimraf: ^2.6.3 + checksum: 521f7da44bd79da841c06d573923d1f64f423aee8b8219c973478d3150ce1dcc024d03ad605929292adbff56d6448bca60d96dcdd2d8a53b46dbcb27e265c94b + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + +"des.js@npm:^1.0.0": + version: 1.1.0 + resolution: "des.js@npm:1.1.0" + dependencies: + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + checksum: 0e9c1584b70d31e20f20a613fc9ef60fbc6a147dfec9e448a168794a4b97ac04d8dc47ea008f1fa93b0f8aaf7c1ead632a5e59ce1913a6079d2d244c9f5ebe33 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"detect-port-alt@npm:1.1.6": + version: 1.1.6 + resolution: "detect-port-alt@npm:1.1.6" + dependencies: + address: ^1.0.1 + debug: ^2.6.0 + bin: + detect: ./bin/detect-port + detect-port: ./bin/detect-port + checksum: 9dc37b1fa4a9dd6d4889e1045849b8d841232b598d1ca888bf712f4035b07a17cf6d537465a0d7323250048d3a5a0540e3b7cf89457efc222f96f77e2c40d16a + languageName: node + linkType: hard + +"dezalgo@npm:^1.0.4": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: ^2.0.0 + wrappy: 1 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 + languageName: node + linkType: hard + +"diff-sequences@npm:^26.6.2": + version: 26.6.2 + resolution: "diff-sequences@npm:26.6.2" + checksum: 79af871776ef149a7ff3345d6b1bf37fe6e81f68632aa5542787851f6f60fba19b0be22fdd1e06046f56ae7382763ccfe94a982c39ee72bd107aef435ecbc0cf + languageName: node + linkType: hard + +"diff-sequences@npm:^28.1.1": + version: 28.1.1 + resolution: "diff-sequences@npm:28.1.1" + checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3, diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"diffie-hellman@npm:^5.0.0": + version: 5.0.3 + resolution: "diffie-hellman@npm:5.0.3" + dependencies: + bn.js: ^4.1.0 + miller-rabin: ^4.0.0 + randombytes: ^2.0.0 + checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dns-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "dns-equal@npm:1.0.0" + checksum: a8471ac849c7c13824f053babea1bc26e2f359394dd5a460f8340d8abd13434be01e3327a5c59d212f8c8997817450efd3f3ac77bec709b21979cf0235644524 + languageName: node + linkType: hard + +"dns-packet@npm:^1.3.1": + version: 1.3.4 + resolution: "dns-packet@npm:1.3.4" + dependencies: + ip: ^1.1.0 + safe-buffer: ^5.0.1 + checksum: 7dd87f85cb4f9d1a99c03470730e3d9385e67dc94f6c13868c4034424a5378631e492f9f1fbc43d3c42f319fbbfe18b6488bb9527c32d34692c52bf1f5eedf69 + languageName: node + linkType: hard + +"dns-txt@npm:^2.0.2": + version: 2.0.2 + resolution: "dns-txt@npm:2.0.2" + dependencies: + buffer-indexof: ^1.0.0 + checksum: 80130b665379ecd991687ae079fbee25d091e03e4c4cef41e7643b977849ac48c2f56bfcb3727e53594d29029b833749811110d9f3fbee1b26a6e6f8096a5cef + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: ~0.4 + checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 + languageName: node + linkType: hard + +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": ^7.8.7 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + languageName: node + linkType: hard + +"dom-serializer@npm:0": + version: 0.2.2 + resolution: "dom-serializer@npm:0.2.2" + dependencies: + domelementtype: ^2.0.1 + entities: ^2.0.0 + checksum: 376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"domain-browser@npm:^1.1.1": + version: 1.2.0 + resolution: "domain-browser@npm:1.2.0" + checksum: 8f1235c7f49326fb762f4675795246a6295e7dd566b4697abec24afdba2460daa7dfbd1a73d31efbf5606b3b7deadb06ce47cf06f0a476e706153d62a4ff2b90 + languageName: node + linkType: hard + +"domelementtype@npm:1": + version: 1.3.1 + resolution: "domelementtype@npm:1.3.1" + checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domexception@npm:^2.0.1": + version: 2.0.1 + resolution: "domexception@npm:2.0.1" + dependencies: + webidl-conversions: ^5.0.0 + checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domutils@npm:^1.7.0": + version: 1.7.0 + resolution: "domutils@npm:1.7.0" + dependencies: + dom-serializer: 0 + domelementtype: 1 + checksum: f60a725b1f73c1ae82f4894b691601ecc6ecb68320d87923ac3633137627c7865725af813ae5d188ad3954283853bcf46779eb50304ec5d5354044569fcefd2b + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 + languageName: node + linkType: hard + +"dot-prop@npm:^5.2.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + +"dotenv-expand@npm:5.1.0": + version: 5.1.0 + resolution: "dotenv-expand@npm:5.1.0" + checksum: 8017675b7f254384915d55f9eb6388e577cf0a1231a28d54b0ca03b782be9501b0ac90ac57338636d395fa59051e6209e9b44b8ddf169ce6076dffb5dea227d3 + languageName: node + linkType: hard + +"dotenv@npm:8.2.0": + version: 8.2.0 + resolution: "dotenv@npm:8.2.0" + checksum: ad4c8e0df3e24b4811c8e93377d048a10a9b213dcd9f062483b4a2d3168f08f10ec9c618c23f5639060d230ccdb174c08761479e9baa29610aa978e1ee66df76 + languageName: node + linkType: hard + +"dotenv@npm:^16.0.1": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"duplexify@npm:^3.4.2, duplexify@npm:^3.6.0": + version: 3.7.1 + resolution: "duplexify@npm:3.7.1" + dependencies: + end-of-stream: ^1.0.0 + inherits: ^2.0.1 + readable-stream: ^2.0.0 + stream-shift: ^1.0.0 + checksum: 3c2ed2223d956a5da713dae12ba8295acb61d9acd966ccbba938090d04f4574ca4dca75cca089b5077c2d7e66101f32e6ea9b36a78ca213eff574e7a8b8accf2 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: ^5.0.1 + checksum: 207f9ab1c2669b8e65540bce29506134613dd5f122cccf1e6a560f4d63f2732d427d938f8481df175505aad94583bcb32c688737bb39a6df0625f903d6d93c03 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"ejs@npm:^2.6.1": + version: 2.7.4 + resolution: "ejs@npm:2.7.4" + checksum: a1d2bfc7d1f0b39e99ae19b20c9469a25aeddba1ffc225db098110b18d566f73772fcdcc740b108cfda7452276f67d7b64eb359f90285414c942f4ae70713371 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.4.668": + version: 1.4.796 + resolution: "electron-to-chromium@npm:1.4.796" + checksum: 29829ba285b2bb765e3abb82023b006f1d214333d045ab434b2c6be964c5ce0a761e992bd9eab09f51ac2b31712a5b003ed34cf891a627bf80f37e79ccddd6ac + languageName: node + linkType: hard + +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" + dependencies: + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb + languageName: node + linkType: hard + +"emittery@npm:^0.7.1": + version: 0.7.2 + resolution: "emittery@npm:0.7.2" + checksum: 908cd933d48a9bcb58ddf39e9a7d4ba1e049de392ccbef010102539a636e03cea2b28218331b7ede41de8165d9ed7f148851c5112ebd2e943117c0f61eff5f10 + languageName: node + linkType: hard + +"emoji-regex@npm:^7.0.1": + version: 7.0.3 + resolution: "emoji-regex@npm:7.0.3" + checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enhanced-resolve@npm:^4.3.0": + version: 4.5.0 + resolution: "enhanced-resolve@npm:4.5.0" + dependencies: + graceful-fs: ^4.1.2 + memory-fs: ^0.5.0 + tapable: ^1.0.0 + checksum: 4d87488584c4d67d356ef4ba04978af4b2d4d18190cb859efac8e8475a34d5d6c069df33faa5a0a22920b0586dbf330f6a08d52bb15a8771a9ce4d70a2da74ba + languageName: node + linkType: hard + +"enquirer@npm:^2.3.5": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: ^4.1.1 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"errno@npm:^0.1.3, errno@npm:~0.1.7": + version: 0.1.8 + resolution: "errno@npm:0.1.8" + dependencies: + prr: ~1.0.1 + bin: + errno: cli.js + checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + 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.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + 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.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 + is-map: ^2.0.2 + is-set: ^2.0.2 + is-string: ^1.0.7 + isarray: ^2.0.5 + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.19": + version: 1.0.19 + resolution: "es-iterator-helpers@npm:1.0.19" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-set-tostringtag: ^2.0.3 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.1.2 + checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.62, es5-ext@npm:^0.10.64, es5-ext@npm:~0.10.14": + version: 0.10.64 + resolution: "es5-ext@npm:0.10.64" + dependencies: + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.3 + esniff: ^2.0.1 + next-tick: ^1.1.0 + checksum: 01179fab0769fdbef213062222f99d0346724dbaccf04b87c0e6ee7f0c97edabf14be647ca1321f0497425ea7145de0fd278d1b3f3478864b8933e7136a5c645 + languageName: node + linkType: hard + +"es6-iterator@npm:2.0.3, es6-iterator@npm:^2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: 1 + es5-ext: ^0.10.35 + es6-symbol: ^3.1.1 + checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": + version: 3.1.4 + resolution: "es6-symbol@npm:3.1.4" + dependencies: + d: ^1.0.2 + ext: ^1.7.0 + checksum: 52125ec4b5d1b6b93b8d3d42830bb19f8da21080ffcf45253b614bc6ff3e31349be202fb745d4d1af6778cdf5e38fea30e0c7e7dc37e2aecd44acc43502055f9 + languageName: node + linkType: hard + +"esbuild-android-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-android-64@npm:0.14.54" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"esbuild-android-arm64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-android-arm64@npm:0.14.54" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-darwin-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-darwin-64@npm:0.14.54" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"esbuild-darwin-arm64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-darwin-arm64@npm:0.14.54" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-freebsd-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-freebsd-64@npm:0.14.54" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-freebsd-arm64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-freebsd-arm64@npm:0.14.54" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-linux-32@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-32@npm:0.14.54" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"esbuild-linux-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-64@npm:0.14.54" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"esbuild-linux-arm64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-arm64@npm:0.14.54" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"esbuild-linux-arm@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-arm@npm:0.14.54" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"esbuild-linux-mips64le@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-mips64le@npm:0.14.54" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"esbuild-linux-ppc64le@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-ppc64le@npm:0.14.54" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"esbuild-linux-riscv64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-riscv64@npm:0.14.54" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"esbuild-linux-s390x@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-linux-s390x@npm:0.14.54" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"esbuild-netbsd-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-netbsd-64@npm:0.14.54" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-openbsd-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-openbsd-64@npm:0.14.54" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"esbuild-sunos-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-sunos-64@npm:0.14.54" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"esbuild-windows-32@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-windows-32@npm:0.14.54" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"esbuild-windows-64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-windows-64@npm:0.14.54" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"esbuild-windows-arm64@npm:0.14.54": + version: 0.14.54 + resolution: "esbuild-windows-arm64@npm:0.14.54" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"esbuild@npm:^0.14.21": + version: 0.14.54 + resolution: "esbuild@npm:0.14.54" + dependencies: + "@esbuild/linux-loong64": 0.14.54 + esbuild-android-64: 0.14.54 + esbuild-android-arm64: 0.14.54 + esbuild-darwin-64: 0.14.54 + esbuild-darwin-arm64: 0.14.54 + esbuild-freebsd-64: 0.14.54 + esbuild-freebsd-arm64: 0.14.54 + esbuild-linux-32: 0.14.54 + esbuild-linux-64: 0.14.54 + esbuild-linux-arm: 0.14.54 + esbuild-linux-arm64: 0.14.54 + esbuild-linux-mips64le: 0.14.54 + esbuild-linux-ppc64le: 0.14.54 + esbuild-linux-riscv64: 0.14.54 + esbuild-linux-s390x: 0.14.54 + esbuild-netbsd-64: 0.14.54 + esbuild-openbsd-64: 0.14.54 + esbuild-sunos-64: 0.14.54 + esbuild-windows-32: 0.14.54 + esbuild-windows-64: 0.14.54 + esbuild-windows-arm64: 0.14.54 + dependenciesMeta: + "@esbuild/linux-loong64": + optional: true + esbuild-android-64: + optional: true + esbuild-android-arm64: + optional: true + esbuild-darwin-64: + optional: true + esbuild-darwin-arm64: + optional: true + esbuild-freebsd-64: + optional: true + esbuild-freebsd-arm64: + optional: true + esbuild-linux-32: + optional: true + esbuild-linux-64: + optional: true + esbuild-linux-arm: + optional: true + esbuild-linux-arm64: + optional: true + esbuild-linux-mips64le: + optional: true + esbuild-linux-ppc64le: + optional: true + esbuild-linux-riscv64: + optional: true + esbuild-linux-s390x: + optional: true + esbuild-netbsd-64: + optional: true + esbuild-openbsd-64: + optional: true + esbuild-sunos-64: + optional: true + esbuild-windows-32: + optional: true + esbuild-windows-64: + optional: true + esbuild-windows-arm64: + optional: true + bin: + esbuild: bin/esbuild + checksum: 49e360b1185c797f5ca3a7f5f0a75121494d97ddf691f65ed1796e6257d318f928342a97f559bb8eced6a90cf604dd22db4a30e0dbbf15edd9dbf22459b639af + languageName: node + linkType: hard + +"esbuild@npm:^0.18.10": + version: 0.18.20 + resolution: "esbuild@npm:0.18.20" + dependencies: + "@esbuild/android-arm": 0.18.20 + "@esbuild/android-arm64": 0.18.20 + "@esbuild/android-x64": 0.18.20 + "@esbuild/darwin-arm64": 0.18.20 + "@esbuild/darwin-x64": 0.18.20 + "@esbuild/freebsd-arm64": 0.18.20 + "@esbuild/freebsd-x64": 0.18.20 + "@esbuild/linux-arm": 0.18.20 + "@esbuild/linux-arm64": 0.18.20 + "@esbuild/linux-ia32": 0.18.20 + "@esbuild/linux-loong64": 0.18.20 + "@esbuild/linux-mips64el": 0.18.20 + "@esbuild/linux-ppc64": 0.18.20 + "@esbuild/linux-riscv64": 0.18.20 + "@esbuild/linux-s390x": 0.18.20 + "@esbuild/linux-x64": 0.18.20 + "@esbuild/netbsd-x64": 0.18.20 + "@esbuild/openbsd-x64": 0.18.20 + "@esbuild/sunos-x64": 0.18.20 + "@esbuild/win32-arm64": 0.18.20 + "@esbuild/win32-ia32": 0.18.20 + "@esbuild/win32-x64": 0.18.20 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b + languageName: node + linkType: hard + +"escalade@npm:^3.0.2, escalade@npm:^3.1.1, escalade@npm:^3.1.2": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:2.0.0, escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^1.8.1": + version: 1.14.3 + resolution: "escodegen@npm:1.14.3" + dependencies: + esprima: ^4.0.1 + estraverse: ^4.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.5.0": + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 + languageName: node + linkType: hard + +"eslint-config-react-app@npm:^6.0.0": + version: 6.0.0 + resolution: "eslint-config-react-app@npm:6.0.0" + dependencies: + confusing-browser-globals: ^1.0.10 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^4.0.0 + "@typescript-eslint/parser": ^4.0.0 + babel-eslint: ^10.0.0 + eslint: ^7.5.0 + eslint-plugin-flowtype: ^5.2.0 + eslint-plugin-import: ^2.22.0 + eslint-plugin-jest: ^24.0.0 + eslint-plugin-jsx-a11y: ^6.3.1 + eslint-plugin-react: ^7.20.3 + eslint-plugin-react-hooks: ^4.0.8 + eslint-plugin-testing-library: ^3.9.0 + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + eslint-plugin-testing-library: + optional: true + checksum: b265852455b1c10e9c5f0cebe199306fffc7f8e1b6548fcb0bccdc4415c288dfee8ab10717122a32275b91130dfb482dcbbc87d2fb79d8728d4c2bfa889f0915 + languageName: node + linkType: hard + +"eslint-config-react-app@npm:^7.0.1": + version: 7.0.1 + resolution: "eslint-config-react-app@npm:7.0.1" + 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 + peerDependencies: + eslint: ^8.0.0 + checksum: a67e0821809e62308d6e419753fa2acfc7cd353659fab08cf34735f59c6c66910c0b6fda0471c4ec0d712ce762d65efc6431b39569f8d575e2d9bdfc384e0824 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.8.0": + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d + languageName: node + linkType: hard + +"eslint-plugin-cypress@npm:latest": + version: 3.5.0 + resolution: "eslint-plugin-cypress@npm:3.5.0" + dependencies: + globals: ^13.20.0 + peerDependencies: + eslint: ">=7" + checksum: b13b3e6c0074ab4246f15072f1c4877ffff0b14a891b0e3714cb13b449515446e814df29cbcf63b60dc09a8d301271f1434ded18398f9aa3f11005a3899bc265 + languageName: node + linkType: hard + +"eslint-plugin-flowtype@npm:^5.2.0": + version: 5.10.0 + resolution: "eslint-plugin-flowtype@npm:5.10.0" + dependencies: + lodash: ^4.17.15 + string-natural-compare: ^3.0.1 + peerDependencies: + eslint: ^7.1.0 + checksum: 791cd53c886bf819d52d6353cdfb4d49276dcd8a14f564a85d275d5017d81c7b1cc1921013ac9749f69c3f1bc4d23f36182137aab42bc059c2ae3f9773dd7740 + languageName: node + linkType: hard + +"eslint-plugin-flowtype@npm:^8.0.3": + version: 8.0.3 + resolution: "eslint-plugin-flowtype@npm:8.0.3" + dependencies: + lodash: ^4.17.21 + string-natural-compare: ^3.0.1 + peerDependencies: + "@babel/plugin-syntax-flow": ^7.14.5 + "@babel/plugin-transform-react-jsx": ^7.14.9 + eslint: ^8.1.0 + checksum: 30e63c5357b0b5571f39afed51e59c140084f4aa53c106b1fd04f26da42b268908466daa6020b92943e71409bdaee1c67202515ed9012404d027cc92cb03cefa + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.22.1, eslint-plugin-import@npm:^2.25.3": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" + 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 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^24.1.0": + version: 24.7.0 + resolution: "eslint-plugin-jest@npm:24.7.0" + dependencies: + "@typescript-eslint/experimental-utils": ^4.0.1 + peerDependencies: + "@typescript-eslint/eslint-plugin": ">= 4" + eslint: ">=5" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^25.3.0": + version: 25.7.0 + resolution: "eslint-plugin-jest@npm:25.7.0" + dependencies: + "@typescript-eslint/experimental-utils": ^5.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 + checksum: fc6da96131f4cbf33d15ef911ec8e600ccd71deb97d73c0ca340427cef7b01ff41a797e2e7d1e351abf97321a46ed0c0acff5ee8eeedac94961dd6dad1f718a9 + languageName: node + linkType: hard + +"eslint-plugin-jsx-a11y@npm:^6.3.1, eslint-plugin-jsx-a11y@npm:^6.5.1": + version: 6.8.0 + resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" + 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 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=7.28.0" + prettier: ">=2.0.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 + languageName: node + linkType: hard + +"eslint-plugin-react-hooks@npm:^4.2.0, eslint-plugin-react-hooks@npm:^4.3.0": + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 395c433610f59577cfcf3f2e42bcb130436c8a0b3777ac64f441d88c5275f4fcfc89094cedab270f2822daf29af1079151a7a6579a8e9ea8cee66540ba0384c4 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.21.5, eslint-plugin-react@npm:^7.27.1": + version: 7.34.2 + resolution: "eslint-plugin-react@npm:7.34.2" + dependencies: + array-includes: ^3.1.8 + array.prototype.findlast: ^1.2.5 + array.prototype.flatmap: ^1.3.2 + array.prototype.toreversed: ^1.1.2 + array.prototype.tosorted: ^1.1.3 + doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.19 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.8 + object.fromentries: ^2.0.8 + object.hasown: ^1.1.4 + object.values: ^1.2.0 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.5 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.11 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: aed331239f3a64fcd884380534ece4b8716f1eca4899c8636d04306879e6b4e7339e28e427bdd571d372b78b713025e0767e5f5b5486a8d19bff82616ebe8959 + languageName: node + linkType: hard + +"eslint-plugin-testing-library@npm:^3.9.2": + version: 3.10.2 + resolution: "eslint-plugin-testing-library@npm:3.10.2" + dependencies: + "@typescript-eslint/experimental-utils": ^3.10.1 + peerDependencies: + eslint: ^5 || ^6 || ^7 + checksum: 3859d4a4816b130cfefc3b45bc7d303aff19b8d4e83a5e35ca3d634de9f3c4aa1b4340cb4f41e2d1bfe70b173562b9882c58ac48be4e07ddf6a1f88659e2604d + languageName: node + linkType: hard + +"eslint-plugin-testing-library@npm:^5.0.1": + version: 5.11.1 + resolution: "eslint-plugin-testing-library@npm:5.11.1" + dependencies: + "@typescript-eslint/utils": ^5.58.0 + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + checksum: 9f3fc68ef9f13016a4381b33ab5dbffcc189e5de3eaeba184bcf7d2771faa7f54e59c04b652162fb1c0f83fb52428dd909db5450a25508b94be59eba69fcc990 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^4.0.3": + version: 4.0.3 + resolution: "eslint-scope@npm:4.0.3" + dependencies: + esrecurse: ^4.1.0 + estraverse: ^4.1.1 + checksum: c5f835f681884469991fe58d76a554688d9c9e50811299ccd4a8f79993a039f5bcb0ee6e8de2b0017d97c794b5832ef3b21c9aac66228e3aa0f7a0485bcfb65b + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint-webpack-plugin@npm:^2.5.2": + version: 2.7.0 + resolution: "eslint-webpack-plugin@npm:2.7.0" + dependencies: + "@types/eslint": ^7.29.0 + arrify: ^2.0.1 + jest-worker: ^27.5.1 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + schema-utils: ^3.1.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^4.0.0 || ^5.0.0 + checksum: b6fd7cf4c49078b345a908b82b0bee06bc82ab0cec214ddd5fe5bb18b065765d52a07ad4077f6bba5830ba2f55f37d8f2208a52d11f34ee29df81153e3124d9c + languageName: node + linkType: hard + +"eslint@npm:^7.0.0, eslint@npm:^7.11.0": + version: 7.32.0 + resolution: "eslint@npm:7.32.0" + dependencies: + "@babel/code-frame": 7.12.11 + "@eslint/eslintrc": ^0.4.3 + "@humanwhocodes/config-array": ^0.5.0 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.0.1 + doctrine: ^3.0.0 + enquirer: ^2.3.5 + escape-string-regexp: ^4.0.0 + eslint-scope: ^5.1.1 + eslint-utils: ^2.1.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.1 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^5.1.2 + globals: ^13.6.0 + ignore: ^4.0.6 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^3.13.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + progress: ^2.0.0 + regexpp: ^3.1.0 + semver: ^7.2.1 + strip-ansi: ^6.0.0 + strip-json-comments: ^3.1.0 + table: ^6.0.9 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + languageName: node + linkType: hard + +"esniff@npm:^2.0.1": + version: 2.0.1 + resolution: "esniff@npm:2.0.1" + dependencies: + d: ^1.0.1 + es5-ext: ^0.10.62 + event-emitter: ^0.3.5 + type: ^2.7.2 + checksum: d814c0e5c39bce9925b2e65b6d8767af72c9b54f35a65f9f3d6e8c606dce9aebe35a9599d30f15b0807743f88689f445163cfb577a425de4fb8c3c5bc16710cc + languageName: node + linkType: hard + +"espree@npm:^7.3.0, espree@npm:^7.3.1": + version: 7.3.1 + resolution: "espree@npm:7.3.1" + dependencies: + acorn: ^7.4.0 + acorn-jsx: ^5.3.1 + eslint-visitor-keys: ^1.3.0 + checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 + languageName: node + linkType: hard + +"esprima@npm:1.2.2": + version: 1.2.2 + resolution: "esprima@npm:1.2.2" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 4f10006f0e315f2f7d8cf6630e465f183512f1ab2e862b11785a133ce37ed1696573deefb5256e510eaa4368342b13b393334477f6ccdcdb8f10e782b0f5e6dc + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.0": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"estree-walker@npm:^0.6.1": + version: 0.6.1 + resolution: "estree-walker@npm:0.6.1" + checksum: 9d6f82a4921f11eec18f8089fb3cce6e53bcf45a8e545c42a2674d02d055fb30f25f90495f8be60803df6c39680c80dcee7f944526867eb7aa1fc9254883b23d + languageName: node + linkType: hard + +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 7e70da539691f6db03a08e7ce94f394ce2eef4180e136d251af299d41f92fb2d28ebcd9a6e393e3728d7970aeb5358705ddf7209d52fbcb2dd4693f95dcf925f + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + +"event-emitter@npm:^0.3.5": + version: 0.3.5 + resolution: "event-emitter@npm:0.3.5" + dependencies: + d: 1 + es5-ext: ~0.10.14 + checksum: 27c1399557d9cd7e0aa0b366c37c38a4c17293e3a10258e8b692a847dd5ba9fb90429c3a5a1eeff96f31f6fa03ccbd31d8ad15e00540b22b22f01557be706030 + languageName: node + linkType: hard + +"eventemitter3@npm:^3.1.0": + version: 3.1.2 + resolution: "eventemitter3@npm:3.1.2" + checksum: 81e4e82b8418f5cfd986d2b4a2fa5397ac4eb8134e09bcb47005545e22fdf8e9e61d5c053d34651112245aae411bdfe6d0ad5511da0400743fef5fc38bfcfbe3 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.0.0, events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"eventsource@npm:^2.0.2": + version: 2.0.2 + resolution: "eventsource@npm:2.0.2" + checksum: c0072d972753e10c705d9b2285b559184bf29d011bc208973dde9c8b6b8b7b6fdad4ef0846cecb249f7b1585e860fdf324cbd2ac854a76bc53649e797496e99a + languageName: node + linkType: hard + +"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: ^1.3.4 + node-gyp: latest + safe-buffer: ^5.1.1 + checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 + languageName: node + linkType: hard + +"exec-sh@npm:^0.3.2": + version: 0.3.6 + resolution: "exec-sh@npm:0.3.6" + checksum: 0be4f06929c8e4834ea4812f29fe59e2dfcc1bc3fc4b4bb71acb38a500c3b394628a05ef7ba432520bc6c5ec4fadab00cc9c513c4ff6a32104965af302e998e0 + languageName: node + linkType: hard + +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: ^6.0.0 + get-stream: ^4.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4 + languageName: node + linkType: hard + +"execa@npm:^4.0.0": + version: 4.1.0 + resolution: "execa@npm:4.1.0" + dependencies: + cross-spawn: ^7.0.0 + get-stream: ^5.0.0 + human-signals: ^1.1.1 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.0 + onetime: ^5.1.0 + signal-exit: ^3.0.2 + strip-final-newline: ^2.0.0 + checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expand-brackets@npm:^2.1.4": + version: 2.1.4 + resolution: "expand-brackets@npm:2.1.4" + dependencies: + debug: ^2.3.3 + define-property: ^0.2.5 + extend-shallow: ^2.0.1 + posix-character-classes: ^0.1.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 + languageName: node + linkType: hard + +"expect@npm:^26.6.0, expect@npm:^26.6.2": + version: 26.6.2 + resolution: "expect@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + ansi-styles: ^4.0.0 + jest-get-type: ^26.3.0 + jest-matcher-utils: ^26.6.2 + jest-message-util: ^26.6.2 + jest-regex-util: ^26.0.0 + checksum: 79a9b888c5c6d37d11f2cb76def6cf1dc8ff098d38662ee20c9f2ee0da67e9a93435f2327854b2e7554732153870621843e7f83e8cefb1250447ee2bc39883a4 + languageName: node + linkType: hard + +"expect@npm:^28.0.0": + version: 28.1.3 + resolution: "expect@npm:28.1.3" + dependencies: + "@jest/expect-utils": ^28.1.3 + jest-get-type: ^28.0.2 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d + languageName: node + linkType: hard + +"expect@npm:^29.0.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"express-jwt@npm:^7.7.5": + version: 7.7.7 + resolution: "express-jwt@npm:7.7.7" + dependencies: + "@types/jsonwebtoken": ^8.5.8 + express-unless: ^2.1.3 + jsonwebtoken: ^8.5.1 + checksum: b3aec510ce490cd8d449604c82ce1debf9b8c215fb0220f78d07e86c555fb06ca93b4199da135c00e62bb98c67a47fac8c1fdcc6ea74f2047f4e2defbc4578fe + languageName: node + linkType: hard + +"express-unless@npm:^2.1.3": + version: 2.1.3 + resolution: "express-unless@npm:2.1.3" + checksum: 14bec87e84266180bd8ad71f43a8d1d70d1c3905be7ca89944a86ae0d31f07a3f98418b619673aa8dd417333bbc7bb0a24172ff806a2e0ef1ee9b6221a4bf056 + languageName: node + linkType: hard + +"express-validator@npm:^6.14.2": + version: 6.15.0 + resolution: "express-validator@npm:6.15.0" + dependencies: + lodash: ^4.17.21 + validator: ^13.9.0 + checksum: 05c6883c7c4313bed11acd77cf81b3f25516418c27283d897e8f245f9591c11757511430d0c65a073a70fcd85346afd8fb23070a498020809bfe8cbbf62d3772 + languageName: node + linkType: hard + +"express@npm:^4.17.1": + version: 4.19.2 + resolution: "express@npm:4.19.2" + 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 + checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 + languageName: node + linkType: hard + +"ext@npm:^1.7.0": + version: 1.7.0 + resolution: "ext@npm:1.7.0" + dependencies: + type: ^2.7.2 + checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: ^0.1.0 + checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + languageName: node + linkType: hard + +"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": + version: 3.0.2 + resolution: "extend-shallow@npm:3.0.2" + dependencies: + assign-symbols: ^1.0.0 + is-extendable: ^1.0.1 + checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 + languageName: node + linkType: hard + +"extend@npm:^3.0.0, extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + +"extglob@npm:^2.0.4": + version: 2.0.4 + resolution: "extglob@npm:2.0.4" + dependencies: + array-unique: ^0.3.2 + define-property: ^1.0.0 + expand-brackets: ^2.1.4 + extend-shallow: ^2.0.1 + fragment-cache: ^0.2.1 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + +"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.9": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + 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 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.1.1": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d + languageName: node + linkType: hard + +"fast-text-encoding@npm:^1.0.0": + version: 1.0.6 + resolution: "fast-text-encoding@npm:1.0.6" + checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 + languageName: node + linkType: hard + +"fastparse@npm:^1.1.2": + version: 1.1.2 + resolution: "fastparse@npm:1.1.2" + checksum: c4d199809dc4e8acafeb786be49481cc9144de296e2d54df4540ccfd868d0df73afc649aba70a748925eb32bbc4208b723d6288adf92382275031a8c7e10c0aa + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: ^1.0.4 + checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + languageName: node + linkType: hard + +"faye-websocket@npm:^0.11.3, faye-websocket@npm:^0.11.4": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: ">=0.5.1" + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figgy-pudding@npm:^3.5.1": + version: 3.5.2 + resolution: "figgy-pudding@npm:3.5.2" + checksum: 4090bd66193693dcda605e44d6b8715d8fb5c92a67acd57826e55cf816a342f550d57e5638f822b39366e1b2fdb244e99b3068a37213aa1d6c1bf602b8fde5ae + languageName: node + linkType: hard + +"figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"file-loader@npm:6.1.1": + version: 6.1.1 + resolution: "file-loader@npm:6.1.1" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 6369da5af456b640599d7ede7a3a9a55e485138a7829c583313d5165d0984c3d337de3aebee32fdfa3295facb4a44b74a9c3c956b1e0e30e8c96152106ff4b23 + languageName: node + linkType: hard + +"file-saver@npm:^2.0.5": + version: 2.0.5 + resolution: "file-saver@npm:2.0.5" + checksum: c62d96e5cebc58b4bdf3ae8a60d5cf9607ad82f75f798c33a4ee63435ac2203002584d5256a2a780eda7feb5e19dc3b6351c2212e58b3f529e63d265a7cc79f7 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + +"filesize@npm:6.1.0": + version: 6.1.0 + resolution: "filesize@npm:6.1.0" + checksum: c46d644cb562fba7b7e837d5cd339394492abaa06722018b91a97d2a63b6c753ef30653de5c03bf178c631185bf55c3561c28fa9ccc4e9755f42d853c6ed4d09 + languageName: node + linkType: hard + +"fill-range@npm:^4.0.0": + version: 4.0.0 + resolution: "fill-range@npm:4.0.0" + dependencies: + extend-shallow: ^2.0.1 + is-number: ^3.0.0 + repeat-string: ^1.6.1 + to-regex-range: ^2.1.0 + checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + 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 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + languageName: node + linkType: hard + +"find-cache-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "find-cache-dir@npm:2.1.0" + dependencies: + commondir: ^1.0.1 + make-dir: ^2.0.0 + pkg-dir: ^3.0.0 + checksum: 60ad475a6da9f257df4e81900f78986ab367d4f65d33cf802c5b91e969c28a8762f098693d7a571b6e4dd4c15166c2da32ae2d18b6766a18e2071079448fdce4 + languageName: node + linkType: hard + +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: ^1.0.1 + make-dir: ^3.0.2 + pkg-dir: ^4.1.0 + checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 + languageName: node + linkType: hard + +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:4.1.0, find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + +"finishline-express@workspace:.": + version: 0.0.0-use.local + resolution: "finishline-express@workspace:." + dependencies: + "@babel/core": ^7.20.5 + "@babel/plugin-transform-object-assign": ^7.18.6 + "@babel/preset-react": ^7.18.6 + "@babel/preset-typescript": ^7.18.6 + "@types/jest": ^28.1.6 + "@types/node": 18.17.1 + "@typescript-eslint/eslint-plugin": 4.18.0 + "@typescript-eslint/parser": 4.18.0 + concurrently: ^5.2.0 + eslint: ^7.0.0 + eslint-config-prettier: ^8.5.0 + eslint-config-react-app: ^7.0.1 + eslint-plugin-cypress: latest + eslint-plugin-prettier: ^4.2.1 + mitt: ^3.0.1 + prettier: ^2.0.5 + react-hook-form-persist: ^3.0.0 + rimraf: ^3.0.2 + ts-node: ^10.9.1 + typescript: ^4.1.5 + languageName: unknown + linkType: soft + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 + languageName: node + linkType: hard + +"flatten@npm:^1.0.2": + version: 1.0.3 + resolution: "flatten@npm:1.0.3" + checksum: 5c57379816f1692aaa79fbc6390e0a0644e5e8442c5783ed57c6d315468eddbc53a659eaa03c9bb1e771b0f4a9bd8dd8a2620286bf21fd6538a7857321fdfb20 + languageName: node + linkType: hard + +"flush-write-stream@npm:^1.0.0": + version: 1.1.1 + resolution: "flush-write-stream@npm:1.1.1" + dependencies: + inherits: ^2.0.3 + readable-stream: ^2.3.6 + checksum: 42e07747f83bcd4e799da802e621d6039787749ffd41f5517f8c4f786ee967e31ba32b09f8b28a9c6f67bd4f5346772e604202df350e8d99f4141771bae31279 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.6": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" + peerDependenciesMeta: + debug: + optional: true + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"fork-ts-checker-webpack-plugin@npm:4.1.6": + version: 4.1.6 + resolution: "fork-ts-checker-webpack-plugin@npm:4.1.6" + dependencies: + "@babel/code-frame": ^7.5.5 + chalk: ^2.4.1 + micromatch: ^3.1.10 + minimatch: ^3.0.4 + semver: ^5.6.0 + tapable: ^1.0.0 + worker-rpc: ^0.1.0 + checksum: 4cc4fa7919dd9a0d765514d064c86e3a6f9cea8e700996b3e775cfcc0280f606a2dd16203d9b7e294b64e900795b0d80eb41fc8c192857d3350e407f14ef3eed + languageName: node + linkType: hard + +"form-data@npm:^2.5.0": + version: 2.5.1 + resolution: "form-data@npm:2.5.1" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.6 + mime-types: ^2.1.12 + checksum: 5134ada56cc246b293a1ac7678dba6830000603a3979cf83ff7b2f21f2e3725202237cfb89e32bcb38a1d35727efbd3c3a22e65b42321e8ade8eec01ce755d08 + languageName: node + linkType: hard + +"form-data@npm:^3.0.0": + version: 3.0.1 + resolution: "form-data@npm:3.0.1" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"formidable@npm:^2.1.2": + version: 2.1.2 + resolution: "formidable@npm:2.1.2" + dependencies: + dezalgo: ^1.0.4 + hexoid: ^1.0.0 + once: ^1.4.0 + qs: ^6.11.0 + checksum: 81c8e5d89f5eb873e992893468f0de22c01678ca3d315db62be0560f9de1c77d4faefc9b1f4575098eb2263b3c81ba1024833a9fc3206297ddbac88a4f69b7a8 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + +"fragment-cache@npm:^0.2.1": + version: 0.2.1 + resolution: "fragment-cache@npm:0.2.1" + dependencies: + map-cache: ^0.2.2 + checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + +"from2@npm:^2.1.0": + version: 2.3.0 + resolution: "from2@npm:2.3.0" + dependencies: + inherits: ^2.0.1 + readable-stream: ^2.0.0 + checksum: 6080eba0793dce32f475141fb3d54cc15f84ee52e420ee22ac3ab0ad639dc95a1875bc6eb9c0e1140e94972a36a89dc5542491b85f1ab8df0c126241e0f1a61b + languageName: node + linkType: hard + +"frontend@workspace:src/frontend": + version: 0.0.0-use.local + resolution: "frontend@workspace:src/frontend" + dependencies: + "@emotion/react": ^11.10.4 + "@emotion/styled": ^11.10.4 + "@hello-pangea/dnd": ^16.6.0 + "@hookform/resolvers": ^2.9.7 + "@mui/icons-material": ^5.10.3 + "@mui/material": ^5.10.3 + "@mui/system": ^5.10.16 + "@mui/x-data-grid": ^5.16.0 + "@mui/x-date-pickers": ^6.19.4 + "@testing-library/dom": ^8.19.0 + "@testing-library/jest-dom": ^5.11.9 + "@testing-library/react": ^11.2.5 + "@testing-library/react-hooks": ^8.0.1 + "@testing-library/user-event": ^12.6.3 + "@types/file-saver": ^2.0.5 + "@types/node": 18.17.1 + "@types/react": ^18.2.15 + "@types/react-dom": ^18.2.7 + "@types/react-helmet": ^6.1.6 + "@types/react-query": ^1.2.9 + "@types/react-router-dom": ^5.1.7 + "@vitejs/plugin-react": ^4.0.0 + axios: ^0.27.2 + bootstrap: ^4.6.0 + classnames: ^2.3.1 + customize-cra: ^0.9.1 + dayjs: ^1.11.10 + file-saver: ^2.0.5 + google-auth-library: ^8.1.1 + jest-fail-on-console: ^3.0.2 + msw: ^0.44.2 + pdf-lib: ^1.17.1 + react: 18.2.0 + react-archer: ^4.4.0 + react-dom: ^18.2.0 + react-draggable: ^4.4.6 + react-google-charts: ^4.0.0 + react-google-login: ^5.2.2 + react-helmet: ^6.1.0 + react-hook-form: ^7.34.0 + react-markdown: ^6.0.0 + react-query: 3.17.0 + react-router-dom: ^5.2.0 + react-scripts: ^4.0.1 + react-use-measure: ^2.1.1 + sass: ^1.54.0 + shared: 1.0.0 + typed-scss-modules: ^6.5.0 + typescript: 4.1.5 + vite: 4.4.5 + vitest: ^0.32.1 + web-vitals: ^0.2.4 + yup: ^0.32.11 + languageName: unknown + linkType: soft + +"fs-extra@npm:^7.0.0": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: ^4.1.2 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.1": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs-write-stream-atomic@npm:^1.0.8": + version: 1.0.10 + resolution: "fs-write-stream-atomic@npm:1.0.10" + dependencies: + graceful-fs: ^4.1.2 + iferr: ^0.1.5 + imurmurhash: ^0.1.4 + readable-stream: 1 || 2 + checksum: 43c2d6817b72127793abc811ebf87a135b03ac7cbe41cdea9eeacf59b23e6e29b595739b083e9461303d525687499a1aaefcec3e5ff9bc82b170edd3dc467ccc + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^1.2.7": + version: 1.2.13 + resolution: "fsevents@npm:1.2.13" + dependencies: + bindings: ^1.5.0 + nan: ^2.12.1 + checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^1.2.7#~builtin": + version: 1.2.13 + resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" + dependencies: + bindings: ^1.5.0 + nan: ^2.12.1 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": + version: 5.1.3 + resolution: "gaxios@npm:5.1.3" + dependencies: + extend: ^3.0.2 + https-proxy-agent: ^5.0.0 + is-stream: ^2.0.0 + node-fetch: ^2.6.9 + checksum: 1cf72697715c64f6db1d6fa6e9243bb57ee14b0c758338a33790ecac2675d819a1fc0c51b2fab312d9bfe8201cc981c171b70ff60adcaaec881c5bc5610c42f1 + languageName: node + linkType: hard + +"gcp-metadata@npm:^5.3.0": + version: 5.3.0 + resolution: "gcp-metadata@npm:5.3.0" + dependencies: + gaxios: ^5.0.0 + json-bigint: ^1.0.0 + checksum: 891ea0b902a17f33d7bae753830d23962b63af94ed071092c30496e7d26f8128ba9af43c3d38474bea29cb32a884b4bcb5720ce8b9de4a7e1108475d3d7ae219 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + 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 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + +"get-own-enumerable-property-symbols@npm:^3.0.0": + version: 3.0.2 + resolution: "get-own-enumerable-property-symbols@npm:3.0.2" + checksum: 8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: ^3.0.0 + checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 + languageName: node + linkType: hard + +"get-stream@npm:^5.0.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + +"get-value@npm:^2.0.3, get-value@npm:^2.0.6": + version: 2.0.6 + resolution: "get-value@npm:2.0.6" + checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb + languageName: node + linkType: hard + +"glob-parent@npm:^3.1.0": + version: 3.1.0 + resolution: "glob-parent@npm:3.1.0" + dependencies: + is-glob: ^3.1.0 + path-dirname: ^1.0.0 + checksum: 653d559237e89a11b9934bef3f392ec42335602034c928590544d383ff5ef449f7b12f3cfa539708e74bc0a6c28ab1fe51d663cc07463cdf899ba92afd85a855 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.1 + resolution: "glob@npm:10.4.1" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde + languageName: node + linkType: hard + +"glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"global-modules@npm:2.0.0": + version: 2.0.0 + resolution: "global-modules@npm:2.0.0" + dependencies: + global-prefix: ^3.0.0 + checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 + languageName: node + linkType: hard + +"global-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "global-prefix@npm:3.0.0" + dependencies: + ini: ^1.3.5 + kind-of: ^6.0.2 + which: ^1.3.1 + checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.20.0, globals@npm:^13.6.0, globals@npm:^13.9.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + languageName: node + linkType: hard + +"globby@npm:11.0.1": + version: 11.0.1 + resolution: "globby@npm:11.0.1" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.1.1 + ignore: ^5.1.4 + merge2: ^1.3.0 + slash: ^3.0.0 + checksum: b0b26e580666ef8caf0b0facd585c1da46eb971207ee9f8c7b690c1372d77602dd072f047f26c3ae1c293807fdf8fb6890d9291d37bc6d2602b1f07386f983e5 + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + 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 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"globby@npm:^6.1.0": + version: 6.1.0 + resolution: "globby@npm:6.1.0" + dependencies: + array-union: ^1.0.1 + glob: ^7.0.3 + object-assign: ^4.0.1 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: 18109d6b9d55643d2b98b59c3cfae7073ccfe39829632f353d516cc124d836c2ddebe48a23f04af63d66a621b6d86dd4cbd7e6af906f2458a7fe510ffc4bd424 + languageName: node + linkType: hard + +"google-auth-library@npm:^8.0.2, google-auth-library@npm:^8.1.1": + version: 8.9.0 + resolution: "google-auth-library@npm:8.9.0" + dependencies: + arrify: ^2.0.0 + base64-js: ^1.3.0 + ecdsa-sig-formatter: ^1.0.11 + fast-text-encoding: ^1.0.0 + gaxios: ^5.0.0 + gcp-metadata: ^5.3.0 + gtoken: ^6.1.0 + jws: ^4.0.0 + lru-cache: ^6.0.0 + checksum: 8e0bc5f1e91804523786413bf4358e4c5ad94b1e873c725ddd03d0f1c242e2b38e26352c0f375334fbc1d94110f761b304aa0429de49b4a27ebc3875a5b56644 + languageName: node + linkType: hard + +"google-p12-pem@npm:^4.0.0": + version: 4.0.1 + resolution: "google-p12-pem@npm:4.0.1" + dependencies: + node-forge: ^1.3.1 + bin: + gp12-pem: build/src/bin/gp12-pem.js + checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd + languageName: node + linkType: hard + +"googleapis-common@npm:^6.0.0": + version: 6.0.4 + resolution: "googleapis-common@npm:6.0.4" + dependencies: + extend: ^3.0.2 + gaxios: ^5.0.1 + google-auth-library: ^8.0.2 + qs: ^6.7.0 + url-template: ^2.0.8 + uuid: ^9.0.0 + checksum: 718db6b533bdbfaef8f50df8ad9c7cf5a145a346dde16601e7380c5a845920c0801fa84b915e82998f9c4fc1ca77022b585fa5e94c3a40ec35600def7b9d94fe + languageName: node + linkType: hard + +"googleapis@npm:^118.0.0": + version: 118.0.0 + resolution: "googleapis@npm:118.0.0" + dependencies: + google-auth-library: ^8.0.2 + googleapis-common: ^6.0.0 + checksum: 9f415214504858ce5ca733d27d0888a837e342ac11f181e2084789275dc0344e73567db0698f34e9c02ed1fc2bd4c71d71abab27f7d91c710011a7f55b0ca86e + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"graphql@npm:^16.3.0": + version: 16.8.1 + resolution: "graphql@npm:16.8.1" + checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 + languageName: node + linkType: hard + +"growly@npm:^1.3.0": + version: 1.3.0 + resolution: "growly@npm:1.3.0" + checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 + languageName: node + linkType: hard + +"gtoken@npm:^6.1.0": + version: 6.1.2 + resolution: "gtoken@npm:6.1.2" + dependencies: + gaxios: ^5.0.1 + google-p12-pem: ^4.0.0 + jws: ^4.0.0 + checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf + languageName: node + linkType: hard + +"gzip-size@npm:5.1.1": + version: 5.1.1 + resolution: "gzip-size@npm:5.1.1" + dependencies: + duplexer: ^0.1.1 + pify: ^4.0.1 + checksum: 6451ba2210877368f6d9ee9b4dc0d14501671472801323bf81fbd38bdeb8525f40a78be45a59d0182895d51e6b60c6314b7d02bd6ed40e7225a01e8d038aac1b + languageName: node + linkType: hard + +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + languageName: node + linkType: hard + +"harmony-reflect@npm:^1.4.6": + version: 1.6.2 + resolution: "harmony-reflect@npm:1.6.2" + checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: ^2.0.0 + checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-flag@npm:1.0.0" + checksum: ce3f8ae978e70f16e4bbe17d3f0f6d6c0a3dd3b62a23f97c91d0fda9ed8e305e13baf95cc5bee4463b9f25ac9f5255de113165c5fb285e01b8065b2ac079b301 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + +"has-value@npm:^0.3.1": + version: 0.3.1 + resolution: "has-value@npm:0.3.1" + dependencies: + get-value: ^2.0.3 + has-values: ^0.1.4 + isobject: ^2.0.0 + checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f + languageName: node + linkType: hard + +"has-value@npm:^1.0.0": + version: 1.0.0 + resolution: "has-value@npm:1.0.0" + dependencies: + get-value: ^2.0.6 + has-values: ^1.0.0 + isobject: ^3.0.0 + checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 + languageName: node + linkType: hard + +"has-values@npm:^0.1.4": + version: 0.1.4 + resolution: "has-values@npm:0.1.4" + checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc + languageName: node + linkType: hard + +"has-values@npm:^1.0.0": + version: 1.0.0 + resolution: "has-values@npm:1.0.0" + dependencies: + is-number: ^3.0.0 + kind-of: ^4.0.0 + checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 + languageName: node + linkType: hard + +"has@npm:^1.0.0": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + languageName: node + linkType: hard + +"hash-base@npm:~3.0": + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + +"header-case@npm:^2.0.4": + version: 2.0.4 + resolution: "header-case@npm:2.0.4" + dependencies: + capital-case: ^1.0.4 + tslib: ^2.0.3 + checksum: 571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 + languageName: node + linkType: hard + +"headers-polyfill@npm:3.2.5": + version: 3.2.5 + resolution: "headers-polyfill@npm:3.2.5" + checksum: a3c4bdd661584fd39e40c0f91412abc514616edfbd20d29a75567e591f90ef5c445c8e209b7f3c2b2375d27e95e4690f33417368a168d4832484a93861ab6a3c + languageName: node + linkType: hard + +"headers-polyfill@npm:^3.0.4": + version: 3.3.0 + resolution: "headers-polyfill@npm:3.3.0" + checksum: 6dd010544b7c1a878aa612b49d9e27d273aa9e8a462e1ae05ca212fafa68e6b7cbdec4765f4e443b2fe70d2818f5d9814eab53fa2ba793bf1e5a6b6eff760474 + languageName: node + linkType: hard + +"hex-color-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "hex-color-regex@npm:1.1.0" + checksum: 44fa1b7a26d745012f3bfeeab8015f60514f72d2fcf10dce33068352456b8d71a2e6bc5a17f933ab470da2c5ab1e3e04b05caf3fefe3c1cabd7e02e516fc8784 + languageName: node + linkType: hard + +"hexoid@npm:^1.0.0": + version: 1.0.0 + resolution: "hexoid@npm:1.0.0" + checksum: 27a148ca76a2358287f40445870116baaff4a0ed0acc99900bf167f0f708ffd82e044ff55e9949c71963852b580fc024146d3ac6d5d76b508b78d927fa48ae2d + languageName: node + linkType: hard + +"history@npm:^4.9.0": + version: 4.10.1 + resolution: "history@npm:4.10.1" + dependencies: + "@babel/runtime": ^7.1.2 + loose-envify: ^1.2.0 + resolve-pathname: ^3.0.0 + tiny-invariant: ^1.0.2 + tiny-warning: ^1.0.0 + value-equal: ^1.0.1 + checksum: addd84bc4683929bae4400419b5af132ff4e4e9b311a0d4e224579ea8e184a6b80d7f72c55927e4fa117f69076a9e47ce082d8d0b422f1a9ddac7991490ca1d0 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"hoopy@npm:^0.1.4": + version: 0.1.4 + resolution: "hoopy@npm:0.1.4" + checksum: cfa60c7684c5e1ee4efe26e167bc54b73f839ffb59d1d44a5c4bf891e26b4f5bcc666555219a98fec95508fea4eda3a79540c53c05cc79afc1f66f9a238f4d9e + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: ^2.0.1 + obuf: ^1.0.0 + readable-stream: ^2.0.1 + wbuf: ^1.1.0 + checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e + languageName: node + linkType: hard + +"hsl-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "hsl-regex@npm:1.0.0" + checksum: de9ee1bf39de1b83cc3fa0fa1cc337f29f14911e79411d66347365c54fab6b109eea2dd741eaa02486e24de31627ad7bf4453f22224fb55a2fe2b58166fa63b8 + languageName: node + linkType: hard + +"hsla-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "hsla-regex@npm:1.0.0" + checksum: 9aa6eb9ff6c102d2395435aa5d1d91eae20043c4b1497c543d8db501c05f3edacd9a07fb34a987059d7902dba415af4cb4e610f751859ae8e7525df4ffcd085f + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^2.0.1": + version: 2.0.1 + resolution: "html-encoding-sniffer@npm:2.0.1" + dependencies: + whatwg-encoding: ^1.0.5 + checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba + languageName: node + linkType: hard + +"html-entities@npm:^1.2.1, html-entities@npm:^1.3.1": + version: 1.4.0 + resolution: "html-entities@npm:1.4.0" + checksum: 4b73ffb9eead200f99146e4fbe70acb0af2fea136901a131fc3a782e9ef876a7cbb07dec303ca1f8804232b812249dbf3643a270c9c524852065d9224a8dcdd0 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"html-minifier-terser@npm:^5.0.1": + version: 5.1.1 + resolution: "html-minifier-terser@npm:5.1.1" + dependencies: + camel-case: ^4.1.1 + clean-css: ^4.2.3 + commander: ^4.1.1 + he: ^1.2.0 + param-case: ^3.0.3 + relateurl: ^0.2.7 + terser: ^4.6.3 + bin: + html-minifier-terser: cli.js + checksum: 75ff3ff886631b9ecb3035acb8e7dd98c599bb4d4618ad6f7e487ee9752987dddcf6848dc3c1ab1d7fc1ad4484337c2ce39c19eac17b0342b4b15e4294c8a904 + languageName: node + linkType: hard + +"html-webpack-plugin@npm:4.5.0": + version: 4.5.0 + resolution: "html-webpack-plugin@npm:4.5.0" + dependencies: + "@types/html-minifier-terser": ^5.0.0 + "@types/tapable": ^1.0.5 + "@types/webpack": ^4.41.8 + html-minifier-terser: ^5.0.1 + loader-utils: ^1.2.3 + lodash: ^4.17.15 + pretty-error: ^2.1.1 + tapable: ^1.1.3 + util.promisify: 1.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: d197db16a160ab9136a544e297c3c75d34b769d3cee12a82b9e7af7ee38ff07f4a27f2235581a9624f03996cd24997613df807341799140b4427c12bc4f496f9 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: ">= 1.4.0 < 2" + checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + languageName: node + linkType: hard + +"http-proxy-agent@npm:^4.0.1": + version: 4.0.1 + resolution: "http-proxy-agent@npm:4.0.1" + dependencies: + "@tootallnate/once": 1 + agent-base: 6 + debug: 4 + checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:0.19.1": + version: 0.19.1 + resolution: "http-proxy-middleware@npm:0.19.1" + dependencies: + http-proxy: ^1.17.0 + is-glob: ^4.0.0 + lodash: ^4.17.11 + micromatch: ^3.1.10 + checksum: 64df0438417a613bb22b3689d9652a1b7a56f10b145a463f95f4e8a9b9a351f2c63bc5fd3a9cd710baec224897733b6f299cb7f974ea82769b2a4f1e074764ac + languageName: node + linkType: hard + +"http-proxy@npm:^1.17.0": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + +"https-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "https-browserify@npm:1.0.0" + checksum: 09b35353e42069fde2435760d13f8a3fb7dd9105e358270e2e225b8a94f811b461edd17cb57594e5f36ec1218f121c160ddceeec6e8be2d55e01dcbbbed8cbae + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + languageName: node + linkType: hard + +"human-signals@npm:^1.1.1": + version: 1.1.1 + resolution: "human-signals@npm:1.1.1" + checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"icss-replace-symbols@npm:1.1.0, icss-replace-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "icss-replace-symbols@npm:1.1.0" + checksum: 24575b2c2f7e762bfc6f4beee31be9ba98a01cad521b5aa9954090a5de2b5e1bf67814c17e22f9e51b7d798238db8215a173d6c2b4726ce634ce06b68ece8045 + languageName: node + linkType: hard + +"icss-utils@npm:^4.0.0, icss-utils@npm:^4.1.1": + version: 4.1.1 + resolution: "icss-utils@npm:4.1.1" + dependencies: + postcss: ^7.0.14 + checksum: a4ca2c6b82cb3eb879d635bd4028d74bca174edc49ee48ef5f01988489747d340a389d5a0ac6f6887a5c24ab8fc4386c781daab32a7ade5344a2edff66207635 + languageName: node + linkType: hard + +"identity-obj-proxy@npm:3.0.0": + version: 3.0.0 + resolution: "identity-obj-proxy@npm:3.0.0" + dependencies: + harmony-reflect: ^1.4.6 + checksum: 97559f8ea2aeaa1a880d279d8c49550dce01148321e00a2102cda5ddf9ce622fa1d7f3efc7bed63458af78889de888fdaebaf31c816312298bb3fdd0ef8aaf2c + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"iferr@npm:^0.1.5": + version: 0.1.5 + resolution: "iferr@npm:0.1.5" + checksum: a18d19b6ad06a2d5412c0d37f6364869393ef6d1688d59d00082c1f35c92399094c031798340612458cd832f4f2e8b13bc9615934a7d8b0c53061307a3816aa1 + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a + languageName: node + linkType: hard + +"ignore@npm:^4.0.6": + version: 4.0.6 + resolution: "ignore@npm:4.0.6" + checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 + languageName: node + linkType: hard + +"ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + languageName: node + linkType: hard + +"immer@npm:8.0.1": + version: 8.0.1 + resolution: "immer@npm:8.0.1" + checksum: 63d875c04882b862481a0a692816e5982975a47a57619698bc1bb52963ad3b624911991708b2b81a7af6fdac15083d408e43932d83a6a61216e5a4503efd4095 + languageName: node + linkType: hard + +"immutable@npm:^4.0.0": + version: 4.3.6 + resolution: "immutable@npm:4.3.6" + checksum: 3afd020be988ec9ba42c1e585b88858970beba91332ac04ac11446722c7e5da03d5956f5049806573d29dfee25f69262297cb7f3bd6b16fc83a175a0176c6c2a + languageName: node + linkType: hard + +"import-cwd@npm:^2.0.0": + version: 2.1.0 + resolution: "import-cwd@npm:2.1.0" + dependencies: + import-from: ^2.1.0 + checksum: b8786fa3578f3df55370352bf61f99c2d8e6ee9b5741a07503d5a73d99281d141330a8faf87078e67527be4558f758356791ee5efb4b0112ac5eaed0f07de544 + languageName: node + linkType: hard + +"import-fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "import-fresh@npm:2.0.0" + dependencies: + caller-path: ^2.0.0 + resolve-from: ^3.0.0 + checksum: 610255f9753cc6775df00be08e9f43691aa39f7703e3636c45afe22346b8b545e600ccfe100c554607546fc8e861fa149a0d1da078c8adedeea30fff326eef79 + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-from@npm:^2.1.0": + version: 2.1.0 + resolution: "import-from@npm:2.1.0" + dependencies: + resolve-from: ^3.0.0 + checksum: 91f6f89f46a07227920ef819181bb52eb93023ccc0bdf00224fdfb326f8f753e279ad06819f39a02bb88c9d3a4606adc85b0cc995285e5d65feeb59f1421a1d4 + languageName: node + linkType: hard + +"import-local@npm:^2.0.0": + version: 2.0.0 + resolution: "import-local@npm:2.0.0" + dependencies: + pkg-dir: ^3.0.0 + resolve-cwd: ^2.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: b8469252483624379fd65d53c82f3658b32a1136f7168bfeea961a4ea7ca10a45786ea2b02e0006408f9cd22d2f33305a6f17a64e4d5a03274a50942c5e7c949 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"indexes-of@npm:^1.0.1": + version: 1.0.1 + resolution: "indexes-of@npm:1.0.1" + checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.3, infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + +"ini@npm:^1.3.5": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"inline-style-parser@npm:0.1.1": + version: 0.1.1 + resolution: "inline-style-parser@npm:0.1.1" + checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.0": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^6.0.1 + checksum: 387ffb0a513559cc7414eb42c57556a60e302f820d6960e89d376d092e257a919961cd485a1b4de693dbb5c0de8bc58320bfd6247dfd827a873aa82a4215a240 + languageName: node + linkType: hard + +"internal-ip@npm:^4.3.0": + version: 4.3.0 + resolution: "internal-ip@npm:4.3.0" + dependencies: + default-gateway: ^4.2.0 + ipaddr.js: ^1.9.0 + checksum: c970433c84d9a6b46e2c9f5ab7785d3105b856d0a566891bf919241b5a884c5c1c9bf8e915aebb822a86c14b1b6867e58c1eaf5cd49eb023368083069d1a4a9a + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"ip-regex@npm:^2.1.0": + version: 2.1.0 + resolution: "ip-regex@npm:2.1.0" + checksum: 331d95052aa53ce245745ea0fc3a6a1e2e3c8d6da65fa8ea52bf73768c1b22a9ac50629d1d2b08c04e7b3ac4c21b536693c149ce2c2615ee4796030e5b3e3cba + languageName: node + linkType: hard + +"ip@npm:^1.1.0, ip@npm:^1.1.5": + version: 1.1.9 + resolution: "ip@npm:1.1.9" + checksum: b6d91fd45a856e3bd6d4f601ea0619d90f3517638f6918ebd079f959a8a6308568d8db5ef4fdf037e0d9cfdcf264f46833dfeea81ca31309cf0a7eb4b1307b84 + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.9.0": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"is-absolute-url@npm:^2.0.0": + version: 2.1.0 + resolution: "is-absolute-url@npm:2.1.0" + checksum: 781e8cf8a2af54b1b7a92f269244d96c66224030d91120e734ebeebbce044c167767e1389789d8aaf82f9e429cb20ae93d6d0acfe6c4b53d2bd6ebb47a236d76 + languageName: node + linkType: hard + +"is-absolute-url@npm:^3.0.3": + version: 3.0.3 + resolution: "is-absolute-url@npm:3.0.3" + checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 + languageName: node + linkType: hard + +"is-accessor-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-accessor-descriptor@npm:1.0.1" + dependencies: + hasown: ^2.0.0 + checksum: 8db44c02230a5e9b9dec390a343178791f073d5d5556a400527d2fd67a72d93b226abab2bd4123305c268f5dc22831bfdbd38430441fda82ea9e0b95ddc6b267 + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-binary-path@npm:^1.0.0": + version: 1.0.1 + resolution: "is-binary-path@npm:1.0.1" + dependencies: + binary-extensions: ^1.0.0 + checksum: a803c99e9d898170c3b44a86fbdc0736d3d7fcbe737345433fb78e810b9fe30c982657782ad0e676644ba4693ddf05601a7423b5611423218663d6b533341ac9 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^1.1.5": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-color-stop@npm:^1.0.0": + version: 1.1.0 + resolution: "is-color-stop@npm:1.1.0" + dependencies: + css-color-names: ^0.0.4 + hex-color-regex: ^1.1.0 + hsl-regex: ^1.0.0 + hsla-regex: ^1.0.0 + rgb-regex: ^1.0.1 + rgba-regex: ^1.0.0 + checksum: 778dd52a603ab8da827925aa4200fe6733b667b216495a04110f038b925dc5ef58babe759b94ffc4e44fcf439328695770873937f59d6045f676322b97f3f92d + languageName: node + linkType: hard + +"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + +"is-data-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-descriptor@npm:1.0.1" + dependencies: + hasown: ^2.0.0 + checksum: fc6da5be5177149d554c5612cc382e9549418ed72f2d3ed5a3e6511b03dd119ae1b2258320ca94931df50b7e9ee012894eccd4ca45bbcadf0d5b27da6faeb15a + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 + languageName: node + linkType: hard + +"is-descriptor@npm:^0.1.0": + version: 0.1.7 + resolution: "is-descriptor@npm:0.1.7" + dependencies: + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 45743109f0bb03f9fa989c34d31ece87cc15792649f147b896a7c4db2906a02fca685867619f4d312e024d7bbd53b945a47c6830d01f5e73efcc6388ac211963 + languageName: node + linkType: hard + +"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": + version: 1.0.3 + resolution: "is-descriptor@npm:1.0.3" + dependencies: + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 316153b2fd86ac23b0a2f28b77744ae0a4e3c7a54fe52fa70b125d0971eb0a3bcfb562fa8e74537af0dad5bc405cc606726eb501fc748a241c10910deea89cfb + languageName: node + linkType: hard + +"is-directory@npm:^0.3.1": + version: 0.3.1 + resolution: "is-directory@npm:0.3.1" + checksum: dce9a9d3981e38f2ded2a80848734824c50ee8680cd09aa477bef617949715cfc987197a2ca0176c58a9fb192a1a0d69b535c397140d241996a609d5906ae524 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-electron@npm:2.2.2": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: ^2.0.4 + checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + +"is-glob@npm:^3.1.0": + version: 3.1.0 + resolution: "is-glob@npm:3.1.0" + dependencies: + is-extglob: ^2.1.0 + checksum: 9d483bca84f16f01230f7c7c8c63735248fe1064346f292e0f6f8c76475fd20c6f50fc19941af5bec35f85d6bf26f4b7768f39a48a5f5fdc72b408dc74e07afc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-map@npm:^2.0.2, is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc + languageName: node + linkType: hard + +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + +"is-node-process@npm:^1.0.1": + version: 1.2.0 + resolution: "is-node-process@npm:1.2.0" + checksum: 930765cdc6d81ab8f1bbecbea4a8d35c7c6d88a3ff61f3630e0fc7f22d624d7661c1df05c58547d0eb6a639dfa9304682c8e342c4113a6ed51472b704cee2928 + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^3.0.0": + version: 3.0.0 + resolution: "is-number@npm:3.0.0" + dependencies: + kind-of: ^3.0.2 + checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^1.0.1": + version: 1.0.1 + resolution: "is-obj@npm:1.0.1" + checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.0.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + languageName: node + linkType: hard + +"is-path-in-cwd@npm:^2.0.0": + version: 2.1.0 + resolution: "is-path-in-cwd@npm:2.1.0" + dependencies: + is-path-inside: ^2.1.0 + checksum: 6b01b3f8c9172e9682ea878d001836a0cc5a78cbe6236024365d478c2c9e384da2417e5f21f2ad2da2761d0465309fc5baf6e71187d2a23f0058da69790f7f48 + languageName: node + linkType: hard + +"is-path-inside@npm:^2.1.0": + version: 2.1.0 + resolution: "is-path-inside@npm:2.1.0" + dependencies: + path-is-inside: ^1.0.2 + checksum: 6ca34dbd84d5c50a3ee1547afb6ada9b06d556a4ff42da9b303797e4acc3ac086516a4833030aa570f397f8c58dacabd57ee8e6c2ce8b2396a986ad2af10fcaf + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.0.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "is-regexp@npm:1.0.0" + checksum: be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef + languageName: node + linkType: hard + +"is-resolvable@npm:^1.0.0": + version: 1.1.0 + resolution: "is-resolvable@npm:1.1.0" + checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 + languageName: node + linkType: hard + +"is-root@npm:2.1.0": + version: 2.1.0 + resolution: "is-root@npm:2.1.0" + checksum: 37eea0822a2a9123feb58a9d101558ba276771a6d830f87005683349a9acff15958a9ca590a44e778c6b335660b83e85c744789080d734f6081a935a4880aee2 + languageName: node + linkType: hard + +"is-set@npm:^2.0.2, is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.3 + resolution: "is-weakset@npm:2.0.3" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae + languageName: node + linkType: hard + +"is-windows@npm:^1.0.2": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + languageName: node + linkType: hard + +"is-wsl@npm:^1.1.0": + version: 1.1.0 + resolution: "is-wsl@npm:1.1.0" + checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe + languageName: node + linkType: hard + +"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + +"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: 1.0.0 + checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f + languageName: node + linkType: hard + +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^4.0.3": + version: 4.0.3 + resolution: "istanbul-lib-instrument@npm:4.0.3" + dependencies: + "@babel/core": ^7.7.5 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.0.0 + semver: ^6.3.0 + checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + 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 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.0.2": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + 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 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.0 + resolution: "jackspeak@npm:3.4.0" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 350f6f311018bb175ffbe736b19c26ac0b134bb5a17a638169e89594eb0c24ab1c658ab3a2fda24ff63b3b19292e1a5ec19d2255bc526df704e8168d392bef85 + languageName: node + linkType: hard + +"jest-changed-files@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-changed-files@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + execa: ^4.0.0 + throat: ^5.0.0 + checksum: 8c405f5ff905ee69ace9fd39355233206e3e233badf6a3f3b27e45bbf0a46d86943430be2e080d25b1e085f4231b9b3b27c94317aa04116efb40b592184066f4 + languageName: node + linkType: hard + +"jest-circus@npm:26.6.0": + version: 26.6.0 + resolution: "jest-circus@npm:26.6.0" + dependencies: + "@babel/traverse": ^7.1.0 + "@jest/environment": ^26.6.0 + "@jest/test-result": ^26.6.0 + "@jest/types": ^26.6.0 + "@types/babel__traverse": ^7.0.4 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + expect: ^26.6.0 + is-generator-fn: ^2.0.0 + jest-each: ^26.6.0 + jest-matcher-utils: ^26.6.0 + jest-message-util: ^26.6.0 + jest-runner: ^26.6.0 + jest-runtime: ^26.6.0 + jest-snapshot: ^26.6.0 + jest-util: ^26.6.0 + pretty-format: ^26.6.0 + stack-utils: ^2.0.2 + throat: ^5.0.0 + checksum: acc354223964bafd40fd1caae4099b58ccb1551bc93a394398b441274c225552f1941ce9903d126fb0adc3952a108e2994270c6a50a3e7e5af931b65b8c170f0 + languageName: node + linkType: hard + +"jest-cli@npm:^26.6.0": + version: 26.6.3 + resolution: "jest-cli@npm:26.6.3" + dependencies: + "@jest/core": ^26.6.3 + "@jest/test-result": ^26.6.2 + "@jest/types": ^26.6.2 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.4 + import-local: ^3.0.2 + is-ci: ^2.0.0 + jest-config: ^26.6.3 + jest-util: ^26.6.2 + jest-validate: ^26.6.2 + prompts: ^2.0.1 + yargs: ^15.4.1 + bin: + jest: bin/jest.js + checksum: c8554147be756f09f5566974f0026485f78742e8642d2723f8fbee5746f50f44fb72b17aad181226655a8446d3ecc8ad8ed0a11a8a55686fa2b9c10d85700121 + languageName: node + linkType: hard + +"jest-config@npm:^26.6.3": + version: 26.6.3 + resolution: "jest-config@npm:26.6.3" + dependencies: + "@babel/core": ^7.1.0 + "@jest/test-sequencer": ^26.6.3 + "@jest/types": ^26.6.2 + babel-jest: ^26.6.3 + chalk: ^4.0.0 + deepmerge: ^4.2.2 + glob: ^7.1.1 + graceful-fs: ^4.2.4 + jest-environment-jsdom: ^26.6.2 + jest-environment-node: ^26.6.2 + jest-get-type: ^26.3.0 + jest-jasmine2: ^26.6.3 + jest-regex-util: ^26.0.0 + jest-resolve: ^26.6.2 + jest-util: ^26.6.2 + jest-validate: ^26.6.2 + micromatch: ^4.0.2 + pretty-format: ^26.6.2 + peerDependencies: + ts-node: ">=9.0.0" + peerDependenciesMeta: + ts-node: + optional: true + checksum: 303c798582d3c5d4b4e6ab8a4d91a83ded28e4ebbc0bcfc1ad271f9864437ef5409b7c7773010143811bc8176b0695c096717b91419c6484b56dcc032560a74b + languageName: node + linkType: hard + +"jest-diff@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-diff@npm:26.6.2" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^26.6.2 + jest-get-type: ^26.3.0 + pretty-format: ^26.6.2 + checksum: d00d297f31e1ac0252127089892432caa7a11c69bde29cf3bb6c7a839c8afdb95cf1fd401f9df16a4422745da2e6a5d94b428b30666a2540c38e1c5699915c2d + languageName: node + linkType: hard + +"jest-diff@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-diff@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^28.1.1 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^26.0.0": + version: 26.0.0 + resolution: "jest-docblock@npm:26.0.0" + dependencies: + detect-newline: ^3.0.0 + checksum: e03ef104ee8c571335e6fa394b8fc8d2bd87eec9fe8b3d7d9aac056ada7de288f37ee8ac4922bb3a4222ac304db975d8832d5abc85486092866c534a16847cd5 + languageName: node + linkType: hard + +"jest-each@npm:^26.6.0, jest-each@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-each@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + chalk: ^4.0.0 + jest-get-type: ^26.3.0 + jest-util: ^26.6.2 + pretty-format: ^26.6.2 + checksum: 4e00ea4667e4fe015b894dc698cce0ae695cf458e021e5da62d4a5b052cd2c0a878da93f8c97cbdde60bcecf70982e8d3a7a5d63e1588f59531cc797a18c39ef + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-environment-jsdom@npm:26.6.2" + dependencies: + "@jest/environment": ^26.6.2 + "@jest/fake-timers": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + jest-mock: ^26.6.2 + jest-util: ^26.6.2 + jsdom: ^16.4.0 + checksum: 8af9ffdf1b147362a19032bfe9ed51b709d43c74dc4b1c45e56d721808bf6cabdca8c226855b55a985ea196ce51cdb171bfe420ceec3daa2d13818d5c1915890 + languageName: node + linkType: hard + +"jest-environment-node@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-environment-node@npm:26.6.2" + dependencies: + "@jest/environment": ^26.6.2 + "@jest/fake-timers": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + jest-mock: ^26.6.2 + jest-util: ^26.6.2 + checksum: 0b69b481e6d6f2350ed241c2dabc70b0b1f3a00f9a410b7dad97c8ab38e88026acf7445ca663eb314f46ff50acee0133100b1006bf4ebda5298ffb02763a6861 + languageName: node + linkType: hard + +"jest-fail-on-console@npm:^3.0.2": + version: 3.3.0 + resolution: "jest-fail-on-console@npm:3.3.0" + checksum: 891cbe9bac5d7656beee75850c880427401880debc6dc110b845d17313cf375dc5f6f1d27eaf411553839287fe150fd46738f3c5facba5cb22244546ee66e111 + languageName: node + linkType: hard + +"jest-get-type@npm:^26.3.0": + version: 26.3.0 + resolution: "jest-get-type@npm:26.3.0" + checksum: 1cc6465ae4f5e880be22ba52fd270fa64c21994915f81b41f8f7553a7957dd8e077cc8d03035de9412e2d739f8bad6a032ebb5dab5805692a5fb9e20dd4ea666 + languageName: node + linkType: hard + +"jest-get-type@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-get-type@npm:28.0.2" + checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-haste-map@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@types/graceful-fs": ^4.1.2 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.1.2 + graceful-fs: ^4.2.4 + jest-regex-util: ^26.0.0 + jest-serializer: ^26.6.2 + jest-util: ^26.6.2 + jest-worker: ^26.6.2 + micromatch: ^4.0.2 + sane: ^4.0.3 + walker: ^1.0.7 + dependenciesMeta: + fsevents: + optional: true + checksum: 8ad5236d5646d2388d2bd58a57ea53698923434f43d59ea9ebdc58bce4d0b8544c8de2f7acaa9a6d73171f04460388b2b6d7d6b6c256aea4ebb8780140781596 + languageName: node + linkType: hard + +"jest-jasmine2@npm:^26.6.3": + version: 26.6.3 + resolution: "jest-jasmine2@npm:26.6.3" + dependencies: + "@babel/traverse": ^7.1.0 + "@jest/environment": ^26.6.2 + "@jest/source-map": ^26.6.2 + "@jest/test-result": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + expect: ^26.6.2 + is-generator-fn: ^2.0.0 + jest-each: ^26.6.2 + jest-matcher-utils: ^26.6.2 + jest-message-util: ^26.6.2 + jest-runtime: ^26.6.3 + jest-snapshot: ^26.6.2 + jest-util: ^26.6.2 + pretty-format: ^26.6.2 + throat: ^5.0.0 + checksum: 41df0b993ae0cdeb2660fb3d8e88e2dcc83aec6b5c27d85eb233c2d507b546f8dce45fc54898ffbefa48ccc4633f225d0e023fd0979b8f7f2f1626074a69a9a3 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-leak-detector@npm:26.6.2" + dependencies: + jest-get-type: ^26.3.0 + pretty-format: ^26.6.2 + checksum: 364dd4d021347e26c66ba9c09da8a30477f14a3a8a208d2d7d64e4c396db81b85d8cb6b6834bcfc47a61b5938e274553957d11a7de2255f058c9d55d7f8fdfe7 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^26.6.0, jest-matcher-utils@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-matcher-utils@npm:26.6.2" + dependencies: + chalk: ^4.0.0 + jest-diff: ^26.6.2 + jest-get-type: ^26.3.0 + pretty-format: ^26.6.2 + checksum: 74d2165c1ac7fe98fe27cd2b5407499478e6b2fe99dd54e26d8ee5c9f5f913bdd7bdc07c7221b9b04df0c15e9be0e866ff3455b03e38cc66c480d9996d6d5405 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-matcher-utils@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + +"jest-message-util@npm:^26.6.0, jest-message-util@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-message-util@npm:26.6.2" + dependencies: + "@babel/code-frame": ^7.0.0 + "@jest/types": ^26.6.2 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + micromatch: ^4.0.2 + pretty-format: ^26.6.2 + slash: ^3.0.0 + stack-utils: ^2.0.2 + checksum: ffe5a715591c41240b9ed4092faf10f3eaf9ddfdf25d257a0c9f903aaa8d9eed5baa7e38016d2ec4f610fd29225e0f5231a91153e087a043e62824972c83d015 + languageName: node + linkType: hard + +"jest-message-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-message-util@npm:28.1.3" + 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 + checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-mock@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@types/node": "*" + checksum: 6c0fe028ff0cdc87b5d63b9ca749af04cae6c5577aaab234f602e546cae3f4b932adac9d77e6de2abb24955ee00978e1e5d5a861725654e2f9a42317d91fbc1f + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^26.0.0": + version: 26.0.0 + resolution: "jest-regex-util@npm:26.0.0" + checksum: 930a00665e8dfbedc29140678b4a54f021b41b895cf35050f76f557c1da3ac48ff42dd7b18ba2ccba6f4e518c6445d6753730d03ec7049901b93992db1ef0483 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^26.6.3": + version: 26.6.3 + resolution: "jest-resolve-dependencies@npm:26.6.3" + dependencies: + "@jest/types": ^26.6.2 + jest-regex-util: ^26.0.0 + jest-snapshot: ^26.6.2 + checksum: 533ea1e271426006ff02c03c9802b108fcd68f2144615b6110ae59f3a0a2cc4a7abb3f44c3c65299c76b3a725d5d8220aaed9c58b79c8c8c508c18699a96e3f7 + languageName: node + linkType: hard + +"jest-resolve@npm:26.6.0": + version: 26.6.0 + resolution: "jest-resolve@npm:26.6.0" + dependencies: + "@jest/types": ^26.6.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + jest-pnp-resolver: ^1.2.2 + jest-util: ^26.6.0 + read-pkg-up: ^7.0.1 + resolve: ^1.17.0 + slash: ^3.0.0 + checksum: c5d0277d4aa22f9f38693ba3e5d6176edf2e367af2f0c38e16c88e9b80b2292ee4d9df9b3675607f5d0c0b2652b4e3f69d8155f9fedd83ddd0ef937cfb6230c0 + languageName: node + linkType: hard + +"jest-resolve@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-resolve@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + jest-pnp-resolver: ^1.2.2 + jest-util: ^26.6.2 + read-pkg-up: ^7.0.1 + resolve: ^1.18.1 + slash: ^3.0.0 + checksum: d6264d3f39b098753802a237c8c54f3109f5f3b3b7fa6f8d7aec7dca01b357ddf518ce1c33a68454357c15f48fb3c6026a92b9c4f5d72f07e24e80f04bcc8d58 + languageName: node + linkType: hard + +"jest-runner@npm:^26.6.0, jest-runner@npm:^26.6.3": + version: 26.6.3 + resolution: "jest-runner@npm:26.6.3" + dependencies: + "@jest/console": ^26.6.2 + "@jest/environment": ^26.6.2 + "@jest/test-result": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.7.1 + exit: ^0.1.2 + graceful-fs: ^4.2.4 + jest-config: ^26.6.3 + jest-docblock: ^26.0.0 + jest-haste-map: ^26.6.2 + jest-leak-detector: ^26.6.2 + jest-message-util: ^26.6.2 + jest-resolve: ^26.6.2 + jest-runtime: ^26.6.3 + jest-util: ^26.6.2 + jest-worker: ^26.6.2 + source-map-support: ^0.5.6 + throat: ^5.0.0 + checksum: ccd69918baa49a5efa45985cf60cfa1fbb1686b32d7a86296b7b55f89684e36d1f08e62598c4b7be7e81f2cf2e245d1a65146ea7bdcaedfa6ed176d3e645d7e2 + languageName: node + linkType: hard + +"jest-runtime@npm:^26.6.0, jest-runtime@npm:^26.6.3": + version: 26.6.3 + resolution: "jest-runtime@npm:26.6.3" + dependencies: + "@jest/console": ^26.6.2 + "@jest/environment": ^26.6.2 + "@jest/fake-timers": ^26.6.2 + "@jest/globals": ^26.6.2 + "@jest/source-map": ^26.6.2 + "@jest/test-result": ^26.6.2 + "@jest/transform": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/yargs": ^15.0.0 + chalk: ^4.0.0 + cjs-module-lexer: ^0.6.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.4 + jest-config: ^26.6.3 + jest-haste-map: ^26.6.2 + jest-message-util: ^26.6.2 + jest-mock: ^26.6.2 + jest-regex-util: ^26.0.0 + jest-resolve: ^26.6.2 + jest-snapshot: ^26.6.2 + jest-util: ^26.6.2 + jest-validate: ^26.6.2 + slash: ^3.0.0 + strip-bom: ^4.0.0 + yargs: ^15.4.1 + bin: + jest-runtime: bin/jest-runtime.js + checksum: 867922b49f9ab4cf2f5f1356ac3d9962c4477c7a2ff696cc841ea4c600ea389e7d6dfcbf945fec6849e606f81980addf31e4f34d63eaa3d3415f4901de2f605a + languageName: node + linkType: hard + +"jest-serializer@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-serializer@npm:26.6.2" + dependencies: + "@types/node": "*" + graceful-fs: ^4.2.4 + checksum: dbecfb0d01462fe486a0932cf1680cf6abb204c059db2a8f72c6c2a7c9842a82f6d256874112774cea700764ed8f38fc9e3db982456c138d87353e3390e746fe + languageName: node + linkType: hard + +"jest-snapshot@npm:^26.6.0, jest-snapshot@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-snapshot@npm:26.6.2" + dependencies: + "@babel/types": ^7.0.0 + "@jest/types": ^26.6.2 + "@types/babel__traverse": ^7.0.4 + "@types/prettier": ^2.0.0 + chalk: ^4.0.0 + expect: ^26.6.2 + graceful-fs: ^4.2.4 + jest-diff: ^26.6.2 + jest-get-type: ^26.3.0 + jest-haste-map: ^26.6.2 + jest-matcher-utils: ^26.6.2 + jest-message-util: ^26.6.2 + jest-resolve: ^26.6.2 + natural-compare: ^1.4.0 + pretty-format: ^26.6.2 + semver: ^7.3.2 + checksum: 53f1de055b1d3840bc6e851fd674d5991b844d4695dadbd07354c93bf191048d8767b8606999847e97c4214a485b9afb45c1d2411772befa1870414ac973b3e2 + languageName: node + linkType: hard + +"jest-util@npm:^26.1.0, jest-util@npm:^26.6.0, jest-util@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-util@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + "@types/node": "*" + chalk: ^4.0.0 + graceful-fs: ^4.2.4 + is-ci: ^2.0.0 + micromatch: ^4.0.2 + checksum: 3c6a5fba05c4c6892cd3a9f66196ea8867087b77a5aa1a3f6cd349c785c3f1ca24abfd454664983aed1a165cab7846688e44fe8630652d666ba326b08625bc3d + languageName: node + linkType: hard + +"jest-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-util@npm:28.1.3" + 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 + checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-validate@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + camelcase: ^6.0.0 + chalk: ^4.0.0 + jest-get-type: ^26.3.0 + leven: ^3.1.0 + pretty-format: ^26.6.2 + checksum: bac11d6586d9b8885328a4a66eec45b692e45ac23034a5c09eb0ee32de324f2d3d52b073e0c34e9c222b3642b083d1152a736cf24c52109e4957537d731ca62b + languageName: node + linkType: hard + +"jest-watch-typeahead@npm:0.6.1": + version: 0.6.1 + resolution: "jest-watch-typeahead@npm:0.6.1" + dependencies: + ansi-escapes: ^4.3.1 + chalk: ^4.0.0 + jest-regex-util: ^26.0.0 + jest-watcher: ^26.3.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + peerDependencies: + jest: ^26.0.0 + checksum: a65dfd080e68b79ce7c861ec07791a0768820049a1d6a471d01f3fc41ee88723db29b434e19c917421e7f34ec567bcade368f3671e234c557288e206f7fd4257 + languageName: node + linkType: hard + +"jest-watcher@npm:^26.3.0, jest-watcher@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-watcher@npm:26.6.2" + dependencies: + "@jest/test-result": ^26.6.2 + "@jest/types": ^26.6.2 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + jest-util: ^26.6.2 + string-length: ^4.0.1 + checksum: 401137f1a73bf23cdf390019ebffb3f6f89c53ca49d48252d1dd6daf17a68787fef75cc55a623de28b63d87d0e8f13d8972d7dd06740f2f64f7b2a0409d119d2 + languageName: node + linkType: hard + +"jest-worker@npm:^24.9.0": + version: 24.9.0 + resolution: "jest-worker@npm:24.9.0" + dependencies: + merge-stream: ^2.0.0 + supports-color: ^6.1.0 + checksum: bd23b6c8728dcf3bad0d84543ea1bc4a95ccd3b5a40f9e2796d527ab0e87dc6afa6c30cc7b67845dce1cfe7894753812d19793de605db1976b7ac08930671bff + languageName: node + linkType: hard + +"jest-worker@npm:^26.5.0, jest-worker@npm:^26.6.2": + version: 26.6.2 + resolution: "jest-worker@npm:26.6.2" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^7.0.0 + checksum: f9afa3b88e3f12027901e4964ba3ff048285b5783b5225cab28fac25b4058cea8ad54001e9a1577ee2bed125fac3ccf5c80dc507b120300cc1bbcb368796533e + languageName: node + linkType: hard + +"jest-worker@npm:^27.5.1": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jest@npm:26.6.0": + version: 26.6.0 + resolution: "jest@npm:26.6.0" + dependencies: + "@jest/core": ^26.6.0 + import-local: ^3.0.2 + jest-cli: ^26.6.0 + bin: + jest: bin/jest.js + checksum: e0d3efff0dc2a31c453a3f7d87586e5d6c0f008c9b827bb9204edde09288f922ddfb3a8917480bf68f4ac0298be28637daef98ebaaac65ea23d3cb754a6620c4 + languageName: node + linkType: hard + +"joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + languageName: node + linkType: hard + +"js-levenshtein@npm:^1.1.6": + version: 1.1.6 + resolution: "js-levenshtein@npm:1.1.6" + checksum: 409f052a7f1141be4058d97da7860e08efd97fc588b7a4c5cfa0548bc04f6d576644dae65ab630266dff685d56fb90d494e03d4d79cb484c287746b4f1bf0694 + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsdom@npm:^16.4.0": + version: 16.7.0 + resolution: "jsdom@npm:16.7.0" + 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 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + languageName: node + linkType: hard + +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: ^9.0.0 + checksum: c67bb93ccb3c291e60eb4b62931403e378906aab113ec1c2a8dd0f9a7f065ad6fd9713d627b732abefae2e244ac9ce1721c7a3142b2979532f12b258634ce6f6 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1, json-parse-better-errors@npm:^1.0.2": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"json5@npm:^1.0.1, json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonpath@npm:^1.1.1": + version: 1.1.1 + resolution: "jsonpath@npm:1.1.1" + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + checksum: 5480d8e9e424fe2ed4ade6860b6e2cefddb21adb3a99abe0254cd9428e8ef9b0c9fb5729d6a5a514e90df50d645ccea9f3be48d627570e6222dd5dadc28eba7b + languageName: node + linkType: hard + +"jsonwebtoken@npm:^8.5.1": + version: 8.5.1 + resolution: "jsonwebtoken@npm:8.5.1" + 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 + checksum: 93c9e3f23c59b758ac88ba15f4e4753b3749dfce7a6f7c40fb86663128a1e282db085eec852d4e0cbca4cefdcd3a8275ee255dbd08fcad0df26ad9f6e4cc853a + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" + dependencies: + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + object.assign: ^4.1.4 + object.values: ^1.1.6 + checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a + languageName: node + linkType: hard + +"jwa@npm:^1.4.1": + version: 1.4.1 + resolution: "jwa@npm:1.4.1" + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: ^5.0.1 + checksum: ff30ea7c2dcc61f3ed2098d868bf89d43701605090c5b21b5544b512843ec6fd9e028381a4dda466cbcdb885c2d1150f7c62e7168394ee07941b4098e1035e2f + languageName: node + linkType: hard + +"jwa@npm:^2.0.0": + version: 2.0.0 + resolution: "jwa@npm:2.0.0" + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: ^5.0.1 + checksum: 8f00b71ad5fe94cb55006d0d19202f8f56889109caada2f7eeb63ca81755769ce87f4f48101967f398462e3b8ae4faebfbd5a0269cb755dead5d63c77ba4d2f1 + languageName: node + linkType: hard + +"jws@npm:^3.2.2": + version: 3.2.2 + resolution: "jws@npm:3.2.2" + dependencies: + jwa: ^1.4.1 + safe-buffer: ^5.0.1 + checksum: f0213fe5b79344c56cd443428d8f65c16bf842dc8cb8f5aed693e1e91d79c20741663ad6eff07a6d2c433d1831acc9814e8d7bada6a0471fbb91d09ceb2bf5c2 + languageName: node + linkType: hard + +"jws@npm:^4.0.0": + version: 4.0.0 + resolution: "jws@npm:4.0.0" + dependencies: + jwa: ^2.0.0 + safe-buffer: ^5.0.1 + checksum: d68d07aa6d1b8cb35c363a9bd2b48f15064d342a5d9dc18a250dbbce8dc06bd7e4792516c50baa16b8d14f61167c19e851fd7f66b59ecc68b7f6a013759765f7 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"killable@npm:^1.0.1": + version: 1.0.1 + resolution: "killable@npm:1.0.1" + checksum: 911a85c6e390c19d72c4e3149347cf44042cbd7d18c3c6c5e4f706fdde6e0ed532473392e282c7ef27f518407e6cb7d2a0e71a2ae8d8d8f8ffdb68891a29a68a + languageName: node + linkType: hard + +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: ^1.1.5 + checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 + languageName: node + linkType: hard + +"kind-of@npm:^4.0.0": + version: 4.0.0 + resolution: "kind-of@npm:4.0.0" + dependencies: + is-buffer: ^1.1.5 + checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"klona@npm:^2.0.4": + version: 2.0.6 + resolution: "klona@npm:2.0.6" + checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 + languageName: node + linkType: hard + +"language-subtag-registry@npm:^0.3.20": + version: 0.3.23 + resolution: "language-subtag-registry@npm:0.3.23" + checksum: 0b64c1a6c5431c8df648a6d25594ff280613c886f4a1a542d9b864e5472fb93e5c7856b9c41595c38fac31370328fc79fcc521712e89ea6d6866cbb8e0995d81 + languageName: node + linkType: hard + +"language-tags@npm:^1.0.9": + version: 1.0.9 + resolution: "language-tags@npm:1.0.9" + dependencies: + language-subtag-registry: ^0.3.20 + checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78 + languageName: node + linkType: hard + +"last-call-webpack-plugin@npm:^3.0.0": + version: 3.0.0 + resolution: "last-call-webpack-plugin@npm:3.0.0" + dependencies: + lodash: ^4.17.5 + webpack-sources: ^1.1.0 + checksum: 23c25a2397c9f75b769b5238ab798873e857baf2363d471d186c9f05212457943f0de16181f33aeecbfd42116b72a0f343fe8910d5d8010f24956d95d536c743 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"load-tsconfig@npm:^0.2.0": + version: 0.2.5 + resolution: "load-tsconfig@npm:0.2.5" + checksum: 631740833c4a7157bb7b6eeae6e1afb6a6fac7416b7ba91bd0944d5c5198270af2d68bf8347af3cc2ba821adc4d83ef98f66278bd263bc284c863a09ec441503 + languageName: node + linkType: hard + +"loader-runner@npm:^2.4.0": + version: 2.4.0 + resolution: "loader-runner@npm:2.4.0" + checksum: e27eebbca5347a03f6b1d1bce5b2736a4984fb742f872c0a4d68e62de10f7637613e79a464d3bcd77c246d9c70fcac112bb4a3123010eb527e8b203a614647db + languageName: node + linkType: hard + +"loader-utils@npm:2.0.0": + version: 2.0.0 + resolution: "loader-utils@npm:2.0.0" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 + languageName: node + linkType: hard + +"loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": + version: 1.4.2 + resolution: "loader-utils@npm:1.4.2" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^1.0.1 + checksum: eb6fb622efc0ffd1abdf68a2022f9eac62bef8ec599cf8adb75e94d1d338381780be6278534170e99edc03380a6d29bc7eb1563c89ce17c5fed3a0b17f1ad804 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + +"local-pkg@npm:^0.4.3": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash._reinterpolate@npm:^3.0.0": + version: 3.0.0 + resolution: "lodash._reinterpolate@npm:3.0.0" + checksum: 06d2d5f33169604fa5e9f27b6067ed9fb85d51a84202a656901e5ffb63b426781a601508466f039c720af111b0c685d12f1a5c14ff8df5d5f27e491e562784b2 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.flow@npm:^3.5.0": + version: 3.5.0 + resolution: "lodash.flow@npm:3.5.0" + checksum: a9a62ad344e3c5a1f42bc121da20f64dd855aaafecee24b1db640f29b88bd165d81c37ff7e380a7191de6f70b26f5918abcebbee8396624f78f3618a0b18634c + languageName: node + linkType: hard + +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6 + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250 + languageName: node + linkType: hard + +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 6034821b3fc61a2ffc34e7d5644bb50c5fd8f1c0121c554c21ac271911ee0c0502274852845005f8651d51e199ee2e0cfebfe40aaa49c7fe617f603a8a0b1691 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 913784275b565346255e6ae6a6e30b760a0da70abc29f3e1f409081585875105138cda4a429ff02577e1bc0a7ae2a90e0a3079a37f3a04c3d6c5aaa532f4cab2 + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 + languageName: node + linkType: hard + +"lodash.memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245 + languageName: node + linkType: hard + +"lodash.template@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.template@npm:4.5.0" + dependencies: + lodash._reinterpolate: ^3.0.0 + lodash.templatesettings: ^4.0.0 + checksum: ca64e5f07b6646c9d3dbc0fe3aaa995cb227c4918abd1cef7a9024cd9c924f2fa389a0ec4296aa6634667e029bc81d4bbdb8efbfde11df76d66085e6c529b450 + languageName: node + linkType: hard + +"lodash.templatesettings@npm:^4.0.0": + version: 4.2.0 + resolution: "lodash.templatesettings@npm:4.2.0" + dependencies: + lodash._reinterpolate: ^3.0.0 + checksum: 863e025478b092997e11a04e9d9e735875eeff1ffcd6c61742aa8272e3c2cddc89ce795eb9726c4e74cef5991f722897ff37df7738a125895f23fc7d12a7bb59 + languageName: node + linkType: hard + +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d + languageName: node + linkType: hard + +"lodash@npm:4.x, lodash@npm:>=3.5 <5, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:^4.7.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"loglevel@npm:^1.6.8": + version: 1.9.1 + resolution: "loglevel@npm:1.9.1" + checksum: e1c8586108c4d566122e91f8a79c8df728920e3a714875affa5120566761a24077ec8ec9e5fc388b022e39fc411ec6e090cde1b5775871241b045139771eeb06 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b + languageName: node + linkType: hard + +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.2.2 + resolution: "lru-cache@npm:10.2.2" + checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + languageName: node + linkType: hard + +"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: ^1.4.8 + checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a + languageName: node + linkType: hard + +"magic-string@npm:^0.30.0": + version: 0.30.10 + resolution: "magic-string@npm:0.30.10" + dependencies: + "@jridgewell/sourcemap-codec": ^1.4.15 + checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 + languageName: node + linkType: hard + +"make-dir@npm:^2.0.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-dir@npm:^3.0.2": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-error@npm:1.x, make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + proc-log: ^4.2.0 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-cache@npm:^0.2.2": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + +"map-visit@npm:^1.0.0": + version: 1.0.0 + resolution: "map-visit@npm:1.0.0" + dependencies: + object-visit: ^1.0.0 + checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a + languageName: node + linkType: hard + +"match-sorter@npm:^6.0.2": + version: 6.3.4 + resolution: "match-sorter@npm:6.3.4" + dependencies: + "@babel/runtime": ^7.23.8 + remove-accents: 0.5.0 + checksum: 950c1600173a639e216947559a389b64258d52f33aea3a6ddb97500589888b83c976a028f731f40bc08d9d8af20de7916992fabb403f38330183a1df44c7634b + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c + languageName: node + linkType: hard + +"mdast-util-definitions@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-definitions@npm:4.0.0" + dependencies: + unist-util-visit: ^2.0.0 + checksum: 2325f20b82b3fb8cb5fda77038ee0bbdd44f82cfca7c48a854724b58bc1fe5919630a3ce7c45e210726df59d46c881d020b2da7a493bfd1ee36eb2bbfef5d78e + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^0.8.0": + version: 0.8.5 + resolution: "mdast-util-from-markdown@npm:0.8.5" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-string: ^2.0.0 + micromark: ~2.11.0 + parse-entities: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 5a9d0d753a42db763761e874c22365d0c7c9934a5a18b5ff76a0643610108a208a041ffdb2f3d3dd1863d3d915225a4020a0aade282af0facfd0df110601eee6 + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^10.2.0": + version: 10.2.0 + resolution: "mdast-util-to-hast@npm:10.2.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + mdast-util-definitions: ^4.0.0 + mdurl: ^1.0.0 + unist-builder: ^2.0.0 + unist-util-generated: ^1.0.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^2.0.0 + checksum: 72df2dd9bfa2d07b4750a333444f82e0f3752dae75b6e300cf0a716407a185eb75095a54ecad90cbd6f6d133b20dea8844ff76c1ea78612550de170b43d4fa85 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-to-string@npm:2.0.0" + checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.4": + version: 2.0.4 + resolution: "mdn-data@npm:2.0.4" + checksum: add3c95e6d03d301b8a8bcfee3de33f4d07e4c5eee5b79f18d6d737de717e22472deadf67c1a8563983c0b603e10d7df40aa8e5fddf18884dfe118ccec7ae329 + languageName: node + linkType: hard + +"mdurl@npm:^1.0.0": + version: 1.0.1 + resolution: "mdurl@npm:1.0.1" + checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: f185ea69f7cceae5d1cb596266dcffccf545e8e7b4106ec6aa93b71ab9d16460dd118ac8b12982c55f6d6322fcc1485de139df07eacffaae94888b9b3ad7675f + languageName: node + linkType: hard + +"memory-fs@npm:^0.4.1": + version: 0.4.1 + resolution: "memory-fs@npm:0.4.1" + dependencies: + errno: ^0.1.3 + readable-stream: ^2.0.1 + checksum: 6db6c8682eff836664ca9b5b6052ae38d21713dda9d0ef4700fa5c0599a8bc16b2093bee75ac3dedbe59fb2222d368f25bafaa62ba143c41051359cbcb005044 + languageName: node + linkType: hard + +"memory-fs@npm:^0.5.0": + version: 0.5.0 + resolution: "memory-fs@npm:0.5.0" + dependencies: + errno: ^0.1.3 + readable-stream: ^2.0.1 + checksum: a9f25b0a8ecfb7324277393f19ef68e6ba53b9e6e4b526bbf2ba23055c5440fbf61acc7bf66bfd980e9eb4951a4790f6f777a9a3abd36603f22c87e8a64d3d6b + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"methods@npm:^1.1.2, methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + +"microevent.ts@npm:~0.1.1": + version: 0.1.1 + resolution: "microevent.ts@npm:0.1.1" + checksum: 7874fcdb3f0dfa4e996d3ea63b3b9882874ae7d22be28d51ae20da24c712e9e28e5011d988095c27dd2b32e37c0ad7425342a71b89adb8e808ec7194fadf4a7a + languageName: node + linkType: hard + +"micromark@npm:~2.11.0": + version: 2.11.4 + resolution: "micromark@npm:2.11.4" + dependencies: + debug: ^4.0.0 + parse-entities: ^2.0.0 + checksum: f8a5477d394908a5d770227aea71657a76423d420227c67ea0699e659a5f62eb39d504c1f7d69ec525a6af5aaeb6a7bffcdba95614968c03d41d3851edecb0d6 + languageName: node + linkType: hard + +"micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": + version: 3.1.10 + resolution: "micromatch@npm:3.1.10" + dependencies: + arr-diff: ^4.0.0 + array-unique: ^0.3.2 + braces: ^2.3.1 + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + extglob: ^2.0.4 + fragment-cache: ^0.2.1 + kind-of: ^6.0.2 + nanomatch: ^1.2.9 + object.pick: ^1.3.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.2 + checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 + languageName: node + linkType: hard + +"microseconds@npm:0.2.0": + version: 0.2.0 + resolution: "microseconds@npm:0.2.0" + checksum: 22bfa8553f92c7d95afff6de0aeb2aecf750680d41b8c72b02098ccc5bbbb0a384380ff539292dbd3788f5dfc298682f9d38a2b4c101f5ee2c9471d53934c5fa + languageName: node + linkType: hard + +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: ^4.0.0 + brorand: ^1.0.1 + bin: + miller-rabin: bin/miller-rabin + checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece + languageName: node + linkType: hard + +"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + +"mime@npm:2.6.0, mime@npm:^2.4.4": + version: 2.6.0 + resolution: "mime@npm:2.6.0" + bin: + mime: cli.js + checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:0.11.3": + version: 0.11.3 + resolution: "mini-css-extract-plugin@npm:0.11.3" + dependencies: + loader-utils: ^1.1.0 + normalize-url: 1.9.1 + schema-utils: ^1.0.0 + webpack-sources: ^1.1.0 + peerDependencies: + webpack: ^4.4.0 || ^5.0.0 + checksum: 14fbdf1338fe0264a2f7f87b3fc640809b7443f6434c6532bdbec1c5ab113502325fec958e9cf0667c3790087dc1e83c02e1f4d7463c10c956b0d6ebe56ea99e + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + languageName: node + linkType: hard + +"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.1": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mississippi@npm:^3.0.0": + version: 3.0.0 + resolution: "mississippi@npm:3.0.0" + dependencies: + concat-stream: ^1.5.0 + duplexify: ^3.4.2 + end-of-stream: ^1.1.0 + flush-write-stream: ^1.0.0 + from2: ^2.1.0 + parallel-transform: ^1.1.0 + pump: ^3.0.0 + pumpify: ^1.3.3 + stream-each: ^1.1.0 + through2: ^2.0.0 + checksum: 84b3d9889621d293f9a596bafe60df863b330c88fc19215ced8f603c605fc7e1bf06f8e036edf301bd630a03fd5d9d7d23d5d6b9a4802c30ca864d800f0bd9f8 + languageName: node + linkType: hard + +"mitt@npm:^3.0.1": + version: 3.0.1 + resolution: "mitt@npm:3.0.1" + checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 + languageName: node + linkType: hard + +"mixin-deep@npm:^1.2.0": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: ^1.0.2 + is-extendable: ^1.0.1 + checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d + languageName: node + linkType: hard + +"mkdirp@npm:1.x, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mlly@npm:^1.4.0, mlly@npm:^1.7.0": + version: 1.7.1 + resolution: "mlly@npm:1.7.1" + dependencies: + acorn: ^8.11.3 + pathe: ^1.1.2 + pkg-types: ^1.1.1 + ufo: ^1.5.3 + checksum: 956a6d54119eef782f302580f63a9800654e588cd70015b4218a00069c6ef11b87984e8ffe140a4668b0100ad4022b11d1f9b11ac2c6dbafa4d8bc33ae3a08a8 + languageName: node + linkType: hard + +"move-concurrently@npm:^1.0.1": + version: 1.0.1 + resolution: "move-concurrently@npm:1.0.1" + dependencies: + aproba: ^1.1.1 + copy-concurrently: ^1.0.0 + fs-write-stream-atomic: ^1.0.8 + mkdirp: ^0.5.1 + rimraf: ^2.5.4 + run-queue: ^1.0.3 + checksum: 4ea3296c150b09e798177847f673eb5783f8ca417ba806668d2c631739f653e1a735f19fb9b6e2f5e25ee2e4c0a6224732237a8e4f84c764e99d7462d258209e + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"msw@npm:^0.44.2": + version: 0.44.2 + resolution: "msw@npm:0.44.2" + dependencies: + "@mswjs/cookies": ^0.2.2 + "@mswjs/interceptors": ^0.17.2 + "@open-draft/until": ^1.0.3 + "@types/cookie": ^0.4.1 + "@types/js-levenshtein": ^1.1.1 + chalk: 4.1.1 + chokidar: ^3.4.2 + cookie: ^0.4.2 + graphql: ^16.3.0 + headers-polyfill: ^3.0.4 + inquirer: ^8.2.0 + is-node-process: ^1.0.1 + js-levenshtein: ^1.1.6 + node-fetch: ^2.6.7 + outvariant: ^1.3.0 + path-to-regexp: ^6.2.0 + statuses: ^2.0.0 + strict-event-emitter: ^0.2.0 + type-fest: ^1.2.2 + yargs: ^17.3.1 + peerDependencies: + typescript: ">= 4.2.x <= 4.7.x" + peerDependenciesMeta: + typescript: + optional: true + bin: + msw: cli/index.js + checksum: 739d536ee09d1c0a2cbc9dbe917f167c42115a6548f99780850ce9a63a5e7c377cf9b5f1a3b497e85ce7304025ab22966e997fe73adbd8d2ab968b8685f15a24 + languageName: node + linkType: hard + +"multer@npm:^1.4.5-lts.1": + version: 1.4.5-lts.1 + resolution: "multer@npm:1.4.5-lts.1" + dependencies: + append-field: ^1.0.0 + busboy: ^1.0.0 + concat-stream: ^1.5.2 + mkdirp: ^0.5.4 + object-assign: ^4.1.1 + type-is: ^1.6.4 + xtend: ^4.0.0 + checksum: d6dfa78a6ec592b74890412f8962da8a87a3dcfe20f612e039b735b8e0faa72c735516c447f7de694ee0d981eb0a1b892fb9e2402a0348dc6091d18c38d89ecc + languageName: node + linkType: hard + +"multicast-dns-service-types@npm:^1.1.0": + version: 1.1.0 + resolution: "multicast-dns-service-types@npm:1.1.0" + checksum: 0979fca1cce85484d256e4db3af591d941b41a61f134da3607213d2624c12ed5b8a246565cb19a9b3cb542819e8fbc71a90b07e77023ee6a9515540fe1d371f7 + languageName: node + linkType: hard + +"multicast-dns@npm:^6.0.1": + version: 6.2.3 + resolution: "multicast-dns@npm:6.2.3" + dependencies: + dns-packet: ^1.3.1 + thunky: ^1.0.2 + bin: + multicast-dns: cli.js + checksum: f515b49ca964429ab48a4ac8041fcf969c927aeb49ab65288bd982e52c849a870fc3b03565780b0d194a1a02da8821f28b6425e48e95b8107bc9fcc92f571a6f + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + +"nan@npm:^2.12.1": + version: 2.19.0 + resolution: "nan@npm:2.19.0" + dependencies: + node-gyp: latest + checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600 + languageName: node + linkType: hard + +"nano-time@npm:1.0.0": + version: 1.0.0 + resolution: "nano-time@npm:1.0.0" + dependencies: + big-integer: ^1.6.16 + checksum: eef8548546cc1020625f8e44751a7263e9eddf0412a6a1a6c80a8d2be2ea7973622804a977cdfe796807b85b20ff6c8ba340e8dd20effcc7078193ed5edbb5d4 + languageName: node + linkType: hard + +"nanoclone@npm:^0.2.1": + version: 0.2.1 + resolution: "nanoclone@npm:0.2.1" + checksum: 96b2954e22f70561f41e20d69856266c65583c2a441dae108f1dc71b716785d2c8038dac5f1d5e92b117aed3825f526b53139e2e5d6e6db8a77cfa35b3b8bf40 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + languageName: node + linkType: hard + +"nanomatch@npm:^1.2.9": + version: 1.2.13 + resolution: "nanomatch@npm:1.2.13" + dependencies: + arr-diff: ^4.0.0 + array-unique: ^0.3.2 + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + fragment-cache: ^0.2.1 + is-windows: ^1.0.2 + kind-of: ^6.0.2 + object.pick: ^1.3.0 + regex-not: ^1.0.0 + snapdragon: ^0.8.1 + to-regex: ^3.0.1 + checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 + languageName: node + linkType: hard + +"native-url@npm:^0.2.6": + version: 0.2.6 + resolution: "native-url@npm:0.2.6" + dependencies: + querystring: ^0.2.0 + checksum: d56a67b32e635c4944985f551a9976dfe609a3947810791c50f5c37cff1d9dd5fe040184989d104be8752582b79dc4e726f2a9c075d691ecce86b31ae9387f1b + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"next-tick@npm:^1.1.0": + version: 1.1.0 + resolution: "next-tick@npm:1.1.0" + checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: ^2.0.2 + tslib: ^2.0.3 + checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-forge@npm:^0.10.0": + version: 0.10.0 + resolution: "node-forge@npm:0.10.0" + checksum: 5aa6dc9922e424a20ef101d2f517418e2bc9cfc0255dd22e0701c0fad1568445f510ee67f6f3fcdf085812c4ca1b847b8ba45683b34776828e41f5c1794e42e1 + languageName: node + linkType: hard + +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-libs-browser@npm:^2.2.1": + version: 2.2.1 + resolution: "node-libs-browser@npm:2.2.1" + dependencies: + assert: ^1.1.1 + browserify-zlib: ^0.2.0 + buffer: ^4.3.0 + console-browserify: ^1.1.0 + constants-browserify: ^1.0.0 + crypto-browserify: ^3.11.0 + domain-browser: ^1.1.1 + events: ^3.0.0 + https-browserify: ^1.0.0 + os-browserify: ^0.3.0 + path-browserify: 0.0.1 + process: ^0.11.10 + punycode: ^1.2.4 + querystring-es3: ^0.2.0 + readable-stream: ^2.3.3 + stream-browserify: ^2.0.1 + stream-http: ^2.7.2 + string_decoder: ^1.0.0 + timers-browserify: ^2.0.4 + tty-browserify: 0.0.0 + url: ^0.11.0 + util: ^0.11.0 + vm-browserify: ^1.0.1 + checksum: 41fa7927378edc0cb98a8cc784d3f4a47e43378d3b42ec57a23f81125baa7287c4b54d6d26d062072226160a3ce4d8b7a62e873d2fb637aceaddf71f5a26eca0 + languageName: node + linkType: hard + +"node-notifier@npm:^8.0.0": + version: 8.0.2 + resolution: "node-notifier@npm:8.0.2" + dependencies: + growly: ^1.3.0 + is-wsl: ^2.2.0 + semver: ^7.3.2 + shellwords: ^0.1.1 + uuid: ^8.3.0 + which: ^2.0.2 + checksum: 7db1683003f6aaa4324959dfa663cd56e301ccc0165977a9e7737989ffe3b4763297f9fc85f44d0662b63a4fd85516eda43411b492a4d2fae207afb23773f912 + languageName: node + linkType: hard + +"node-releases@npm:^1.1.61": + version: 1.1.77 + resolution: "node-releases@npm:1.1.77" + checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 + languageName: node + linkType: hard + +"nodemailer@npm:^6.9.1": + version: 6.9.13 + resolution: "nodemailer@npm:6.9.13" + checksum: 1b591ef480be2ff69480127cbff819e6593b1ef263b6f920e1a4e83e40280582daf7a14a809ef92f9828e2a70bdb3ce22b11924e209f2afe4975f9ff37e08e9d + languageName: node + linkType: hard + +"nodemon@npm:^2.0.16": + version: 2.0.22 + resolution: "nodemon@npm:2.0.22" + dependencies: + chokidar: ^3.5.2 + debug: ^3.2.7 + ignore-by-default: ^1.0.1 + minimatch: ^3.1.2 + pstree.remy: ^1.1.8 + semver: ^5.7.1 + simple-update-notifier: ^1.0.7 + supports-color: ^5.5.0 + touch: ^3.1.0 + undefsafe: ^2.0.5 + bin: + nodemon: bin/nodemon.js + checksum: 9c987e139748f5b5c480c6c9080bdc97304ee7d29172b7b3da1a7db590b1323ad57b96346304e9b522b0e445c336dc393ccd3f9f45c73b20d476d2347890dcd0 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: ^1.0.1 + checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 + languageName: node + linkType: hard + +"normalize-url@npm:1.9.1": + version: 1.9.1 + resolution: "normalize-url@npm:1.9.1" + dependencies: + object-assign: ^4.0.1 + prepend-http: ^1.0.0 + query-string: ^4.1.0 + sort-keys: ^1.0.0 + checksum: 4b03c22bebbb822874ce3b9204367ad1f27c314ae09b13aa201de730b3cf95f00dadf378277a56062322968c95c06e5764d01474d26af8b43d20bc4c8c491f84 + languageName: node + linkType: hard + +"normalize-url@npm:^3.0.0": + version: 3.3.0 + resolution: "normalize-url@npm:3.3.0" + checksum: f6aa4a1a94c3b799812f3e7fc987fb4599d869bfa8e9a160b6f2c5a2b4e62ada998d64dca30d9e20769d8bd95d3da1da3d4841dba2cc3c4d85364e1eb46219a2 + languageName: node + linkType: hard + +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: ^2.0.0 + checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.0": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"nth-check@npm:^1.0.2": + version: 1.0.2 + resolution: "nth-check@npm:1.0.2" + dependencies: + boolbase: ~1.0.0 + checksum: 59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + languageName: node + linkType: hard + +"num2fraction@npm:^1.2.2": + version: 1.2.2 + resolution: "num2fraction@npm:1.2.2" + checksum: 1da9c6797b505d3f5b17c7f694c4fa31565bdd5c0e5d669553253aed848a580804cd285280e8a73148bd9628839267daee4967f24b53d4e893e44b563e412635 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.0": + version: 2.2.10 + resolution: "nwsapi@npm:2.2.10" + checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f + languageName: node + linkType: hard + +"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-copy@npm:^0.1.0": + version: 0.1.0 + resolution: "object-copy@npm:0.1.0" + dependencies: + copy-descriptor: ^0.1.0 + define-property: ^0.2.5 + kind-of: ^3.0.3 + checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + languageName: node + linkType: hard + +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object-visit@npm:^1.0.0": + version: 1.0.1 + resolution: "object-visit@npm:1.0.1" + dependencies: + isobject: ^3.0.0 + checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.0, object.entries@npm:^1.1.7, object.entries@npm:^1.1.8": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 + languageName: node + linkType: hard + +"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0": + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" + dependencies: + array.prototype.reduce: ^1.0.6 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + gopd: ^1.0.1 + safe-array-concat: ^1.1.2 + checksum: 073e492700a7f61ff6c471a2ed96e72473b030a7a105617f03cab192fb4bbc0e6068ef76534ec56afd34baf26b5dc5408de59cb0140ec8abde781e00faa3e63e + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.1": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 + languageName: node + linkType: hard + +"object.hasown@npm:^1.1.4": + version: 1.1.4 + resolution: "object.hasown@npm:1.1.4" + dependencies: + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 + languageName: node + linkType: hard + +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: ^3.0.1 + checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + languageName: node + linkType: hard + +"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa + languageName: node + linkType: hard + +"oblivious-set@npm:1.0.0": + version: 1.0.0 + resolution: "oblivious-set@npm:1.0.0" + checksum: f31740ea9c3a8242ad2324e4ebb9a35359fbc2e6e7131731a0fc1c8b7b1238eb07e4c8c631a38535243a7b8e3042b7e89f7dc2a95d2989afd6f80bd5793b0aab + languageName: node + linkType: hard + +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"open@npm:^7.0.2": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + languageName: node + linkType: hard + +"opn@npm:^5.5.0": + version: 5.5.0 + resolution: "opn@npm:5.5.0" + dependencies: + is-wsl: ^1.1.0 + checksum: 35b677b5a1fd6c8cb1996b0607671ba79f7ce9fa029217d54eafaf6bee13eb7e700691c6a415009140fd02a435fffdfd143875f3b233b60f3f9d631c6f6b81a0 + languageName: node + linkType: hard + +"optimize-css-assets-webpack-plugin@npm:5.0.4": + version: 5.0.4 + resolution: "optimize-css-assets-webpack-plugin@npm:5.0.4" + dependencies: + cssnano: ^4.1.10 + last-call-webpack-plugin: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 + checksum: bcd509eaab2a6f0ed8396fe847f4f0da73655a54f4c418fa30dc1fc4a0b1b620f38e2fcd6bcb369e2a6cf4530995b371e9d12011566ac7ffe6ac6aec2ab0a4fb + languageName: node + linkType: hard + +"optionator@npm:^0.8.1": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + 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 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + +"os-browserify@npm:^0.3.0": + version: 0.3.0 + resolution: "os-browserify@npm:0.3.0" + checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"outvariant@npm:^1.2.1, outvariant@npm:^1.3.0": + version: 1.4.2 + resolution: "outvariant@npm:1.4.2" + checksum: 5d9e2b3edb1cc8be9cbfc1c8c97e8b05137c4384bbfc56e0a465de26c5d2f023e65732ddcda9d46599b06d667fbc0de32c30d2ecd11f6f3f43bcf8ce0d320918 + languageName: node + linkType: hard + +"p-each-series@npm:^2.1.0": + version: 2.2.0 + resolution: "p-each-series@npm:2.2.0" + checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 9e3ad3c9f6d75a5b5661bcad78c91f3a63849189737cd75e4f1225bf9ac205194e5c44aac2ef6f09562b1facdb9bd1425584d7ac375bfaa17b3f1a142dab936d + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-queue@npm:^6.6.1": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: ^4.0.4 + p-timeout: ^3.2.0 + checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c + languageName: node + linkType: hard + +"p-retry@npm:^3.0.1": + version: 3.0.1 + resolution: "p-retry@npm:3.0.1" + dependencies: + retry: ^0.12.0 + checksum: 702efc63fc13ef7fc0bab9a1b08432ab38a0236efcbce64af0cf692030ba6ed8009f29ba66e3301cb98dc69ef33e7ccab29ba1ac2bea897f802f81f4f7e468dd + languageName: node + linkType: hard + +"p-retry@npm:^4.0.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: ^1.0.0 + checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"pako@npm:^1.0.10, pako@npm:^1.0.11, pako@npm:^1.0.6, pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + languageName: node + linkType: hard + +"parallel-transform@npm:^1.1.0": + version: 1.2.0 + resolution: "parallel-transform@npm:1.2.0" + dependencies: + cyclist: ^1.0.1 + inherits: ^2.0.3 + readable-stream: ^2.1.5 + checksum: ab6ddc1a662cefcfb3d8d546a111763d3b223f484f2e9194e33aefd8f6760c319d0821fd22a00a3adfbd45929b50d2c84cc121389732f013c2ae01c226269c27 + languageName: node + linkType: hard + +"param-case@npm:^3.0.3, param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.7": + version: 5.1.7 + resolution: "parse-asn1@npm:5.1.7" + dependencies: + asn1.js: ^4.10.1 + browserify-aes: ^1.2.0 + evp_bytestokey: ^1.0.3 + hash-base: ~3.0 + pbkdf2: ^3.1.2 + safe-buffer: ^5.2.1 + checksum: 93c7194c1ed63a13e0b212d854b5213ad1aca0ace41c66b311e97cca0519cf9240f79435a0306a3b412c257f0ea3f1953fd0d9549419a0952c9e995ab361fd6c + languageName: node + linkType: hard + +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: ^1.0.0 + character-entities-legacy: ^1.0.0 + character-reference-invalid: ^1.0.0 + is-alphanumerical: ^1.0.0 + is-decimal: ^1.0.0 + is-hexadecimal: ^1.0.0 + checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + 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 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse5@npm:6.0.1": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd + languageName: node + linkType: hard + +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"pascal-case@npm:^3.1.2": + version: 3.1.2 + resolution: "pascal-case@npm:3.1.2" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e + languageName: node + linkType: hard + +"pascalcase@npm:^0.1.1": + version: 0.1.1 + resolution: "pascalcase@npm:0.1.1" + checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 + languageName: node + linkType: hard + +"path-browserify@npm:0.0.1": + version: 0.0.1 + resolution: "path-browserify@npm:0.0.1" + checksum: ae8dcd45d0d3cfbaf595af4f206bf3ed82d77f72b4877ae7e77328079e1468c84f9386754bb417d994d5a19bf47882fd253565c18441cd5c5c90ae5187599e35 + languageName: node + linkType: hard + +"path-case@npm:^3.0.4": + version: 3.0.4 + resolution: "path-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d + languageName: node + linkType: hard + +"path-dirname@npm:^1.0.0": + version: 1.0.2 + resolution: "path-dirname@npm:1.0.2" + checksum: 0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-is-inside@npm:^1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb + languageName: node + linkType: hard + +"path-key@npm:^2.0.0, path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce + languageName: node + linkType: hard + +"path-to-regexp@npm:^1.7.0": + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" + dependencies: + isarray: 0.0.1 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + languageName: node + linkType: hard + +"path-to-regexp@npm:^6.2.0": + version: 6.2.2 + resolution: "path-to-regexp@npm:6.2.2" + checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + +"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + dependencies: + create-hash: ^1.1.2 + create-hmac: ^1.1.4 + ripemd160: ^2.0.1 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + languageName: node + linkType: hard + +"pdf-lib@npm:^1.17.1": + version: 1.17.1 + resolution: "pdf-lib@npm:1.17.1" + dependencies: + "@pdf-lib/standard-fonts": ^1.0.0 + "@pdf-lib/upng": ^1.0.1 + pako: ^1.0.11 + tslib: ^1.11.1 + checksum: 0dae766f23de60ff071368073990cca0d30fb5d104c50a17fee00f0659a491f66e45ce80b1bbfe254e6915a5bc9079f42501dfff2e37f8f76a8807d3e321b19a + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picocolors@npm:^0.2.1": + version: 0.2.1 + resolution: "picocolors@npm:0.2.1" + checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: ^2.0.0 + checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db + languageName: node + linkType: hard + +"pirates@npm:^4.0.1": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: ^3.0.0 + checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"pkg-types@npm:^1.1.1": + version: 1.1.1 + resolution: "pkg-types@npm:1.1.1" + dependencies: + confbox: ^0.1.7 + mlly: ^1.7.0 + pathe: ^1.1.2 + checksum: 78ee49eea8c03802ffbdc79dfb6a741f905a4053453280cd2f1149850523fdaf46d39ecb88c2c2f757cceb9883f234bb0e56371084b5895632bdb00ef0f7298f + languageName: node + linkType: hard + +"pkg-up@npm:3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: ^3.0.0 + checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 + languageName: node + linkType: hard + +"pnp-webpack-plugin@npm:1.6.4": + version: 1.6.4 + resolution: "pnp-webpack-plugin@npm:1.6.4" + dependencies: + ts-pnp: ^1.1.6 + checksum: 0606a63db96400b07f182300168298da9518727a843f9e10cf5045d2a102a4be06bb18c73dc481281e3e0f1ed8d04ef0d285a342b6dcd0eff1340e28e5d2328d + languageName: node + linkType: hard + +"portfinder@npm:^1.0.26": + version: 1.0.32 + resolution: "portfinder@npm:1.0.32" + dependencies: + async: ^2.6.4 + debug: ^3.2.7 + mkdirp: ^0.5.6 + checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d + languageName: node + linkType: hard + +"posix-character-classes@npm:^0.1.0": + version: 0.1.1 + resolution: "posix-character-classes@npm:0.1.1" + checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + +"postcss-attribute-case-insensitive@npm:^4.0.1": + version: 4.0.2 + resolution: "postcss-attribute-case-insensitive@npm:4.0.2" + dependencies: + postcss: ^7.0.2 + postcss-selector-parser: ^6.0.2 + checksum: e9cf4b61f443bf302dcd1110ef38d6a808fa38ae5d85bfd0aaaa6d35bef3825e0434f1aed8eb9596a5d88f21580ce8b9cd0098414d8490293ef71149695cae9a + languageName: node + linkType: hard + +"postcss-browser-comments@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-browser-comments@npm:3.0.0" + dependencies: + postcss: ^7 + peerDependencies: + browserslist: ^4 + checksum: 6e8cfae4c71cf7b5d4741e19021f3e3d81d772372a9e12f5c675e25bc3ea45fe5154fd0ee055ee041aee8b484c59875fdf15df3cec5e7fd4cf3209bc5ef0b515 + languageName: node + linkType: hard + +"postcss-calc@npm:^7.0.1": + version: 7.0.5 + resolution: "postcss-calc@npm:7.0.5" + dependencies: + postcss: ^7.0.27 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.0.2 + checksum: 03640d493fb0e557634ab23e5d1eb527b014fb491ac3e62b45e28f5a6ef57e25a209f82040ce54c40d5a1a7307597a55d3fa6e8cece0888261a66bc75e39a68b + languageName: node + linkType: hard + +"postcss-color-functional-notation@npm:^2.0.1": + version: 2.0.1 + resolution: "postcss-color-functional-notation@npm:2.0.1" + dependencies: + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: 0bfd1fa93bc54a07240d821d091093256511f70f0df5349e27e4d8b034ee3345f0ae58674ce425be6a91cc934325b2ce36ecddbf958fa8805fed6647cf671348 + languageName: node + linkType: hard + +"postcss-color-gray@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-color-gray@npm:5.0.0" + dependencies: + "@csstools/convert-colors": ^1.4.0 + postcss: ^7.0.5 + postcss-values-parser: ^2.0.0 + checksum: 81a62b3e2c170ffadc085c1643a7b5f1c153837d7ca228b07df88b9aeb0ec9088a92f8d919a748137ead3936e8dac2606e32b14b5166a59143642c8573949db5 + languageName: node + linkType: hard + +"postcss-color-hex-alpha@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-color-hex-alpha@npm:5.0.3" + dependencies: + postcss: ^7.0.14 + postcss-values-parser: ^2.0.1 + checksum: 0a0ccb42c7c6a271ffd3c8b123b9c67744827d4b810b759731bc702fea1e00f05f08479ec7cbd8dfa47bc20510830a69f1e316a5724b9e53d5fdc6fabf90afc4 + languageName: node + linkType: hard + +"postcss-color-mod-function@npm:^3.0.3": + version: 3.0.3 + resolution: "postcss-color-mod-function@npm:3.0.3" + dependencies: + "@csstools/convert-colors": ^1.4.0 + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: ecbf74e9395527aaf3e83b90b1a6c9bba0a1904038d8acef1f530d50a68d912d6b1af8df690342f942be8b89fa7dfaa35ae67cb5fb48013cb389ecb8c74deadb + languageName: node + linkType: hard + +"postcss-color-rebeccapurple@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-color-rebeccapurple@npm:4.0.1" + dependencies: + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: a7b1a204dfc5163ac4195cc3cb0c7b1bba9561feab49d24be8a17d695d6b69fd92f3da23d638260fe7e9d5076cf81bb798b25134fa2a2fbf7f74b0dda2829a96 + languageName: node + linkType: hard + +"postcss-colormin@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-colormin@npm:4.0.3" + dependencies: + browserslist: ^4.0.0 + color: ^3.0.0 + has: ^1.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 9b2eab73cd227cbf296f1a2a6466047f6c70b918c3844535531fd87f31d7878e1a8d81e8803ffe2ee8c3330ea5bec65e358a0e0f33defcd758975064e07fe928 + languageName: node + linkType: hard + +"postcss-convert-values@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-convert-values@npm:4.0.1" + dependencies: + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 71cac73f5befeb8bc16274e2aaabe1b8e0cb42a8b8641dc2aa61b1c502697b872a682c36f370cce325553bbfc859c38f2b064fae6f6469b1cada79e733559261 + languageName: node + linkType: hard + +"postcss-custom-media@npm:^7.0.8": + version: 7.0.8 + resolution: "postcss-custom-media@npm:7.0.8" + dependencies: + postcss: ^7.0.14 + checksum: 3786eb10f238b22dc620cfcc9257779e27d8cee4510b3209d0ab67310e07dc68b69f3359db7a911f5e76df466f73d078fc80100943fe2e8fa9bcacf226705a2d + languageName: node + linkType: hard + +"postcss-custom-properties@npm:^8.0.11": + version: 8.0.11 + resolution: "postcss-custom-properties@npm:8.0.11" + dependencies: + postcss: ^7.0.17 + postcss-values-parser: ^2.0.1 + checksum: cb1b47459a23ff2e48714c5d48d50070d573ef829dc7e57189d1b38c6fba0de7084f1acefbd84c61dd67e30bd9a7d154b22f195547728a9dc5f76f7d3f03ffea + languageName: node + linkType: hard + +"postcss-custom-selectors@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-custom-selectors@npm:5.1.2" + dependencies: + postcss: ^7.0.2 + postcss-selector-parser: ^5.0.0-rc.3 + checksum: 26c83d348448f4ab5931cc1621606b09a6b1171e25fac2404073f3e298e77494ac87d4a21009679503b4895452810e93e618b5af26b4c7180a9013f283bb8088 + languageName: node + linkType: hard + +"postcss-dir-pseudo-class@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-dir-pseudo-class@npm:5.0.0" + dependencies: + postcss: ^7.0.2 + postcss-selector-parser: ^5.0.0-rc.3 + checksum: 703156fc65f259ec2e86ba51d18370a6d3b71f2e6473c7d65694676a8f0152137b1997bc0a53f7f373c8c3e4d63c72f7b5e2049f2ef3a7276b49409395722044 + languageName: node + linkType: hard + +"postcss-discard-comments@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-discard-comments@npm:4.0.2" + dependencies: + postcss: ^7.0.0 + checksum: b087d47649160b7c6236aba028d27f1796a0dcb21e9ffd0da62271171fc31b7f150ee6c7a24fa97e3f5cd1af92e0dc41cb2e2680a175da53f1e536c441bda56a + languageName: node + linkType: hard + +"postcss-discard-duplicates@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-discard-duplicates@npm:4.0.2" + dependencies: + postcss: ^7.0.0 + checksum: bd83647a8e5ea34b0cfe563d0c1410a0c9e742011aa67955709c5ecd2d2bb03b7016053781e975e4c802127d2f9a0cd9c22f1f2783b9d7b1c35487d60f7ea540 + languageName: node + linkType: hard + +"postcss-discard-empty@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-discard-empty@npm:4.0.1" + dependencies: + postcss: ^7.0.0 + checksum: 529b177bd2417fa5c8887891369b4538b858d767461192974a796814265794e08e0e624a9f4c566ed9f841af3faddb7e7a9c05c45cbbe2fb1f092f65bd227f5c + languageName: node + linkType: hard + +"postcss-discard-overridden@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-discard-overridden@npm:4.0.1" + dependencies: + postcss: ^7.0.0 + checksum: b34d8cf58e4d13d99a3a9459f4833f1248ca897316bbb927375590feba35c24a0304084a6174a7bf3fe4ba3d5e5e9baf15ea938e7e5744e56915fa7ef6d91ee0 + languageName: node + linkType: hard + +"postcss-double-position-gradients@npm:^1.0.0": + version: 1.0.0 + resolution: "postcss-double-position-gradients@npm:1.0.0" + dependencies: + postcss: ^7.0.5 + postcss-values-parser: ^2.0.0 + checksum: d2c4515b38a131ece44dba331aea2b3f9de646e30873b49f03fa8906179a3c43ddc43183bc4df609d8af0834e7c266ec3a63eaa4b3e96aa445d98ecdc12d2544 + languageName: node + linkType: hard + +"postcss-env-function@npm:^2.0.2": + version: 2.0.2 + resolution: "postcss-env-function@npm:2.0.2" + dependencies: + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: 0cfa2e6cad5123cce39dcf5af332ec3b0e3e09b54d5142225f255914079d2afda3f1052e60f4b6d3bccf7eb9d592325b7421f1ecc6674ccb13c267a721fc3128 + languageName: node + linkType: hard + +"postcss-flexbugs-fixes@npm:4.2.1": + version: 4.2.1 + resolution: "postcss-flexbugs-fixes@npm:4.2.1" + dependencies: + postcss: ^7.0.26 + checksum: 51a626bc80dbe42fcc8b0895b4f23a558bb809ec52cdc05aa27fb24cdffd4c9dc53f25218085ddf407c53d76573bc6d7568219c912161609f02532a8f5f59b43 + languageName: node + linkType: hard + +"postcss-focus-visible@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-focus-visible@npm:4.0.0" + dependencies: + postcss: ^7.0.2 + checksum: a3c93fbb578608f60c5256d0989ae32fd9100f76fa053880e82bfeb43751e81a3a9e69bd8338e06579b7f56b230a80fb2cc671eff134f2682dcbec9bbb8658ae + languageName: node + linkType: hard + +"postcss-focus-within@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-focus-within@npm:3.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 2a31292cd9b929a2dd3171fc4ed287ea4a93c6ec8df1d634503fb97b8b30b33a2970b5e0df60634c60ff887923ab28641b624d566533096950e0a384705e9b90 + languageName: node + linkType: hard + +"postcss-font-variant@npm:^4.0.0": + version: 4.0.1 + resolution: "postcss-font-variant@npm:4.0.1" + dependencies: + postcss: ^7.0.2 + checksum: d09836cd848e8c24d144484b6b9b175df26dca59e1a1579e790c7f3dcaea00944a8d0b6ac543f4c128de7b30fab9a0aef544d54789b3b55fd850770b172d980d + languageName: node + linkType: hard + +"postcss-gap-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-gap-properties@npm:2.0.0" + dependencies: + postcss: ^7.0.2 + checksum: c842d105c9403e34a8fac7bdef33a63fcb6bde038b04b20cae1e719e1966632887545576af99a4a6f302c98ca029c6f0d746419f498ef7f6821177ba676e6c25 + languageName: node + linkType: hard + +"postcss-image-set-function@npm:^3.0.1": + version: 3.0.1 + resolution: "postcss-image-set-function@npm:3.0.1" + dependencies: + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: 43958d7c1f80077e60e066bdf61bc326bcac64c272f17fd7a0585a6934fb1ffc7ba7f560a39849f597e4d28b8ae3addd9279c7145b9478d2d91a7c54c2fefd8b + languageName: node + linkType: hard + +"postcss-initial@npm:^3.0.0": + version: 3.0.4 + resolution: "postcss-initial@npm:3.0.4" + dependencies: + postcss: ^7.0.2 + checksum: 710ab6cabc5970912c04314099f5334e7d901235014bb1462657e29f8dc97b6e51caa35f0beba7e5dbe440589ef9c1df13a89bc53d6e6aa664573b945f1630bb + languageName: node + linkType: hard + +"postcss-lab-function@npm:^2.0.1": + version: 2.0.1 + resolution: "postcss-lab-function@npm:2.0.1" + dependencies: + "@csstools/convert-colors": ^1.4.0 + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: 598229a7a05803b18cccde28114833e910367c5954341bea03c7d7b7b5a667dfb6a77ef9dd4a16d80fdff8b10dd44c478602a7d56e43687c8687af3710b4706f + languageName: node + linkType: hard + +"postcss-load-config@npm:^2.0.0": + version: 2.1.2 + resolution: "postcss-load-config@npm:2.1.2" + dependencies: + cosmiconfig: ^5.0.0 + import-cwd: ^2.0.0 + checksum: 2e6d3a499512a03c19b0090f4143861612d613511d57122879d9fd545558d2a9fcbe85a2b0faf2ec32bbce0e62d22d2b544d91cbc4d4dfb3f22f841f8271fbc6 + languageName: node + linkType: hard + +"postcss-loader@npm:3.0.0": + version: 3.0.0 + resolution: "postcss-loader@npm:3.0.0" + dependencies: + loader-utils: ^1.1.0 + postcss: ^7.0.0 + postcss-load-config: ^2.0.0 + schema-utils: ^1.0.0 + checksum: a6a922cbcc225ef57fb88c8248f91195869cd11e0d2b0b0fe84bc89a3074437d592d79a9fc39e50218677b7ba3a41b0e1c7e8f9666e59d41a196d7ab022c5805 + languageName: node + linkType: hard + +"postcss-logical@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-logical@npm:3.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 5278661b78a093661c9cac8c04666d457734bf156f83d8c67f6034c00e8d4b3a26fce32a8a4a251feae3c7587f42556412dca980e100d0c920ee55e878f7b8ee + languageName: node + linkType: hard + +"postcss-media-minmax@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-media-minmax@npm:4.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 8a4d94e25089bb5a66c6742bcdd263fce2fea391438151a85b442b7f8b66323bbca552b59a93efd6bcabcfd41845ddd4149bd56d156b008f8d7d04bc84d9fb11 + languageName: node + linkType: hard + +"postcss-merge-longhand@npm:^4.0.11": + version: 4.0.11 + resolution: "postcss-merge-longhand@npm:4.0.11" + dependencies: + css-color-names: 0.0.4 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + stylehacks: ^4.0.0 + checksum: 45082b492d4d771c1607707d04dbcaece85a100011109886af9460a7868720de1121e290a6442360e2668db510edef579194197d1b534e9fb6c8df7a6cb86a4d + languageName: node + linkType: hard + +"postcss-merge-rules@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-merge-rules@npm:4.0.3" + dependencies: + browserslist: ^4.0.0 + caniuse-api: ^3.0.0 + cssnano-util-same-parent: ^4.0.0 + postcss: ^7.0.0 + postcss-selector-parser: ^3.0.0 + vendors: ^1.0.0 + checksum: ed0f3880e1076e5b2a08e4cff35b50dc7dfbd337e6ba16a0ca157e28268cfa1d6c6d821e902d319757f32a7d36f944cad51be76f8b34858d1d7a637e7b585919 + languageName: node + linkType: hard + +"postcss-minify-font-values@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-minify-font-values@npm:4.0.2" + dependencies: + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: add296b3bc88501283d65b54ad83552f47c98dd403740a70d8dfeef6d30a21d4a1f40191ffef1029a9474e9580a73e84ef644e99ede76c5a2474579b583f4b34 + languageName: node + linkType: hard + +"postcss-minify-gradients@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-minify-gradients@npm:4.0.2" + dependencies: + cssnano-util-get-arguments: ^4.0.0 + is-color-stop: ^1.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: b83de019cc392192d64182fa6f609383904ef69013d71cda5d06fadab92b4daa73f5be0d0254c5eb0805405e5e1b9c44e49ca6bc629c4c7a24a8164a30b40d46 + languageName: node + linkType: hard + +"postcss-minify-params@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-minify-params@npm:4.0.2" + dependencies: + alphanum-sort: ^1.0.0 + browserslist: ^4.0.0 + cssnano-util-get-arguments: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + uniqs: ^2.0.0 + checksum: 15e7f196b3408ab3f55f1a7c9fa8aeea7949fdd02be28af232dd2e47bb7722e0e0a416d6b2c4550ba333a485b775da1bc35c19c9be7b6de855166d2e85d7b28f + languageName: node + linkType: hard + +"postcss-minify-selectors@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-minify-selectors@npm:4.0.2" + dependencies: + alphanum-sort: ^1.0.0 + has: ^1.0.0 + postcss: ^7.0.0 + postcss-selector-parser: ^3.0.0 + checksum: a214809b620e50296417838804c3978d5f0a5ddfd48916780d77c1e0348c9ed0baa4b1f3905511b0f06b77340b5378088cc3188517c0848e8b7a53a71ef36c2b + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:1.1.0": + version: 1.1.0 + resolution: "postcss-modules-extract-imports@npm:1.1.0" + dependencies: + postcss: ^6.0.1 + checksum: 3dc9ed98509f654c1220bb8ec7489b30fa4441f2797eb5c894badfd6f4ab1b086f8002f59d47845d827a3f23a40400ba4c18959c7a3702285d4e5bfcfcd180d4 + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-modules-extract-imports@npm:2.0.0" + dependencies: + postcss: ^7.0.5 + checksum: 154790fe5954aaa12f300aa9aa782fae8b847138459c8f533ea6c8f29439dd66b4d9a49e0bf6f8388fa0df898cc03d61c84678e3b0d4b47cac5a4334a7151a9f + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:1.2.0": + version: 1.2.0 + resolution: "postcss-modules-local-by-default@npm:1.2.0" + dependencies: + css-selector-tokenizer: ^0.7.0 + postcss: ^6.0.1 + checksum: c8bbe0a9584e0a02339f4143125bf5febbcbfdbabedc33a5f2debdc5b0089f5c238b236101dbf923ea66c11637c0dee8bcf91d1692ed0443762203286b864ea2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^3.0.3": + version: 3.0.3 + resolution: "postcss-modules-local-by-default@npm:3.0.3" + dependencies: + icss-utils: ^4.1.1 + postcss: ^7.0.32 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + checksum: 0267633eaf80e72a3abf391b6e34c5b344a1bdfb1421543d3ed43fc757e053e0fcc1a2eb06d959a8f435776e8dc80288b59bfc34d61e5e021d47b747c417c5a1 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:1.1.0": + version: 1.1.0 + resolution: "postcss-modules-scope@npm:1.1.0" + dependencies: + css-selector-tokenizer: ^0.7.0 + postcss: ^6.0.1 + checksum: e1b7dd8b1aabb0dc719015352835c6865a5b80ef469cf956749540847b751ccac860d7f0f5659aa2c4b8a484c4a9291098895e5c91c9707e02c7f79a7288297e + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^2.2.0": + version: 2.2.0 + resolution: "postcss-modules-scope@npm:2.2.0" + dependencies: + postcss: ^7.0.6 + postcss-selector-parser: ^6.0.0 + checksum: c611181df924275ca1ffea261149c229488d6921054896879ca98feeb0913f9b00f4f160654beb2cb243a2989036c269baa96778eeacaaa399a4604b6e2fea17 + languageName: node + linkType: hard + +"postcss-modules-values@npm:1.3.0": + version: 1.3.0 + resolution: "postcss-modules-values@npm:1.3.0" + dependencies: + icss-replace-symbols: ^1.1.0 + postcss: ^6.0.1 + checksum: c1d542f71df43ec8b998808ea8de5e74e215a2428e92a8c157da436724aacf246b77440da1cd3d5daae610c875b46e7f8a845b52e1a49afdc37668093de8e3e7 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-values@npm:3.0.0" + dependencies: + icss-utils: ^4.0.0 + postcss: ^7.0.6 + checksum: f1aea0b9c6798b39ec02a6d2310924bb9bfbddb4579668c2d4e2205ca7a68c656b85d5720f9bba3629d611f36667fe04ab889ea3f9a6b569a0a0d57b4f2f4e99 + languageName: node + linkType: hard + +"postcss-nesting@npm:^7.0.0": + version: 7.0.1 + resolution: "postcss-nesting@npm:7.0.1" + dependencies: + postcss: ^7.0.2 + checksum: 4056be95759e8b25477f19aff7202b57dd27eeef41d31f7ca14e4c87d16ffb40e4db3f518fc85bd28b20e183f5e5399b56b52fcc79affd556e13a98bbc678169 + languageName: node + linkType: hard + +"postcss-normalize-charset@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-normalize-charset@npm:4.0.1" + dependencies: + postcss: ^7.0.0 + checksum: f233f48d61eb005da217e5bfa58f4143165cb525ceea2de4fd88e4172a33712e8b63258ffa089c867875a498c408f293a380ea9e6f40076de550d8053f50e5bc + languageName: node + linkType: hard + +"postcss-normalize-display-values@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-display-values@npm:4.0.2" + dependencies: + cssnano-util-get-match: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: c5b857ca05f30a3efc6211cdaa5c9306f3eb0dbac141047d451a418d2bfd3e54be0bd4481d61c640096152d3078881a8dc3dec61913ff7f01ab4fc6df1a14732 + languageName: node + linkType: hard + +"postcss-normalize-positions@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-positions@npm:4.0.2" + dependencies: + cssnano-util-get-arguments: ^4.0.0 + has: ^1.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 291612d0879e6913010937f1193ab56ae1cfd8a274665330ccbedbe72f59c36db3f688b0a3faa4c6689cfd03dff0c27702c6acfce9b1f697a022bfcee3cd4fc4 + languageName: node + linkType: hard + +"postcss-normalize-repeat-style@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-repeat-style@npm:4.0.2" + dependencies: + cssnano-util-get-arguments: ^4.0.0 + cssnano-util-get-match: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 2160b2a6fe4f9671ad5d044755f0e04cfb5f255db607505fd4c74e7c806315c9dca914e74bb02f5f768de7b70939359d05c3f9b23ae8f72551d8fdeabf79a1fb + languageName: node + linkType: hard + +"postcss-normalize-string@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-string@npm:4.0.2" + dependencies: + has: ^1.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 9d40753ceb4f7854ed690ecd5fe4ea142280b14441dd11e188e573e58af93df293efdc77311f1c599431df785a3bb614dfe4bdacc3081ee3fe8c95916c849b2f + languageName: node + linkType: hard + +"postcss-normalize-timing-functions@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-timing-functions@npm:4.0.2" + dependencies: + cssnano-util-get-match: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 8dfd711f5cdb49b823a92d1cd56d40f66f3686e257804495ef59d5d7f71815b6d19412a1ff25d40971bf6e146b1fa0517a6cc1a4c286b36c5cee6ed08a1952db + languageName: node + linkType: hard + +"postcss-normalize-unicode@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-normalize-unicode@npm:4.0.1" + dependencies: + browserslist: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 2b1da17815f8402651a72012fd385b5111e84002baf98b649e0c1fc91298b65bb0e431664f6df8a99b23217259ecec242b169c0f18bf26e727af02eaf475fb07 + languageName: node + linkType: hard + +"postcss-normalize-url@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-normalize-url@npm:4.0.1" + dependencies: + is-absolute-url: ^2.0.0 + normalize-url: ^3.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: fcaab832d8b773568197b41406517a9e5fc7704f2fac7185bd0e13b19961e1ce9f1c762e4ffa470de7baa6a82ae8ae5ccf6b1bbeec6e95216d22ce6ab514fe04 + languageName: node + linkType: hard + +"postcss-normalize-whitespace@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-normalize-whitespace@npm:4.0.2" + dependencies: + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 378a6eadb09ccc5ca2289e8daf98ce7366ae53342c4df7898ef5fae68138884d6c1241493531635458351b2805218bf55ceecae0fd289e5696ab15c78966abbb + languageName: node + linkType: hard + +"postcss-normalize@npm:8.0.1": + version: 8.0.1 + resolution: "postcss-normalize@npm:8.0.1" + dependencies: + "@csstools/normalize.css": ^10.1.0 + browserslist: ^4.6.2 + postcss: ^7.0.17 + postcss-browser-comments: ^3.0.0 + sanitize.css: ^10.0.0 + checksum: 3109075389b91a09a790c3cd62a4e8c147bab2113cffa7ea2e776982352796816bc56b7f08ed7f7175c24e5d9c46171a07f95eeee00cfecddac6e3b4c9888dd0 + languageName: node + linkType: hard + +"postcss-ordered-values@npm:^4.1.2": + version: 4.1.2 + resolution: "postcss-ordered-values@npm:4.1.2" + dependencies: + cssnano-util-get-arguments: ^4.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: 4a6f6a427a0165e1fa4f04dbe53a88708c73ea23e5b23ce312366ca8d85d83af450154a54f0e5df6c5712f945c180b6a364c3682dc995940b93228bb26658a96 + languageName: node + linkType: hard + +"postcss-overflow-shorthand@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-overflow-shorthand@npm:2.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 553be1b7f9645017d33b654f9a436ce4f4406066c3056ca4c7ee06c21c2964fbe3437a9a3f998137efb6a17c1a79ee7e8baa39332c7dd9874aac8b69a3ad08b0 + languageName: node + linkType: hard + +"postcss-page-break@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-page-break@npm:2.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 65a4453883e904ca0f337d3a988a1b5a090e2e8bc2855913cb0b4b741158e6ea2e4eed9b33f5989e7ae55faa0f7b83cdc09693d600ac4c86ce804ae381ec48a4 + languageName: node + linkType: hard + +"postcss-place@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-place@npm:4.0.1" + dependencies: + postcss: ^7.0.2 + postcss-values-parser: ^2.0.0 + checksum: 26b2a443b0a8fcb6774d00036fa351633798a655ccd609da2d561fbd6561b0ba6f6b6d89e15fb074389fadb7da4cbc59c48ba75f1f5fdc478c020febb4e2b557 + languageName: node + linkType: hard + +"postcss-preset-env@npm:6.7.0": + version: 6.7.0 + resolution: "postcss-preset-env@npm:6.7.0" + dependencies: + autoprefixer: ^9.6.1 + browserslist: ^4.6.4 + caniuse-lite: ^1.0.30000981 + css-blank-pseudo: ^0.1.4 + css-has-pseudo: ^0.10.0 + css-prefers-color-scheme: ^3.1.1 + cssdb: ^4.4.0 + postcss: ^7.0.17 + postcss-attribute-case-insensitive: ^4.0.1 + postcss-color-functional-notation: ^2.0.1 + postcss-color-gray: ^5.0.0 + postcss-color-hex-alpha: ^5.0.3 + postcss-color-mod-function: ^3.0.3 + postcss-color-rebeccapurple: ^4.0.1 + postcss-custom-media: ^7.0.8 + postcss-custom-properties: ^8.0.11 + postcss-custom-selectors: ^5.1.2 + postcss-dir-pseudo-class: ^5.0.0 + postcss-double-position-gradients: ^1.0.0 + postcss-env-function: ^2.0.2 + postcss-focus-visible: ^4.0.0 + postcss-focus-within: ^3.0.0 + postcss-font-variant: ^4.0.0 + postcss-gap-properties: ^2.0.0 + postcss-image-set-function: ^3.0.1 + postcss-initial: ^3.0.0 + postcss-lab-function: ^2.0.1 + postcss-logical: ^3.0.0 + postcss-media-minmax: ^4.0.0 + postcss-nesting: ^7.0.0 + postcss-overflow-shorthand: ^2.0.0 + postcss-page-break: ^2.0.0 + postcss-place: ^4.0.1 + postcss-pseudo-class-any-link: ^6.0.0 + postcss-replace-overflow-wrap: ^3.0.0 + postcss-selector-matches: ^4.0.0 + postcss-selector-not: ^4.0.0 + checksum: 209cbb63443a1631aa97ccfc3b95b1ff519ddaeb672f84d6af501bd9e9ad6727680b5b1bffb8209322e47d93029a69df6064f75cd0b7633b6df943cbef33f22e + languageName: node + linkType: hard + +"postcss-pseudo-class-any-link@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-pseudo-class-any-link@npm:6.0.0" + dependencies: + postcss: ^7.0.2 + postcss-selector-parser: ^5.0.0-rc.3 + checksum: d7dc3bba45df2966f8512c082a9cc341e63edac14d915ad9f41c62c452cd306d82da6baeee757dd4e7deafe3fa33b26c16e5236c670916bbb7ff4b4723453541 + languageName: node + linkType: hard + +"postcss-reduce-initial@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-reduce-initial@npm:4.0.3" + dependencies: + browserslist: ^4.0.0 + caniuse-api: ^3.0.0 + has: ^1.0.0 + postcss: ^7.0.0 + checksum: 5ad1a955cb20f5b1792ff8cc35894621edc23ee77397cc7e9692d269882fb4451655633947e0407fe20bd127d09d0b7e693034c64417bf8bf1034a83c6e71668 + languageName: node + linkType: hard + +"postcss-reduce-transforms@npm:^4.0.2": + version: 4.0.2 + resolution: "postcss-reduce-transforms@npm:4.0.2" + dependencies: + cssnano-util-get-match: ^4.0.0 + has: ^1.0.0 + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + checksum: e6a351d5da7ecf276ddda350635b15bce8e14af08aee1c8a0e8d9c2ab2631eab33b06f3c2f31c6f9c76eedbfc23f356d86da3539e011cde3e335a2cac9d91dc1 + languageName: node + linkType: hard + +"postcss-replace-overflow-wrap@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-replace-overflow-wrap@npm:3.0.0" + dependencies: + postcss: ^7.0.2 + checksum: 8c5b512a1172dd3d7b4a06d56d3b64c76dea01ca0950b546f83ae993f83aa95f933239e18deed0a5f3d2ef47840de55fa73498c4a46bfbe7bd892eb0dd8b606c + languageName: node + linkType: hard + +"postcss-safe-parser@npm:5.0.2": + version: 5.0.2 + resolution: "postcss-safe-parser@npm:5.0.2" + dependencies: + postcss: ^8.1.0 + checksum: b786eca091f856f2d31856d903c24c1b591ecbc0b607af0824e1cf12b9b254b5e1f24bc842cc2b95bc561f097d8b358fb4c9e04c73c1ba9c118d21bde9a83253 + languageName: node + linkType: hard + +"postcss-selector-matches@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-selector-matches@npm:4.0.0" + dependencies: + balanced-match: ^1.0.0 + postcss: ^7.0.2 + checksum: 724f6cb345477691909468268a456f978ad3bae9ecd9908b2bb55c55c5f3c6d54a1fe50ce3956d93b122d05fc36677a8e4a34eed07bccda969c3f8baa43669a6 + languageName: node + linkType: hard + +"postcss-selector-not@npm:^4.0.0": + version: 4.0.1 + resolution: "postcss-selector-not@npm:4.0.1" + dependencies: + balanced-match: ^1.0.0 + postcss: ^7.0.2 + checksum: 08fbd3e5ca273f3b767bd35d6bd033647a68f59b596d8aec19a9089b750539bdf85121ed7fd00a7763174a55c75c22a309d75d306127e23dc396069781efbaa4 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^3.0.0": + version: 3.1.2 + resolution: "postcss-selector-parser@npm:3.1.2" + dependencies: + dot-prop: ^5.2.0 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + checksum: 85b754bf3b5f671cddd75a199589e5b03da114ec119aa4628ab7f35f76134b25296d18a68f745e39780c379d66d3919ae7a1b6129aeec5049cedb9ba4c660803 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^5.0.0-rc.3, postcss-selector-parser@npm:^5.0.0-rc.4": + version: 5.0.0 + resolution: "postcss-selector-parser@npm:5.0.0" + dependencies: + cssesc: ^2.0.0 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + checksum: e49d21455e06d2cb9bf2a615bf3e605e0603c2c430a84c37a34f8baedaf3e8f9d0059a085d3e0483cbfa04c0d4153c7da28e7ac0ada319efdefe407df11dc1d4 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2": + version: 6.1.0 + resolution: "postcss-selector-parser@npm:6.1.0" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 449f614e6706421be307d8638183c61ba45bc3b460fe3815df8971dbb4d59c4087181940d879daee4a7a2daf3d86e915db1cce0c006dd68ca75b4087079273bd + languageName: node + linkType: hard + +"postcss-svgo@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-svgo@npm:4.0.3" + dependencies: + postcss: ^7.0.0 + postcss-value-parser: ^3.0.0 + svgo: ^1.0.0 + checksum: 6f5264241193ca3ba748fdf43c88ef692948d2ae38787398dc90089061fed884064ec14ee244fce07f19c419d1b058c77e135407d0932b09e93e528581ce3e10 + languageName: node + linkType: hard + +"postcss-unique-selectors@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-unique-selectors@npm:4.0.1" + dependencies: + alphanum-sort: ^1.0.0 + postcss: ^7.0.0 + uniqs: ^2.0.0 + checksum: 272eb1fa17d6ea513b5f4d2f694ef30fa690795ce388aef7bf3967fd3bcec7a9a3c8da380e74961ded8d98253a6ed18fb380b29da00e2fe03e74813e7765ea71 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^3.0.0": + version: 3.3.1 + resolution: "postcss-value-parser@npm:3.3.1" + checksum: 62cd26e1cdbcf2dcc6bcedf3d9b409c9027bc57a367ae20d31dd99da4e206f730689471fd70a2abe866332af83f54dc1fa444c589e2381bf7f8054c46209ce16 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss-values-parser@npm:^2.0.0, postcss-values-parser@npm:^2.0.1": + version: 2.0.1 + resolution: "postcss-values-parser@npm:2.0.1" + dependencies: + flatten: ^1.0.2 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + checksum: 050877880937e15af8d18bf48902e547e2123d7cc32c1f215b392642bc5e2598a87a341995d62f38e450aab4186b8afeb2c9541934806d458ad8b117020b2ebf + languageName: node + linkType: hard + +"postcss@npm:6.0.1": + version: 6.0.1 + resolution: "postcss@npm:6.0.1" + dependencies: + chalk: ^1.1.3 + source-map: ^0.5.6 + supports-color: ^3.2.3 + checksum: 2533d218b6c23dad42fffb98979f3fd2b98bbe11c923e3245ed8f83da9591c176a5de2403ad3ebaedea819f50d5f6c88c40d322265c59b6b10ed8a02c12fd4bc + languageName: node + linkType: hard + +"postcss@npm:7.0.36": + version: 7.0.36 + resolution: "postcss@npm:7.0.36" + dependencies: + chalk: ^2.4.2 + source-map: ^0.6.1 + supports-color: ^6.1.0 + checksum: 4cfc0989b9ad5d0e8971af80d87f9c5beac5c84cb89ff22ad69852edf73c0a2fa348e7e0a135b5897bf893edad0fe86c428769050431ad9b532f072ff530828d + languageName: node + linkType: hard + +"postcss@npm:^6.0.1": + version: 6.0.23 + resolution: "postcss@npm:6.0.23" + dependencies: + chalk: ^2.4.1 + source-map: ^0.6.1 + supports-color: ^5.4.0 + checksum: cc6cb2c1dbcdefa6f57a71d67fe535c9e96543298bbe28f9a6a64c4f1e21b6127113890dd4cda8873d3f4e6613a0566b7b4bbb230204f3a9a309190bda065d81 + languageName: node + linkType: hard + +"postcss@npm:^7, postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.26, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.5, postcss@npm:^7.0.6": + version: 7.0.39 + resolution: "postcss@npm:7.0.39" + dependencies: + picocolors: ^0.2.1 + source-map: ^0.6.1 + checksum: 4ac793f506c23259189064bdc921260d869a115a82b5e713973c5af8e94fbb5721a5cc3e1e26840500d7e1f1fa42a209747c5b1a151918a9bc11f0d7ed9048e3 + languageName: node + linkType: hard + +"postcss@npm:^8.1.0, postcss@npm:^8.4.26, postcss@npm:^8.4.27": + version: 8.4.38 + resolution: "postcss@npm:8.4.38" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.0.0 + source-map-js: ^1.2.0 + checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + +"prepend-http@npm:^1.0.0": + version: 1.0.4 + resolution: "prepend-http@npm:1.0.4" + checksum: 01e7baf4ad38af02257b99098543469332fc42ae50df33d97a124bf8172295907352fa6138c9b1610c10c6dd0847ca736e53fda736387cc5cf8fcffe96b47f29 + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier@npm:^2.0.5": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + +"pretty-bytes@npm:^5.3.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd + languageName: node + linkType: hard + +"pretty-error@npm:^2.1.1": + version: 2.1.2 + resolution: "pretty-error@npm:2.1.2" + dependencies: + lodash: ^4.17.20 + renderkid: ^2.0.4 + checksum: 16775d06f9a695d17103414d610b1281f9535ee1f2da1ce1e1b9be79584a114aa7eac6dcdcc5ef151756d3c014dfd4ac1c7303ed8016d0cec12437cfdf4021c6 + languageName: node + linkType: hard + +"pretty-format@npm:^26.6.0, pretty-format@npm:^26.6.2": + version: 26.6.2 + resolution: "pretty-format@npm:26.6.2" + dependencies: + "@jest/types": ^26.6.2 + ansi-regex: ^5.0.0 + ansi-styles: ^4.0.0 + react-is: ^17.0.1 + checksum: e3b808404d7e1519f0df1aa1f25cee0054ab475775c6b2b8c5568ff23194a92d54bf93274139b6f584ca70fd773be4eaa754b0e03f12bb0a8d1426b07f079976 + languageName: node + linkType: hard + +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + +"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": + version: 28.1.3 + resolution: "pretty-format@npm:28.1.3" + dependencies: + "@jest/schemas": ^28.1.3 + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"prisma@npm:^5.7.1": + version: 5.15.0 + resolution: "prisma@npm:5.15.0" + dependencies: + "@prisma/engines": 5.15.0 + bin: + prisma: build/index.js + checksum: e780334771f0d64a4f9187013b137676ba9f767a162127f53b11f2955bc457f6250da22e0b31f7a2bf171a911cbd194d28c5a96a688d4ef07fe5bbbf014c807f + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"progress@npm:^2.0.0": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"promise@npm:^8.1.0": + version: 8.3.0 + resolution: "promise@npm:8.3.0" + dependencies: + asap: ~2.0.6 + checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 + languageName: node + linkType: hard + +"prompts@npm:2.4.0": + version: 2.4.0 + resolution: "prompts@npm:2.4.0" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: 96c7bef8eb3c0bb2076d2bc5ee473f06e6d8ac01ac4d0f378dfeb0ddaf2f31c339360ec8f0f8486f78601d16ebef7c6bd9886d44b937ba01bab568b937190265 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"property-expr@npm:^2.0.4": + version: 2.0.6 + resolution: "property-expr@npm:2.0.6" + checksum: 89977f4bb230736c1876f460dd7ca9328034502fd92e738deb40516d16564b850c0bbc4e052c3df88b5b8cd58e51c93b46a94bea049a3f23f4a022c038864cab + languageName: node + linkType: hard + +"property-information@npm:^5.3.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: ^4.0.0 + checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 + languageName: node + linkType: hard + +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"prr@npm:~1.0.1": + version: 1.0.1 + resolution: "prr@npm:1.0.1" + checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d + languageName: node + linkType: hard + +"public-encrypt@npm:^4.0.0": + version: 4.0.3 + resolution: "public-encrypt@npm:4.0.3" + dependencies: + bn.js: ^4.1.0 + browserify-rsa: ^4.0.0 + create-hash: ^1.1.0 + parse-asn1: ^5.0.0 + randombytes: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 + languageName: node + linkType: hard + +"pump@npm:^2.0.0": + version: 2.0.1 + resolution: "pump@npm:2.0.1" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e9f26a17be00810bff37ad0171edb35f58b242487b0444f92fb7d78bc7d61442fa9b9c5bd93a43fd8fd8ddd3cc75f1221f5e04c790f42907e5baab7cf5e2b931 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + +"pumpify@npm:^1.3.3": + version: 1.5.1 + resolution: "pumpify@npm:1.5.1" + dependencies: + duplexify: ^3.6.0 + inherits: ^2.0.3 + pump: ^2.0.0 + checksum: 26ca412ec8d665bd0d5e185c1b8f627728eff603440d75d22a58e421e3c66eaf86ec6fc6a6efc54808ecef65979279fa8e99b109a23ec1fa8d79f37e6978c9bd + languageName: node + linkType: hard + +"punycode@npm:^1.2.4, punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"q@npm:^1.1.2": + version: 1.5.1 + resolution: "q@npm:1.5.1" + checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + languageName: node + linkType: hard + +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + +"qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.7.0": + version: 6.12.1 + resolution: "qs@npm:6.12.1" + dependencies: + side-channel: ^1.0.6 + checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 + languageName: node + linkType: hard + +"query-string@npm:^4.1.0": + version: 4.3.4 + resolution: "query-string@npm:4.3.4" + dependencies: + object-assign: ^4.1.0 + strict-uri-encode: ^1.0.0 + checksum: 3b2bae6a8454cf0edf11cf1aa4d1f920398bbdabc1c39222b9bb92147e746fcd97faf00e56f494728fb66b2961b495ba0fde699d5d3bd06b11472d664b36c6cf + languageName: node + linkType: hard + +"querystring-es3@npm:^0.2.0": + version: 0.2.1 + resolution: "querystring-es3@npm:0.2.1" + checksum: 691e8d6b8b157e7cd49ae8e83fcf86de39ab3ba948c25abaa94fba84c0986c641aa2f597770848c64abce290ed17a39c9df6df737dfa7e87c3b63acc7d225d61 + languageName: node + linkType: hard + +"querystring@npm:^0.2.0": + version: 0.2.1 + resolution: "querystring@npm:0.2.1" + checksum: 7b83b45d641e75fd39cd6625ddfd44e7618e741c61e95281b57bbae8fde0afcc12cf851924559e5cc1ef9baa3b1e06e22b164ea1397d65dd94b801f678d9c8ce + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"raf-schd@npm:^4.0.3": + version: 4.0.3 + resolution: "raf-schd@npm:4.0.3" + checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 + languageName: node + linkType: hard + +"raf@npm:^3.4.1": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"randomfill@npm:^1.0.3": + version: 1.0.4 + resolution: "randomfill@npm:1.0.4" + dependencies: + randombytes: ^2.0.5 + safe-buffer: ^5.1.0 + checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + +"react-app-polyfill@npm:^2.0.0": + version: 2.0.0 + resolution: "react-app-polyfill@npm:2.0.0" + dependencies: + core-js: ^3.6.5 + object-assign: ^4.1.1 + promise: ^8.1.0 + raf: ^3.4.1 + regenerator-runtime: ^0.13.7 + whatwg-fetch: ^3.4.1 + checksum: 99e52a6b2229c7ca730cfd44ac95640f955be71d144225bd6c24fa47922a742658a371d0a2f0876d732533f1055b7cd7e9d534c89c29f8ca889ecd1b8d15f065 + languageName: node + linkType: hard + +"react-archer@npm:^4.4.0": + version: 4.4.0 + resolution: "react-archer@npm:4.4.0" + dependencies: + react-fast-compare: ^2.0.4 + resize-observer-polyfill: 1.5.0 + peerDependencies: + "@types/react": ^16.8.8 || ^17 || ^18 + prop-types: ^15.6.2 + react: ^16.9.0 || ^17 || ^18 + checksum: 2f675499d9af5a06911332e432af24280b38715151078a3a75b6dd7790f6756c19647928e3f67cda3b21526c6dda2729bedb17e40d1f21835a1b4873c362c6c4 + languageName: node + linkType: hard + +"react-dev-utils@npm:^11.0.3": + version: 11.0.4 + resolution: "react-dev-utils@npm:11.0.4" + dependencies: + "@babel/code-frame": 7.10.4 + address: 1.1.2 + browserslist: 4.14.2 + chalk: 2.4.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 2.0.0 + filesize: 6.1.0 + find-up: 4.1.0 + fork-ts-checker-webpack-plugin: 4.1.6 + global-modules: 2.0.0 + globby: 11.0.1 + gzip-size: 5.1.1 + immer: 8.0.1 + is-root: 2.1.0 + loader-utils: 2.0.0 + open: ^7.0.2 + pkg-up: 3.1.0 + prompts: 2.4.0 + react-error-overlay: ^6.0.9 + recursive-readdir: 2.2.2 + shell-quote: 1.7.2 + strip-ansi: 6.0.0 + text-table: 0.2.0 + checksum: b41c95010a4fb60d4ea6309423520e6268757b68df34de7e9e8dbc72549236a1f5a698ff99ad72a034ac51b042aa79ee53994330ce4df05bf867e63c5464bb3f + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.2 + peerDependencies: + react: ^18.3.1 + checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9 + languageName: node + linkType: hard + +"react-draggable@npm:^4.4.6": + version: 4.4.6 + resolution: "react-draggable@npm:4.4.6" + dependencies: + clsx: ^1.1.1 + prop-types: ^15.8.1 + peerDependencies: + react: ">= 16.3.0" + react-dom: ">= 16.3.0" + checksum: 9b15aac59244873ac4561c5a2bead43a56e18d406e0a5f242bd4f9d151c074530c02b99387983104bf43417292f9cf8d063e554ed08d88792235e3fbc965f1b8 + languageName: node + linkType: hard + +"react-error-boundary@npm:^3.1.0": + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" + dependencies: + "@babel/runtime": ^7.12.5 + peerDependencies: + react: ">=16.13.1" + checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b + languageName: node + linkType: hard + +"react-error-overlay@npm:^6.0.9": + version: 6.0.11 + resolution: "react-error-overlay@npm:6.0.11" + checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42 + languageName: node + linkType: hard + +"react-fast-compare@npm:^2.0.4": + version: 2.0.4 + resolution: "react-fast-compare@npm:2.0.4" + checksum: 06046595f90a4e3e3a56f40a8078c00aa71bdb064ddb98343f577f546aa22e888831fd45f009c93b34707cc842b4c637737e956fd13d6f80607ee92fb9cf9a1c + languageName: node + linkType: hard + +"react-fast-compare@npm:^3.1.1": + version: 3.2.2 + resolution: "react-fast-compare@npm:3.2.2" + checksum: 2071415b4f76a3e6b55c84611c4d24dcb12ffc85811a2840b5a3f1ff2d1a99be1020d9437ee7c6e024c9f4cbb84ceb35e48cf84f28fcb00265ad2dfdd3947704 + languageName: node + linkType: hard + +"react-google-charts@npm:^4.0.0": + version: 4.0.1 + resolution: "react-google-charts@npm:4.0.1" + peerDependencies: + react: ">=16.3.0" + react-dom: ">=16.3.0" + checksum: 874a552b07cc67d6b830718dd5e71055c46fbd0c7a12bca14078c0744111d8fead833e36a16bd0b0ea5c26f6cff0eb84b4b6de62845c945b3c47c6cc75233f9d + languageName: node + linkType: hard + +"react-google-login@npm:^5.2.2": + version: 5.2.2 + resolution: "react-google-login@npm:5.2.2" + dependencies: + "@types/react": "*" + prop-types: ^15.6.0 + peerDependencies: + react: ^16 || ^17 + react-dom: ^16 || ^17 + checksum: 29199c7035c3c1070a82241dc4063628d693f35a1736d292e3db736e52da825e8a53f9287b0b12b08a50d676973ce1349a4d8243cd849ca25fed6a4284378880 + languageName: node + linkType: hard + +"react-helmet@npm:^6.1.0": + version: 6.1.0 + resolution: "react-helmet@npm:6.1.0" + dependencies: + object-assign: ^4.1.1 + prop-types: ^15.7.2 + react-fast-compare: ^3.1.1 + react-side-effect: ^2.1.0 + peerDependencies: + react: ">=16.3.0" + checksum: a4998479dab7fc1c2799eddefb1870a9d881b5f71cfdf97979a9882e42f4bb50402d55335f308f461e735e01a06f46b16cc7b4e6bcb22c7a4a6f85a753c5c106 + languageName: node + linkType: hard + +"react-hook-form-persist@npm:^3.0.0": + version: 3.0.0 + resolution: "react-hook-form-persist@npm:3.0.0" + peerDependencies: + react: ">= 16.3" + react-hook-form: ">= 6" + checksum: de90d45cb8ac49c636df78da96284e5f915894a639b06b95c1ce1d7da7bbd04305a52411b90693007376417dac3fd9bd3ed114dedbbae32fb15c2a588e870260 + languageName: node + linkType: hard + +"react-hook-form@npm:^7.34.0": + version: 7.51.5 + resolution: "react-hook-form@npm:7.51.5" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: 6b6a56b6520ddb68d491e2f07791538aa611c13fcd76052a499ba10bdaf7f77f4a5f7191e6ca9d9ab0af739bf07171c6e8d97f6c4da06f576aa74caed71828f1 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^17.0.0, react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 + languageName: node + linkType: hard + +"react-markdown@npm:^6.0.0": + version: 6.0.3 + resolution: "react-markdown@npm:6.0.3" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.3 + comma-separated-tokens: ^1.0.0 + prop-types: ^15.7.2 + property-information: ^5.3.0 + react-is: ^17.0.0 + remark-parse: ^9.0.0 + remark-rehype: ^8.0.0 + space-separated-tokens: ^1.1.0 + style-to-object: ^0.3.0 + unified: ^9.0.0 + unist-util-visit: ^2.0.0 + vfile: ^4.0.0 + peerDependencies: + "@types/react": ">=16" + react: ">=16" + checksum: 5176e6a314a397b4747570213ae6c092f76c5c3dc67c748731243a0d4108e002134a9061cea87df1bea00db46cc7d238e092bae1609de74983c844e8386c0554 + languageName: node + linkType: hard + +"react-query@npm:*": + version: 3.39.3 + resolution: "react-query@npm:3.39.3" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + languageName: node + linkType: hard + +"react-query@npm:3.17.0": + version: 3.17.0 + resolution: "react-query@npm:3.17.0" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 1aaa6ccb556373b11a8146885e873c09e563d297caad24e557910663be3046a7cca128ac48173745bb67928b63c92c1342b939fcc2fe984ecf8d607b8e692170 + languageName: node + linkType: hard + +"react-redux@npm:^8.1.3": + version: 8.1.3 + resolution: "react-redux@npm:8.1.3" + dependencies: + "@babel/runtime": ^7.12.1 + "@types/hoist-non-react-statics": ^3.3.1 + "@types/use-sync-external-store": ^0.0.3 + hoist-non-react-statics: ^3.3.2 + react-is: ^18.0.0 + use-sync-external-store: ^1.0.0 + peerDependencies: + "@types/react": ^16.8 || ^17.0 || ^18.0 + "@types/react-dom": ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + react-native: ">=0.59" + redux: ^4 || ^5.0.0-beta.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + react-dom: + optional: true + react-native: + optional: true + redux: + optional: true + checksum: 192ea6f6053148ec80a4148ec607bc259403b937e515f616a1104ca5ab357e97e98b8245ed505a17afee67a72341d4a559eaca9607968b4a422aa9b44ba7eb89 + languageName: node + linkType: hard + +"react-refresh@npm:^0.14.2": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382 + languageName: node + linkType: hard + +"react-refresh@npm:^0.8.3": + version: 0.8.3 + resolution: "react-refresh@npm:0.8.3" + checksum: 3cffe5a9cbac1c5d59bf74bf9fff43c987d87ef32098b9092ea94b6637377d86c08565b9374d9397f446b3fbcd95de986ec77220a16f979687cb39b7b89e2f91 + languageName: node + linkType: hard + +"react-router-dom@npm:^5.2.0": + version: 5.3.4 + resolution: "react-router-dom@npm:5.3.4" + dependencies: + "@babel/runtime": ^7.12.13 + history: ^4.9.0 + loose-envify: ^1.3.1 + prop-types: ^15.6.2 + react-router: 5.3.4 + tiny-invariant: ^1.0.2 + tiny-warning: ^1.0.0 + peerDependencies: + react: ">=15" + checksum: b86a6f2f5222f041e38adf4e4b32c7643d6735a1a915ef25855b2db285fd059d72ba8d62e5bcd5d822b8ef9520a80453209e55077f5a90d0f72e908979b8f535 + languageName: node + linkType: hard + +"react-router@npm:5.3.4": + version: 5.3.4 + resolution: "react-router@npm:5.3.4" + dependencies: + "@babel/runtime": ^7.12.13 + history: ^4.9.0 + hoist-non-react-statics: ^3.1.0 + loose-envify: ^1.3.1 + path-to-regexp: ^1.7.0 + prop-types: ^15.6.2 + react-is: ^16.6.0 + tiny-invariant: ^1.0.2 + tiny-warning: ^1.0.0 + peerDependencies: + react: ">=15" + checksum: 892d4e274a23bf4f39abc2efca54472fb646d3aed4b584020cf49654d2f50d09a2bacebe7c92b4ec7cb8925077376dfcd0664bad6442a73604397cefec9f01f9 + languageName: node + linkType: hard + +"react-scripts@npm:^4.0.1": + version: 4.0.3 + resolution: "react-scripts@npm:4.0.3" + dependencies: + "@babel/core": 7.12.3 + "@pmmmwh/react-refresh-webpack-plugin": 0.4.3 + "@svgr/webpack": 5.5.0 + "@typescript-eslint/eslint-plugin": ^4.5.0 + "@typescript-eslint/parser": ^4.5.0 + babel-eslint: ^10.1.0 + babel-jest: ^26.6.0 + babel-loader: 8.1.0 + babel-plugin-named-asset-import: ^0.3.7 + babel-preset-react-app: ^10.0.0 + bfj: ^7.0.2 + camelcase: ^6.1.0 + case-sensitive-paths-webpack-plugin: 2.3.0 + css-loader: 4.3.0 + dotenv: 8.2.0 + dotenv-expand: 5.1.0 + eslint: ^7.11.0 + eslint-config-react-app: ^6.0.0 + eslint-plugin-flowtype: ^5.2.0 + eslint-plugin-import: ^2.22.1 + eslint-plugin-jest: ^24.1.0 + eslint-plugin-jsx-a11y: ^6.3.1 + eslint-plugin-react: ^7.21.5 + eslint-plugin-react-hooks: ^4.2.0 + eslint-plugin-testing-library: ^3.9.2 + eslint-webpack-plugin: ^2.5.2 + file-loader: 6.1.1 + fs-extra: ^9.0.1 + fsevents: ^2.1.3 + html-webpack-plugin: 4.5.0 + identity-obj-proxy: 3.0.0 + jest: 26.6.0 + jest-circus: 26.6.0 + jest-resolve: 26.6.0 + jest-watch-typeahead: 0.6.1 + mini-css-extract-plugin: 0.11.3 + optimize-css-assets-webpack-plugin: 5.0.4 + pnp-webpack-plugin: 1.6.4 + postcss-flexbugs-fixes: 4.2.1 + postcss-loader: 3.0.0 + postcss-normalize: 8.0.1 + postcss-preset-env: 6.7.0 + postcss-safe-parser: 5.0.2 + prompts: 2.4.0 + react-app-polyfill: ^2.0.0 + react-dev-utils: ^11.0.3 + react-refresh: ^0.8.3 + resolve: 1.18.1 + resolve-url-loader: ^3.1.2 + sass-loader: ^10.0.5 + semver: 7.3.2 + style-loader: 1.3.0 + terser-webpack-plugin: 4.2.3 + ts-pnp: 1.2.0 + url-loader: 4.1.1 + webpack: 4.44.2 + webpack-dev-server: 3.11.1 + webpack-manifest-plugin: 2.2.0 + workbox-webpack-plugin: 5.1.4 + peerDependencies: + react: ">= 16" + typescript: ^3.2.1 || ^4 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + typescript: + optional: true + bin: + react-scripts: ./bin/react-scripts.js + checksum: a05a46ce3145b42ac8b57633d3b90b6689c24697c1449bccf219349996d718a3cd0796e4910f4ab6abb5b024982cafd62345e88c8e7b42a45efca3bef1a0eb87 + languageName: node + linkType: hard + +"react-side-effect@npm:^2.1.0": + version: 2.1.2 + resolution: "react-side-effect@npm:2.1.2" + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 + languageName: node + linkType: hard + +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + 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" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + +"react-use-measure@npm:^2.1.1": + version: 2.1.1 + resolution: "react-use-measure@npm:2.1.1" + dependencies: + debounce: ^1.2.1 + peerDependencies: + react: ">=16.13" + react-dom: ">=16.13" + checksum: b8e8939229d463c3c505f7b617925c0228efae0cd6f651371f463846417b06c9170be57df51293a61027c41770f8a090fdb8a08717c4e36290ccb496e0318f1f + languageName: node + linkType: hard + +"react@npm:18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^4.0.1": + version: 4.0.1 + resolution: "read-pkg@npm:4.0.1" + dependencies: + normalize-package-data: ^2.3.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + checksum: 56193535486c50a0a40039e4a92f68676362f5a7160628ca4d856c62509e125220f69c562a32940dcc51e3dcd38211af69756bbb5b8a1aed1d09be1bedd1e1a5 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.6, readable-stream@npm:^2.3.8, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + 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 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:^2.2.1": + version: 2.2.1 + resolution: "readdirp@npm:2.2.1" + dependencies: + graceful-fs: ^4.1.11 + micromatch: ^3.1.10 + readable-stream: ^2.0.2 + checksum: 3879b20f1a871e0e004a14fbf1776e65ee0b746a62f5a416010808b37c272ac49b023c47042c7b1e281cba75a449696635bc64c397ed221ea81d853a8f2ed79a + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"recursive-readdir@npm:2.2.2": + version: 2.2.2 + resolution: "recursive-readdir@npm:2.2.2" + dependencies: + minimatch: 3.0.4 + checksum: a6b22994d76458443d4a27f5fd7147ac63ad31bba972666a291d511d4d819ee40ff71ba7524c14f6a565b8cfaf7f48b318f971804b913cf538d58f04e25d1fee + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"redux@npm:^4.2.1": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.6 + resolution: "reflect.getprototypeof@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.1 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.1 + resolution: "regenerate-unicode-properties@npm:10.1.1" + dependencies: + regenerate: ^1.4.2 + checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.11.0": + version: 0.11.1 + resolution: "regenerator-runtime@npm:0.11.1" + checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.7": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + languageName: node + linkType: hard + +"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": + version: 1.0.2 + resolution: "regex-not@npm:1.0.2" + dependencies: + extend-shallow: ^3.0.2 + safe-regex: ^1.1.0 + checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 + languageName: node + linkType: hard + +"regex-parser@npm:^2.2.11": + version: 2.3.0 + resolution: "regex-parser@npm:2.3.0" + checksum: bcd1eb7e9b0775b6f44928ceb0280ad5b6e4da91e1070d3e9a653fcf72d2d04873c44190fb569141b6897fe94e9514fee1f3ac7ba112ccd9c9b5ad6eabab6bbd + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + +"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" + 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 + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 + languageName: node + linkType: hard + +"remark-parse@npm:^9.0.0": + version: 9.0.0 + resolution: "remark-parse@npm:9.0.0" + dependencies: + mdast-util-from-markdown: ^0.8.0 + checksum: 50104880549639b7dd7ae6f1e23c214915fe9c054f02f3328abdaee3f6de6d7282bf4357c3c5b106958fe75e644a3c248c2197755df34f9955e8e028fc74868f + languageName: node + linkType: hard + +"remark-rehype@npm:^8.0.0": + version: 8.1.0 + resolution: "remark-rehype@npm:8.1.0" + dependencies: + mdast-util-to-hast: ^10.2.0 + checksum: e1152464cfa83c14b570b1cb85eb9b3667795b5bed2f6b16d1c6e96c369816b07945a3c04eb0e1fd57a19cc1837969527d0056d5b6d179f1290688db2a7e2c5f + languageName: node + linkType: hard + +"remove-accents@npm:0.5.0": + version: 0.5.0 + resolution: "remove-accents@npm:0.5.0" + checksum: 7045b37015acb03df406d21f9cbe93c3fcf2034189f5d2e33b1dace9c7d6bdcd839929905ced21a5d76c58553557e1a42651930728702312a5774179d5b9147b + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 + languageName: node + linkType: hard + +"renderkid@npm:^2.0.4": + version: 2.0.7 + resolution: "renderkid@npm:2.0.7" + dependencies: + css-select: ^4.1.3 + dom-converter: ^0.2.0 + htmlparser2: ^6.1.0 + lodash: ^4.17.21 + strip-ansi: ^3.0.1 + checksum: d3d7562531fb8104154d4aa6aa977707783616318014088378a6c5bbc36318ada9289543d380ede707e531b7f5b96229e87d1b8944f675e5ec3686e62692c7c7 + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + languageName: node + linkType: hard + +"repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"reselect@npm:^4.1.6": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e + languageName: node + linkType: hard + +"reserved-words@npm:^0.1.2": + version: 0.1.2 + resolution: "reserved-words@npm:0.1.2" + checksum: 72e80f71dcde1e2d697e102473ad6d597e1659118836092c63cc4db68a64857f07f509176d239c8675b24f7f03574336bf202a780cc1adb39574e2884d1fd1fa + languageName: node + linkType: hard + +"resize-observer-polyfill@npm:1.5.0": + version: 1.5.0 + resolution: "resize-observer-polyfill@npm:1.5.0" + checksum: ecc6aab5d4f967f1b76cee0748c1967c8b6b5d8c4393764ca3b788dbd15c0f846326c4ebff9f4f39aba45fea8016cd42bb95e28e8fab1d14349e173790c58133 + languageName: node + linkType: hard + +"resolve-cwd@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-cwd@npm:2.0.0" + dependencies: + resolve-from: ^3.0.0 + checksum: e7c16880c460656e77f102d537a6dc82b3657d9173697cd6ea82ffce37df96f6c1fc79d0bb35fd73fff8871ac13f21b4396958b5f0a13e5b99c97d69f5e319fa + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-pathname@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-pathname@npm:3.0.0" + checksum: 6147241ba42c423dbe83cb067a2b4af4f60908c3af57e1ea567729cc71416c089737fe2a73e9e79e7a60f00f66c91e4b45ad0d37cd4be2d43fec44963ef14368 + languageName: node + linkType: hard + +"resolve-url-loader@npm:^3.1.2": + version: 3.1.5 + resolution: "resolve-url-loader@npm:3.1.5" + dependencies: + adjust-sourcemap-loader: 3.0.0 + camelcase: 5.3.1 + compose-function: 3.0.3 + convert-source-map: 1.7.0 + es6-iterator: 2.0.3 + loader-utils: ^1.2.3 + postcss: 7.0.36 + rework: 1.0.1 + rework-visit: 1.0.0 + source-map: 0.6.1 + checksum: eb52911eff20723f07409cc12138d254fa0dd4a4f3b1ba11ee1b29912afb03f1272aaddb523658be1e3a946e0d1bf6f603d0e107753ab83d48ad2116cf04b7f6 + languageName: node + linkType: hard + +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 + languageName: node + linkType: hard + +"resolve@npm:1.18.1": + version: 1.18.1 + resolution: "resolve@npm:1.18.1" + dependencies: + is-core-module: ^2.0.0 + path-parse: ^1.0.6 + checksum: bab3686fa87576ac7e7f68481e25494f99b8413f3bc5048c5284eabe021f98917a50c625f8a1920a87ffc347b076c12a4a685d46d5fc98f337cf2dd3792014f4 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.22.4, resolve@npm:^1.3.2": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f + languageName: node + linkType: hard + +"resolve@patch:resolve@1.18.1#~builtin": + version: 1.18.1 + resolution: "resolve@patch:resolve@npm%3A1.18.1#~builtin::version=1.18.1&hash=07638b" + dependencies: + is-core-module: ^2.0.0 + path-parse: ^1.0.6 + checksum: 7439c8f3d8fa00c9dc800ef3c8ed0bd8e8772823e6e4948b1a77487759e0fb905381808caae96398d135619af90654d8e74cac778e5b8c9d7138f2dd52bb2bba + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.3.2#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"ret@npm:~0.1.10": + version: 0.1.15 + resolution: "ret@npm:0.1.15" + checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rework-visit@npm:1.0.0": + version: 1.0.0 + resolution: "rework-visit@npm:1.0.0" + checksum: 969ca1f4e5bf4a1755c464a9b498da51eb3f28a798cf73da2cf0a3a3ab7b21a2f05c9d3bfa5fb81c8aaf5487dd31679efa67b8d0f418277ef5deb2a230b17c81 + languageName: node + linkType: hard + +"rework@npm:1.0.1": + version: 1.0.1 + resolution: "rework@npm:1.0.1" + dependencies: + convert-source-map: ^0.3.3 + css: ^2.0.0 + checksum: 13e5054d81ac84eee488fd4bacd20d08f35683bd8e296b4358e7f0a41b2d30a959313b7794f388f336705ad18d36af6ee7080e1b6c1313ecf33bc51d1bd95971 + languageName: node + linkType: hard + +"rgb-regex@npm:^1.0.1": + version: 1.0.1 + resolution: "rgb-regex@npm:1.0.1" + checksum: b270ce8bc14782d2d21d3184c1e6c65b465476d8f03e72b93ef57c95710a452b2fe280e1d516c88873aec06efd7f71373e673f114b9d99f3a4f9a0393eb00126 + languageName: node + linkType: hard + +"rgba-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "rgba-regex@npm:1.0.0" + checksum: 7f2cd271572700faea50753d82524cb2b98f17a5b9722965c7076f6cd674fe545f28145b7ef2cccabc9eca2475c793db16862cd5e7b3784a9f4b8d6496431057 + languageName: node + linkType: hard + +"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 + languageName: node + linkType: hard + +"rollup-plugin-babel@npm:^4.3.3": + version: 4.4.0 + resolution: "rollup-plugin-babel@npm:4.4.0" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + rollup-pluginutils: ^2.8.1 + peerDependencies: + "@babel/core": 7 || ^7.0.0-rc.2 + rollup: ">=0.60.0 <3" + checksum: 5b8ed7c0a4192d7c74689074c910c1670eb07dfc875b1f4af5694a94c46bcb168ba85e2c9753030131efd6261ece7c252b9695953d0ea96d944977c6e79930d3 + languageName: node + linkType: hard + +"rollup-plugin-terser@npm:^5.3.1": + version: 5.3.1 + resolution: "rollup-plugin-terser@npm:5.3.1" + dependencies: + "@babel/code-frame": ^7.5.5 + jest-worker: ^24.9.0 + rollup-pluginutils: ^2.8.2 + serialize-javascript: ^4.0.0 + terser: ^4.6.2 + peerDependencies: + rollup: ">=0.66.0 <3" + checksum: 50f9e8fa6737fa5e8aeca6a52b59ea3bc66faebe743bdfe9ce0484298cd1978082026721b182d79bcc88240429842dc58feae88d6c238b47cafc1684e0320a73 + languageName: node + linkType: hard + +"rollup-pluginutils@npm:^2.8.1, rollup-pluginutils@npm:^2.8.2": + version: 2.8.2 + resolution: "rollup-pluginutils@npm:2.8.2" + dependencies: + estree-walker: ^0.6.1 + checksum: 339fdf866d8f4ff6e408fa274c0525412f7edb01dc46b5ccda51f575b7e0d20ad72965773376fb5db95a77a7fcfcab97bf841ec08dbadf5d6b08af02b7a2cf5e + languageName: node + linkType: hard + +"rollup@npm:^1.31.1": + version: 1.32.1 + resolution: "rollup@npm:1.32.1" + dependencies: + "@types/estree": "*" + "@types/node": "*" + acorn: ^7.1.0 + bin: + rollup: dist/bin/rollup + checksum: 3a02731c20c71321fae647c9c9cab0febee0580c6af029fdcd5dd6f424b8c85119d92c8554c6837327fd323c2458e92d955bbebc90ca6bed87cc626695e7c31f + languageName: node + linkType: hard + +"rollup@npm:^3.25.2, rollup@npm:^3.27.1": + version: 3.29.4 + resolution: "rollup@npm:3.29.4" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e + languageName: node + linkType: hard + +"rsvp@npm:^4.8.4": + version: 4.8.5 + resolution: "rsvp@npm:4.8.5" + checksum: 2d8ef30d8febdf05bdf856ccca38001ae3647e41835ca196bc1225333f79b94ae44def733121ca549ccc36209c9b689f6586905e2a043873262609744da8efc1 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"run-queue@npm:^1.0.0, run-queue@npm:^1.0.3": + version: 1.0.3 + resolution: "run-queue@npm:1.0.3" + dependencies: + aproba: ^1.1.1 + checksum: c4541e18b5e056af60f398f2f1b3d89aae5c093d1524bf817c5ee68bcfa4851ad9976f457a9aea135b1d0d72ee9a91c386e3d136bcd95b699c367cd09c70be53 + languageName: node + linkType: hard + +"rxjs@npm:^6.5.2": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + languageName: node + linkType: hard + +"safe-regex@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex@npm:1.1.0" + dependencies: + ret: ~0.1.10 + checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sane@npm:^4.0.3": + version: 4.1.0 + resolution: "sane@npm:4.1.0" + dependencies: + "@cnakazawa/watch": ^1.0.3 + anymatch: ^2.0.0 + capture-exit: ^2.0.0 + exec-sh: ^0.3.2 + execa: ^1.0.0 + fb-watchman: ^2.0.0 + micromatch: ^3.1.4 + minimist: ^1.1.1 + walker: ~1.0.5 + bin: + sane: ./src/cli.js + checksum: 97716502d456c0d38670a902a4ea943d196dcdf998d1e40532d8f3e24e25d7eddfd4c3579025a1eee8eac09a48dfd05fba61a2156c56704e7feaa450eb249f7c + languageName: node + linkType: hard + +"sanitize.css@npm:^10.0.0": + version: 10.0.0 + resolution: "sanitize.css@npm:10.0.0" + checksum: 99932e53e864b83562a421f57383c9747ab03c51872437eb56170639cd6c634a945517e25d1b7005d10c8dc863f71c61c573e3452474d4ef25bcf5f7344e4ce3 + languageName: node + linkType: hard + +"sass-loader@npm:^10.0.5": + version: 10.5.2 + resolution: "sass-loader@npm:10.5.2" + dependencies: + klona: ^2.0.4 + loader-utils: ^2.0.0 + neo-async: ^2.6.2 + schema-utils: ^3.0.0 + semver: ^7.3.2 + peerDependencies: + fibers: ">= 3.1.0" + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + webpack: ^4.36.0 || ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + checksum: 416909a9d685aafeb4342d91575439b293f4e1d6fdf7f8f970e4b3158af38e3e7379b87c0a82d7b7b32165b1f54bcd7eca3c132ad143405a5105ea4ba79cdac2 + languageName: node + linkType: hard + +"sass@npm:^1.54.0": + version: 1.77.4 + resolution: "sass@npm:1.77.4" + dependencies: + chokidar: ">=3.0.0 <4.0.0" + immutable: ^4.0.0 + source-map-js: ">=0.6.2 <2.0.0" + bin: + sass: sass.js + checksum: 415d76960e35d78310ffc33bc61fdb2b35a54bb2823dfc4eff50eee960096dacc210d7ef7ae6695120e1a4f005f269719c34d58c77c54ff7787516bda6a89e55 + languageName: node + linkType: hard + +"sax@npm:~1.2.4": + version: 1.2.4 + resolution: "sax@npm:1.2.4" + checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe + languageName: node + linkType: hard + +"saxes@npm:^5.0.1": + version: 5.0.1 + resolution: "saxes@npm:5.0.1" + dependencies: + xmlchars: ^2.2.0 + checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: ^1.1.0 + checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4 + languageName: node + linkType: hard + +"schema-utils@npm:^1.0.0": + version: 1.0.0 + resolution: "schema-utils@npm:1.0.0" + dependencies: + ajv: ^6.1.0 + ajv-errors: ^1.0.0 + ajv-keywords: ^3.1.0 + checksum: e8273b4f6eff9ddf4a4f4c11daf7b96b900237bf8859c86fa1e9b4fab416b72d7ea92468f8db89c18a3499a1070206e1c8a750c83b42d5325fc659cbb55eee88 + languageName: node + linkType: hard + +"schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0, schema-utils@npm:^2.7.1": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": ^7.0.5 + ajv: ^6.12.4 + ajv-keywords: ^3.5.2 + checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb + languageName: node + linkType: hard + +"selfsigned@npm:^1.10.8": + version: 1.10.14 + resolution: "selfsigned@npm:1.10.14" + dependencies: + node-forge: ^0.10.0 + checksum: 616d131b18516ba2876398f0230987511d50a13816e0709b9f0d20246a524a2e83dfb27ea46ce2bfe331519583a156afa67bc3ece8bf0f9804aec06e2e8c7a21 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.1": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:7.3.2": + version: 7.3.2 + resolution: "semver@npm:7.3.2" + bin: + semver: bin/semver.js + checksum: 692f4900dadb43919614b0df9af23fe05743051cda0d1735b5e4d76f93c9e43a266fae73cfc928f5d1489f022c5c0e65dfd2900fcf5b1839c4e9a239729afa7b + languageName: node + linkType: hard + +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + languageName: node + linkType: hard + +"sentence-case@npm:^3.0.4": + version: 3.0.4 + resolution: "sentence-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 + languageName: node + linkType: hard + +"serialize-javascript@npm:^4.0.0": + version: 4.0.0 + resolution: "serialize-javascript@npm:4.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 3273b3394b951671fcf388726e9577021870dfbf85e742a1183fb2e91273e6101bdccea81ff230724f6659a7ee4cef924b0ff9baca32b79d9384ec37caf07302 + languageName: node + linkType: hard + +"serialize-javascript@npm:^5.0.1": + version: 5.0.1 + resolution: "serialize-javascript@npm:5.0.1" + dependencies: + randombytes: ^2.1.0 + checksum: bb45a427690c3d2711e28499de0fbf25036af1e23c63c6a9237ed0aa572fd0941fcdefe50a2dccf26d9df8c8b86ae38659e19d8ba7afd3fbc1f1c7539a2a48d2 + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + 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 + checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"set-cookie-parser@npm:^2.4.6": + version: 2.6.0 + resolution: "set-cookie-parser@npm:2.6.0" + checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + +"set-value@npm:^2.0.0, set-value@npm:^2.0.1": + version: 2.0.1 + resolution: "set-value@npm:2.0.1" + dependencies: + extend-shallow: ^2.0.1 + is-extendable: ^0.1.1 + is-plain-object: ^2.0.3 + split-string: ^3.0.1 + checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.4": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"shared@1.0.0, shared@workspace:src/shared": + version: 0.0.0-use.local + resolution: "shared@workspace:src/shared" + dependencies: + "@types/node": 18.17.1 + ts-node: ^8.10.1 + typescript: ^4.1.5 + languageName: unknown + linkType: soft + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:1.7.2": + version: 1.7.2 + resolution: "shell-quote@npm:1.7.2" + checksum: efad426fb25d8a54d06363f1f45774aa9e195f62f14fa696d542b44bfe418ab41206448b63af18d726c62e099e66d9a3f4f44858b9ea2ce4b794b41b802672d1 + languageName: node + linkType: hard + +"shellwords@npm:^0.1.1": + version: 0.1.1 + resolution: "shellwords@npm:0.1.1" + checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: ^0.3.1 + checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^1.0.7": + version: 1.1.0 + resolution: "simple-update-notifier@npm:1.1.0" + dependencies: + semver: ~7.0.0 + checksum: 1012e9b6c504e559a948078177b3eedbb9d7e4d15878e2bda56314d08db609ca5da485be4ac9f838759faae8057935ee0246fcdf63f1233c86bd9fecb2a5544b + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: ^4.0.0 + astral-regex: ^2.0.0 + is-fullwidth-code-point: ^3.0.0 + checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 + languageName: node + linkType: hard + +"snapdragon-node@npm:^2.0.1": + version: 2.1.1 + resolution: "snapdragon-node@npm:2.1.1" + dependencies: + define-property: ^1.0.0 + isobject: ^3.0.0 + snapdragon-util: ^3.0.1 + checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd + languageName: node + linkType: hard + +"snapdragon-util@npm:^3.0.1": + version: 3.0.1 + resolution: "snapdragon-util@npm:3.0.1" + dependencies: + kind-of: ^3.2.0 + checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 + languageName: node + linkType: hard + +"snapdragon@npm:^0.8.1": + version: 0.8.2 + resolution: "snapdragon@npm:0.8.2" + dependencies: + base: ^0.11.1 + debug: ^2.2.0 + define-property: ^0.2.5 + extend-shallow: ^2.0.1 + map-cache: ^0.2.2 + source-map: ^0.5.6 + source-map-resolve: ^0.5.0 + use: ^3.1.0 + checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 + languageName: node + linkType: hard + +"sockjs-client@npm:^1.5.0": + version: 1.6.1 + resolution: "sockjs-client@npm:1.6.1" + dependencies: + debug: ^3.2.7 + eventsource: ^2.0.2 + faye-websocket: ^0.11.4 + inherits: ^2.0.4 + url-parse: ^1.5.10 + checksum: c7623bbc9891f427c1670145550a1c9c2d5379719e174a791606ba4f12c7d92e4cfb9acec6c17f91fda45d910b23c308a1f9fbcad4916ce5db4e982b24079fc7 + languageName: node + linkType: hard + +"sockjs@npm:^0.3.21": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: ^0.11.3 + uuid: ^8.3.2 + websocket-driver: ^0.7.4 + checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.3 + resolution: "socks-proxy-agent@npm:8.0.3" + dependencies: + agent-base: ^7.1.1 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + languageName: node + linkType: hard + +"sort-keys@npm:^1.0.0": + version: 1.1.2 + resolution: "sort-keys@npm:1.1.2" + dependencies: + is-plain-obj: ^1.0.0 + checksum: 5963fd191a2a185a5ec86f06e47721e8e04713eda43bb04ae60d2a8afb21241553dd5bc9d863ed2bd7c3d541b609b0c8d0e58836b1a3eb6764c09c094bcc8b00 + languageName: node + linkType: hard + +"source-list-map@npm:^2.0.0": + version: 2.0.1 + resolution: "source-list-map@npm:2.0.1" + checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 + languageName: node + linkType: hard + +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 + languageName: node + linkType: hard + +"source-map-resolve@npm:^0.5.0, source-map-resolve@npm:^0.5.2": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + dependencies: + atob: ^2.1.2 + decode-uri-component: ^0.2.0 + resolve-url: ^0.2.1 + source-map-url: ^0.4.0 + urix: ^0.1.0 + checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c + languageName: node + linkType: hard + +"source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"source-map@npm:^0.5.0, source-map@npm:^0.5.6, source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.7.3": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 + languageName: node + linkType: hard + +"space-separated-tokens@npm:^1.1.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 + languageName: node + linkType: hard + +"spawn-command@npm:^0.0.2-1": + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.18 + resolution: "spdx-license-ids@npm:3.0.18" + checksum: 457825df5dd1fc0135b0bb848c896143f70945cc2da148afc71c73ed0837d1d651f809006e406d82109c9dd71a8cb39785a3604815fe46bc0548e9d3976f6b69 + languageName: node + linkType: hard + +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + 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 + checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + 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 + checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 + languageName: node + linkType: hard + +"split-string@npm:^3.0.1, split-string@npm:^3.0.2": + version: 3.1.0 + resolution: "split-string@npm:3.1.0" + dependencies: + extend-shallow: ^3.0.0 + checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + +"ssri@npm:^6.0.1": + version: 6.0.2 + resolution: "ssri@npm:6.0.2" + dependencies: + figgy-pudding: ^3.5.1 + checksum: 7c2e5d442f6252559c8987b7114bcf389fe5614bf65de09ba3e6f9a57b9b65b2967de348fcc3acccff9c069adb168140dd2c5fc2f6f4a779e604a27ef1f7d551 + languageName: node + linkType: hard + +"ssri@npm:^8.0.1": + version: 8.0.1 + resolution: "ssri@npm:8.0.1" + dependencies: + minipass: ^3.1.1 + checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + languageName: node + linkType: hard + +"stable@npm:^0.1.8": + version: 0.1.8 + resolution: "stable@npm:0.1.8" + checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.2, stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d + languageName: node + linkType: hard + +"static-eval@npm:2.0.2": + version: 2.0.2 + resolution: "static-eval@npm:2.0.2" + dependencies: + escodegen: ^1.8.1 + checksum: 335a923c5ccb29add404ac23d0a55c0da6cee3071f6f67a7053aeac0dedc6dbfc53ac9269e9c25f403f5b7603a291ef47d7114f99bde241184f7aa3f9286dc32 + languageName: node + linkType: hard + +"static-extend@npm:^0.1.1": + version: 0.1.2 + resolution: "static-extend@npm:0.1.2" + dependencies: + define-property: ^0.2.5 + object-copy: ^0.1.0 + checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c + languageName: node + linkType: hard + +"statuses@npm:2.0.1, statuses@npm:^2.0.0": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"std-env@npm:^3.3.3": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 4f489d13ff2ab838c9acd4ed6b786b51aa52ecacdfeaefe9275fcb220ff2ac80c6e95674723508fd29850a694569563a8caaaea738eb82ca16429b3a0b50e510 + languageName: node + linkType: hard + +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + +"stream-browserify@npm:^2.0.1": + version: 2.0.2 + resolution: "stream-browserify@npm:2.0.2" + dependencies: + inherits: ~2.0.1 + readable-stream: ^2.0.2 + checksum: 8de7bcab5582e9a931ae1a4768be7efe8fa4b0b95fd368d16d8cf3e494b897d6b0a7238626de5d71686e53bddf417fd59d106cfa3af0ec055f61a8d1f8fc77b3 + languageName: node + linkType: hard + +"stream-each@npm:^1.1.0": + version: 1.2.3 + resolution: "stream-each@npm:1.2.3" + dependencies: + end-of-stream: ^1.1.0 + stream-shift: ^1.0.0 + checksum: f243de78e9fcc60757994efc4e8ecae9f01a4b2c6a505d786b11fcaa68b1a75ca54afc1669eac9e08f19ff0230792fc40d0f3e3e2935d76971b4903af18b76ab + languageName: node + linkType: hard + +"stream-http@npm:^2.7.2": + version: 2.8.3 + resolution: "stream-http@npm:2.8.3" + dependencies: + builtin-status-codes: ^3.0.0 + inherits: ^2.0.1 + readable-stream: ^2.3.6 + to-arraybuffer: ^1.0.0 + xtend: ^4.0.0 + checksum: f57dfaa21a015f72e6ce6b199cf1762074cfe8acf0047bba8f005593754f1743ad0a91788f95308d9f3829ad55742399ad27b4624432f2752a08e62ef4346e05 + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.0": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 + languageName: node + linkType: hard + +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 + languageName: node + linkType: hard + +"strict-event-emitter@npm:^0.2.0, strict-event-emitter@npm:^0.2.4": + version: 0.2.8 + resolution: "strict-event-emitter@npm:0.2.8" + dependencies: + events: ^3.3.0 + checksum: 6ac06fe72a6ee6ae64d20f1dd42838ea67342f1b5f32b03b3050d73ee6ecee44b4d5c4ed2965a7154b47991e215f373d4e789e2b2be2769cd80e356126c2ca53 + languageName: node + linkType: hard + +"strict-uri-encode@npm:^1.0.0": + version: 1.1.0 + resolution: "strict-uri-encode@npm:1.1.0" + checksum: 9466d371f7b36768d43f7803f26137657559e4c8b0161fb9e320efb8edba3ae22f8e99d4b0d91da023b05a13f62ec5412c3f4f764b5788fac11d1fea93720bb3 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-natural-compare@npm:^3.0.1": + version: 3.0.1 + resolution: "string-natural-compare@npm:3.0.1" + checksum: 65910d9995074086e769a68728395effbba9b7186be5b4c16a7fad4f4ef50cae95ca16e3e9086e019cbb636ae8daac9c7b8fe91b5f21865c5c0f26e3c0725406 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^3.0.0, string-width@npm:^3.1.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: ^7.0.1 + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^5.1.0 + checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.11": + version: 4.0.11 + resolution: "string.prototype.matchall@npm:4.0.11" + 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 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + regexp.prototype.flags: ^1.5.2 + set-function-name: ^2.0.2 + side-channel: ^1.0.6 + checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 + languageName: node + linkType: hard + +"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"stringify-object@npm:^3.3.0": + version: 3.3.0 + resolution: "stringify-object@npm:3.3.0" + dependencies: + get-own-enumerable-property-symbols: ^3.0.0 + is-obj: ^1.0.1 + is-regexp: ^1.0.0 + checksum: 6827a3f35975cfa8572e8cd3ed4f7b262def260af18655c6fde549334acdac49ddba69f3c861ea5a6e9c5a4990fe4ae870b9c0e6c31019430504c94a83b7a154 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:6.0.0": + version: 6.0.0 + resolution: "strip-ansi@npm:6.0.0" + dependencies: + ansi-regex: ^5.0.0 + checksum: 04c3239ede44c4d195b0e66c0ad58b932f08bec7d05290416d361ff908ad282ecdaf5d9731e322c84f151d427436bde01f05b7422c3ec26dd927586736b0e5d0 + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: ^2.0.0 + checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + languageName: node + linkType: hard + +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-comments@npm:^1.0.2": + version: 1.0.2 + resolution: "strip-comments@npm:1.0.2" + dependencies: + babel-extract-comments: ^1.0.0 + babel-plugin-transform-object-rest-spread: ^6.26.0 + checksum: 19e6f659a617566aef011b29ef9ce50da0db24556073d9c8065c73072f89bf1238d1fcaaa485933fee038a50a09bb04493097f66e622cdfc3a114f5e9e99ee24 + languageName: node + linkType: hard + +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strip-literal@npm:^1.0.1": + version: 1.3.0 + resolution: "strip-literal@npm:1.3.0" + dependencies: + acorn: ^8.10.0 + checksum: f5fa7e289df8ebe82e90091fd393974faf8871be087ca50114327506519323cf15f2f8fee6ebe68b5e58bfc795269cae8bdc7cb5a83e27b02b3fe953f37b0a89 + languageName: node + linkType: hard + +"style-loader@npm:1.3.0": + version: 1.3.0 + resolution: "style-loader@npm:1.3.0" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^2.7.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 1be9e8705307f5b8eb89e80f3703fa27296dccec349d790eace7aabe212f08c7c8f3ea6b6cb97bc53e82fbebfb9aa0689259671a8315f4655e24a850781e062a + languageName: node + linkType: hard + +"style-to-object@npm:^0.3.0": + version: 0.3.0 + resolution: "style-to-object@npm:0.3.0" + dependencies: + inline-style-parser: 0.1.1 + checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + languageName: node + linkType: hard + +"stylehacks@npm:^4.0.0": + version: 4.0.3 + resolution: "stylehacks@npm:4.0.3" + dependencies: + browserslist: ^4.0.0 + postcss: ^7.0.0 + postcss-selector-parser: ^3.0.0 + checksum: 8acf28ea609bee6d7ba40121bcf53af8d899c1ec04f2c08de9349b8292b84b8aa7f82e14c623ae6956decf5b7a7eeea5472ab8e48de7bdcdb6d76640444f6753 + languageName: node + linkType: hard + +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 + languageName: node + linkType: hard + +"superagent@npm:^8.1.2": + version: 8.1.2 + resolution: "superagent@npm:8.1.2" + dependencies: + component-emitter: ^1.3.0 + cookiejar: ^2.1.4 + debug: ^4.3.4 + fast-safe-stringify: ^2.1.1 + form-data: ^4.0.0 + formidable: ^2.1.2 + methods: ^1.1.2 + mime: 2.6.0 + qs: ^6.11.0 + semver: ^7.3.8 + checksum: f3601c5ccae34d5ba684a03703394b5d25931f4ae2e1e31a1de809f88a9400e997ece037f9accf148a21c408f950dc829db1e4e23576a7f9fe0efa79fd5c9d2f + languageName: node + linkType: hard + +"supertest@npm:^6.2.4": + version: 6.3.4 + resolution: "supertest@npm:6.3.4" + dependencies: + methods: ^1.1.2 + superagent: ^8.1.2 + checksum: 875c6fa7940f21e5be9bb646579cdb030d4057bf2da643e125e1f0480add1200395d2b17e10b8e54e1009efc63e047422501e9eb30e12828668498c0910f295f + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 + languageName: node + linkType: hard + +"supports-color@npm:^3.2.3": + version: 3.2.3 + resolution: "supports-color@npm:3.2.3" + dependencies: + has-flag: ^1.0.0 + checksum: 56afc05fa87d00100d90148c4d0a6e20a0af0d56dca5c54d4d40b2553ee737dab0ca4e8b53c4471afc035227b5b44dfa4824747a7f01ad733173536f7da6fbbb + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0, supports-color@npm:^5.4.0, supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^6.1.0": + version: 6.1.0 + resolution: "supports-color@npm:6.1.0" + dependencies: + has-flag: ^3.0.0 + checksum: 74358f9535c83ee113fbaac354b11e808060f6e7d8722082ee43af3578469134e89d00026dce2a6b93ce4e5b89d0e9a10f638b2b9f64c7838c2fb2883a47b3d5 + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"svg-parser@npm:^2.0.2": + version: 2.0.4 + resolution: "svg-parser@npm:2.0.4" + checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf + languageName: node + linkType: hard + +"svgo@npm:^1.0.0, svgo@npm:^1.2.2": + version: 1.3.2 + resolution: "svgo@npm:1.3.2" + 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 + checksum: 28a5680a61245eb4a1603bc03459095bb01ad5ebd23e95882d886c3c81752313c0a9a9fe48dd0bcbb9a27c52e11c603640df952971573b2b550d9e15a9ee6116 + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + +"table@npm:^6.0.9": + version: 6.8.2 + resolution: "table@npm:6.8.2" + dependencies: + ajv: ^8.0.1 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + checksum: 61188652f53a980d1759ca460ca8dea5c5322aece3210457e7084882f053c2b6a870041295e08a82cb1d676e31b056406845d94b0abf3c79a4b104777bec413b + languageName: node + linkType: hard + +"tapable@npm:^1.0.0, tapable@npm:^1.1.3": + version: 1.1.3 + resolution: "tapable@npm:1.1.3" + checksum: 53ff4e7c3900051c38cc4faab428ebfd7e6ad0841af5a7ac6d5f3045c5b50e88497bfa8295b4b3fbcadd94993c9e358868b78b9fb249a76cb8b018ac8dccafd7 + languageName: node + linkType: hard + +"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"temp-dir@npm:^1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 + languageName: node + linkType: hard + +"tempy@npm:^0.3.0": + version: 0.3.0 + resolution: "tempy@npm:0.3.0" + dependencies: + temp-dir: ^1.0.0 + type-fest: ^0.3.1 + unique-string: ^1.0.0 + checksum: f81ef72a7ee6d512439af8d8891e4fc6595309451910d7ac9d760f1242a1f87272b2b97c830c8f74aaa93a3aa550483bb16db17e6345601f64d614d240edc322 + languageName: node + linkType: hard + +"terminal-link@npm:^2.0.0": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: ^4.2.1 + supports-hyperlinks: ^2.0.0 + checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:4.2.3": + version: 4.2.3 + resolution: "terser-webpack-plugin@npm:4.2.3" + dependencies: + cacache: ^15.0.5 + find-cache-dir: ^3.3.1 + jest-worker: ^26.5.0 + p-limit: ^3.0.2 + schema-utils: ^3.0.0 + serialize-javascript: ^5.0.1 + source-map: ^0.6.1 + terser: ^5.3.4 + webpack-sources: ^1.4.3 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: ec1b3a85e2645c57e359d5e4831f3e1d78eca2a0c94b156db70eb846ae35b5e6e98ad8784b12e153fc273e57445ce69d017075bbe9fc42868a258ef121f11537 + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^1.4.3": + version: 1.4.5 + resolution: "terser-webpack-plugin@npm:1.4.5" + dependencies: + cacache: ^12.0.2 + find-cache-dir: ^2.1.0 + is-wsl: ^1.1.0 + schema-utils: ^1.0.0 + serialize-javascript: ^4.0.0 + source-map: ^0.6.1 + terser: ^4.1.2 + webpack-sources: ^1.4.0 + worker-farm: ^1.7.0 + peerDependencies: + webpack: ^4.0.0 + checksum: 02aada80927d3c8105d69cb00384d307b73aed67d180db5d20023a8d649149f3803ad50f9cd2ef9eb2622005de87e677198ecc5088f51422bfac5d4d57472d0e + languageName: node + linkType: hard + +"terser@npm:^4.1.2, terser@npm:^4.6.2, terser@npm:^4.6.3": + version: 4.8.1 + resolution: "terser@npm:4.8.1" + dependencies: + commander: ^2.20.0 + source-map: ~0.6.1 + source-map-support: ~0.5.12 + bin: + terser: bin/terser + checksum: b342819bf7e82283059aaa3f22bb74deb1862d07573ba5a8947882190ad525fd9b44a15074986be083fd379c58b9a879457a330b66dcdb77b485c44267f9a55a + languageName: node + linkType: hard + +"terser@npm:^5.3.4": + version: 5.31.1 + resolution: "terser@npm:5.31.1" + 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 + checksum: 6ab57e62e9cd690dc99b3d0ee2e07289cd3408109a950c7118bf39e32851a5bf08b67fe19e0ac43a5a98813792ac78101bf25e5aa524f05ae8bb4e0131d0feef + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-table@npm:0.2.0, text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"throat@npm:^5.0.0": + version: 5.0.0 + resolution: "throat@npm:5.0.0" + checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 + languageName: node + linkType: hard + +"timers-browserify@npm:^2.0.4": + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" + dependencies: + setimmediate: ^1.0.4 + checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + languageName: node + linkType: hard + +"timsort@npm:^0.3.0": + version: 0.3.0 + resolution: "timsort@npm:0.3.0" + checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.0.2, tiny-invariant@npm:^1.0.6": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 5e185c8cc2266967984ce3b352a4e57cb89dad5a8abb0dea21468a6ecaa67cd5bb47a3b7a85d08041008644af4f667fb8b6575ba38ba5fb00b3b5068306e59fe + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.0": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"tinybench@npm:^2.5.0": + version: 2.8.0 + resolution: "tinybench@npm:2.8.0" + checksum: 024a307c6a71f6e2903e110952457ee3dfa606093b45d7f49efcfd01d452650e099474080677ff650b0fd76b49074425ac68ff2a70561699a78515a278bf0862 + languageName: node + linkType: hard + +"tinypool@npm:^0.5.0": + version: 0.5.0 + resolution: "tinypool@npm:0.5.0" + checksum: 4e0dfd8f28666d541c1d92304222edc4613f05d74fe2243c8520d466a2cc6596011a7072c1c41a7de7522351b82fda07e8038198e8f43673d8d69401c5903f8c + languageName: node + linkType: hard + +"tinyspy@npm:^2.1.1": + version: 2.2.1 + resolution: "tinyspy@npm:2.2.1" + checksum: 170d6232e87f9044f537b50b406a38fbfd6f79a261cd12b92879947bd340939a833a678632ce4f5c4a6feab4477e9c21cd43faac3b90b68b77dd0536c4149736 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-arraybuffer@npm:^1.0.0": + version: 1.0.1 + resolution: "to-arraybuffer@npm:1.0.1" + checksum: 31433c10b388722729f5da04c6b2a06f40dc84f797bb802a5a171ced1e599454099c6c5bc5118f4b9105e7d049d3ad9d0f71182b77650e4fdb04539695489941 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: ^3.0.2 + checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 + languageName: node + linkType: hard + +"to-regex-range@npm:^2.1.0": + version: 2.1.1 + resolution: "to-regex-range@npm:2.1.1" + dependencies: + is-number: ^3.0.0 + repeat-string: ^1.6.1 + checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": + version: 3.0.2 + resolution: "to-regex@npm:3.0.2" + dependencies: + define-property: ^2.0.2 + extend-shallow: ^3.0.2 + regex-not: ^1.0.2 + safe-regex: ^1.1.0 + checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"toposort@npm:^2.0.2": + version: 2.0.2 + resolution: "toposort@npm:2.0.2" + checksum: d64c74b570391c9432873f48e231b439ee56bc49f7cb9780b505cfdf5cb832f808d0bae072515d93834dd6bceca5bb34448b5b4b408335e4d4716eaf68195dcb + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.1 + resolution: "touch@npm:3.1.1" + bin: + nodetouch: bin/nodetouch.js + checksum: fb8c54207500eb760b6b9d77b9c5626cc027c9ad44431eed4268845f00f8c6bbfc95ce7e9da8e487f020aa921982a8bc5d8e909d0606e82686bd0a08a8e0539b + languageName: node + linkType: hard + +"tough-cookie@npm:^4.0.0": + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c + languageName: node + linkType: hard + +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"trough@npm:^1.0.0": + version: 1.0.5 + resolution: "trough@npm:1.0.5" + checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 + languageName: node + linkType: hard + +"tryer@npm:^1.0.1": + version: 1.0.1 + resolution: "tryer@npm:1.0.1" + checksum: 1cf14d7f67c79613f054b569bfc9a89c7020d331573a812dfcf7437244e8f8e6eb6893b210cbd9cc217f67c1d72617f89793df231e4fe7d53634ed91cf3a89d1 + languageName: node + linkType: hard + +"ts-jest@npm:^26.2.0": + version: 26.5.6 + resolution: "ts-jest@npm:26.5.6" + dependencies: + bs-logger: 0.x + buffer-from: 1.x + fast-json-stable-stringify: 2.x + jest-util: ^26.1.0 + json5: 2.x + lodash: 4.x + make-error: 1.x + mkdirp: 1.x + semver: 7.x + yargs-parser: 20.x + peerDependencies: + jest: ">=26 <27" + typescript: ">=3.8 <5.0" + bin: + ts-jest: cli.js + checksum: 6f65ad4fe67ab3f0fd4c7f9954acbee863af05b2b3f88dd0f490bbcdc58002960fac908b2cb9f009ec14da6fe13cb00a39e291260d6e555abe72448d1c0a017f + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac + languageName: node + linkType: hard + +"ts-node@npm:^8.10.1": + version: 8.10.2 + resolution: "ts-node@npm:8.10.2" + dependencies: + arg: ^4.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + source-map-support: ^0.5.17 + yn: 3.1.1 + peerDependencies: + typescript: ">=2.7" + bin: + ts-node: dist/bin.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 480adb076fdab6dbabd726c6056d651ddc567feda0d3e4770d809c01d000715a0f61f80be0e4a92ef87b7f4a494b79d9595d62de4a3931d740122ae26f0e10d8 + languageName: node + linkType: hard + +"ts-pnp@npm:1.2.0, ts-pnp@npm:^1.1.6": + version: 1.2.0 + resolution: "ts-pnp@npm:1.2.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: c2a698b85d521298fe6f2435fbf2d3dc5834b423ea25abd321805ead3f399dbeedce7ca09492d7eb005b9d2c009c6b9587055bc3ab273dc6b9e40eefd7edb5b2 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 + languageName: node + linkType: hard + +"tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.0.3, tslib@npm:^2.1.0": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 + languageName: node + linkType: hard + +"tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + 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" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"tty-browserify@npm:0.0.0": + version: 0.0.0 + resolution: "tty-browserify@npm:0.0.0" + checksum: a06f746acc419cb2527ba19b6f3bd97b4a208c03823bfb37b2982629d2effe30ebd17eaed0d7e2fc741f3c4f2a0c43455bd5fb4194354b378e78cfb7ca687f59 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.3.1": + version: 0.3.1 + resolution: "type-fest@npm:0.3.1" + checksum: 347ff46c2285616635cb59f722e7f396bee81b8988b6fc1f1536b725077f2abf6ccfa22ab7a78e9b6ce7debea0e6614bbf5946cbec6674ec1bde12113af3a65c + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"type-fest@npm:^1.2.2": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + languageName: node + linkType: hard + +"type-is@npm:^1.6.4, type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + +"type@npm:^2.7.2": + version: 2.7.3 + resolution: "type@npm:2.7.3" + checksum: 69cfda3248847998f93b9d292fd251c10facf8d29513e2047d4684509d67bae82d910d7a00c1e9d9bbf2af242d36425b6616807d6c652c5c370c2be1f0008a47 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + +"typed-scss-modules@npm:^6.5.0": + version: 6.6.0 + resolution: "typed-scss-modules@npm:6.6.0" + dependencies: + bundle-require: ^3.0.4 + chalk: 4.1.2 + change-case: ^4.1.2 + chokidar: ^3.5.3 + css-modules-loader-core: ^1.1.0 + esbuild: ^0.14.21 + glob: ^7.2.0 + joycon: ^3.1.1 + reserved-words: ^0.1.2 + slash: ^3.0.0 + yargs: ^17.3.1 + peerDependencies: + node-sass: ^4.12.0 + sass: ^1.49.7 + peerDependenciesMeta: + node-sass: + optional: true + sass: + optional: true + bin: + typed-scss-modules: dist/lib/cli.js + checksum: aa039f1c26cb3a3fa5a445f25bf7f3f9754bcc55a9701b7d55fb380ac767eeb60ca2c17f1d983ad8cec4c9e92779e9f8bd57f2859a991ec8f31d6c3acd56856b + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"typescript@npm:4.1.5": + version: 4.1.5 + resolution: "typescript@npm:4.1.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: af660e69aa5184520dfa57362dcf7fd1b26d08b869d76b3bd58dcc04058a757983f470cd61ded824ab01fa08a81d58c7f607d8e360f4e550664b9439d04f8e41 + languageName: node + linkType: hard + +"typescript@npm:^4.1.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + +"typescript@patch:typescript@4.1.5#~builtin": + version: 4.1.5 + resolution: "typescript@patch:typescript@npm%3A4.1.5#~builtin::version=4.1.5&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: fde897357ff6bb729323dc6d58753193d0d8e3d90ea66081f9a4eb798e1056a3a47a49c666a7bccdf93e37780ed0913b78de83a766c6da85b73bad3ed34470d0 + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.1.5#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 + languageName: node + linkType: hard + +"ufo@npm:^1.5.3": + version: 1.5.3 + resolution: "ufo@npm:1.5.3" + checksum: 2f54fa543b2e689cc4ab341fe2194937afe37c5ee43cd782e6ecc184e36859e84d4197a43ae4cd6e9a56f793ca7c5b950dfff3f16fadaeef9b6b88b05c88c8ef + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc + languageName: node + linkType: hard + +"underscore@npm:1.12.1": + version: 1.12.1 + resolution: "underscore@npm:1.12.1" + checksum: ec327603aa112b99fe9d74cd9bf3b3b7451465a9d2610ceab269a532e3f191650ab017903be34dc86fe406a11d04d8905a3b04dd4c129493e51bee09a3f3074c + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"unified@npm:^9.0.0": + version: 9.2.2 + resolution: "unified@npm:9.2.2" + dependencies: + bail: ^1.0.0 + extend: ^3.0.0 + is-buffer: ^2.0.0 + is-plain-obj: ^2.0.0 + trough: ^1.0.0 + vfile: ^4.0.0 + checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 + languageName: node + linkType: hard + +"union-value@npm:^1.0.0": + version: 1.0.1 + resolution: "union-value@npm:1.0.1" + dependencies: + arr-union: ^3.1.0 + get-value: ^2.0.6 + is-extendable: ^0.1.1 + set-value: ^2.0.1 + checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba + languageName: node + linkType: hard + +"uniq@npm:^1.0.1": + version: 1.0.1 + resolution: "uniq@npm:1.0.1" + checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 + languageName: node + linkType: hard + +"uniqs@npm:^2.0.0": + version: 2.0.0 + resolution: "uniqs@npm:2.0.0" + checksum: 5ace63e0521fd1ae2c161b3fa167cf6846fc45a71c00496729e0146402c3ae467c6f025a68fbd6766300a9bfbac9f240f2f0198164283bef48012b39db83f81f + languageName: node + linkType: hard + +"unique-filename@npm:^1.1.1": + version: 1.1.1 + resolution: "unique-filename@npm:1.1.1" + dependencies: + unique-slug: ^2.0.0 + checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^2.0.0": + version: 2.0.2 + resolution: "unique-slug@npm:2.0.2" + dependencies: + imurmurhash: ^0.1.4 + checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unique-string@npm:^1.0.0": + version: 1.0.0 + resolution: "unique-string@npm:1.0.0" + dependencies: + crypto-random-string: ^1.0.0 + checksum: 588f16bd4ec99b5130f237793d1a5694156adde20460366726573238e41e93b739b87987e863792aeb2392b26f8afb292490ace119c82ed12c46816c9c859f5f + languageName: node + linkType: hard + +"unist-builder@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-builder@npm:2.0.3" + checksum: e946fdf77dbfc320feaece137ce4959ae2da6614abd1623bd39512dc741a9d5f313eb2ba79f8887d941365dccddec7fef4e953827475e392bf49b45336f597f6 + languageName: node + linkType: hard + +"unist-util-generated@npm:^1.0.0": + version: 1.1.6 + resolution: "unist-util-generated@npm:1.1.6" + checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f + languageName: node + linkType: hard + +"unist-util-is@npm:^4.0.0": + version: 4.1.0 + resolution: "unist-util-is@npm:4.1.0" + checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea + languageName: node + linkType: hard + +"unist-util-position@npm:^3.0.0": + version: 3.1.0 + resolution: "unist-util-position@npm:3.1.0" + checksum: 10b3952e32a1ffabbecad41c3946237f7059f5bb6436796da05531a285f50b97e4f37cfc2f7164676d041063f40fe1ad92fbb8ca38d3ae8747328ebe738d738f + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.2 + checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^3.0.0": + version: 3.1.1 + resolution: "unist-util-visit-parents@npm:3.1.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 + languageName: node + linkType: hard + +"unist-util-visit@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-visit@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^4.0.0 + unist-util-visit-parents: ^3.0.0 + checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"unload@npm:2.2.0": + version: 2.2.0 + resolution: "unload@npm:2.2.0" + dependencies: + "@babel/runtime": ^7.6.2 + detect-node: ^2.0.4 + checksum: 88ba950c5ff83ab4f9bbd8f63bbf19ba09687ed3c434efd43b7338cc595bc574df8f9b155ee6eee7a435de3d3a4a226726988428977a68ba4907045f1fac5d41 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"unquote@npm:~1.1.1": + version: 1.1.1 + resolution: "unquote@npm:1.1.1" + checksum: 71745867d09cba44ba2d26cb71d6dda7045a98b14f7405df4faaf2b0c90d24703ad027a9d90ba9a6e0d096de2c8d56f864fd03f1c0498c0b7a3990f73b4c8f5f + languageName: node + linkType: hard + +"unset-value@npm:^1.0.0": + version: 1.0.0 + resolution: "unset-value@npm:1.0.0" + dependencies: + has-value: ^0.3.1 + isobject: ^3.0.0 + checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 + languageName: node + linkType: hard + +"upath@npm:^1.1.1, upath@npm:^1.1.2, upath@npm:^1.2.0": + version: 1.2.0 + resolution: "upath@npm:1.2.0" + checksum: 4c05c094797cb733193a0784774dbea5b1889d502fc9f0572164177e185e4a59ba7099bf0b0adf945b232e2ac60363f9bf18aac9b2206fb99cbef971a8455445 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.16 + resolution: "update-browserslist-db@npm:1.0.16" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 51b1f7189c9ea5925c80154b0a6fd3ec36106d07858d8f69826427d8edb4735d1801512c69eade38ba0814d7407d11f400d74440bbf3da0309f3d788017f35b2 + languageName: node + linkType: hard + +"upper-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 + languageName: node + linkType: hard + +"upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 + languageName: node + linkType: hard + +"url-loader@npm:4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" + dependencies: + loader-utils: ^2.0.0 + mime-types: ^2.1.27 + schema-utils: ^3.0.0 + peerDependencies: + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd + languageName: node + linkType: hard + +"url-parse@npm:^1.5.10, url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"url-template@npm:^2.0.8": + version: 2.0.8 + resolution: "url-template@npm:2.0.8" + checksum: 4183fccd74e3591e4154134d4443dccecba9c455c15c7df774f1f1e3fa340fd9bffb903b5beec347196d15ce49c34edf6dec0634a95d170ad6e78c0467d6e13e + languageName: node + linkType: hard + +"url@npm:^0.11.0": + version: 0.11.3 + resolution: "url@npm:0.11.3" + dependencies: + punycode: ^1.4.1 + qs: ^6.11.2 + checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e + languageName: node + linkType: hard + +"use-memo-one@npm:^1.1.3": + version: 1.1.3 + resolution: "use-memo-one@npm:1.1.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.0.0": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: fe07c071c4da3645f112c38c0e57beb479a8838616ff4e92598256ecce527f2888c08febc7f9b2f0ce2f0e18540ba3cde41eb2035e4fafcb4f52955037098a81 + languageName: node + linkType: hard + +"use@npm:^3.1.0": + version: 3.1.1 + resolution: "use@npm:3.1.1" + checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util.promisify@npm:1.0.0": + version: 1.0.0 + resolution: "util.promisify@npm:1.0.0" + dependencies: + define-properties: ^1.1.2 + object.getownpropertydescriptors: ^2.0.3 + checksum: 482e857d676adee506c5c3a10212fd6a06a51d827a9b6d5396a8e593db53b4bb7064f77c5071357d8cd76072542de5cc1c08bc6d7c10cf43fa22dc3bc67556f1 + languageName: node + linkType: hard + +"util.promisify@npm:~1.0.0": + version: 1.0.1 + resolution: "util.promisify@npm:1.0.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.2 + has-symbols: ^1.0.1 + object.getownpropertydescriptors: ^2.1.0 + checksum: d823c75b3fc66510018596f128a6592c98991df38bc0464a633bdf9134e2de0a1a33199c5c21cc261048a3982d7a19e032ecff8835b3c587f843deba96063e37 + languageName: node + linkType: hard + +"util@npm:^0.10.4": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: 2.0.3 + checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf + languageName: node + linkType: hard + +"util@npm:^0.11.0": + version: 0.11.1 + resolution: "util@npm:0.11.1" + dependencies: + inherits: 2.0.3 + checksum: 80bee6a2edf5ab08dcb97bfe55ca62289b4e66f762ada201f2c5104cb5e46474c8b334f6504d055c0e6a8fda10999add9bcbd81ba765e7f37b17dc767331aa55 + languageName: node + linkType: hard + +"util@npm:^0.12.3": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f + languageName: node + linkType: hard + +"uuid@npm:^8.3.0, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"v8-compile-cache@npm:^2.0.3": + version: 2.4.0 + resolution: "v8-compile-cache@npm:2.4.0" + checksum: 8eb6ddb59d86f24566503f1e6ca98f3e6f43599f05359bd3ab737eaaf1585b338091478a4d3d5c2646632cf8030288d7888684ea62238cdce15a65ae2416718f + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^7.0.0": + version: 7.1.2 + resolution: "v8-to-istanbul@npm:7.1.2" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + source-map: ^0.7.3 + checksum: e52b48764f55aed62ff87f2b5f710c874f992cd1313eac8f438bf65aeeb0689153d85bb76e39514fd90ba3521d6ebea929a8ae1339b6d7b0cf18fb0ed13d8b40 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validator@npm:^13.9.0": + version: 13.12.0 + resolution: "validator@npm:13.12.0" + checksum: fb8f070724770b1449ea1a968605823fdb112dbd10507b2802f8841cda3e7b5c376c40f18c84e6a7b59de320a06177e471554101a85f1fa8a70bac1a84e48adf + languageName: node + linkType: hard + +"value-equal@npm:^1.0.1": + version: 1.0.1 + resolution: "value-equal@npm:1.0.1" + checksum: bb7ae1facc76b5cf8071aeb6c13d284d023fdb370478d10a5d64508e0e6e53bb459c4bbe34258df29d82e6f561f874f0105eba38de0e61fe9edd0bdce07a77a2 + languageName: node + linkType: hard + +"vary@npm:^1, vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"vendors@npm:^1.0.0": + version: 1.0.4 + resolution: "vendors@npm:1.0.4" + checksum: 4b16e0bc18dbdd7ac8dd745c776c08f6c73e9a7f620ffd9faf94a3d86a35feaf4c6cb1bbdb304d2381548a30d0abe69b83eeb1b7b1bf5bb33935e64b28812681 + languageName: node + linkType: hard + +"vfile-message@npm:^2.0.0": + version: 2.0.4 + resolution: "vfile-message@npm:2.0.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 1bade499790f46ca5aba04bdce07a1e37c2636a8872e05cf32c26becc912826710b7eb063d30c5754fdfaeedc8a7658e78df10b3bc535c844890ec8a184f5643 + languageName: node + linkType: hard + +"vfile@npm:^4.0.0": + version: 4.2.1 + resolution: "vfile@npm:4.2.1" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + vfile-message: ^2.0.0 + checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 + languageName: node + linkType: hard + +"vite-node@npm:0.32.4": + version: 0.32.4 + resolution: "vite-node@npm:0.32.4" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.4.0 + pathe: ^1.1.1 + picocolors: ^1.0.0 + vite: ^3.0.0 || ^4.0.0 + bin: + vite-node: vite-node.mjs + checksum: 6edb7aafcc30b97213435e7b3bfa43e2133feadd46680c0e54b44064f9e38f9b6e3a75f7c0ccde6bf3b6f34cb9681ec6510fb966a11f9ca7239e9473200a4a24 + languageName: node + linkType: hard + +"vite@npm:4.4.5": + version: 4.4.5 + resolution: "vite@npm:4.4.5" + dependencies: + esbuild: ^0.18.10 + fsevents: ~2.3.2 + postcss: ^8.4.26 + rollup: ^3.25.2 + peerDependencies: + "@types/node": ">= 14" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 825d8c13511b764710ca503e603746e20a7cb963194033dc606c46b1650a0d8986b577ba92507b54143cbf467032e9868ea04913a86a8fcb88b69c5b8551938b + languageName: node + linkType: hard + +"vite@npm:^3.0.0 || ^4.0.0": + version: 4.5.3 + resolution: "vite@npm:4.5.3" + dependencies: + esbuild: ^0.18.10 + fsevents: ~2.3.2 + postcss: ^8.4.27 + rollup: ^3.27.1 + peerDependencies: + "@types/node": ">= 14" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c + languageName: node + linkType: hard + +"vitest@npm:^0.32.1": + version: 0.32.4 + resolution: "vitest@npm:0.32.4" + dependencies: + "@types/chai": ^4.3.5 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.32.4 + "@vitest/runner": 0.32.4 + "@vitest/snapshot": 0.32.4 + "@vitest/spy": 0.32.4 + "@vitest/utils": 0.32.4 + acorn: ^8.9.0 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.7 + debug: ^4.3.4 + local-pkg: ^0.4.3 + magic-string: ^0.30.0 + pathe: ^1.1.1 + picocolors: ^1.0.0 + std-env: ^3.3.3 + strip-literal: ^1.0.1 + tinybench: ^2.5.0 + tinypool: ^0.5.0 + vite: ^3.0.0 || ^4.0.0 + vite-node: 0.32.4 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + playwright: "*" + safaridriver: "*" + webdriverio: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + bin: + vitest: vitest.mjs + checksum: 0f3347aac5656e6ba14c2f82d8fc5bfa333766ec745f7250f02a28d4cf6b35e645a300f0116a7db542430f59edb96cfeb3d2bc87856b84c776c25d10581f051b + languageName: node + linkType: hard + +"vm-browserify@npm:^1.0.1": + version: 1.1.2 + resolution: "vm-browserify@npm:1.1.2" + checksum: 10a1c50aab54ff8b4c9042c15fc64aefccce8d2fb90c0640403242db0ee7fb269f9b102bdb69cfb435d7ef3180d61fd4fb004a043a12709abaf9056cfd7e039d + languageName: node + linkType: hard + +"w3c-hr-time@npm:^1.0.2": + version: 1.0.2 + resolution: "w3c-hr-time@npm:1.0.2" + dependencies: + browser-process-hrtime: ^1.0.0 + checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^2.0.0": + version: 2.0.0 + resolution: "w3c-xmlserializer@npm:2.0.0" + dependencies: + xml-name-validator: ^3.0.0 + checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b + languageName: node + linkType: hard + +"walker@npm:^1.0.7, walker@npm:~1.0.5": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watchpack-chokidar2@npm:^2.0.1": + version: 2.0.1 + resolution: "watchpack-chokidar2@npm:2.0.1" + dependencies: + chokidar: ^2.1.8 + checksum: acf0f9ebca0c0b2fd1fe87ba557670477a6c0410bf1a653a726e68eb0620aa94fd9a43027a160a76bc793a21ea12e215e1e87dafe762682c13ef92ad4daf7b58 + languageName: node + linkType: hard + +"watchpack@npm:^1.7.4": + version: 1.7.5 + resolution: "watchpack@npm:1.7.5" + dependencies: + chokidar: ^3.4.1 + graceful-fs: ^4.1.2 + neo-async: ^2.5.0 + watchpack-chokidar2: ^2.0.1 + dependenciesMeta: + chokidar: + optional: true + watchpack-chokidar2: + optional: true + checksum: 8b7cb8c8df8f4dd0e8ac47693c0141c4f020a4b031411247d600eca31522fde6f1f9a3a6f6518b46e71f7971b0ed5734c08c60d7fdd2530e7262776286f69236 + languageName: node + linkType: hard + +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: ^1.0.0 + checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"web-encoding@npm:^1.1.5": + version: 1.1.5 + resolution: "web-encoding@npm:1.1.5" + dependencies: + "@zxing/text-encoding": 0.9.0 + util: ^0.12.3 + dependenciesMeta: + "@zxing/text-encoding": + optional: true + checksum: 2234a2b122f41006ce07859b3c0bf2e18f46144fda2907d5db0b571b76aa5c26977c646100ad9c00d2f8a4f6f2b848bc02147845d8c447ab365ec4eff376338d + languageName: node + linkType: hard + +"web-vitals@npm:^0.2.4": + version: 0.2.4 + resolution: "web-vitals@npm:0.2.4" + checksum: 128a4e87730b0a02fb6af3eef7d31f9a79b4646e83cfe4465aa8ce6054fe16f7b1f4125a384f1b4f039091bd9513cb54b4e559c0b10ae953c01900786a16b1c2 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^5.0.0": + version: 5.0.0 + resolution: "webidl-conversions@npm:5.0.0" + checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^3.7.2": + version: 3.7.3 + resolution: "webpack-dev-middleware@npm:3.7.3" + dependencies: + memory-fs: ^0.4.1 + mime: ^2.4.4 + mkdirp: ^0.5.1 + range-parser: ^1.2.1 + webpack-log: ^2.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: faa3cdd7b82d23c35b8f45903556eadd92b0795c76f3e08e234d53f7bab3de13331096a71968e7e9905770ae5de7a4f75ddf09f66d1e0bbabfecbb30db0f71e3 + languageName: node + linkType: hard + +"webpack-dev-server@npm:3.11.1": + version: 3.11.1 + resolution: "webpack-dev-server@npm:3.11.1" + dependencies: + ansi-html: 0.0.7 + bonjour: ^3.5.0 + chokidar: ^2.1.8 + compression: ^1.7.4 + connect-history-api-fallback: ^1.6.0 + debug: ^4.1.1 + del: ^4.1.1 + express: ^4.17.1 + html-entities: ^1.3.1 + http-proxy-middleware: 0.19.1 + import-local: ^2.0.0 + internal-ip: ^4.3.0 + ip: ^1.1.5 + is-absolute-url: ^3.0.3 + killable: ^1.0.1 + loglevel: ^1.6.8 + opn: ^5.5.0 + p-retry: ^3.0.1 + portfinder: ^1.0.26 + schema-utils: ^1.0.0 + selfsigned: ^1.10.8 + semver: ^6.3.0 + serve-index: ^1.9.1 + sockjs: ^0.3.21 + sockjs-client: ^1.5.0 + spdy: ^4.0.2 + strip-ansi: ^3.0.1 + supports-color: ^6.1.0 + url: ^0.11.0 + webpack-dev-middleware: ^3.7.2 + webpack-log: ^2.0.0 + ws: ^6.2.1 + yargs: ^13.3.2 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 6c6e6b6c207c192585f9943fc9945058832a39a12bbf0368798d73a96264b813ab816cb14985c1ca3c90cc567f59fcad6f2fada8f30f2f0136904cfaf43eb87d + languageName: node + linkType: hard + +"webpack-log@npm:^2.0.0": + version: 2.0.0 + resolution: "webpack-log@npm:2.0.0" + dependencies: + ansi-colors: ^3.0.0 + uuid: ^3.3.2 + checksum: 4757179310995e20633ec2d77a8c1ac11e4135c84745f57148692f8195f1c0f8ec122c77d0dc16fc484b7d301df6674f36c9fc6b1ff06b5cf142abaaf5d24f4f + languageName: node + linkType: hard + +"webpack-manifest-plugin@npm:2.2.0": + version: 2.2.0 + resolution: "webpack-manifest-plugin@npm:2.2.0" + dependencies: + fs-extra: ^7.0.0 + lodash: ">=3.5 <5" + object.entries: ^1.1.0 + tapable: ^1.0.0 + peerDependencies: + webpack: 2 || 3 || 4 + checksum: ed1387774031a59bc1bd5f79150e7a49dcf5048a6d5e9652672637bed7f93df6220cbd88b2e371e7c8c8e7640b3a8ed6895f771c6b05a8bb90b721f82001ac25 + languageName: node + linkType: hard + +"webpack-sources@npm:^1.1.0, webpack-sources@npm:^1.3.0, webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1, webpack-sources@npm:^1.4.3": + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" + dependencies: + source-list-map: ^2.0.0 + source-map: ~0.6.1 + checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 + languageName: node + linkType: hard + +"webpack@npm:4.44.2": + version: 4.44.2 + resolution: "webpack@npm:4.44.2" + dependencies: + "@webassemblyjs/ast": 1.9.0 + "@webassemblyjs/helper-module-context": 1.9.0 + "@webassemblyjs/wasm-edit": 1.9.0 + "@webassemblyjs/wasm-parser": 1.9.0 + acorn: ^6.4.1 + ajv: ^6.10.2 + ajv-keywords: ^3.4.1 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^4.3.0 + eslint-scope: ^4.0.3 + json-parse-better-errors: ^1.0.2 + loader-runner: ^2.4.0 + loader-utils: ^1.2.3 + memory-fs: ^0.4.1 + micromatch: ^3.1.10 + mkdirp: ^0.5.3 + neo-async: ^2.6.1 + node-libs-browser: ^2.2.1 + schema-utils: ^1.0.0 + tapable: ^1.1.3 + terser-webpack-plugin: ^1.4.3 + watchpack: ^1.7.4 + webpack-sources: ^1.4.1 + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + bin: + webpack: bin/webpack.js + checksum: 3d42ee6af7a0ff14fc00136d02f4a36381fd5b6ad0636b95a8b83e6d99bc7e02f888f4994c095ae986e567033fe7bb1d445e27afe49d2872b8fe5c3a57d20de6 + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: ">=0.5.1" + safe-buffer: ">=5.1.0" + websocket-extensions: ">=0.1.1" + checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^1.0.5": + version: 1.0.5 + resolution: "whatwg-encoding@npm:1.0.5" + dependencies: + iconv-lite: 0.4.24 + checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 + languageName: node + linkType: hard + +"whatwg-fetch@npm:^3.4.1": + version: 3.6.20 + resolution: "whatwg-fetch@npm:3.6.20" + checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^2.3.0": + version: 2.3.0 + resolution: "whatwg-mimetype@npm:2.3.0" + checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + 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 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + 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 + checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: ^2.0.3 + is-set: ^2.0.3 + is-weakmap: ^2.0.2 + is-weakset: ^2.0.3 + checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + +"which@npm:^1.2.9, which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5, word-wrap@npm:~1.2.3": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb + languageName: node + linkType: hard + +"workbox-background-sync@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-background-sync@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: 14655d0254813d2580935c88fe4768eb4794158a3c0700505aa06784dcd8d7498563e8b55152f0a4afb609163e76787a3a3eb61813b810bd76830c866d6ceb9e + languageName: node + linkType: hard + +"workbox-broadcast-update@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-broadcast-update@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: b56df2fde652c2efa8afbb8880562aaac6932be313ddcbbb688bb48beeb3164c928a644407f359168789a31592c765f63526608afe6cd803ac89402f786064d1 + languageName: node + linkType: hard + +"workbox-build@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-build@npm:5.1.4" + dependencies: + "@babel/core": ^7.8.4 + "@babel/preset-env": ^7.8.4 + "@babel/runtime": ^7.8.4 + "@hapi/joi": ^15.1.0 + "@rollup/plugin-node-resolve": ^7.1.1 + "@rollup/plugin-replace": ^2.3.1 + "@surma/rollup-plugin-off-main-thread": ^1.1.1 + common-tags: ^1.8.0 + fast-json-stable-stringify: ^2.1.0 + fs-extra: ^8.1.0 + glob: ^7.1.6 + lodash.template: ^4.5.0 + pretty-bytes: ^5.3.0 + rollup: ^1.31.1 + rollup-plugin-babel: ^4.3.3 + rollup-plugin-terser: ^5.3.1 + source-map: ^0.7.3 + source-map-url: ^0.4.0 + stringify-object: ^3.3.0 + strip-comments: ^1.0.2 + tempy: ^0.3.0 + upath: ^1.2.0 + workbox-background-sync: ^5.1.4 + workbox-broadcast-update: ^5.1.4 + workbox-cacheable-response: ^5.1.4 + workbox-core: ^5.1.4 + workbox-expiration: ^5.1.4 + workbox-google-analytics: ^5.1.4 + workbox-navigation-preload: ^5.1.4 + workbox-precaching: ^5.1.4 + workbox-range-requests: ^5.1.4 + workbox-routing: ^5.1.4 + workbox-strategies: ^5.1.4 + workbox-streams: ^5.1.4 + workbox-sw: ^5.1.4 + workbox-window: ^5.1.4 + checksum: 873833d0ea5c39c3f9adae9b2cd8ff33c013ff57f189dbec94d4d02917281495f38bbfa508d24425176ea8d31d6a27590658c83c30d44d9d5a9f4eb4d0798694 + languageName: node + linkType: hard + +"workbox-cacheable-response@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-cacheable-response@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: 3d8940dbee11880fdd86d76f85c063cf0a42d722be828332acf2f69ff5eaaedc8a0d779e44175adba4e8485f98392052539b2126df79125cebcec57dea0bee3c + languageName: node + linkType: hard + +"workbox-core@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-core@npm:5.1.4" + checksum: 6062bc3131bb7fcf1922be619cbc28ba528b033ba18acced5e42eb62b6c0a763814e905106c081c1c100a5d520ef104957e99e592e5e954767df76db49a7c874 + languageName: node + linkType: hard + +"workbox-expiration@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-expiration@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: c4648a008d19ee1281d5d588e10f14bd01530d8601c6ebf27e63b109663530fd381709539f1dd8a32e75d68a04e40e5f31ec6fbcc9ea052ee39000a2d76ade50 + languageName: node + linkType: hard + +"workbox-google-analytics@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-google-analytics@npm:5.1.4" + dependencies: + workbox-background-sync: ^5.1.4 + workbox-core: ^5.1.4 + workbox-routing: ^5.1.4 + workbox-strategies: ^5.1.4 + checksum: 2783e93f8a5aeccc038f51a9960c05aebd104fd8d113b5fd78a09bac2da8ed8e2be4c9fd7d8a6751682301d6b5e36ba055240a74a3591b4e887aabb2784cd531 + languageName: node + linkType: hard + +"workbox-navigation-preload@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-navigation-preload@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: ed6b19f063f17e2dd12ef08594ea338fcf96d994ea8f7d9b2987099cb08a890c73f139a23b68c9c5523308fba4634f24aca079deb7d00684c8d76fdfb07b0fc9 + languageName: node + linkType: hard + +"workbox-precaching@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-precaching@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: 5593c5b9c3c928bb5d3b4c998625be610d05a3b55523e5abb0fc5f12ff2e32412114e933e60d54ba9e2661fa3cbbbab7e11f91c7170742cfe9525437d1c44ae8 + languageName: node + linkType: hard + +"workbox-range-requests@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-range-requests@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: c67b467023e85a45599c411079907585c4d4b7aab77205dd905cd0d8b1487aa248469bc2f89045e8bd4a08eed4ede14795fc9089d01beff65ff3c6f2f1deff45 + languageName: node + linkType: hard + +"workbox-routing@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-routing@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: 4199a02b433eb645dfcaf2a5056a04d79f337b6f368b1ab5aa18262857835d4b995536062c294d6f4db6da236235b5736af4b29d0ea1b0c3f0db339b04d3cd40 + languageName: node + linkType: hard + +"workbox-strategies@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-strategies@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + workbox-routing: ^5.1.4 + checksum: 6ed247bfc0037331043cd0e772c6fd8d48e487875fac75d6692eb3936536ca2d4ac5ac9d12ec9b0ad5eefd4a69afd1ad2a993829ce3a373390880a019fd33d3d + languageName: node + linkType: hard + +"workbox-streams@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-streams@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + workbox-routing: ^5.1.4 + checksum: daaedb22dae6eb4723e7a21d758854adb36b75f1fa2453a914b6768628d91555e3db76fccb70a101f5cf1a39056e783eab1c8b0f4a59649f7ef4fad173c6f7d3 + languageName: node + linkType: hard + +"workbox-sw@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-sw@npm:5.1.4" + checksum: eda970f62c26715b806828cab3000240843bab2e6577c341ccd30747a77a60d23f4f08d8d85fba680bfefa95c673c4d48a62a969a2540916dcf6506c627c69cc + languageName: node + linkType: hard + +"workbox-webpack-plugin@npm:5.1.4": + version: 5.1.4 + resolution: "workbox-webpack-plugin@npm:5.1.4" + dependencies: + "@babel/runtime": ^7.5.5 + fast-json-stable-stringify: ^2.0.0 + source-map-url: ^0.4.0 + upath: ^1.1.2 + webpack-sources: ^1.3.0 + workbox-build: ^5.1.4 + peerDependencies: + webpack: ^4.0.0 + checksum: 7a9093d4ccfedc27ee6716443bcb7ce12d1f92831f48d09e6cf829a62d2ba7948a84ed38964923136d6b296e8f60bda359645a82c5a19e2c5a8e8aab6dae0a55 + languageName: node + linkType: hard + +"workbox-window@npm:^5.1.4": + version: 5.1.4 + resolution: "workbox-window@npm:5.1.4" + dependencies: + workbox-core: ^5.1.4 + checksum: bd5bc967ea1202c555db4360892518f5479027d05e4bd02fd38ebef3faf6605ee7e3887225e0920624cd2685e5217c3c4bd43a7d458860d186400c12f410df5b + languageName: node + linkType: hard + +"worker-farm@npm:^1.7.0": + version: 1.7.0 + resolution: "worker-farm@npm:1.7.0" + dependencies: + errno: ~0.1.7 + checksum: eab917530e1feddf157ec749e9c91b73a886142daa7fdf3490bccbf7b548b2576c43ab8d0a98e72ac755cbc101ca8647a7b1ff2485fddb9e8f53c40c77f5a719 + languageName: node + linkType: hard + +"worker-rpc@npm:^0.1.0": + version: 0.1.1 + resolution: "worker-rpc@npm:0.1.1" + dependencies: + microevent.ts: ~0.1.1 + checksum: 8f8607506172f44c05490f3ccf13e5c1f430eeb9b6116a405919c186b8b17add13bbb22467a0dbcd18ec7fcb080709a15738182e0003c5fbe2144721ea00f357 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^5.1.0": + version: 5.1.0 + resolution: "wrap-ansi@npm:5.1.0" + dependencies: + ansi-styles: ^3.2.0 + string-width: ^3.0.0 + strip-ansi: ^5.0.0 + checksum: 9b48c862220e541eb0daa22661b38b947973fc57054e91be5b0f2dcc77741a6875ccab4ebe970a394b4682c8dfc17e888266a105fb8b0a9b23c19245e781ceae + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^3.0.0": + version: 3.0.3 + resolution: "write-file-atomic@npm:3.0.3" + dependencies: + imurmurhash: ^0.1.4 + is-typedarray: ^1.0.0 + signal-exit: ^3.0.2 + typedarray-to-buffer: ^3.1.5 + checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 + languageName: node + linkType: hard + +"ws@npm:^6.2.1": + version: 6.2.2 + resolution: "ws@npm:6.2.2" + dependencies: + async-limiter: ~1.0.0 + checksum: aec3154ec51477c094ac2cb5946a156e17561a581fa27005cbf22c53ac57f8d4e5f791dd4bbba6a488602cb28778c8ab7df06251d590507c3c550fd8ebeee949 + languageName: node + linkType: hard + +"ws@npm:^7.4.6": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + +"xml-name-validator@npm:^3.0.0": + version: 3.0.0 + resolution: "xml-name-validator@npm:3.0.0" + checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + +"xtend@npm:^4.0.0, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yargs-parser@npm:20.x": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-parser@npm:^13.1.2": + version: 13.1.2 + resolution: "yargs-parser@npm:13.1.2" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: c8bb6f44d39a4acd94462e96d4e85469df865de6f4326e0ab1ac23ae4a835e5dd2ddfe588317ebf80c3a7e37e741bd5cb0dc8d92bcc5812baefb7df7c885e86b + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^13.3.0, yargs@npm:^13.3.2": + version: 13.3.2 + resolution: "yargs@npm:13.3.2" + dependencies: + cliui: ^5.0.0 + find-up: ^3.0.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^3.0.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^13.1.2 + checksum: 75c13e837eb2bb25717957ba58d277e864efc0cca7f945c98bdf6477e6ec2f9be6afa9ed8a876b251a21423500c148d7b91e88dee7adea6029bdec97af1ef3e8 + languageName: node + linkType: hard + +"yargs@npm:^15.4.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + +"yup@npm:^0.32.11": + version: 0.32.11 + resolution: "yup@npm:0.32.11" + dependencies: + "@babel/runtime": ^7.15.4 + "@types/lodash": ^4.14.175 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + nanoclone: ^0.2.1 + property-expr: ^2.0.4 + toposort: ^2.0.2 + checksum: 43a16786b47cc910fed4891cebdd89df6d6e31702e9462e8f969c73eac88551ce750732608012201ea6b93802c8847cb0aa27b5d57370640f4ecf30f9f97d4b0 + languageName: node + linkType: hard From 269c5f54836b3c98ec43aa751d8a259e16ff460e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 20:33:42 -0500 Subject: [PATCH 134/320] #2797-fixed naming --- src/frontend/src/apis/organizations.api.ts | 2 +- src/frontend/src/hooks/organizations.hooks.ts | 4 ++-- .../src/pages/HomePage/components/FeaturedProjects.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 4dd7a84641..486b22256a 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -12,7 +12,7 @@ export const getCurrentOrganization = async () => { }); }; -export const getCurrentFeaturedProject = async () => { +export const getFeaturedProjects = async () => { return axios.get(apiUrls.organizationsFeaturedProjects(), { transformResponse: (data) => JSON.parse(data) }); diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 30673e32c1..d182994fa2 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -2,7 +2,7 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization, Project } from 'shared'; -import { getCurrentFeaturedProject, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; +import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; @@ -32,7 +32,7 @@ export const useCurrentOrganization = () => { export const useFeaturedProjects = () => { return useQuery(['organizations', 'featured-projects'], async () => { - const { data } = await getCurrentFeaturedProject(); + const { data } = await getFeaturedProjects(); return data; }); }; diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx index ad1bbe7471..958e3f05f8 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjects.tsx @@ -13,7 +13,7 @@ import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import { Box } from '@mui/material'; import { Error } from '@mui/icons-material'; -const NoTasksDisplay: React.FC = () => { +const NoFeaturedProjectsDisplay: React.FC = () => { return ( { const fullDisplay = ( {featuredProjects.length === 0 ? ( - + ) : ( featuredProjects.map((p) => ) )} From 3d74b3bb387bbfc3c84bc8c81c09dbd091f539f1 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 6 Nov 2024 20:53:57 -0500 Subject: [PATCH 135/320] #2803-added empty page block display --- .../components/ChangeRequestDetailCard.tsx | 3 +- .../src/pages/HomePage/AdminHomePage.tsx | 2 +- .../components/UnreviewedChangeRequests.tsx | 47 ++++++++++++++----- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestDetailCard.tsx b/src/frontend/src/components/ChangeRequestDetailCard.tsx index 852f6d0007..fc202cfcf9 100644 --- a/src/frontend/src/components/ChangeRequestDetailCard.tsx +++ b/src/frontend/src/components/ChangeRequestDetailCard.tsx @@ -68,8 +68,9 @@ interface ChangeRequestDetailCardProps { } const ChangeRequestDetailCard: React.FC = ({ changeRequest }) => { + const theme = useTheme(); return ( - + diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 61c6a2b6b0..aa7d853f46 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -26,7 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 4f021908b3..0666900b00 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -1,16 +1,42 @@ import { useAllWorkPackages } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; -import { useCurrentUser } from '../../../hooks/users.hooks'; import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; import { useAllProjects } from '../../../hooks/projects.hooks'; import { getCRsToReview } from '../../../utils/change-request.utils'; import ScrollablePageBlock from './ScrollablePageBlock'; -import { ChangeRequest } from 'shared'; +import { AuthenticatedUser, ChangeRequest } from 'shared'; import ChangeRequestDetailCard from '../../../components/ChangeRequestDetailCard'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import { Box } from '@mui/material'; -const UnreviewedChangeRequests: React.FC = () => { - const user = useCurrentUser(); +interface UnreviewedChangeRequestsProps { + user: AuthenticatedUser; +} + +const NoUnreviewedChangeRequests: React.FC = () => { + return ( + + } + heading={`You're all caught up!`} + message={'Uou have no unreviewed changre requests!'} + /> + + ); +}; + +const UnreviewedChangeRequests: React.FC = ({ user }) => { const { data: changeRequests, isError: crIsError, isLoading: crIsLoading, error: crError } = useAllChangeRequests(); const { data: projects, isError: projectIsError, isLoading: projectLoading, error: projectError } = useAllProjects(); const { data: workPackages, isError: wpIsError, isLoading: wpLoading, error: wpError } = useAllWorkPackages(); @@ -23,14 +49,13 @@ const UnreviewedChangeRequests: React.FC = () => { const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); - const title = - crsToReview.length === 0 ? 'No unreviewed change requests' : `My Unreviewed Change Requests (${crsToReview.length})`; - return ( - - {crsToReview.map((cr: ChangeRequest) => ( - - ))} + + {crsToReview.length === 0 ? ( + + ) : ( + crsToReview.map((cr: ChangeRequest) => ) + )} ); }; From f4ad83d00f4c140731d2944aa578c92057e9315f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 7 Nov 2024 09:24:44 -0500 Subject: [PATCH 136/320] #2803-added to lead home page --- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 581025367b..95790224e4 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -26,7 +26,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - + ); }; From 815a5c2636b9f9472f20d289c4e09466dcff1ed4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 7 Nov 2024 09:28:52 -0500 Subject: [PATCH 137/320] #2803-reverted changes to change request row --- src/frontend/src/components/ChangeRequestRow.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/components/ChangeRequestRow.tsx b/src/frontend/src/components/ChangeRequestRow.tsx index 5edaaf3b11..654d9d86ad 100644 --- a/src/frontend/src/components/ChangeRequestRow.tsx +++ b/src/frontend/src/components/ChangeRequestRow.tsx @@ -28,7 +28,7 @@ const ChangeRequestRow: React.FC = ({ title, changeReques sx={{ display: 'flex', flexDirection: 'row', - flexWrap: 'nowrap', + flexWrap: 'wrap', overflow: 'auto', justifyContent: 'flex-start', '&::-webkit-scrollbar': { @@ -41,8 +41,7 @@ const ChangeRequestRow: React.FC = ({ title, changeReques backgroundColor: theme.palette.divider, borderRadius: '20px', border: '6px solid transparent', - backgroundClip: 'content-box', - background: theme.palette.background.paper + backgroundClip: 'content-box' } }} data-testid={title + 'crRow'} From 4c522e2e8d34d123e54f31c53b9eba8a3ebd2873 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 7 Nov 2024 20:03:33 -0500 Subject: [PATCH 138/320] #2805-added helper and docs --- src/frontend/src/hooks/users.hooks.ts | 5 +++++ .../pages/HomePage/components/MyTeamsOverdueTasks.tsx | 10 +++++----- src/frontend/src/utils/task.utils.ts | 6 ++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index 96db083a9b..96b659c1f1 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -249,6 +249,11 @@ export const useUserTasks = (userId: string) => { }); }; +/** + * Custom react hook to get the assigned tasks of all users in the list + * @param userIds ids of users to get assigned tasks from + * @returns tasks assigned to all users in list + */ export const useManyUserTasks = (userIds: string[]) => { return useQuery(['users', userIds, 'tasks'], async () => { const { data } = await getManyUserTasks(userIds); diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index 215929efcc..be44b470b1 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -6,9 +6,9 @@ import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import TeamTaskCard from './TeamTaskCard'; import { Box } from '@mui/material'; -import { daysOverdue } from '../../../utils/datetime.utils'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import { getOverdueTasks } from '../../../utils/task.utils'; interface MyTeamsOverdueTasksProps { user: AuthenticatedUser; @@ -45,14 +45,14 @@ const MyTeamsOverdueTasks: React.FC = ({ user }) => { if (isLoading || !tasks) return ; if (isError) return ; - const overdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); + const overdueTasks = getOverdueTasks(tasks); return ( - - {overdueTasks.size === 0 ? ( + + {overdueTasks.length === 0 ? ( ) : ( - [...overdueTasks].map((task, index) => ) + overdueTasks.map((task, index) => ) )} ); diff --git a/src/frontend/src/utils/task.utils.ts b/src/frontend/src/utils/task.utils.ts index 4227302b82..b3a57067b2 100644 --- a/src/frontend/src/utils/task.utils.ts +++ b/src/frontend/src/utils/task.utils.ts @@ -8,6 +8,7 @@ import { Project, Task, TaskPriority, TaskStatus, TeamPreview, User, UserPreview import { EditTaskFormInput } from '../pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskFormModal'; import { fullNamePipe } from './pipes'; import { makeTeamList } from './teams.utils'; +import { daysOverdue } from './datetime.utils'; //this is needed to fix some weird bug with getActions() //see comment by michaldudak commented on Dec 5, 2022 @@ -78,3 +79,8 @@ export const taskPriorityColor = (task: Task) => { ? '#EF4345' : ''; }; + +export const getOverdueTasks = (tasks: Task[]) => { + const overdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); + return [...overdueTasks]; +}; From 81e7ce2beb34afa7d984b6b5ce23f222c53e73a8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 10 Nov 2024 11:19:29 -0500 Subject: [PATCH 139/320] #2769-added edit featured projects --- src/frontend/src/apis/organizations.api.ts | 6 ++ src/frontend/src/hooks/organizations.hooks.ts | 24 ++++- .../pages/AdminToolsPage/AdminToolsPage.tsx | 4 +- .../EditGuestView/EditFeaturedProjects.tsx | 99 +++++++++++++++++++ .../EditFeaturedProjectsDropdown.tsx | 39 ++++++++ .../EditFeaturedProjectsForm.tsx | 95 ++++++++++++++++++ .../EditGuestView/GuestViewConfig.tsx | 14 +++ src/frontend/src/utils/urls.ts | 2 + 8 files changed, 279 insertions(+), 4 deletions(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjects.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsDropdown.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsForm.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 486b22256a..e5903575c9 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -23,3 +23,9 @@ export const setOrganizationDescription = async (description: string) => { description }); }; + +export const setOrganizationFeaturedProjects = async (featuredProjectIds: string[]) => { + return axios.post(apiUrls.organizationsSetFeaturedProjects(), { + projectIds: featuredProjectIds + }); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index d182994fa2..24da9a5653 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -2,7 +2,12 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization, Project } from 'shared'; -import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; +import { + getFeaturedProjects, + getCurrentOrganization, + setOrganizationDescription, + setOrganizationFeaturedProjects +} from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; @@ -54,7 +59,22 @@ export const useSetOrganizationDescription = () => { ['organizations', 'description'], async (description: string) => { const { data } = await setOrganizationDescription(description); - queryClient.invalidateQueries(['organizations']); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['organizations']); + } + } + ); +}; + +export const useSetFeaturedProjects = () => { + const queryClient = useQueryClient(); + return useMutation( + ['organizations', 'featured-projects'], + async (featuredProjects: Project[]) => { + const { data } = await setOrganizationFeaturedProjects(featuredProjects.map((project) => project.id)); return data; }, { diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 04856d5265..653f6f7169 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -18,7 +18,7 @@ import NERTabs from '../../components/Tabs'; import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; -import EditDescription from './EditGuestView/EditDescription'; +import GuestViewConfig from './EditGuestView/GuestViewConfig'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); @@ -95,7 +95,7 @@ const AdminToolsPage: React.FC = () => { ) : tabIndex === 4 ? ( - + ) : ( diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjects.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjects.tsx new file mode 100644 index 0000000000..cda841a38d --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjects.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import EditFeaturedProjectsForm, { EditFeaturedProjectsFormInput } from './EditFeaturedProjectsForm'; +import { useFeaturedProjects, useSetFeaturedProjects } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { Box, Card, Chip, Typography, useTheme } from '@mui/material'; +import { NERButton } from '../../../components/NERButton'; +import { useToast } from '../../../hooks/toasts.hooks'; +import { projectWbsNamePipe } from '../../../utils/pipes'; + +const EditFeaturedProjects = () => { + const { data: featuredProjects, isLoading, isError, error } = useFeaturedProjects(); + const { mutateAsync: setFeaturedProjects } = useSetFeaturedProjects(); + const [isEditMode, setIsEditMode] = useState(false); + const theme = useTheme(); + const toast = useToast(); + + const handleClose = () => { + setIsEditMode(false); + }; + + const onSubmit = async (formInput: EditFeaturedProjectsFormInput) => { + try { + await setFeaturedProjects(formInput.featuredProjects); + toast.success('Featured Projects updated successfully!'); + } catch (error: unknown) { + if (error instanceof Error) { + toast.error(error.message); + } + } + handleClose(); + }; + + if (isLoading || !featuredProjects) return ; + if (isError) return ; + + return ( + + + Featured Projects + + {isEditMode ? ( + + ) : ( + + + {featuredProjects.map((project) => ( + + ))} + + + setIsEditMode(true)}> + Update + + + + )} + + ); +}; + +export default EditFeaturedProjects; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsDropdown.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsDropdown.tsx new file mode 100644 index 0000000000..254e776e29 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsDropdown.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Autocomplete, Chip, TextField } from '@mui/material'; +import { Project } from 'shared'; +import { projectWbsNamePipe } from '../../../utils/pipes'; +import { useAllProjects } from '../../../hooks/projects.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; + +interface EditFeatureProjectsDropdownProps { + onChange: (value: Project[] | null) => void; + value: Project[] | undefined; +} + +const EditFeaturedProjectsDropdown: React.FC = ({ onChange, value }) => { + const { data: allProjects, isLoading, isError, error } = useAllProjects(); + + if (isLoading || !allProjects) return ; + if (isError) return ; + + return ( + `${projectWbsNamePipe(option)}`} + isOptionEqualToValue={(option, value) => option.id === value.id} + value={value} + onChange={(_, newValue) => onChange(newValue)} + renderInput={(params) => } + renderTags={(tagValue, getTagProps) => + tagValue.map((option, index) => ( + + )) + } + placeholder={'Add a Project to Feature'} + /> + ); +}; + +export default EditFeaturedProjectsDropdown; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsForm.tsx new file mode 100644 index 0000000000..8d89a2da07 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditFeaturedProjectsForm.tsx @@ -0,0 +1,95 @@ +import { yupResolver } from '@hookform/resolvers/yup'; +import * as yup from 'yup'; +import React from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import EditFeaturedProjectsDropdown from './EditFeaturedProjectsDropdown'; +import { Box, FormControl } from '@mui/material'; +import { Project } from 'shared'; +import NERFailButton from '../../../components/NERFailButton'; +import NERSuccessButton from '../../../components/NERSuccessButton'; + +const schema = yup.object().shape({ + description: yup.array().of(yup.string()) +}); + +export interface EditFeaturedProjectsFormInput { + featuredProjects: Project[]; +} + +interface EditFeaturedProjectsFormProps { + featuredProjects: Project[]; + onSubmit: (formInput: EditFeaturedProjectsFormInput) => Promise; + onHide: () => void; + isEditMode: boolean; +} + +const EditFeaturedProjectsForm: React.FC = ({ + featuredProjects, + onSubmit, + onHide, + isEditMode +}) => { + const { handleSubmit, control, reset } = useForm({ + resolver: yupResolver(schema), + defaultValues: { + featuredProjects: featuredProjects ?? [] + } + }); + + const onSubmitWrapper = async (data: EditFeaturedProjectsFormInput) => { + await onSubmit(data); + reset(); + }; + + const onHideWrapper = () => { + onHide(); + reset(); + }; + + return ( + + ); +}; + +export default EditFeaturedProjectsForm; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx new file mode 100644 index 0000000000..7e47085d0f --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx @@ -0,0 +1,14 @@ +import { Stack } from '@mui/material'; +import EditDescription from './EditDescription'; +import EditFeaturedProjects from './EditFeaturedProjects'; + +const GuestViewConfig: React.FC = () => { + return ( + + + + + ); +}; + +export default GuestViewConfig; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 6908114edb..dfc667b83d 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -176,6 +176,7 @@ const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; const organizationsSetDescription = () => `${organizations()}/description/set`; const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; +const organizationsSetFeaturedProjects = () => `${organizationsFeaturedProjects()}/set`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -334,6 +335,7 @@ export const apiUrls = { organizationsSetUsefulLinks, organizationsFeaturedProjects, organizationsSetDescription, + organizationsSetFeaturedProjects, cars, carsCreate, From 98028ea104f558a0ee525e08da75b1424df680e6 Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 12 Nov 2024 03:21:29 -0500 Subject: [PATCH 140/320] $2793: Make the buttons move to their own row when the screen gets smaller --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 + .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..15434a926a 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface AdminHomePageProps { user: AuthenticatedUser; diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 773e278368..b33f2878d1 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -16,7 +16,7 @@ interface GuestOrganizationInfoButtonProps { const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { return ( - + {iconName} From d1ecfb1a34881cc836ed7664893d10715c7605c3 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 12 Nov 2024 09:34:22 -0500 Subject: [PATCH 141/320] #2809 selection view with custom select component --- .../components/TeamWorkPackageDisplay.tsx | 78 ----------- .../HomePage/components/WorkPackageSelect.tsx | 96 ++++++++++++++ .../components/WorkPackagesSelectionView.tsx | 125 ++++++++++-------- src/frontend/src/utils/work-package.utils.ts | 25 +++- 4 files changed, 182 insertions(+), 142 deletions(-) delete mode 100644 src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx create mode 100644 src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx deleted file mode 100644 index 77744f1be4..0000000000 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import WorkPackageCard from './WorkPackageCard'; -import { wbsPipe } from '../../../utils/pipes'; -import Box from '@mui/material/Box'; -import { useAllTeams } from '../../../hooks/teams.hooks'; -import { useCurrentUser } from '../../../hooks/users.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; -import ErrorPage from '../../ErrorPage'; -import { Card, CardContent, Typography, useTheme } from '@mui/material'; - -const TeamWorkPackageDisplay: React.FC = () => { - const theme = useTheme(); - const user = useCurrentUser(); - const { isLoading, isError, data: teams, error } = useAllTeams(); - - if (isLoading || !teams) return ; - - if (isError) return ; - - const myTeams = teams?.filter((team) => { - return ( - team.members.some((member) => member.userId === user.userId) || - team.leads.some((member) => member.userId === user.userId) || - team.head.userId === user.userId - ); - }); - - const workPackages = myTeams - ?.map((team) => { - return team.projects.map((project) => { - return project.workPackages; - }); - }) - .flat(2); - - return ( - - - - - {`My Team's Work Packages (${workPackages.length})`} - - {workPackages.length === 0 - ? `No work packages` - : workPackages.map((wp) => ( - - - - ))} - - - - ); -}; - -export default TeamWorkPackageDisplay; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx new file mode 100644 index 0000000000..1ad64f0d16 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx @@ -0,0 +1,96 @@ +import { Box, Card, Typography, useTheme } from '@mui/material'; +import { useEffect, useRef, useState } from 'react'; + +interface CustomSelectProps { + options: string[]; + onSelect: (selectedOption: number) => void; + firstSelected?: number; +} + +const WorkPackageSelect: React.FC = ({ options, onSelect, firstSelected }) => { + const theme = useTheme(); + const [selected, setSelected] = useState(firstSelected ? firstSelected : 0); + const [isOpen, setIsOpen] = useState(false); + const dropdownRef = useRef(null); + + const handleSelect = (option: string) => { + setSelected(options.indexOf(option)); + setIsOpen(false); + onSelect(options.indexOf(option)); + }; + + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsOpen(false); + } + }; + + useEffect(() => { + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside); + } else { + document.removeEventListener('mousedown', handleClickOutside); + } + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [isOpen]); + + return ( + + + setIsOpen(!isOpen)} + variant="h5" + sx={{ paddingX: 2, paddingY: 1, display: 'inline-block', cursor: 'pointer' }} + > + {options[selected]} + + + {isOpen && ( + setIsOpen(!isOpen)} sx={{ position: 'absolute', top: '-40%', cursor: 'pointer' }}> + + + {options[selected]} + + {options + .filter((option) => option !== options.at(selected)) + .map((option) => ( + { + handleSelect(option); + }} + sx={{ + cursor: 'pointer', + paddingX: 2, + paddingY: 1, + backgroundColor: theme.palette.background.paper, + position: 'relative', + '&:hover': { + backgroundColor: theme.palette.action.hover + } + }} + variant="h5" + > + {option} + + ))} + + + )} + + ); +}; + +export default WorkPackageSelect; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index ad65048b9e..7982c21846 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -1,5 +1,5 @@ import { wbsPipe, WorkPackage } from 'shared'; -import { Box, MenuItem, Select, useTheme, SelectChangeEvent } from '@mui/material'; +import { Box, Grid, useTheme } from '@mui/material'; import { getInProgressWorkPackages, getOverdueWorkPackages, @@ -8,63 +8,70 @@ import { import { useCurrentUser } from '../../../hooks/users.hooks'; import PageBlock from '../../../layouts/PageBlock'; import WorkPackageCard from './WorkPackageCard'; -import { useEffect, useState } from 'react'; +import WorkPackageSelect from './WorkPackageSelect'; +import React, { useState } from 'react'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; + +const NoWorkPackages: React.FC = () => { + return ( + + } + heading={`You're all caught up!`} + message={'You have no pending work packages of this type!'} + /> + + ); +}; const WorkPackagesSelectionView: React.FC = () => { const user = useCurrentUser(); const theme = useTheme(); - enum WPGroup { - upcoming = 'upcoming', - inProgress = 'inProgress', - overdue = 'overdue' - } - const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(WPGroup.upcoming); - - const setCookie = (name: string, value: string, days: number) => { - const date = new Date(); - date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); - const expires = 'expires=' + date.toUTCString(); - document.cookie = `${name}=${value}; ${expires}; path=/`; - }; + const relevantWPs = user.teamsAsHead + ? user.teamsAsHead.map((team) => team.projects.map((project) => project.workPackages)).flat(2) + : []; - useEffect(() => { - const value = `; ${document.cookie}`; - const parts = value.split(`; wpGroup=`); - let savedGroup; - if (parts.length === 2) { - savedGroup = parts.pop()?.split(';').shift(); - } - if (savedGroup) { - setCurrentDisplayedWPs(savedGroup as WPGroup); - } - }, []); - - if (!user.teamAsHeadId) { - throw new Error('rwge4rwa'); - } - - const relevantWPs = user.teamsAsHeadId.map((team) => team.projects.map((project) => project.workPackages)).flat(2); + relevantWPs.concat( + user.teamsAsLead ? user.teamsAsLead.map((team) => team.projects.map((project) => project.workPackages)).flat(2) : [] + ); const upcomingWPs: WorkPackage[] = getUpcomingWorkPackages(relevantWPs); const inProgressWPs: WorkPackage[] = getInProgressWorkPackages(relevantWPs); const overdueWPs: WorkPackage[] = getOverdueWorkPackages(relevantWPs); - const handleChange = (event: SelectChangeEvent) => { - const value = event.target.value as WPGroup; - setCookie('wpGroup', value, 7); - setCurrentDisplayedWPs(value); - }; + const workPackages: [string, WorkPackage[]][] = [ + [`Upcoming Work Packages (${upcomingWPs.length})`, upcomingWPs], + [`In Progress Work Packages (${inProgressWPs.length})`, inProgressWPs], + [`Overdue Work Packages (${overdueWPs.length})`, overdueWPs] + ]; - const getWorkPackages = (key: WPGroup): WorkPackage[] => { - switch (key) { - case WPGroup.upcoming: - return upcomingWPs; - case WPGroup.inProgress: - return inProgressWPs; - case WPGroup.overdue: - return overdueWPs; + let defaultFirstDisplay = 2; + if (workPackages[2][1].length === 0) { + defaultFirstDisplay = 1; + if (workPackages[1][1].length === 0) { + defaultFirstDisplay = 0; } + } + + const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); + + const handleChange = (event: number) => { + setCurrentDisplayedWPs(event); + }; + + const getWorkPackages = (key: number): WorkPackage[] => { + return workPackages[key][1]; }; const workPackagesDisplay = (workPackages: WorkPackage[]) => ( @@ -75,7 +82,7 @@ const WorkPackagesSelectionView: React.FC = () => { flexWrap: 'nowrap', overflowY: 'auto', justifyContent: 'flex-start', - height: '50vh', + height: '40vh', gap: 2, '&::-webkit-scrollbar': { width: '20px' @@ -91,25 +98,29 @@ const WorkPackagesSelectionView: React.FC = () => { } }} > - {workPackages.length === 0 - ? `No work packages` - : workPackages.map((wp) => ( + + {workPackages.map((wp) => ( + - ))} + + ))} + ); + const currentWps = getWorkPackages(currentDisplayedWPs); + return ( - + - - {workPackagesDisplay(getWorkPackages(currentDisplayedWPs))} + wp[0])} + onSelect={handleChange} + firstSelected={currentDisplayedWPs} + /> + {currentWps.length === 0 ? : workPackagesDisplay(currentWps)} ); diff --git a/src/frontend/src/utils/work-package.utils.ts b/src/frontend/src/utils/work-package.utils.ts index 582fbbc428..ea85fc8965 100644 --- a/src/frontend/src/utils/work-package.utils.ts +++ b/src/frontend/src/utils/work-package.utils.ts @@ -15,23 +15,34 @@ export const getTitleFromFormType = (formType: WPFormType, wbsElement: WbsElemen /** * Given a list of work packages, return the work packages that are overdue. * @param wpList a list of work packages. - * @returns a list of work packages that are overdue. + * @returns a sub-list of work packages that are not complete, and have end dates before the current date. */ export const getOverdueWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { return wpList.filter((wp) => wp.status !== WbsElementStatus.Complete && new Date(wp.endDate) <= new Date()); }; +/** + * Given a list of work packages, return the work packages that are upcoming. + * @param wpList a list of work packages. + * @returns a sub-list of work packages that are active and have a start date within the next 2 weeks. + */ export const getUpcomingWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { return wpList.filter( (wp) => - wp.status === WbsElementStatus.Inactive && - //start date is within 2 weeks - wp.startDate < new Date(new Date().getTime() + 14 * 24 * 60 * 60 * 1000) && - //start date is in the future - wp.startDate > new Date() + wp.status !== WbsElementStatus.Complete && + new Date(wp.startDate) <= new Date(new Date().getTime() + 14 * 24 * 60 * 60 * 1000) && + new Date(wp.startDate) >= new Date() ); }; +/** + * Given a list of work packages, return the work packages that are in progress. + * @param wpList a list of work packages. + * @returns a sub-list of work packages that are active, have a start date in the past, and an end date in the future. + */ export const getInProgressWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => { - return wpList.filter((wp) => wp.status === WbsElementStatus.Active && wp.endDate >= new Date()); + return wpList.filter( + (wp) => + wp.status === WbsElementStatus.Active && new Date(wp.endDate) >= new Date() && new Date(wp.startDate) <= new Date() + ); }; From ce00480f492185857cb1f573b066923770e029cf Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 12 Nov 2024 10:48:58 -0500 Subject: [PATCH 142/320] #2809-added grid to admin home page, made scrollbar red --- .../src/pages/HomePage/AdminHomePage.tsx | 12 ++++++--- .../components/WorkPackagesSelectionView.tsx | 25 +++++++++---------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 963d1b5ff9..12ccf177b2 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -3,11 +3,11 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Typography, Box, Grid } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; @@ -26,7 +26,13 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 7982c21846..72e7f35825 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -81,6 +81,7 @@ const WorkPackagesSelectionView: React.FC = () => { flexDirection: 'column', flexWrap: 'nowrap', overflowY: 'auto', + overflowX: 'hidden', justifyContent: 'flex-start', height: '40vh', gap: 2, @@ -91,16 +92,16 @@ const WorkPackagesSelectionView: React.FC = () => { backgroundColor: 'transparent' }, '&::-webkit-scrollbar-thumb': { - backgroundColor: theme.palette.divider, + backgroundColor: theme.palette.primary.main, borderRadius: '20px', border: '6px solid transparent', backgroundClip: 'content-box' } }} > - + {workPackages.map((wp) => ( - + @@ -113,16 +114,14 @@ const WorkPackagesSelectionView: React.FC = () => { const currentWps = getWorkPackages(currentDisplayedWPs); return ( - - - wp[0])} - onSelect={handleChange} - firstSelected={currentDisplayedWPs} - /> - {currentWps.length === 0 ? : workPackagesDisplay(currentWps)} - - + + wp[0])} + onSelect={handleChange} + firstSelected={currentDisplayedWPs} + /> + {currentWps.length === 0 ? : workPackagesDisplay(currentWps)} + ); }; From ca89edfec271c6866286882e1efc12989e812656 Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 12 Nov 2024 12:45:29 -0500 Subject: [PATCH 143/320] #2793: Added error handling for organization From dea370bee232785180ffdc9ad35a882df5cda54f Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 12 Nov 2024 12:47:24 -0500 Subject: [PATCH 144/320] #2793: Removed GuestOrganizationInfo import from AdminHomePage --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 15434a926a..4c1bf340f9 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface AdminHomePageProps { user: AuthenticatedUser; From b3196464ef1e4f2736d84b6f5e7b8ba059b4717a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 12 Nov 2024 13:15:12 -0500 Subject: [PATCH 145/320] #2940-added announcements and notifications to schema --- .../migration.sql | 24 +++++++++++++++++++ src/backend/src/prisma/schema.prisma | 17 +++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/backend/src/prisma/migrations/20241112180715_announcements_and_notifications/migration.sql diff --git a/src/backend/src/prisma/migrations/20241112180715_announcements_and_notifications/migration.sql b/src/backend/src/prisma/migrations/20241112180715_announcements_and_notifications/migration.sql new file mode 100644 index 0000000000..91b483cea3 --- /dev/null +++ b/src/backend/src/prisma/migrations/20241112180715_announcements_and_notifications/migration.sql @@ -0,0 +1,24 @@ +-- CreateTable +CREATE TABLE "Announcement" ( + "announcementId" TEXT NOT NULL, + "userCreatedId" TEXT NOT NULL, + "dateCrated" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") +); + +-- CreateTable +CREATE TABLE "Notification" ( + "notificationId" TEXT NOT NULL, + "text" TEXT NOT NULL, + "iconName" TEXT NOT NULL, + "userId" TEXT, + + CONSTRAINT "Notification_pkey" PRIMARY KEY ("notificationId") +); + +-- AddForeignKey +ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_userCreatedId_fkey" FOREIGN KEY ("userCreatedId") REFERENCES "User"("userId") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Notification" ADD CONSTRAINT "Notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("userId") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 6903ac1bfe..999b52f5e1 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -180,6 +180,8 @@ model User { deletedFrequentlyAskedQuestions FrequentlyAskedQuestion[] @relation(name: "frequentlyAskedQuestionDeleter") createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") + unreadAnnouncements Announcement[] + unreadNotifications Notification[] } model Role { @@ -927,3 +929,18 @@ model Milestone { organizationId String organization Organization @relation(fields: [organizationId], references: [organizationId]) } + +model Announcement { + announcementId String @id @default(uuid()) + userCreated User @relation(fields: [userCreatedId], references: [userId]) + userCreatedId String + dateCrated DateTime +} + +model Notification { + notificationId String @id @default(uuid()) + text String + iconName String + User User? @relation(fields: [userId], references: [userId]) + userId String? +} From 802461c059190d80f813cfc8d4f20ecf3ee92ae8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 12 Nov 2024 20:46:38 -0500 Subject: [PATCH 146/320] #2793-fixed small size --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 297190dba3..ae6c2e106b 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -16,7 +16,7 @@ interface GuestOrganizationInfoButtonProps { const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { return ( - + {iconName} From bbf8e5e9f8345a268c933fbe1115d052e352bbbd Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Tue, 12 Nov 2024 20:46:58 -0500 Subject: [PATCH 147/320] #2809 changed columns for admins vs non-admins and added dropdown arrow --- .../src/pages/HomePage/components/WorkPackageSelect.tsx | 2 ++ .../HomePage/components/WorkPackagesSelectionView.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx index 1ad64f0d16..3848635031 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx @@ -1,5 +1,6 @@ import { Box, Card, Typography, useTheme } from '@mui/material'; import { useEffect, useRef, useState } from 'react'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; interface CustomSelectProps { options: string[]; @@ -44,6 +45,7 @@ const WorkPackageSelect: React.FC = ({ options, onSelect, fir variant="h5" sx={{ paddingX: 2, paddingY: 1, display: 'inline-block', cursor: 'pointer' }} > + {options[selected]} diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 72e7f35825..1fa0dfcb39 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -1,4 +1,4 @@ -import { wbsPipe, WorkPackage } from 'shared'; +import { RoleEnum, wbsPipe, WorkPackage } from 'shared'; import { Box, Grid, useTheme } from '@mui/material'; import { getInProgressWorkPackages, @@ -99,10 +99,10 @@ const WorkPackagesSelectionView: React.FC = () => { } }} > - + {workPackages.map((wp) => ( - - + + From f038560ed8baf1864a19657159a63a3decde04e0 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 12 Nov 2024 22:50:59 -0500 Subject: [PATCH 148/320] #2801-fixed issues --- .../components/TeamWorkPackageDisplay.tsx | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 26b9417065..01c59e9d6e 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -5,6 +5,9 @@ import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; import { AuthenticatedUser } from 'shared'; +import { useAllTeams } from '../../../hooks/teams.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; interface TeamWorkPackageDisplayProps { user: AuthenticatedUser; @@ -23,35 +26,41 @@ const NoTeamWorkPackagesDisplay: React.FC = () => { > } - heading={"You're team is all caught up!"} - message={'There are no work packages assigned to your team!'} + heading={'No Active Work Packages'} + message={'There are no active work packages assigned to your team!'} /> ); }; const TeamWorkPackageDisplay: React.FC = ({ user }) => { - const teamsAsHead = user.teamsAsHead ?? []; - const teamsAsLead = user.teamsAsLead ?? []; - const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; + const { isLoading, isError, data: teams, error } = useAllTeams(); - // converting to set to remove duplicates - const workPackages = new Set( - teamsAsLeadership - .map((team) => { - return team.projects.map((project) => { - return project.workPackages; - }); - }) - .flat(2) - ); + if (isLoading || !teams) return ; + if (isError) return ; + + const myTeams = teams?.filter((team) => { + return ( + team.members.some((member) => member.userId === user.userId) || + team.leads.some((member) => member.userId === user.userId) || + team.head.userId === user.userId + ); + }); + + const workPackages = myTeams + ?.map((team) => { + return team.projects.map((project) => { + return project.workPackages; + }); + }) + .flat(2); return ( - - {workPackages.size === 2 ? ( + + {workPackages.length === 0 ? ( ) : ( - [...workPackages].map((wp) => ( + workPackages.map((wp) => ( From ccd2f3de319f1767b0505348bd17c792c51b91d5 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 12 Nov 2024 22:56:33 -0500 Subject: [PATCH 149/320] #2801-removed undefined --- .../pages/HomePage/components/TeamWorkPackageDisplay.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 01c59e9d6e..870104ddd0 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -37,9 +37,9 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) const { isLoading, isError, data: teams, error } = useAllTeams(); if (isLoading || !teams) return ; - if (isError) return ; + if (isError) return ; - const myTeams = teams?.filter((team) => { + const myTeams = teams.filter((team) => { return ( team.members.some((member) => member.userId === user.userId) || team.leads.some((member) => member.userId === user.userId) || @@ -48,7 +48,7 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) }); const workPackages = myTeams - ?.map((team) => { + .map((team) => { return team.projects.map((project) => { return project.workPackages; }); From 5b57e0ef8dd3de1fa1acc7c2798cd768c8f55035 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 13 Nov 2024 14:23:41 -0500 Subject: [PATCH 150/320] #2940-added many-to-many relations --- src/backend/src/prisma/schema.prisma | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 999b52f5e1..112f7a6936 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -180,7 +180,8 @@ model User { deletedFrequentlyAskedQuestions FrequentlyAskedQuestion[] @relation(name: "frequentlyAskedQuestionDeleter") createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") - unreadAnnouncements Announcement[] + receivedAnnouncements Announcement[] @relation(name: "ReceivedAnnouncements") + createdAnnouncements Announcement[] @relation(name: "CreatedAnnouncements") unreadNotifications Notification[] } @@ -932,15 +933,16 @@ model Milestone { model Announcement { announcementId String @id @default(uuid()) - userCreated User @relation(fields: [userCreatedId], references: [userId]) - userCreatedId String + text String + usersReceived User[] @relation("ReceivedAnnouncements") dateCrated DateTime + userCreatedId String + userCreated User @relation("CreatedAnnouncements", fields: [userCreatedId], references: [userId]) } model Notification { - notificationId String @id @default(uuid()) + notificationId String @id @default(uuid()) text String iconName String - User User? @relation(fields: [userId], references: [userId]) - userId String? + users User[] } From 03124d39f630fe0dd9ff0de9e07d4db0fa909b35 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 18 Nov 2024 17:06:43 -0500 Subject: [PATCH 151/320] #2998-set up get unread notifications endpoint --- .../src/controllers/users.controllers.ts | 12 +++++ .../notifications.query-args.ts | 11 ++++ .../migration.sql | 51 +++++++++++++++++++ src/backend/src/prisma/schema.prisma | 2 +- src/backend/src/routes/users.routes.ts | 1 + src/backend/src/services/users.services.ts | 12 +++++ .../transformers/notification.transformer.ts | 12 +++++ src/shared/index.ts | 1 + src/shared/src/types/notification.types.ts | 4 ++ 9 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/backend/src/prisma-query-args/notifications.query-args.ts create mode 100644 src/backend/src/prisma/migrations/20241118211532_updated_notifications/migration.sql create mode 100644 src/backend/src/transformers/notification.transformer.ts create mode 100644 src/shared/src/types/notification.types.ts diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index 5cfa740368..896648bd4c 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -191,4 +191,16 @@ export default class UsersController { return next(error); } } + + static async getUserUnreadNotifications(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { organization } = req; + + const unreadNotifications = await UsersService.getUserUnreadNotifications(userId, organization); + return res.status(200).json(unreadNotifications); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/prisma-query-args/notifications.query-args.ts b/src/backend/src/prisma-query-args/notifications.query-args.ts new file mode 100644 index 0000000000..9081f717cc --- /dev/null +++ b/src/backend/src/prisma-query-args/notifications.query-args.ts @@ -0,0 +1,11 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type NotificationQueryArgs = ReturnType; + +export const getNotificationQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + usersReceived: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/prisma/migrations/20241118211532_updated_notifications/migration.sql b/src/backend/src/prisma/migrations/20241118211532_updated_notifications/migration.sql new file mode 100644 index 0000000000..192243b385 --- /dev/null +++ b/src/backend/src/prisma/migrations/20241118211532_updated_notifications/migration.sql @@ -0,0 +1,51 @@ +/* + Warnings: + + - You are about to drop the column `userId` on the `Notification` table. All the data in the column will be lost. + - Added the required column `text` to the `Announcement` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropForeignKey +ALTER TABLE "Notification" DROP CONSTRAINT "Notification_userId_fkey"; + +-- AlterTable +ALTER TABLE "Announcement" ADD COLUMN "text" TEXT NOT NULL; + +-- AlterTable +ALTER TABLE "Notification" DROP COLUMN "userId"; + +-- CreateTable +CREATE TABLE "_ReceivedAnnouncements" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_NotificationToUser" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_ReceivedAnnouncements_AB_unique" ON "_ReceivedAnnouncements"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ReceivedAnnouncements_B_index" ON "_ReceivedAnnouncements"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_NotificationToUser_AB_unique" ON "_NotificationToUser"("A", "B"); + +-- CreateIndex +CREATE INDEX "_NotificationToUser_B_index" ON "_NotificationToUser"("B"); + +-- AddForeignKey +ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("notificationId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 112f7a6936..7023bbea12 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -944,5 +944,5 @@ model Notification { notificationId String @id @default(uuid()) text String iconName String - users User[] + usersReceived User[] } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 2f95201f6f..34ae1a0136 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,5 +54,6 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); +userRouter.get('/:userId/notifications', UsersController.getUserUnreadNotifications); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 4c7d2b4007..0b8e06b096 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -38,6 +38,8 @@ import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args' import authenticatedUserTransformer from '../transformers/auth-user.transformer'; import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; +import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; +import notificationTransformer from '../transformers/notification.transformer'; export default class UsersService { /** @@ -571,4 +573,14 @@ export default class UsersService { const resolvedTasks = await Promise.all(tasksPromises); return resolvedTasks.flat(); } + + static async getUserUnreadNotifications(userId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ + where: { userId }, + include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } + }); + if (!requestedUser) throw new NotFoundException('User', userId); + + return requestedUser.unreadNotifications.map(notificationTransformer); + } } diff --git a/src/backend/src/transformers/notification.transformer.ts b/src/backend/src/transformers/notification.transformer.ts new file mode 100644 index 0000000000..24e4347b20 --- /dev/null +++ b/src/backend/src/transformers/notification.transformer.ts @@ -0,0 +1,12 @@ +import { Prisma } from '@prisma/client'; +import { NotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; +import { Notification } from 'shared'; + +const notificationTransformer = (notification: Prisma.NotificationGetPayload): Notification => { + return { + text: notification.text, + iconName: notification.iconName + }; +}; + +export default notificationTransformer; diff --git a/src/shared/index.ts b/src/shared/index.ts index 1d3f6c399f..763ce5e09e 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -11,6 +11,7 @@ export * from './src/types/team-types'; export * from './src/types/task-types'; export * from './src/types/reimbursement-requests-types'; export * from './src/types/design-review-types'; +export * from './src/types/notification.types'; export * from './src/validate-wbs'; export * from './src/date-utils'; diff --git a/src/shared/src/types/notification.types.ts b/src/shared/src/types/notification.types.ts new file mode 100644 index 0000000000..2d7260d35f --- /dev/null +++ b/src/shared/src/types/notification.types.ts @@ -0,0 +1,4 @@ +export interface Notification { + text: String; + iconName: String; +} From 57784415625695f3aa2abad275dba21f97d9d2a7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 18 Nov 2024 15:57:18 -0500 Subject: [PATCH 152/320] #2997-set up send notifcations endpoint --- .../src/controllers/users.controllers.ts | 12 ++++++++++++ src/backend/src/prisma/schema.prisma | 2 +- src/backend/src/routes/users.routes.ts | 6 ++++++ src/backend/src/services/users.services.ts | 19 +++++++++++++++++++ src/backend/tests/unmocked/users.test.ts | 17 +++++++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index 5cfa740368..efac029e88 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -191,4 +191,16 @@ export default class UsersController { return next(error); } } + + static async sendNotitifcation(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { text, iconName } = req.body; + + const updatedUser = await UsersService.sendNotification(userId, text, iconName); + return res.status(200).json(updatedUser); + } catch (error: unknown) { + return next(error); + } + } } diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 112f7a6936..7023bbea12 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -944,5 +944,5 @@ model Notification { notificationId String @id @default(uuid()) text String iconName String - users User[] + usersReceived User[] } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 2f95201f6f..99f7802b40 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,5 +54,11 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); +userRouter.post( + `/:userId/notifications/send`, + nonEmptyString(body('text')), + nonEmptyString(body('iconName')), + UsersController.sendNotitifcation +); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 4c7d2b4007..94867821bc 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -571,4 +571,23 @@ export default class UsersService { const resolvedTasks = await Promise.all(tasksPromises); return resolvedTasks.flat(); } + + static async sendNotification(userId: string, text: string, iconName: string) { + const createdNotification = await prisma.notification.create({ + data: { + text, + iconName + } + }); + + const udaptedUser = await prisma.user.update({ + where: { userId }, + data: { unreadNotifications: { connect: createdNotification } }, + include: { unreadNotifications: true } + }); + + if (!udaptedUser) throw new NotFoundException('User', userId); + + return udaptedUser; + } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index c13a0c857f..2b3e13d6df 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -48,4 +48,21 @@ describe('User Tests', () => { expect(userTasks).toStrictEqual([batmanTask, batmanTask]); }); }); + + describe('Send Notification', () => { + it('fails on invalid user id', async () => { + await expect(async () => await UsersService.sendNotification('1', 'test', 'test')).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + /* + it('Succeeds and sends notification to user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + UsersService.sendNotification(testBatman.userId, 'test', 'test'); + + expect(testBatman).toStrictEqual([batmanTask, batmanTask]); + }); + */ + }); }); From 83acfbebdf820057434b86d1f6ce700e1916a5fc Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 18 Nov 2024 21:36:01 -0500 Subject: [PATCH 153/320] #2997-created tests --- src/backend/src/services/users.services.ts | 10 +++++++--- src/backend/tests/unmocked/users.test.ts | 13 +++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 94867821bc..c617a642b1 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -573,6 +573,12 @@ export default class UsersService { } static async sendNotification(userId: string, text: string, iconName: string) { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + const createdNotification = await prisma.notification.create({ data: { text, @@ -581,13 +587,11 @@ export default class UsersService { }); const udaptedUser = await prisma.user.update({ - where: { userId }, + where: { userId: requestedUser.userId }, data: { unreadNotifications: { connect: createdNotification } }, include: { unreadNotifications: true } }); - if (!udaptedUser) throw new NotFoundException('User', userId); - return udaptedUser; } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 2b3e13d6df..f3115ae718 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,6 +3,7 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; +import prisma from '../../src/prisma/prisma'; describe('User Tests', () => { let orgId: string; @@ -56,13 +57,17 @@ describe('User Tests', () => { ); }); - /* it('Succeeds and sends notification to user', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); - UsersService.sendNotification(testBatman.userId, 'test', 'test'); + await UsersService.sendNotification(testBatman.userId, 'test1', 'test1'); + await UsersService.sendNotification(testBatman.userId, 'test2', 'test2'); - expect(testBatman).toStrictEqual([batmanTask, batmanTask]); + const batmanWithNotifications = await prisma.user.findUnique({ + where: { userId: testBatman.userId }, + include: { unreadNotifications: true } + }); + + expect(batmanWithNotifications?.unreadNotifications).toHaveLength(2); }); - */ }); }); From e3b3bb71727ba3a15459502baeca9116f3feeabd Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 19 Nov 2024 09:57:59 -0500 Subject: [PATCH 154/320] #2997-updated test --- src/backend/tests/unmocked/users.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index f3115ae718..b26a941bd5 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -68,6 +68,8 @@ describe('User Tests', () => { }); expect(batmanWithNotifications?.unreadNotifications).toHaveLength(2); + expect(batmanWithNotifications?.unreadNotifications[0].text).toBe('test1'); + expect(batmanWithNotifications?.unreadNotifications[1].text).toBe('test2'); }); }); }); From 6ae13e3dafc44cd553a59a524992146eb54a888a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 19 Nov 2024 10:05:43 -0500 Subject: [PATCH 155/320] #2998-wrote tests --- src/backend/tests/unmocked/users.test.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index b26a941bd5..80e5c13b2d 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -72,4 +72,24 @@ describe('User Tests', () => { expect(batmanWithNotifications?.unreadNotifications[1].text).toBe('test2'); }); }); + + describe('Get Notifications', () => { + it('fails on invalid user id', async () => { + await expect(async () => await UsersService.getUserUnreadNotifications('1', organization)).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + it('Succeeds and gets user notifications', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await UsersService.sendNotification(testBatman.userId, 'test1', 'test1'); + await UsersService.sendNotification(testBatman.userId, 'test2', 'test2'); + + const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); + + expect(notifications).toHaveLength(2); + expect(notifications[0].text).toBe('test1'); + expect(notifications[1].text).toBe('test2'); + }); + }); }); From 6875955c608bea1b2dbb77d8800398235e75c423 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 19 Nov 2024 11:47:30 -0500 Subject: [PATCH 156/320] #3000-set up hooks --- .../transformers/notifications.transformers.ts | 13 +++++++++++++ src/frontend/src/apis/users.api.ts | 18 ++++++++++++++++++ src/frontend/src/hooks/users.hooks.ts | 18 ++++++++++++++++-- src/frontend/src/utils/urls.ts | 4 ++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/frontend/src/apis/transformers/notifications.transformers.ts diff --git a/src/frontend/src/apis/transformers/notifications.transformers.ts b/src/frontend/src/apis/transformers/notifications.transformers.ts new file mode 100644 index 0000000000..b429b61efc --- /dev/null +++ b/src/frontend/src/apis/transformers/notifications.transformers.ts @@ -0,0 +1,13 @@ +import { Notification } from 'shared'; + +/** + * Transforms a notification + * + * @param notification Incoming task object supplied by the HTTP response. + * @returns Properly transformed notification object. + */ +export const notificationTransformer = (notification: Notification): Notification => { + return { + ...notification + }; +}; diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index afa5ea00f6..4ad76fe84c 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -5,6 +5,7 @@ import axios from '../utils/axios'; import { + Notification, Project, SetUserScheduleSettingsPayload, Task, @@ -23,6 +24,7 @@ import { import { AuthenticatedUser, UserSettings } from 'shared'; import { projectTransformer } from './transformers/projects.transformers'; import { taskTransformer } from './transformers/tasks.transformers'; +import notificationTransformer from '../../../backend/src/transformers/notification.transformer'; /** * Fetches all users. @@ -159,3 +161,19 @@ export const getManyUserTasks = (userIds: string[]) => { } ); }; + +/* + * Sends a notification to the user with the given id + */ +export const sendNotification = (id: string, notification: Notification) => { + return axios.post(apiUrls.userSendNotifications(id), notification); +}; + +/* + * Gets all unread notifications of the user with the given id + */ +export const getNotifications = (id: string) => { + return axios.get(apiUrls.userNotifications(id), { + transformResponse: (data) => notificationTransformer(JSON.parse(data)) + }); +}; diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index 96b659c1f1..e2278ee136 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -19,7 +19,8 @@ import { getUserScheduleSettings, updateUserScheduleSettings, getUserTasks, - getManyUserTasks + getManyUserTasks, + getNotifications } from '../apis/users.api'; import { User, @@ -31,7 +32,8 @@ import { UserScheduleSettings, UserWithScheduleSettings, SetUserScheduleSettingsPayload, - Task + Task, + Notification } from 'shared'; import { useAuth } from './auth.hooks'; import { useContext } from 'react'; @@ -260,3 +262,15 @@ export const useManyUserTasks = (userIds: string[]) => { return data; }); }; + +/** + * Curstom react hook to get all unread notifications from a user + * @param userId id of user to get unread notifications from + * @returns + */ +export const useUserNotifications = (userId: string) => { + return useQuery(['users', userId, 'notifications'], async () => { + const { data } = await getNotifications(userId); + return data; + }); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 1b00a9e46b..cffa6050ac 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -26,6 +26,8 @@ const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; const manyUserTasks = () => `${users()}/tasks/get-many`; +const userSendNotifications = (id: string) => `${usersById(id)}/notifications/send`; +const userNotifications = (id: string) => `${usersById(id)}/notifications`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -211,6 +213,8 @@ export const apiUrls = { userScheduleSettingsSet, userTasks, manyUserTasks, + userSendNotifications, + userNotifications, projects, allProjects, From 8eec4f355226bf3669149fbb7bad3176f24f74ec Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 19 Nov 2024 19:25:51 -0500 Subject: [PATCH 157/320] #2793: Aligned the title, description, and buttons --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 ++ .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..85f63e1508 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import GuestOrganizationInfo from './components/GuestOrganizationInfo'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,6 +26,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 297190dba3..c77d5bdd29 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -16,7 +16,7 @@ interface GuestOrganizationInfoButtonProps { const NERGuestButton: React.FC = ({ href, buttonText, iconName }) => { return ( - + {iconName} @@ -55,8 +55,8 @@ const GuestOrganizationInfo = () => { variant="outlined" > - {organization.name} - {organization.description} + {organization.name} + {organization.description} {usefulLinks.map((link) => ( Date: Tue, 19 Nov 2024 19:29:46 -0500 Subject: [PATCH 158/320] #2793: Merged changes into branch From 83ea95d665e8b1561f087e0c3d25203f984286a1 Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 19 Nov 2024 19:42:46 -0500 Subject: [PATCH 159/320] #2793: Fixed merge conflicts --- src/frontend/src/pages/HomePage/GuestHomePage.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 6af8ced0f6..15c9bc7658 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -10,11 +10,8 @@ import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; -<<<<<<< HEAD import GuestOrganizationInfo from './components/GuestOrganizationInfo'; -======= import FeaturedProjects from './components/FeaturedProjects'; ->>>>>>> 3a163645552eb1f7dd95f140b35ab87ecdc6736d interface GuestHomePageProps { user: AuthenticatedUser; @@ -33,10 +30,7 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { -<<<<<<< HEAD -======= ->>>>>>> 3a163645552eb1f7dd95f140b35ab87ecdc6736d ); }; From 03c72c6712ff533bf62e3c28c085f64794762fdb Mon Sep 17 00:00:00 2001 From: vdema Date: Tue, 19 Nov 2024 20:05:38 -0500 Subject: [PATCH 160/320] #2793: Fixed Prettier issue --- .../src/pages/HomePage/components/GuestOrganizationInfo.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index c77d5bdd29..7c2a10c1fa 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -55,7 +55,9 @@ const GuestOrganizationInfo = () => { variant="outlined" > - {organization.name} + + {organization.name} + {organization.description} {usefulLinks.map((link) => ( From fc44a6c70879c1e646989e228aedfe2756676f6f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 19 Nov 2024 20:53:47 -0500 Subject: [PATCH 161/320] #3000-created notification card --- src/backend/src/prisma/seed.ts | 3 + src/frontend/src/apis/users.api.ts | 2 +- .../src/components/NotificationCard.tsx | 59 +++++++++++++++++++ .../src/pages/HomePage/AdminHomePage.tsx | 16 ++++- 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 src/frontend/src/components/NotificationCard.tsx diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index a30e502baf..451cb37462 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1893,6 +1893,9 @@ const performSeed: () => Promise = async () => { await RecruitmentServices.createFaq(batman, 'When was FinishLine created?', 'FinishLine was created in 2019', ner); await RecruitmentServices.createFaq(batman, 'How many developers are working on FinishLine?', '178 as of 2024', ner); + + await UsersService.sendNotification(thomasEmrax.userId, 'testing notifications', 'star'); + await UsersService.sendNotification(thomasEmrax.userId, 'testing notifications #2', 'star'); }; performSeed() diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index 4ad76fe84c..3bcc945281 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -174,6 +174,6 @@ export const sendNotification = (id: string, notification: Notification) => { */ export const getNotifications = (id: string) => { return axios.get(apiUrls.userNotifications(id), { - transformResponse: (data) => notificationTransformer(JSON.parse(data)) + transformResponse: (data) => JSON.parse(data) }); }; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx new file mode 100644 index 0000000000..407a17e250 --- /dev/null +++ b/src/frontend/src/components/NotificationCard.tsx @@ -0,0 +1,59 @@ +import { Box, Icon, IconButton, Typography, useTheme } from '@mui/material'; +import React from 'react'; +import { Notification } from 'shared'; +import CloseIcon from '@mui/icons-material/Close'; + +interface NotificationCardProps { + notification: Notification; +} + +const NotificationCard: React.FC = ({ notification }) => { + const theme = useTheme(); + return ( + + + + {notification.iconName} + + + + {notification.text} + + + + + + ); +}; + +export default NotificationCard; diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..5c06b32b11 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -4,11 +4,12 @@ */ import { Typography } from '@mui/material'; -import { useSingleUserSettings } from '../../hooks/users.hooks'; +import { useSingleUserSettings, useUserNotifications } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import NotificationCard from '../../components/NotificationCard'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -16,12 +17,23 @@ interface AdminHomePageProps { const AdminHomePage = ({ user }: AdminHomePageProps) => { const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); + const { + data: notifications, + isLoading: notificationsIsLoading, + error: notificationsError, + isError: notificationsIsError + } = useUserNotifications(user.userId); - if (isLoading || !userSettingsData) return ; + if (isLoading || !userSettingsData || notificationsIsLoading || !notifications) return ; if (isError) return ; + if (notificationsIsError) return ; + + const currentNotification = notifications.length > 0 ? notifications[0] : undefined; + if (!currentNotification) return ; return ( + {currentNotification && } Welcome, {user.firstName}! From 375df2e957eca01cb053e9e6044cedaea978947e Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Thu, 21 Nov 2024 15:21:27 -0500 Subject: [PATCH 162/320] #2817 added card and section files --- .../src/pages/HomePage/LeadHomePage.tsx | 2 + .../HomePage/components/DesignReviewCard.tsx | 78 +++++++++++++++++++ .../components/UpcomingDesignReviews.tsx | 64 +++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx create mode 100644 src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index a8f97fb977..d8e6a0cab7 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -10,6 +10,7 @@ import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; +import UpcomingDesignReviews from './components/UpcomingDesignReviews'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -30,6 +31,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { + diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx new file mode 100644 index 0000000000..f977c83b1f --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -0,0 +1,78 @@ +import { Box, Card, CardContent, Link, Stack, Typography, useTheme } from '@mui/material'; +import { DesignReview } from 'shared'; +import { datePipe, projectWbsPipe } from '../../../utils/pipes'; +import { routes } from '../../../utils/routes'; +import { Link as RouterLink } from 'react-router-dom'; +import { CalendarTodayOutlined } from '@mui/icons-material'; +import { LocationOnOutlined } from '@mui/icons-material'; + +interface DesignReviewProps { + designReview: DesignReview; +} + +/* + Questions: + is there a better way to choose a day as a string? + is there a better way to remove the year from a date? + what does the list of times mean? I just chose the first time and hard coded it to be a pm. idk if this was right + how do i make the button to confirm your avalibilty? +*/ + +function getWeekday(date: Date): string { + const weekdays: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + return weekdays[date.getDay()]; +} + +function removeYear(str: string): string { + return str.substring(0, str.length - 5); +} + +const UpcomingDesignReviewsCard: React.FC = ({ designReview }) => { + const theme = useTheme(); + return ( + + + + + + + {designReview.wbsName} + + + + {} + + {getWeekday(designReview.dateScheduled) + + ', ' + + removeYear(datePipe(designReview.dateScheduled)) + + ' @ ' + + designReview.meetingTimes[0] + + 'pm'} + + + + {} + + {designReview.location} + + + + {designReview.status} + + + + ); +}; + +export default UpcomingDesignReviewsCard; diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx new file mode 100644 index 0000000000..4524b4354a --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -0,0 +1,64 @@ +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import DesignReviewCard from './DesignReviewCard'; +import { useAllDesignReviews } from '../../../hooks/design-reviews.hooks'; +import ErrorPage from '../../ErrorPage'; +import { wbsPipe } from 'shared'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ScrollablePageBlock from './ScrollablePageBlock'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import { Box } from '@mui/material'; +import { Error } from '@mui/icons-material'; + +const NoUpcomingDesignReviewsDisplay: React.FC = () => { + return ( + + } + heading={'No Upcoming Design Reviews'} + message={'There are no Upcoming Design Reviews to Display'} + /> + + ); +}; + +const UpcomingDesignReviews: React.FC = () => { + const { data: designReviews, isLoading, isError, error } = useAllDesignReviews(); + + if (isLoading || !designReviews) return ; + if (isError) return ; + + const filteredDesignReviews = designReviews.filter((review) => { + const scheduledDate = review.dateScheduled; + const currentDate = new Date(); + const inTwoWeeks = new Date(); + inTwoWeeks.setDate(currentDate.getDate() + 14); + return scheduledDate >= currentDate && scheduledDate <= inTwoWeeks && !review.status.includes('DONE'); + }); + + const fullDisplay = ( + + {designReviews.length === 0 ? ( + + ) : ( + designReviews.map((d) => ) + )} + + ); + + return fullDisplay; +}; + +export default UpcomingDesignReviews; From d0c8d8c161ce941e423faa30a1cd0c9e5c164257 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 21 Nov 2024 16:03:51 -0500 Subject: [PATCH 163/320] #3000-fixed styling --- src/frontend/src/components/NotificationCard.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index 407a17e250..d0fe319a9c 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -43,7 +43,9 @@ const NotificationCard: React.FC = ({ notification }) => From d2e9cdcf53cd7480d4553933d63c9f1851b6d72d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 22 Nov 2024 10:24:57 -0500 Subject: [PATCH 164/320] #2821-separated into two files --- .../components/OverdueWorkPackageView.tsx | 88 +++++++++++++++++ .../components/OverdueWorkPackages.tsx | 97 +------------------ 2 files changed, 90 insertions(+), 95 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx new file mode 100644 index 0000000000..c80c4de9bc --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -0,0 +1,88 @@ +import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import WorkPackageCard from './WorkPackageCard'; +import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; +import { WorkPackage } from 'shared'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; + +interface OverdueWorkPackagesViewProps { + workPackages: WorkPackage[]; +} + +const NoOverdueWPsDisplay: React.FC = () => { + return ( + } + heading={'Great Job Team!'} + message={'Your team has no overdue work packages!'} + /> + ); +}; + +const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { + const theme = useTheme(); + const isEmpty = workPackages.length === 0; + return ( + + + + Overdue Work Packages + + + + + + {isEmpty ? : workPackages.map((wp) => )} + + + + + ); +}; + +export default OverdueWorkPackagesView; diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx index f0fa8243e0..7e90c4e10a 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackages.tsx @@ -1,114 +1,21 @@ import React from 'react'; -import { AuthenticatedUser, isAdmin, Team, WorkPackage } from 'shared'; -import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; -import WorkPackageCard from './WorkPackageCard'; +import { AuthenticatedUser, isAdmin, Team } from 'shared'; import { useAllWorkPackages, useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { daysOverdue } from '../../../utils/datetime.utils'; -import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; -import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; -import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; - -interface OverdueWorkPackagesViewProps { - workPackages: WorkPackage[]; -} +import OverdueWorkPackagesView from './OverdueWorkPackageView'; interface OverdueWorkPackagesProps { user: AuthenticatedUser; } -const NoOverdueWPsDisplay: React.FC = () => { - return ( - } - heading={'Great Job Team!'} - message={'Your team has no overdue work packages!'} - /> - ); -}; - const getAllWbsNumFromTeams = (teams: Team[]) => { const projects = teams.map((team) => team.projects).flat(); const workPackages = projects.map((project) => project.workPackages).flat(); return workPackages.map((wp) => wp.wbsNum); }; -const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { - const theme = useTheme(); - const isEmpty = workPackages.length === 0; - return ( - - - - Overdue Work Packages - - - - - - {isEmpty ? ( - - ) : ( - workPackages.map((wp) => ( - <> - - - - )) - )} - - - - - ); -}; - const OverdueWorkPackages: React.FC = ({ user }) => { const teamsAsHead = user.teamsAsHead ?? []; const teamsAsLead = user.teamsAsLead ?? []; From 93728debdb715088a34411789853509a693fd39a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 22 Nov 2024 10:53:06 -0500 Subject: [PATCH 165/320] #2997-created migration --- .../migration.sql | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql diff --git a/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql b/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql new file mode 100644 index 0000000000..192243b385 --- /dev/null +++ b/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql @@ -0,0 +1,51 @@ +/* + Warnings: + + - You are about to drop the column `userId` on the `Notification` table. All the data in the column will be lost. + - Added the required column `text` to the `Announcement` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropForeignKey +ALTER TABLE "Notification" DROP CONSTRAINT "Notification_userId_fkey"; + +-- AlterTable +ALTER TABLE "Announcement" ADD COLUMN "text" TEXT NOT NULL; + +-- AlterTable +ALTER TABLE "Notification" DROP COLUMN "userId"; + +-- CreateTable +CREATE TABLE "_ReceivedAnnouncements" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_NotificationToUser" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_ReceivedAnnouncements_AB_unique" ON "_ReceivedAnnouncements"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ReceivedAnnouncements_B_index" ON "_ReceivedAnnouncements"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_NotificationToUser_AB_unique" ON "_NotificationToUser"("A", "B"); + +-- CreateIndex +CREATE INDEX "_NotificationToUser_B_index" ON "_NotificationToUser"("B"); + +-- AddForeignKey +ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("notificationId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; From 0771afc676ae9561a7da8dab8684b655dc45ead9 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Mon, 25 Nov 2024 13:28:41 -0500 Subject: [PATCH 166/320] #2801 uses util function and checks for active wps --- .../HomePage/components/TeamWorkPackageDisplay.tsx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 870104ddd0..919d75c26c 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -4,10 +4,11 @@ import Box from '@mui/material/Box'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; -import { AuthenticatedUser } from 'shared'; +import { AuthenticatedUser, WbsElementStatus } from 'shared'; import { useAllTeams } from '../../../hooks/teams.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; +import { isUserOnTeam } from '../../../utils/teams.utils'; interface TeamWorkPackageDisplayProps { user: AuthenticatedUser; @@ -39,18 +40,12 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) if (isLoading || !teams) return ; if (isError) return ; - const myTeams = teams.filter((team) => { - return ( - team.members.some((member) => member.userId === user.userId) || - team.leads.some((member) => member.userId === user.userId) || - team.head.userId === user.userId - ); - }); + const myTeams = teams.filter((team) => isUserOnTeam(team, user)); const workPackages = myTeams .map((team) => { return team.projects.map((project) => { - return project.workPackages; + return project.workPackages.filter((wp) => wp.status === WbsElementStatus.Active); }); }) .flat(2); From 83d83af21775be8ede3fd67ebf342dd3eaaff8a0 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Mon, 25 Nov 2024 13:42:42 -0500 Subject: [PATCH 167/320] #2803 merge conflict resolution --- .../src/pages/HomePage/components/ScrollablePageBlock.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index f143506c8f..5b8f85ead0 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,7 +1,6 @@ import { Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import React from 'react'; import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; -import { Stack } from '@mui/system'; interface ScrollablePageBlockProps { children: React.ReactNode; From a817b75603281d8d3c55f426dc4ec2070cfc8d26 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Mon, 25 Nov 2024 14:51:46 -0500 Subject: [PATCH 168/320] #2809 fixed scrollbar color in firefox --- .../pages/HomePage/components/WorkPackagesSelectionView.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 1fa0dfcb39..1c7c571cb6 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -96,7 +96,9 @@ const WorkPackagesSelectionView: React.FC = () => { borderRadius: '20px', border: '6px solid transparent', backgroundClip: 'content-box' - } + }, + scrollbarWidth: 'auto', + scrollbarColor: `${theme.palette.primary.main} transparent` }} > From d919f32a44bc7054ee5ac7b66817e539f5e6780a Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Mon, 25 Nov 2024 14:57:01 -0500 Subject: [PATCH 169/320] #2809 changed example on homepage to correct width --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 12ccf177b2..5dfdedc081 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -28,7 +28,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - + From 3c1291dc88c2ae69e63c5776b7fd9d4c0f4f67cb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 25 Nov 2024 22:27:25 -0500 Subject: [PATCH 170/320] #2803-added height to scrollable page block --- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 4 ++-- .../pages/HomePage/components/MyTeamsOverdueTasks.tsx | 4 ++-- .../pages/HomePage/components/ScrollablePageBlock.tsx | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index b42964168f..0b057bae61 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -7,7 +7,7 @@ import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; +import PageLayout from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; @@ -29,7 +29,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { - + diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index be44b470b1..bea84041d5 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -18,7 +18,7 @@ const NoOverdueTeamTaskDisplay: React.FC = () => { return ( = ({ user }) => { const overdueTasks = getOverdueTasks(tasks); return ( - + {overdueTasks.length === 0 ? ( ) : ( diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 5b8f85ead0..755d76ef3d 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,33 +1,33 @@ import { Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import React from 'react'; -import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; horizontal?: boolean; + height?: number; } -const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { +const ScrollablePageBlock: React.FC = ({ children, title, horizontal, height }) => { const theme = useTheme(); return ( {title && ( - + {title} )} Date: Tue, 26 Nov 2024 00:52:58 -0500 Subject: [PATCH 171/320] #2817-added button --- .../HomePage/components/DesignReviewCard.tsx | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index f977c83b1f..b46f3bb74a 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -5,24 +5,48 @@ import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; import { CalendarTodayOutlined } from '@mui/icons-material'; import { LocationOnOutlined } from '@mui/icons-material'; +import { useHistory } from 'react-router-dom'; +import { NERButton } from '../../../components/NERButton'; interface DesignReviewProps { designReview: DesignReview; } -/* - Questions: - is there a better way to choose a day as a string? - is there a better way to remove the year from a date? - what does the list of times mean? I just chose the first time and hard coded it to be a pm. idk if this was right - how do i make the button to confirm your avalibilty? -*/ +const DisplayStatus: React.FC = ({ designReview }) => { + const history = useHistory(); + return ( + <> + {!designReview.status ? ( + { + { + history.push(`${routes.CALENDAR}/${designReview.designReviewId}`); + } + }} + component={RouterLink} + > + Confirm Availibility + + ) : ( + {designReview.status} + )} + + ); +}; function getWeekday(date: Date): string { const weekdays: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; return weekdays[date.getDay()]; } +function getTime(list: number[]): string { + const weekdays: string[] = ['10am', '11am', '12pm', '1pm', '2pm', '3pm', '4pm', '5pm', '6pm', '7pm', '8pm', '9pm']; + return weekdays[list[0] - 1]; +} + function removeYear(str: string): string { return str.substring(0, str.length - 5); } @@ -57,8 +81,7 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview } ', ' + removeYear(datePipe(designReview.dateScheduled)) + ' @ ' + - designReview.meetingTimes[0] + - 'pm'} + getTime(designReview.meetingTimes)} @@ -68,7 +91,7 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview } - {designReview.status} + From 7c30f0a5038dac011498fdab2a7e9c8a1c28bce8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 26 Nov 2024 12:58:21 -0500 Subject: [PATCH 172/320] #2803 all components are dynamically sized --- .../src/pages/HomePage/LeadHomePage.tsx | 14 ++-- .../components/EmptyPageBlockDisplay.tsx | 15 +++- .../components/MyTeamsOverdueTasks.tsx | 25 ++----- .../components/ScrollablePageBlock.tsx | 68 +++++++++++-------- .../components/UnreviewedChangeRequests.tsx | 24 ++----- 5 files changed, 70 insertions(+), 76 deletions(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 0b057bae61..5df8829029 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -3,11 +3,11 @@ * See the LICENSE file in the repository root folder for details. */ -import { Box, Grid, Typography } from '@mui/material'; +import { Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; @@ -28,13 +28,11 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx index 49a43145f5..9af9fa3e9c 100644 --- a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx @@ -1,4 +1,4 @@ -import { Stack, Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import React from 'react'; interface EmptyPageBlockDisplayProps { @@ -9,11 +9,20 @@ interface EmptyPageBlockDisplayProps { const EmptyPageBlockDisplay: React.FC = ({ icon, heading, message }) => { return ( - + {icon} {heading} {message} - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index bea84041d5..95eab5b66b 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -5,7 +5,6 @@ import { useManyUserTasks } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import TeamTaskCard from './TeamTaskCard'; -import { Box } from '@mui/material'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; import { getOverdueTasks } from '../../../utils/task.utils'; @@ -14,23 +13,13 @@ interface MyTeamsOverdueTasksProps { user: AuthenticatedUser; } -const NoOverdueTeamTaskDisplay: React.FC = () => { +const NoOverdueTeamTaskDisplay = () => { return ( - - } - heading={"You're team is all caught up!"} - message={"You're team has no overdue tasks!"} - /> - + } + heading={"You're team is all caught up!"} + message={"You're team has no overdue tasks!"} + /> ); }; @@ -48,7 +37,7 @@ const MyTeamsOverdueTasks: React.FC = ({ user }) => { const overdueTasks = getOverdueTasks(tasks); return ( - + {overdueTasks.length === 0 ? ( ) : ( diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 755d76ef3d..a8b7c1e264 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,53 +1,63 @@ -import { Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Typography, useTheme } from '@mui/material'; import React from 'react'; interface ScrollablePageBlockProps { children: React.ReactNode; title?: String; horizontal?: boolean; - height?: number; } -const ScrollablePageBlock: React.FC = ({ children, title, horizontal, height }) => { +const ScrollablePageBlock: React.FC = ({ children, title, horizontal }) => { const theme = useTheme(); return ( - {title && ( - - {title} - - )} - - {children} - + {title && ( + + {title} + + )} + + {React.Children.map(children, (child) => ( + {child} + ))} + ); diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 0666900b00..2275b93301 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -9,7 +9,6 @@ import { AuthenticatedUser, ChangeRequest } from 'shared'; import ChangeRequestDetailCard from '../../../components/ChangeRequestDetailCard'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; -import { Box } from '@mui/material'; interface UnreviewedChangeRequestsProps { user: AuthenticatedUser; @@ -17,22 +16,11 @@ interface UnreviewedChangeRequestsProps { const NoUnreviewedChangeRequests: React.FC = () => { return ( - - } - heading={`You're all caught up!`} - message={'Uou have no unreviewed changre requests!'} - /> - + } + heading={`You're all caught up!`} + message={'Uou have no unreviewed changre requests!'} + /> ); }; @@ -54,7 +42,7 @@ const UnreviewedChangeRequests: React.FC = ({ use {crsToReview.length === 0 ? ( ) : ( - crsToReview.map((cr: ChangeRequest) => ) + crsToReview.map((cr: ChangeRequest) => ) )} ); From ba997b16958713a265356490e1cc582bc90a2cd3 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 26 Nov 2024 13:08:05 -0500 Subject: [PATCH 173/320] refactor lead page --- .../src/pages/HomePage/LeadHomePage.tsx | 12 ++-- .../components/EmptyPageBlockDisplay.tsx | 15 ++++- .../components/MyTeamsOverdueTasks.tsx | 21 ++---- .../components/ScrollablePageBlock.tsx | 66 +++++++++++-------- 4 files changed, 60 insertions(+), 54 deletions(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index a8f97fb977..1f1db38c74 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Box, Grid, Typography } from '@mui/material'; +import { Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -26,13 +26,11 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx index 49a43145f5..9af9fa3e9c 100644 --- a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx @@ -1,4 +1,4 @@ -import { Stack, Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import React from 'react'; interface EmptyPageBlockDisplayProps { @@ -9,11 +9,20 @@ interface EmptyPageBlockDisplayProps { const EmptyPageBlockDisplay: React.FC = ({ icon, heading, message }) => { return ( - + {icon} {heading} {message} - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx index be44b470b1..713a505700 100644 --- a/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx @@ -5,7 +5,6 @@ import { useManyUserTasks } from '../../../hooks/users.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import TeamTaskCard from './TeamTaskCard'; -import { Box } from '@mui/material'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; import { getOverdueTasks } from '../../../utils/task.utils'; @@ -16,21 +15,11 @@ interface MyTeamsOverdueTasksProps { const NoOverdueTeamTaskDisplay: React.FC = () => { return ( - - } - heading={"You're team is all caught up!"} - message={"You're team has no overdue tasks!"} - /> - + } + heading={"You're team is all caught up!"} + message={"You're team has no overdue tasks!"} + /> ); }; diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 5b8f85ead0..a8b7c1e264 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -1,6 +1,5 @@ -import { Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Typography, useTheme } from '@mui/material'; import React from 'react'; -import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; interface ScrollablePageBlockProps { children: React.ReactNode; @@ -13,41 +12,52 @@ const ScrollablePageBlock: React.FC = ({ children, tit return ( - {title && ( - - {title} - - )} - - {children} - + {title && ( + + {title} + + )} + + {React.Children.map(children, (child) => ( + {child} + ))} + ); From cd01bae3a687a78e3aba7744434853b13c983f70 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 26 Nov 2024 15:45:08 -0500 Subject: [PATCH 174/320] All componenets on homepage can now be dynamically sized --- .../src/pages/HomePage/AdminHomePage.tsx | 5 +-- .../src/pages/HomePage/GuestHomePage.tsx | 26 +++++++++++--- .../src/pages/HomePage/LeadHomePage.tsx | 4 +-- .../src/pages/HomePage/MemberHomePage.tsx | 12 +++---- .../components/GuestOrganizationInfo.tsx | 34 ++++++++++--------- .../components/MemberEncouragement.tsx | 9 +++-- .../src/pages/HomePage/components/MyTasks.tsx | 23 ++++--------- .../components/ScrollablePageBlock.tsx | 1 - 8 files changed, 63 insertions(+), 51 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4c1bf340f9..cf008c8020 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -3,11 +3,11 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; interface AdminHomePageProps { @@ -25,6 +25,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! + ); }; diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 15c9bc7658..57fd84f323 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -3,11 +3,11 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; -import PageLayout from '../../components/PageLayout'; +import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; import GuestOrganizationInfo from './components/GuestOrganizationInfo'; @@ -28,9 +28,25 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { Welcome, {user.firstName}! - - - + + + + + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 1f1db38c74..cacabfc2a2 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -26,8 +26,8 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - - + + diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index aae181a953..776720d37a 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Box, Grid, Typography } from '@mui/material'; +import { Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -26,13 +26,11 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx index 7c2a10c1fa..2cd6779fbe 100644 --- a/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx +++ b/src/frontend/src/pages/HomePage/components/GuestOrganizationInfo.tsx @@ -1,4 +1,4 @@ -import { Card, Icon, Typography, useTheme } from '@mui/material'; +import { Box, Card, Icon, Typography, useTheme } from '@mui/material'; import { Grid } from '@mui/material'; import { useCurrentOrganization } from '../../../hooks/organizations.hooks'; import React from 'react'; @@ -6,7 +6,6 @@ import { NERButton } from '../../../components/NERButton'; import { useAllLinkTypes, useAllUsefulLinks } from '../../../hooks/projects.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; -import { Stack } from '@mui/system'; interface GuestOrganizationInfoButtonProps { href?: string; @@ -50,26 +49,29 @@ const GuestOrganizationInfo = () => { padding: 2, bgcolor: theme.palette.background.paper, borderRadius: '1', - marginTop: 5 + height: '100%', + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between' }} variant="outlined" > - + {organization.name} - {organization.description} - - {usefulLinks.map((link) => ( - - ))} - - + {organization.description} + + + {usefulLinks.map((link) => ( + + ))} + ); }; diff --git a/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx index 285fa7411d..b17295b560 100644 --- a/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx +++ b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx @@ -7,14 +7,19 @@ import { useHistory } from 'react-router-dom'; const MemberEncouragement: React.FC = () => { const history = useHistory(); return ( - + diff --git a/src/frontend/src/pages/HomePage/components/MyTasks.tsx b/src/frontend/src/pages/HomePage/components/MyTasks.tsx index 12d2a4f8f0..bc90177c25 100644 --- a/src/frontend/src/pages/HomePage/components/MyTasks.tsx +++ b/src/frontend/src/pages/HomePage/components/MyTasks.tsx @@ -1,4 +1,4 @@ -import { Box, Stack } from '@mui/material'; +import { Stack } from '@mui/material'; import LoadingIndicator from '../../../components/LoadingIndicator'; import { useCurrentUser, useUserTasks } from '../../../hooks/users.hooks'; import TaskDetailCard from './TaskDetailCard'; @@ -9,21 +9,11 @@ import ScrollablePageBlock from './ScrollablePageBlock'; const NoTasksDisplay: React.FC = () => { return ( - - } - heading={"You're all caught up!"} - message={"You've completed all of your assigned tasks!"} - /> - + } + heading={"You're all caught up!"} + message={"You've completed all of your assigned tasks!"} + /> ); }; @@ -39,6 +29,7 @@ const MyTasks: React.FC = () => { if (userTasksIsLoading || !userTasks) return ; if (userTasksIsError) return ; + return ( {userTasks.length === 0 ? ( diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index a8b7c1e264..7ada729a8e 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -13,7 +13,6 @@ const ScrollablePageBlock: React.FC = ({ children, tit Date: Tue, 26 Nov 2024 17:38:03 -0500 Subject: [PATCH 175/320] #2997-creates only one notifcation and sends to multiple users --- .../src/controllers/users.controllers.ts | 12 ------- .../notifications.query-args.ts | 11 ++++++ src/backend/src/routes/users.routes.ts | 6 ---- src/backend/src/services/users.services.ts | 23 ------------ .../transformers/notification.transformer.ts | 13 +++++++ .../src/utils/homepage-notifications.utils.ts | 36 +++++++++++++++++++ src/backend/tests/unmocked/users.test.ts | 2 ++ src/shared/index.ts | 1 + src/shared/src/types/notification.types.ts | 5 +++ 9 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 src/backend/src/prisma-query-args/notifications.query-args.ts create mode 100644 src/backend/src/transformers/notification.transformer.ts create mode 100644 src/backend/src/utils/homepage-notifications.utils.ts create mode 100644 src/shared/src/types/notification.types.ts diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index efac029e88..5cfa740368 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -191,16 +191,4 @@ export default class UsersController { return next(error); } } - - static async sendNotitifcation(req: Request, res: Response, next: NextFunction) { - try { - const { userId } = req.params; - const { text, iconName } = req.body; - - const updatedUser = await UsersService.sendNotification(userId, text, iconName); - return res.status(200).json(updatedUser); - } catch (error: unknown) { - return next(error); - } - } } diff --git a/src/backend/src/prisma-query-args/notifications.query-args.ts b/src/backend/src/prisma-query-args/notifications.query-args.ts new file mode 100644 index 0000000000..9081f717cc --- /dev/null +++ b/src/backend/src/prisma-query-args/notifications.query-args.ts @@ -0,0 +1,11 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type NotificationQueryArgs = ReturnType; + +export const getNotificationQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + usersReceived: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 99f7802b40..2f95201f6f 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,11 +54,5 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); -userRouter.post( - `/:userId/notifications/send`, - nonEmptyString(body('text')), - nonEmptyString(body('iconName')), - UsersController.sendNotitifcation -); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index c617a642b1..4c7d2b4007 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -571,27 +571,4 @@ export default class UsersService { const resolvedTasks = await Promise.all(tasksPromises); return resolvedTasks.flat(); } - - static async sendNotification(userId: string, text: string, iconName: string) { - const requestedUser = await prisma.user.findUnique({ - where: { userId } - }); - - if (!requestedUser) throw new NotFoundException('User', userId); - - const createdNotification = await prisma.notification.create({ - data: { - text, - iconName - } - }); - - const udaptedUser = await prisma.user.update({ - where: { userId: requestedUser.userId }, - data: { unreadNotifications: { connect: createdNotification } }, - include: { unreadNotifications: true } - }); - - return udaptedUser; - } } diff --git a/src/backend/src/transformers/notification.transformer.ts b/src/backend/src/transformers/notification.transformer.ts new file mode 100644 index 0000000000..32666b151a --- /dev/null +++ b/src/backend/src/transformers/notification.transformer.ts @@ -0,0 +1,13 @@ +import { Prisma } from '@prisma/client'; +import { NotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; +import { Notification } from 'shared'; + +const notificationTransformer = (notification: Prisma.NotificationGetPayload): Notification => { + return { + notificationId: notification.notificationId, + text: notification.text, + iconName: notification.iconName + }; +}; + +export default notificationTransformer; diff --git a/src/backend/src/utils/homepage-notifications.utils.ts b/src/backend/src/utils/homepage-notifications.utils.ts new file mode 100644 index 0000000000..d823098da8 --- /dev/null +++ b/src/backend/src/utils/homepage-notifications.utils.ts @@ -0,0 +1,36 @@ +import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; +import prisma from '../prisma/prisma'; +import notificationTransformer from '../transformers/notification.transformer'; +import { NotFoundException } from './errors.utils'; + +const sendNotificationToUser = async (userId: string, notificationId: string, organizationId: string) => { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + const updatedUser = await prisma.user.update({ + where: { userId: requestedUser.userId }, + data: { unreadNotifications: { connect: { notificationId } } }, + include: { unreadNotifications: getNotificationQueryArgs(organizationId) } + }); + + return updatedUser.unreadNotifications.map(notificationTransformer); +}; + +export const sendNotificationToUsers = async (userIds: string[], text: string, iconName: string, organizationId: string) => { + const createdNotification = await prisma.notification.create({ + data: { + text, + iconName + } + }); + + const notificationPromises = userIds.map(async (userId) => { + return sendNotificationToUser(userId, createdNotification.notificationId, organizationId); + }); + + const resolvedNotifications = await Promise.all(notificationPromises); + return resolvedNotifications.flat(); +}; diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index b26a941bd5..dcf7ab3e3c 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -50,6 +50,7 @@ describe('User Tests', () => { }); }); + /* describe('Send Notification', () => { it('fails on invalid user id', async () => { await expect(async () => await UsersService.sendNotification('1', 'test', 'test')).rejects.toThrow( @@ -72,4 +73,5 @@ describe('User Tests', () => { expect(batmanWithNotifications?.unreadNotifications[1].text).toBe('test2'); }); }); + */ }); diff --git a/src/shared/index.ts b/src/shared/index.ts index 1d3f6c399f..763ce5e09e 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -11,6 +11,7 @@ export * from './src/types/team-types'; export * from './src/types/task-types'; export * from './src/types/reimbursement-requests-types'; export * from './src/types/design-review-types'; +export * from './src/types/notification.types'; export * from './src/validate-wbs'; export * from './src/date-utils'; diff --git a/src/shared/src/types/notification.types.ts b/src/shared/src/types/notification.types.ts new file mode 100644 index 0000000000..e4419ef2ed --- /dev/null +++ b/src/shared/src/types/notification.types.ts @@ -0,0 +1,5 @@ +export interface Notification { + notificationId: string; + text: string; + iconName: string; +} From 598d8fe9e58e6ab9d83bcaef37c154eedfe46eeb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 26 Nov 2024 20:25:41 -0500 Subject: [PATCH 176/320] created tests for sending notifications --- .../src/utils/homepage-notifications.utils.ts | 7 +-- .../tests/unmocked/notifications.test.ts | 49 +++++++++++++++++++ src/backend/tests/unmocked/users.test.ts | 26 ---------- 3 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 src/backend/tests/unmocked/notifications.test.ts diff --git a/src/backend/src/utils/homepage-notifications.utils.ts b/src/backend/src/utils/homepage-notifications.utils.ts index d823098da8..f795064c28 100644 --- a/src/backend/src/utils/homepage-notifications.utils.ts +++ b/src/backend/src/utils/homepage-notifications.utils.ts @@ -24,13 +24,14 @@ export const sendNotificationToUsers = async (userIds: string[], text: string, i data: { text, iconName - } + }, + ...getNotificationQueryArgs(organizationId) }); const notificationPromises = userIds.map(async (userId) => { return sendNotificationToUser(userId, createdNotification.notificationId, organizationId); }); - const resolvedNotifications = await Promise.all(notificationPromises); - return resolvedNotifications.flat(); + await Promise.all(notificationPromises); + return notificationTransformer(createdNotification); }; diff --git a/src/backend/tests/unmocked/notifications.test.ts b/src/backend/tests/unmocked/notifications.test.ts new file mode 100644 index 0000000000..eea07b47e4 --- /dev/null +++ b/src/backend/tests/unmocked/notifications.test.ts @@ -0,0 +1,49 @@ +import { Organization } from '@prisma/client'; +import { createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import { batmanAppAdmin, wonderwomanGuest } from '../test-data/users.test-data'; +import { NotFoundException } from '../../src/utils/errors.utils'; +import { sendNotificationToUsers } from '../../src/utils/homepage-notifications.utils'; +import prisma from '../../src/prisma/prisma'; + +describe('Notification Tests', () => { + let orgId: string; + let organization: Organization; + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + }); + + afterEach(async () => { + await resetUsers(); + }); + + describe('Send Notification', () => { + it('fails on invalid user id', async () => { + await expect(async () => await sendNotificationToUsers(['1'], 'test', 'test', orgId)).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + it('Succeeds and sends notification to user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const testWonderWoman = await createTestUser(wonderwomanGuest, orgId); + + const notification = await sendNotificationToUsers([testBatman.userId, testWonderWoman.userId], 'test', 'icon', orgId); + + const batmanWithNotifications = await prisma.user.findUnique({ + where: { userId: testBatman.userId }, + include: { unreadNotifications: true } + }); + const wonderWomanWithNotifications = await prisma.user.findUnique({ + where: { userId: testWonderWoman.userId }, + include: { unreadNotifications: true } + }); + + expect(batmanWithNotifications?.unreadNotifications).toHaveLength(1); + expect(batmanWithNotifications?.unreadNotifications[0]).toStrictEqual(notification); + + expect(wonderWomanWithNotifications?.unreadNotifications).toHaveLength(1); + expect(wonderWomanWithNotifications?.unreadNotifications[0]).toStrictEqual(notification); + }); + }); +}); diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index dcf7ab3e3c..c13a0c857f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,7 +3,6 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; -import prisma from '../../src/prisma/prisma'; describe('User Tests', () => { let orgId: string; @@ -49,29 +48,4 @@ describe('User Tests', () => { expect(userTasks).toStrictEqual([batmanTask, batmanTask]); }); }); - - /* - describe('Send Notification', () => { - it('fails on invalid user id', async () => { - await expect(async () => await UsersService.sendNotification('1', 'test', 'test')).rejects.toThrow( - new NotFoundException('User', '1') - ); - }); - - it('Succeeds and sends notification to user', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await UsersService.sendNotification(testBatman.userId, 'test1', 'test1'); - await UsersService.sendNotification(testBatman.userId, 'test2', 'test2'); - - const batmanWithNotifications = await prisma.user.findUnique({ - where: { userId: testBatman.userId }, - include: { unreadNotifications: true } - }); - - expect(batmanWithNotifications?.unreadNotifications).toHaveLength(2); - expect(batmanWithNotifications?.unreadNotifications[0].text).toBe('test1'); - expect(batmanWithNotifications?.unreadNotifications[1].text).toBe('test2'); - }); - }); - */ }); From c6d44a77714e8a789fe22d0ba0def946d37ee82b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 27 Nov 2024 11:01:44 -0500 Subject: [PATCH 177/320] fixed wrapping issues on member encouragement --- .../HomePage/components/MemberEncouragement.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx index b17295b560..dc117e16d3 100644 --- a/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx +++ b/src/frontend/src/pages/HomePage/components/MemberEncouragement.tsx @@ -23,7 +23,15 @@ const MemberEncouragement: React.FC = () => { } }} > - + Already a member? @@ -36,7 +44,7 @@ const MemberEncouragement: React.FC = () => { { history.push(routes.TEAMS); }} From e48a579fbcbd72003081d54b3ad7bbc0287e0342 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 29 Nov 2024 09:42:39 -0500 Subject: [PATCH 178/320] #2809 removed redundant code and used addWeeks func --- .../components/WorkPackagesSelectionView.tsx | 14 +++----------- src/frontend/src/utils/work-package.utils.ts | 4 ++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 1c7c571cb6..8f9faac200 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -27,7 +27,7 @@ const NoWorkPackages: React.FC = () => { > } - heading={`You're all caught up!`} + heading={`You're all set!`} message={'You have no pending work packages of this type!'} /> @@ -66,14 +66,6 @@ const WorkPackagesSelectionView: React.FC = () => { const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); - const handleChange = (event: number) => { - setCurrentDisplayedWPs(event); - }; - - const getWorkPackages = (key: number): WorkPackage[] => { - return workPackages[key][1]; - }; - const workPackagesDisplay = (workPackages: WorkPackage[]) => ( { ); - const currentWps = getWorkPackages(currentDisplayedWPs); + const [, currentWps] = workPackages[currentDisplayedWPs]; //getWorkPackages(currentDisplayedWPs); return ( wp[0])} - onSelect={handleChange} + onSelect={setCurrentDisplayedWPs} firstSelected={currentDisplayedWPs} /> {currentWps.length === 0 ? : workPackagesDisplay(currentWps)} diff --git a/src/frontend/src/utils/work-package.utils.ts b/src/frontend/src/utils/work-package.utils.ts index ea85fc8965..5e39ad6b7d 100644 --- a/src/frontend/src/utils/work-package.utils.ts +++ b/src/frontend/src/utils/work-package.utils.ts @@ -1,4 +1,4 @@ -import { WbsElement, WbsElementStatus, wbsPipe, WorkPackage } from 'shared'; +import { addWeeksToDate, WbsElement, WbsElementStatus, wbsPipe, WorkPackage } from 'shared'; import { WPFormType } from './form'; export const getTitleFromFormType = (formType: WPFormType, wbsElement: WbsElement): string => { @@ -30,7 +30,7 @@ export const getUpcomingWorkPackages = (wpList: WorkPackage[]): WorkPackage[] => return wpList.filter( (wp) => wp.status !== WbsElementStatus.Complete && - new Date(wp.startDate) <= new Date(new Date().getTime() + 14 * 24 * 60 * 60 * 1000) && + new Date(wp.startDate) <= addWeeksToDate(new Date(), 2) && new Date(wp.startDate) >= new Date() ); }; From 9dfafdeff7a34593db552f46316d6d66e702882e Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 29 Nov 2024 15:11:46 -0500 Subject: [PATCH 179/320] #2801 remove duplicate WPs --- .../HomePage/components/TeamWorkPackageDisplay.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index 919d75c26c..f9b6f86a91 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -4,7 +4,7 @@ import Box from '@mui/material/Box'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; -import { AuthenticatedUser, WbsElementStatus } from 'shared'; +import { AuthenticatedUser, WbsElementStatus, WorkPackage } from 'shared'; import { useAllTeams } from '../../../hooks/teams.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; @@ -43,12 +43,21 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) const myTeams = teams.filter((team) => isUserOnTeam(team, user)); const workPackages = myTeams + //convert list of teams into list of work packages in projects in those teams .map((team) => { return team.projects.map((project) => { return project.workPackages.filter((wp) => wp.status === WbsElementStatus.Active); }); }) - .flat(2); + //flatten into 1 dimensional list of work packages + .flat(2) + //remove duplicate work packages + .reduce((acc: WorkPackage[], wp: WorkPackage) => { + if (acc.filter((addedWp) => addedWp.id === wp.id).length === 0) { + acc.push(wp); + } + return acc; + }, []); return ( From f15b734b872c89099d6b69fd944b05d6b7c7cc62 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 29 Nov 2024 15:18:25 -0500 Subject: [PATCH 180/320] #2801 style error fix --- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index a8bcf91339..cacabfc2a2 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; interface LeadHomePageProps { From 21a90bccaaa7b01bd85e345efd9aa31174384956 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 29 Nov 2024 15:26:00 -0500 Subject: [PATCH 181/320] #2803 changed title to Change Requests to Review --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - src/frontend/src/pages/HomePage/LeadHomePage.tsx | 1 - .../src/pages/HomePage/components/UnreviewedChangeRequests.tsx | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 655868423b..cf008c8020 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface AdminHomePageProps { user: AuthenticatedUser; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 47cab9c697..cacabfc2a2 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; interface LeadHomePageProps { diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 0666900b00..eab46f0cf8 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -50,7 +50,7 @@ const UnreviewedChangeRequests: React.FC = ({ use const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); return ( - + {crsToReview.length === 0 ? ( ) : ( From bef883a60b82f164e9dfc0fdd2e9e7ec27d65d29 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 29 Nov 2024 21:32:12 -0500 Subject: [PATCH 182/320] #3000-animation is working --- src/backend/src/prisma/seed.ts | 5 +-- .../src/components/NotificationAlert.tsx | 31 +++++++++++++++++++ .../src/components/NotificationCard.tsx | 1 + .../src/pages/HomePage/AdminHomePage.tsx | 16 ++-------- src/frontend/src/pages/HomePage/Home.tsx | 26 ++++++++++------ 5 files changed, 53 insertions(+), 26 deletions(-) create mode 100644 src/frontend/src/components/NotificationAlert.tsx diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index 451cb37462..19c94e6e2d 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -33,6 +33,7 @@ import { writeFileSync } from 'fs'; import WorkPackageTemplatesService from '../services/work-package-template.services'; import RecruitmentServices from '../services/recruitment.services'; import OrganizationsService from '../services/organizations.services'; +import { sendNotificationToUsers } from '../utils/homepage-notifications.utils'; const prisma = new PrismaClient(); @@ -1894,8 +1895,8 @@ const performSeed: () => Promise = async () => { await RecruitmentServices.createFaq(batman, 'How many developers are working on FinishLine?', '178 as of 2024', ner); - await UsersService.sendNotification(thomasEmrax.userId, 'testing notifications', 'star'); - await UsersService.sendNotification(thomasEmrax.userId, 'testing notifications #2', 'star'); + await sendNotificationToUsers([thomasEmrax.userId], 'test', 'star', ner.organizationId); + await sendNotificationToUsers([thomasEmrax.userId], 'test2', 'star', ner.organizationId); }; performSeed() diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx new file mode 100644 index 0000000000..9b60b48760 --- /dev/null +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -0,0 +1,31 @@ +import { Box } from '@mui/material'; +import React from 'react'; +import { User } from 'shared'; +import NotificationCard from './NotificationCard'; +import { useUserNotifications } from '../hooks/users.hooks'; + +interface NotificationAlertProps { + user: User; +} + +const NotificationAlert: React.FC = ({ user }) => { + const { data: notifications } = useUserNotifications(user.userId); + + const currentNotification = notifications && notifications.length > 0 ? notifications[0] : undefined; + + return ( + + {currentNotification && } + + ); +}; + +export default NotificationAlert; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index d0fe319a9c..432517fa98 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -9,6 +9,7 @@ interface NotificationCardProps { const NotificationCard: React.FC = ({ notification }) => { const theme = useTheme(); + return ( { const { isLoading, isError, error, data: userSettingsData } = useSingleUserSettings(user.userId); - const { - data: notifications, - isLoading: notificationsIsLoading, - error: notificationsError, - isError: notificationsIsError - } = useUserNotifications(user.userId); - if (isLoading || !userSettingsData || notificationsIsLoading || !notifications) return ; + if (isLoading || !userSettingsData) return ; if (isError) return ; - if (notificationsIsError) return ; - - const currentNotification = notifications.length > 0 ? notifications[0] : undefined; - if (!currentNotification) return ; return ( - {currentNotification && } Welcome, {user.firstName}! diff --git a/src/frontend/src/pages/HomePage/Home.tsx b/src/frontend/src/pages/HomePage/Home.tsx index 961430d92e..76db11f05a 100644 --- a/src/frontend/src/pages/HomePage/Home.tsx +++ b/src/frontend/src/pages/HomePage/Home.tsx @@ -11,20 +11,26 @@ import { useState } from 'react'; import MemberHomePage from './MemberHomePage'; import LeadHomePage from './LeadHomePage'; import AdminHomePage from './AdminHomePage'; +import NotificationAlert from '../../components/NotificationAlert'; const Home = () => { const user = useCurrentUser(); const [onMemberHomePage, setOnMemberHomePage] = useState(false); - return isGuest(user.role) && !onMemberHomePage ? ( - - ) : isMember(user.role) ? ( - - ) : isLead(user.role) ? ( - - ) : isAdmin(user.role) ? ( - - ) : ( - + return ( + <> + {!onMemberHomePage && } + {isGuest(user.role) && !onMemberHomePage ? ( + + ) : isMember(user.role) ? ( + + ) : isLead(user.role) ? ( + + ) : isAdmin(user.role) ? ( + + ) : ( + + )} + ); }; From 18931efe74ebcd0734799baae82158c4de2bca0d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 2 Dec 2024 14:32:31 -0500 Subject: [PATCH 183/320] #2809-fixed dynamic sizing --- .../src/pages/HomePage/AdminHomePage.tsx | 12 +- .../components/WorkPackagesSelectionView.tsx | 129 ++++++++++-------- 2 files changed, 76 insertions(+), 65 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 5dfdedc081..f1e5ce9f12 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography, Box, Grid } from '@mui/material'; +import { Typography, Grid } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -26,13 +26,11 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 8f9faac200..b4f3459675 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -1,12 +1,11 @@ -import { RoleEnum, wbsPipe, WorkPackage } from 'shared'; -import { Box, Grid, useTheme } from '@mui/material'; +import { WorkPackage } from 'shared'; +import { Box, Card, CardContent, useTheme } from '@mui/material'; import { getInProgressWorkPackages, getOverdueWorkPackages, getUpcomingWorkPackages } from '../../../utils/work-package.utils'; import { useCurrentUser } from '../../../hooks/users.hooks'; -import PageBlock from '../../../layouts/PageBlock'; import WorkPackageCard from './WorkPackageCard'; import WorkPackageSelect from './WorkPackageSelect'; import React, { useState } from 'react'; @@ -15,22 +14,11 @@ import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutli const NoWorkPackages: React.FC = () => { return ( - - } - heading={`You're all set!`} - message={'You have no pending work packages of this type!'} - /> - + } + heading={`You're all set!`} + message={'You have no pending work packages of this type!'} + /> ); }; @@ -66,56 +54,81 @@ const WorkPackagesSelectionView: React.FC = () => { const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); - const workPackagesDisplay = (workPackages: WorkPackage[]) => ( + const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( - - {workPackages.map((wp) => ( - - - - - - ))} - + {workPackages.map((wp) => ( + + + + ))} ); const [, currentWps] = workPackages[currentDisplayedWPs]; //getWorkPackages(currentDisplayedWPs); return ( - - wp[0])} - onSelect={setCurrentDisplayedWPs} - firstSelected={currentDisplayedWPs} - /> - {currentWps.length === 0 ? : workPackagesDisplay(currentWps)} - + + + wp[0])} + onSelect={setCurrentDisplayedWPs} + firstSelected={currentDisplayedWPs} + /> + + {currentWps.length === 0 ? : WorkPackagesDisplay(currentWps)} + + + ); }; From 76ca13b0b217fb8904bb360f034407e851faebf4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 2 Dec 2024 18:36:24 -0500 Subject: [PATCH 184/320] #2801-Fixed dynamic sizing --- .../src/pages/HomePage/MemberHomePage.tsx | 6 +++- .../components/ScrollablePageBlock.tsx | 3 +- .../components/TeamWorkPackageDisplay.tsx | 32 ++++--------------- 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 776720d37a..03c7ef3e65 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -10,6 +10,7 @@ import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MyTasks from './components/MyTasks'; +import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; interface MemberHomePageProps { user: AuthenticatedUser; @@ -26,10 +27,13 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! - + + + + ); diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 7ada729a8e..6a9b87adc2 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -34,7 +34,6 @@ const ScrollablePageBlock: React.FC = ({ children, tit sx={{ mt: 2, display: 'flex', - flex: 1, flexDirection: horizontal ? 'row' : 'column', gap: 2, overflowX: horizontal ? 'auto' : 'hidden', @@ -54,7 +53,7 @@ const ScrollablePageBlock: React.FC = ({ children, tit }} > {React.Children.map(children, (child) => ( - {child} + {child} ))} diff --git a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx index f9b6f86a91..202bb32504 100644 --- a/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamWorkPackageDisplay.tsx @@ -1,6 +1,4 @@ import WorkPackageCard from './WorkPackageCard'; -import { wbsPipe } from '../../../utils/pipes'; -import Box from '@mui/material/Box'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; @@ -16,21 +14,11 @@ interface TeamWorkPackageDisplayProps { const NoTeamWorkPackagesDisplay: React.FC = () => { return ( - - } - heading={'No Active Work Packages'} - message={'There are no active work packages assigned to your team!'} - /> - + } + heading={'No Active Work Packages'} + message={'There are no active work packages assigned to your team!'} + /> ); }; @@ -61,15 +49,7 @@ const TeamWorkPackageDisplay: React.FC = ({ user }) return ( - {workPackages.length === 0 ? ( - - ) : ( - workPackages.map((wp) => ( - - - - )) - )} + {workPackages.length === 0 ? : workPackages.map((wp) => )} ); }; From b50eabbf3df396723ccb627281d37a379d68db5e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 2 Dec 2024 19:02:20 -0500 Subject: [PATCH 185/320] #2803-adding to home page --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 7 ++++++- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 14 +++++++++++--- .../HomePage/components/ScrollablePageBlock.tsx | 1 - .../components/UnreviewedChangeRequests.tsx | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index cf008c8020..603a91c0bb 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,7 +26,11 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index cacabfc2a2..82bceaa168 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; interface LeadHomePageProps { @@ -26,9 +27,16 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - - - + + + + + + + + + + diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 7ada729a8e..b8a5faf350 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -34,7 +34,6 @@ const ScrollablePageBlock: React.FC = ({ children, tit sx={{ mt: 2, display: 'flex', - flex: 1, flexDirection: horizontal ? 'row' : 'column', gap: 2, overflowX: horizontal ? 'auto' : 'hidden', diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx index 29311ae994..e8db5cbf8c 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx @@ -38,7 +38,7 @@ const UnreviewedChangeRequests: React.FC = ({ use const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); return ( - + {crsToReview.length === 0 ? ( ) : ( From 2d494e10b1f9e230140d0e2993cc864c2cce749c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 2 Dec 2024 22:06:36 -0500 Subject: [PATCH 186/320] fixed flex issue --- src/frontend/src/pages/HomePage/MemberHomePage.tsx | 2 +- .../pages/HomePage/components/EmptyPageBlockDisplay.tsx | 1 + src/frontend/src/pages/HomePage/components/MyTasks.tsx | 9 +++------ .../pages/HomePage/components/ScrollablePageBlock.tsx | 5 ++--- .../src/pages/HomePage/components/TaskDetailCard.tsx | 1 + .../src/pages/HomePage/components/TeamTaskCard.tsx | 1 + .../src/pages/HomePage/components/WorkPackageCard.tsx | 1 + 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 03c7ef3e65..9cc45f7899 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -31,7 +31,7 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { - + diff --git a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx index 9af9fa3e9c..1cb8301b13 100644 --- a/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/EmptyPageBlockDisplay.tsx @@ -11,6 +11,7 @@ const EmptyPageBlockDisplay: React.FC = ({ icon, hea return ( { {userTasks.length === 0 ? ( ) : ( - - {userTasks.map((task, index) => { - return ; - })} - + userTasks.map((task, index) => { + return ; + }) )} ); diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 6a9b87adc2..25045b6d39 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -36,6 +36,7 @@ const ScrollablePageBlock: React.FC = ({ children, tit display: 'flex', flexDirection: horizontal ? 'row' : 'column', gap: 2, + height: '100%', overflowX: horizontal ? 'auto' : 'hidden', overflowY: horizontal ? 'hidden' : 'auto', '&::-webkit-scrollbar': { @@ -52,9 +53,7 @@ const ScrollablePageBlock: React.FC = ({ children, tit } }} > - {React.Children.map(children, (child) => ( - {child} - ))} + {children} diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 66a323b852..55d0f4e04c 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -59,6 +59,7 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => onMouseLeave={() => setHover(false)} sx={{ minWidth: 'fit-content', + minHeight: 'fit-content', mr: 3, background: theme.palette.background.default, border: taskOverdue && hover ? '1px solid red' : undefined diff --git a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx index 7b2b00de29..76b80e93c3 100644 --- a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx @@ -29,6 +29,7 @@ const TeamTaskCard: React.FC = ({ task, taskNumber }) => { variant="outlined" sx={{ minWidth: 'fit-content', + minHeight: 'fit-content', mr: 3, background: theme.palette.background.default, borderRadius: 2 diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 57814b4f3f..5419731678 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -40,6 +40,7 @@ const WorkPackageCard = ({ wp }: { wp: WorkPackage }) => { Date: Wed, 4 Dec 2024 13:26:27 -0500 Subject: [PATCH 187/320] added min height to projects card --- .../src/pages/HomePage/components/FeaturedProjectsCard.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx index 2de9f39073..ddc6bc25eb 100644 --- a/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx +++ b/src/frontend/src/pages/HomePage/components/FeaturedProjectsCard.tsx @@ -16,6 +16,7 @@ const FeaturedProjectsCard: React.FC = ({ project }) => { variant="outlined" sx={{ minWidth: 'fit-content', + minHeight: 'fit-content', mr: 3, background: theme.palette.background.default }} From 580f4173259edce2d0a9ec89f87fa405f9aa3cc1 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 4 Dec 2024 19:26:22 -0500 Subject: [PATCH 188/320] #2817 updated conditions that show reviews --- .../src/pages/HomePage/LeadHomePage.tsx | 2 +- .../HomePage/components/DesignReviewCard.tsx | 12 ++++++---- .../components/UpcomingDesignReviews.tsx | 23 +++++++++++++++---- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index d8e6a0cab7..b28e1d502f 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -31,7 +31,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { - +
diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index b46f3bb74a..1edea6d6e1 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -1,5 +1,5 @@ import { Box, Card, CardContent, Link, Stack, Typography, useTheme } from '@mui/material'; -import { DesignReview } from 'shared'; +import { DesignReview, User } from 'shared'; import { datePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; @@ -10,13 +10,15 @@ import { NERButton } from '../../../components/NERButton'; interface DesignReviewProps { designReview: DesignReview; + user: User; } -const DisplayStatus: React.FC = ({ designReview }) => { +const DisplayStatus: React.FC = ({ designReview, user }) => { const history = useHistory(); return ( + //is this what we want <> - {!designReview.status ? ( + {!designReview.status || !designReview.confirmedMembers.includes(user) ? ( = ({ designReview }) => { +const UpcomingDesignReviewsCard: React.FC = ({ designReview, user }) => { const theme = useTheme(); return ( = ({ designReview }
- + diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 4524b4354a..5c9128c0aa 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -6,13 +6,17 @@ import DesignReviewCard from './DesignReviewCard'; import { useAllDesignReviews } from '../../../hooks/design-reviews.hooks'; import ErrorPage from '../../ErrorPage'; -import { wbsPipe } from 'shared'; +import { AuthenticatedUser, wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import { Box } from '@mui/material'; import { Error } from '@mui/icons-material'; +interface UpcomingDesignReviewProps { + user: AuthenticatedUser; +} + const NoUpcomingDesignReviewsDisplay: React.FC = () => { return ( { ); }; -const UpcomingDesignReviews: React.FC = () => { +const UpcomingDesignReviews: React.FC = ({ user }) => { const { data: designReviews, isLoading, isError, error } = useAllDesignReviews(); if (isLoading || !designReviews) return ; @@ -45,7 +49,18 @@ const UpcomingDesignReviews: React.FC = () => { const currentDate = new Date(); const inTwoWeeks = new Date(); inTwoWeeks.setDate(currentDate.getDate() + 14); - return scheduledDate >= currentDate && scheduledDate <= inTwoWeeks && !review.status.includes('DONE'); + + /* + Since this is on the leads page, leads shouldn't see all design reviews here. + We should filter the design reviews on whether the current user is found the the + design review's required or optional members field +*/ + return ( + scheduledDate >= currentDate && + scheduledDate <= inTwoWeeks && + !review.status.includes('DONE') && + (review.requiredMembers.includes(user) || review.optionalMembers.includes(user)) + ); }); const fullDisplay = ( @@ -53,7 +68,7 @@ const UpcomingDesignReviews: React.FC = () => { {designReviews.length === 0 ? ( ) : ( - designReviews.map((d) => ) + designReviews.map((d) => ) )} ); From 52fab519af4ccb36e84cd59ad73328d8818ef669 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Wed, 4 Dec 2024 20:03:40 -0500 Subject: [PATCH 189/320] #2817 some stuff --- .../HomePage/components/DesignReviewCard.tsx | 18 ++++++------------ .../components/UpcomingDesignReviews.tsx | 7 +------ 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 1edea6d6e1..7c826de6ba 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -3,10 +3,11 @@ import { DesignReview, User } from 'shared'; import { datePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; -import { CalendarTodayOutlined } from '@mui/icons-material'; +import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; import { LocationOnOutlined } from '@mui/icons-material'; import { useHistory } from 'react-router-dom'; import { NERButton } from '../../../components/NERButton'; +import { meetingStartTimePipe } from '../../../../../backend/src/utils/design-reviews.utils'; interface DesignReviewProps { designReview: DesignReview; @@ -24,9 +25,7 @@ const DisplayStatus: React.FC = ({ designReview, user }) => { size="small" sx={{ color: 'white' }} onClick={() => { - { - history.push(`${routes.CALENDAR}/${designReview.designReviewId}`); - } + history.push(`${routes.CALENDAR}/${designReview.designReviewId}`); }} component={RouterLink} > @@ -44,11 +43,6 @@ function getWeekday(date: Date): string { return weekdays[date.getDay()]; } -function getTime(list: number[]): string { - const weekdays: string[] = ['10am', '11am', '12pm', '1pm', '2pm', '3pm', '4pm', '5pm', '6pm', '7pm', '8pm', '9pm']; - return weekdays[list[0] - 1]; -} - function removeYear(str: string): string { return str.substring(0, str.length - 5); } @@ -77,13 +71,13 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, - {} + {} {getWeekday(designReview.dateScheduled) + ', ' + removeYear(datePipe(designReview.dateScheduled)) + ' @ ' + - getTime(designReview.meetingTimes)} + meetingStartTimePipe(designReview.meetingTimes)} @@ -93,7 +87,7 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, - + diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 5c9128c0aa..bf1097b53d 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -22,7 +22,7 @@ const NoUpcomingDesignReviewsDisplay: React.FC = () => { = ({ user }) => const inTwoWeeks = new Date(); inTwoWeeks.setDate(currentDate.getDate() + 14); - /* - Since this is on the leads page, leads shouldn't see all design reviews here. - We should filter the design reviews on whether the current user is found the the - design review's required or optional members field -*/ return ( scheduledDate >= currentDate && scheduledDate <= inTwoWeeks && From c8331366d8762fc3329b678dbe57141f63a56542 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Wed, 4 Dec 2024 20:08:23 -0500 Subject: [PATCH 190/320] #2803-adjusted home pages --- .github/workflows/production-build.yml | 25 ++++ .../controllers/organizations.controllers.ts | 120 ++++++++++++++++++ .../components/ChangeRequestDetailCard.tsx | 12 +- .../src/pages/HomePage/LeadHomePage.tsx | 26 ++-- .../components/ScrollablePageBlock.tsx | 4 +- .../HomePage/components/TeamTaskCard.tsx | 1 + 6 files changed, 174 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/production-build.yml create mode 100644 src/backend/src/controllers/organizations.controllers.ts diff --git a/.github/workflows/production-build.yml b/.github/workflows/production-build.yml new file mode 100644 index 0000000000..4af27918e1 --- /dev/null +++ b/.github/workflows/production-build.yml @@ -0,0 +1,25 @@ + +name: Production Build + +on: + push: + branches: + - main + - multitenancy + +jobs: + run-tests: + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.17.1 + cache: 'yarn' + - name: Yarn Install + run: yarn install + - name: Run Tests + run: yarn containerize diff --git a/src/backend/src/controllers/organizations.controllers.ts b/src/backend/src/controllers/organizations.controllers.ts new file mode 100644 index 0000000000..e905a721b9 --- /dev/null +++ b/src/backend/src/controllers/organizations.controllers.ts @@ -0,0 +1,120 @@ +import { NextFunction, Request, Response } from 'express'; +import OrganizationsService from '../services/organizations.services'; +import { HttpException } from '../utils/errors.utils'; + +export default class OrganizationsController { + static async getCurrentOrganization(req: Request, res: Response, next: NextFunction) { + try { + const organization = await OrganizationsService.getCurrentOrganization(req.organization.organizationId); + res.status(200).json(organization); + } catch (error: unknown) { + next(error); + } + } + + static async setUsefulLinks(req: Request, res: Response, next: NextFunction) { + try { + const { links } = req.body; + const newLinks = await OrganizationsService.setUsefulLinks(req.currentUser, req.organization.organizationId, links); + res.status(200).json(newLinks); + } catch (error: unknown) { + next(error); + } + } + + static async setImages(req: Request, res: Response, next: NextFunction) { + try { + const { applyInterestImage = [], exploreAsGuestImage = [] } = req.files as { + applyInterestImage?: Express.Multer.File[]; + exploreAsGuestImage?: Express.Multer.File[]; + }; + + const applyInterestFile = applyInterestImage[0] || null; + const exploreAsGuestFile = exploreAsGuestImage[0] || null; + + const newImages = await OrganizationsService.setImages( + applyInterestFile, + exploreAsGuestFile, + req.currentUser, + req.organization + ); + + res.status(200).json(newImages); + } catch (error: unknown) { + next(error); + } + } + static async getAllUsefulLinks(req: Request, res: Response, next: NextFunction) { + try { + const links = await OrganizationsService.getAllUsefulLinks(req.organization.organizationId); + res.status(200).json(links); + } catch (error: unknown) { + next(error); + } + } + + static async getOrganizationImages(req: Request, res: Response, next: NextFunction) { + try { + const images = await OrganizationsService.getOrganizationImages(req.organization.organizationId); + res.status(200).json(images); + } catch (error: unknown) { + next(error); + } + } + + static async setOrganizationFeaturedProjects(req: Request, res: Response, next: NextFunction) { + try { + const { projectIds } = req.body; + const featuredProjects = await OrganizationsService.setFeaturedProjects(projectIds, req.organization, req.currentUser); + + res.status(200).json(featuredProjects); + } catch (error: unknown) { + next(error); + } + } + + static async setLogoImage(req: Request, res: Response, next: NextFunction) { + try { + if (!req.file) { + throw new HttpException(400, 'Invalid or undefined image data'); + } + const updatedOrg = await OrganizationsService.setLogoImage(req.file, req.currentUser, req.organization); + + return res.status(200).json(updatedOrg); + } catch (error: unknown) { + return next(error); + } + } + + static async getOrganizationLogoImage(req: Request, res: Response, next: NextFunction) { + try { + const logoImageId = await OrganizationsService.getLogoImage(req.organization.organizationId); + res.status(200).json(logoImageId); + } catch (error: unknown) { + next(error); + } + } + + static async setOrganizationDescription(req: Request, res: Response, next: NextFunction) { + try { + const updatedOrg = await OrganizationsService.setOrganizationDescription( + req.body.description, + req.currentUser, + req.organization + ); + + return res.status(200).json(updatedOrg); + } catch (error: unknown) { + return next(error); + } + } + + static async getOrganizationFeaturedProjects(req: Request, res: Response, next: NextFunction) { + try { + const featuredProjects = await OrganizationsService.getOrganizationFeaturedProjects(req.organization.organizationId); + res.status(200).json(featuredProjects); + } catch (error: unknown) { + return next(error); + } + } +} diff --git a/src/frontend/src/components/ChangeRequestDetailCard.tsx b/src/frontend/src/components/ChangeRequestDetailCard.tsx index fc202cfcf9..c94beaffdc 100644 --- a/src/frontend/src/components/ChangeRequestDetailCard.tsx +++ b/src/frontend/src/components/ChangeRequestDetailCard.tsx @@ -70,7 +70,17 @@ interface ChangeRequestDetailCardProps { const ChangeRequestDetailCard: React.FC = ({ changeRequest }) => { const theme = useTheme(); return ( - + diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 82bceaa168..98d46cc3b0 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Grid, Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -27,18 +27,24 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - - - - - - - - + + + + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index b8a5faf350..fa9ccb12d9 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -52,9 +52,7 @@ const ScrollablePageBlock: React.FC = ({ children, tit } }} > - {React.Children.map(children, (child) => ( - {child} - ))} + {children} diff --git a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx index 7b2b00de29..76b80e93c3 100644 --- a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx @@ -29,6 +29,7 @@ const TeamTaskCard: React.FC = ({ task, taskNumber }) => { variant="outlined" sx={{ minWidth: 'fit-content', + minHeight: 'fit-content', mr: 3, background: theme.palette.background.default, borderRadius: 2 From 5b235b1c2f9880934221d729540f09fc71b0b7b8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 5 Dec 2024 11:24:27 -0500 Subject: [PATCH 191/320] #2809-small refactoring --- .../src/pages/HomePage/AdminHomePage.tsx | 2 +- .../HomePage/components/WorkPackageSelect.tsx | 27 ++++++--------- .../components/WorkPackagesSelectionView.tsx | 33 +++++++------------ 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index f1e5ce9f12..7661c6eb0f 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -27,7 +27,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx index 3848635031..996a28cb0c 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx @@ -5,17 +5,15 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; interface CustomSelectProps { options: string[]; onSelect: (selectedOption: number) => void; - firstSelected?: number; + selected?: number; } -const WorkPackageSelect: React.FC = ({ options, onSelect, firstSelected }) => { +const WorkPackageSelect: React.FC = ({ options, onSelect, selected = 0 }) => { const theme = useTheme(); - const [selected, setSelected] = useState(firstSelected ? firstSelected : 0); const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const handleSelect = (option: string) => { - setSelected(options.indexOf(option)); setIsOpen(false); onSelect(options.indexOf(option)); }; @@ -32,23 +30,18 @@ const WorkPackageSelect: React.FC = ({ options, onSelect, fir } else { document.removeEventListener('mousedown', handleClickOutside); } - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; }, [isOpen]); return ( - - setIsOpen(!isOpen)} - variant="h5" - sx={{ paddingX: 2, paddingY: 1, display: 'inline-block', cursor: 'pointer' }} - > - - {options[selected]} - - + setIsOpen(!isOpen)} + variant="h5" + sx={{ paddingX: 2, paddingY: 1, display: 'inline-block', cursor: 'pointer' }} + > + + {options[selected]} + {isOpen && ( setIsOpen(!isOpen)} sx={{ position: 'absolute', top: '-40%', cursor: 'pointer' }}> diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index b4f3459675..de83121a77 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -26,33 +26,32 @@ const WorkPackagesSelectionView: React.FC = () => { const user = useCurrentUser(); const theme = useTheme(); - const relevantWPs = user.teamsAsHead - ? user.teamsAsHead.map((team) => team.projects.map((project) => project.workPackages)).flat(2) - : []; + const teamsAsHead = user.teamsAsHead ?? []; + const teamsAsLead = user.teamsAsLead ?? []; + const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; - relevantWPs.concat( - user.teamsAsLead ? user.teamsAsLead.map((team) => team.projects.map((project) => project.workPackages)).flat(2) : [] - ); + const relevantWPs = teamsAsLeadership.map((team) => team.projects.map((project) => project.workPackages)).flat(2); const upcomingWPs: WorkPackage[] = getUpcomingWorkPackages(relevantWPs); const inProgressWPs: WorkPackage[] = getInProgressWorkPackages(relevantWPs); const overdueWPs: WorkPackage[] = getOverdueWorkPackages(relevantWPs); - const workPackages: [string, WorkPackage[]][] = [ + const workPackageOptions: [string, WorkPackage[]][] = [ [`Upcoming Work Packages (${upcomingWPs.length})`, upcomingWPs], [`In Progress Work Packages (${inProgressWPs.length})`, inProgressWPs], [`Overdue Work Packages (${overdueWPs.length})`, overdueWPs] ]; let defaultFirstDisplay = 2; - if (workPackages[2][1].length === 0) { + if (workPackageOptions[2][1].length === 0) { defaultFirstDisplay = 1; - if (workPackages[1][1].length === 0) { + if (workPackageOptions[1][1].length === 0) { defaultFirstDisplay = 0; } } const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); + const [, currentWps] = workPackageOptions[currentDisplayedWPs]; const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( { }} > {workPackages.map((wp) => ( - - - + ))} ); - const [, currentWps] = workPackages[currentDisplayedWPs]; //getWorkPackages(currentDisplayedWPs); - return ( { }} > wp[0])} + options={workPackageOptions.map((wp) => wp[0])} onSelect={setCurrentDisplayedWPs} - firstSelected={currentDisplayedWPs} + selected={currentDisplayedWPs} /> { scrollbarColor: `${theme.palette.primary.main} transparent` }} > - {currentWps.length === 0 ? : WorkPackagesDisplay(currentWps)} + {currentWps.length === 0 ? : WorkPackagesDisplay(currentWps)} From b75c53f68c37da2891c72fc7a70e28962eb79a5f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 5 Dec 2024 11:28:34 -0500 Subject: [PATCH 192/320] #2809-added comments --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 2 +- .../pages/HomePage/components/WorkPackagesSelectionView.tsx | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 7661c6eb0f..f1e5ce9f12 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -27,7 +27,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index de83121a77..2b05907c4d 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -36,6 +36,7 @@ const WorkPackagesSelectionView: React.FC = () => { const inProgressWPs: WorkPackage[] = getInProgressWorkPackages(relevantWPs); const overdueWPs: WorkPackage[] = getOverdueWorkPackages(relevantWPs); + // options for selection const workPackageOptions: [string, WorkPackage[]][] = [ [`Upcoming Work Packages (${upcomingWPs.length})`, upcomingWPs], [`In Progress Work Packages (${inProgressWPs.length})`, inProgressWPs], @@ -51,6 +52,8 @@ const WorkPackagesSelectionView: React.FC = () => { } const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); + + // destructuring tuple to get wps of selected option const [, currentWps] = workPackageOptions[currentDisplayedWPs]; const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( From 33d090f96dd08af70684568b6955eba5ca0a9631 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 5 Dec 2024 12:00:52 -0500 Subject: [PATCH 193/320] #2817-fixed filtering --- .../src/pages/HomePage/AdminHomePage.tsx | 7 ++++++- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 2 +- .../HomePage/components/DesignReviewCard.tsx | 11 ++++------- .../components/UpcomingDesignReviews.tsx | 16 ++++++++++------ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index cf008c8020..81e148aab4 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; +import UpcomingDesignReviews from './components/UpcomingDesignReviews'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -25,7 +26,11 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 3cc202f06d..8fc855fb10 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -27,7 +27,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { Welcome, {user.firstName}! - + diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 7c826de6ba..7e43483bfc 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -23,7 +23,7 @@ const DisplayStatus: React.FC = ({ designReview, user }) => { { history.push(`${routes.CALENDAR}/${designReview.designReviewId}`); }} @@ -54,19 +54,16 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, variant="outlined" sx={{ minWidth: 'fit-content', + minHeight: 'fit-content', mr: 3, background: theme.palette.background.default }} > - + - + {designReview.wbsName} diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index bf1097b53d..2b316a99cf 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -6,7 +6,7 @@ import DesignReviewCard from './DesignReviewCard'; import { useAllDesignReviews } from '../../../hooks/design-reviews.hooks'; import ErrorPage from '../../ErrorPage'; -import { AuthenticatedUser, wbsPipe } from 'shared'; +import { AuthenticatedUser, DesignReviewStatus, wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; @@ -50,20 +50,24 @@ const UpcomingDesignReviews: React.FC = ({ user }) => const inTwoWeeks = new Date(); inTwoWeeks.setDate(currentDate.getDate() + 14); + const memberUserIds = [ + ...review.requiredMembers.map((user) => user.userId), + ...review.optionalMembers.map((user) => user.userId) + ]; return ( scheduledDate >= currentDate && scheduledDate <= inTwoWeeks && - !review.status.includes('DONE') && - (review.requiredMembers.includes(user) || review.optionalMembers.includes(user)) + review.status !== DesignReviewStatus.DONE && + memberUserIds.includes(user.userId) ); }); const fullDisplay = ( - - {designReviews.length === 0 ? ( + + {filteredDesignReviews.length === 0 ? ( ) : ( - designReviews.map((d) => ) + filteredDesignReviews.map((d) => ) )} ); From 95e722ef59c6fbf2773e0e3fb926c082442cdf37 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 5 Dec 2024 12:05:35 -0500 Subject: [PATCH 194/320] #2817-confirmed members --- .../src/pages/HomePage/components/DesignReviewCard.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 7e43483bfc..46fbd73f2c 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -16,10 +16,13 @@ interface DesignReviewProps { const DisplayStatus: React.FC = ({ designReview, user }) => { const history = useHistory(); + + const confirmedMemberIds = designReview.confirmedMembers.map((user) => user.userId); + console.log('CONFIRMED:', confirmedMemberIds); + return ( - //is this what we want <> - {!designReview.status || !designReview.confirmedMembers.includes(user) ? ( + {!confirmedMemberIds.includes(user.userId) ? ( Date: Thu, 5 Dec 2024 15:33:34 -0500 Subject: [PATCH 195/320] #3000-updated controller --- .../src/controllers/users.controllers.ts | 4 +- .../migration.sql | 51 ------------------- 2 files changed, 2 insertions(+), 53 deletions(-) delete mode 100644 src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index be57729561..e491d3f4f4 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -198,9 +198,9 @@ export default class UsersController { const { organization } = req; const unreadNotifications = await UsersService.getUserUnreadNotifications(userId, organization); - return res.status(200).json(unreadNotifications); + res.status(200).json(unreadNotifications); } catch (error: unknown) { - return next(error); + next(error); } } } diff --git a/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql b/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql deleted file mode 100644 index 192243b385..0000000000 --- a/src/backend/src/prisma/migrations/20241122155216_updated_notifications/migration.sql +++ /dev/null @@ -1,51 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `userId` on the `Notification` table. All the data in the column will be lost. - - Added the required column `text` to the `Announcement` table without a default value. This is not possible if the table is not empty. - -*/ --- DropForeignKey -ALTER TABLE "Notification" DROP CONSTRAINT "Notification_userId_fkey"; - --- AlterTable -ALTER TABLE "Announcement" ADD COLUMN "text" TEXT NOT NULL; - --- AlterTable -ALTER TABLE "Notification" DROP COLUMN "userId"; - --- CreateTable -CREATE TABLE "_ReceivedAnnouncements" ( - "A" TEXT NOT NULL, - "B" TEXT NOT NULL -); - --- CreateTable -CREATE TABLE "_NotificationToUser" ( - "A" TEXT NOT NULL, - "B" TEXT NOT NULL -); - --- CreateIndex -CREATE UNIQUE INDEX "_ReceivedAnnouncements_AB_unique" ON "_ReceivedAnnouncements"("A", "B"); - --- CreateIndex -CREATE INDEX "_ReceivedAnnouncements_B_index" ON "_ReceivedAnnouncements"("B"); - --- CreateIndex -CREATE UNIQUE INDEX "_NotificationToUser_AB_unique" ON "_NotificationToUser"("A", "B"); - --- CreateIndex -CREATE INDEX "_NotificationToUser_B_index" ON "_NotificationToUser"("B"); - --- AddForeignKey -ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_ReceivedAnnouncements" ADD CONSTRAINT "_ReceivedAnnouncements_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("notificationId") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_NotificationToUser" ADD CONSTRAINT "_NotificationToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; From 24bc0e202d65f03b8dac4879bb3e4ec79de859ff Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 6 Dec 2024 10:23:37 -0500 Subject: [PATCH 196/320] #2795-created hooks for logo --- .../controllers/organizations.controllers.ts | 4 ++- src/frontend/logo.png | Bin 0 -> 114559 bytes src/frontend/src/apis/organizations.api.ts | 6 ++++ src/frontend/src/hooks/organizations.hooks.ts | 18 ++++++++++- .../src/pages/HomePage/GuestHomePage.tsx | 28 ++++++++++++------ .../pages/HomePage/components/LogoDisplay.tsx | 24 +++++++++++++++ src/frontend/src/utils/urls.ts | 2 ++ 7 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 src/frontend/logo.png create mode 100644 src/frontend/src/pages/HomePage/components/LogoDisplay.tsx diff --git a/src/backend/src/controllers/organizations.controllers.ts b/src/backend/src/controllers/organizations.controllers.ts index af14eb1dd8..fd09e6791c 100644 --- a/src/backend/src/controllers/organizations.controllers.ts +++ b/src/backend/src/controllers/organizations.controllers.ts @@ -88,7 +88,9 @@ export default class OrganizationsController { static async getOrganizationLogoImage(req: Request, res: Response, next: NextFunction) { try { - const logoImageId = await OrganizationsService.getLogoImage(req.organization.organizationId); + const { organization } = req; + + const logoImageId = await OrganizationsService.getLogoImage(organization.organizationId); res.status(200).json(logoImageId); } catch (error: unknown) { next(error); diff --git a/src/frontend/logo.png b/src/frontend/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a549f0ea6997896cac671426ae22fa2b8366f8bf GIT binary patch literal 114559 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�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 LTe(Eh>goRhAO`T! literal 0 HcmV?d00001 diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 486b22256a..96e385b125 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -23,3 +23,9 @@ export const setOrganizationDescription = async (description: string) => { description }); }; + +export const getOrganizationLogo = async () => { + return axios.get(apiUrls.organizationsLogoImage(), { + transformResponse: (data) => JSON.parse(data) + }); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index d182994fa2..c22b0bdb6e 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -2,7 +2,13 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization, Project } from 'shared'; -import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; +import { + getFeaturedProjects, + getCurrentOrganization, + setOrganizationDescription, + getOrganizationLogo +} from '../apis/organizations.api'; +import { downloadGoogleImage } from '../apis/finance.api'; interface OrganizationProvider { organizationId: string; @@ -64,3 +70,13 @@ export const useSetOrganizationDescription = () => { } ); }; + +export const useOrganizationLogo = () => { + return useQuery(['organizations', 'logo'], async () => { + const { data: fileId } = await getOrganizationLogo(); + + const imageBlob = await downloadGoogleImage(fileId); + + return URL.createObjectURL(imageBlob); + }); +}; diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index 57fd84f323..e8afa16a5d 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Box, Typography } from '@mui/material'; +import { Box, Grid, Stack, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -12,6 +12,7 @@ import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; import GuestOrganizationInfo from './components/GuestOrganizationInfo'; import FeaturedProjects from './components/FeaturedProjects'; +import LogoDisplay from './components/LogoDisplay'; interface GuestHomePageProps { user: AuthenticatedUser; @@ -32,18 +33,27 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => { sx={{ display: 'flex', flexDirection: 'column', - gap: 2, + gap: 1.5, height: `${PAGE_GRID_HEIGHT}vh`, mt: 2 }} > - - - - - - - + + + + + + + + + + + + + + + + diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx new file mode 100644 index 0000000000..ccf7ac9e5f --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -0,0 +1,24 @@ +import { Box } from '@mui/material'; +import React from 'react'; +import { useOrganizationLogo } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; + +const LogoDisplay = () => { + const { data: imageUrl, isLoading } = useOrganizationLogo(); + + if (isLoading || !imageUrl) return ; + + return ( + + ); +}; + +export default LogoDisplay; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 1b00a9e46b..c37a691a0d 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -177,6 +177,7 @@ const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; const organizationsSetDescription = () => `${organizations()}/description/set`; const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; +const organizationsLogoImage = () => `${organizations()}/logo`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -336,6 +337,7 @@ export const apiUrls = { organizationsSetUsefulLinks, organizationsFeaturedProjects, organizationsSetDescription, + organizationsLogoImage, cars, carsCreate, From 832ec1a2e5283faad757460642958c68967694cd Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 6 Dec 2024 10:38:54 -0500 Subject: [PATCH 197/320] #2803-renamed component --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 4 ++-- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 4 ++-- ...edChangeRequests.tsx => ChangeRequestsToReview.tsx} | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) rename src/frontend/src/pages/HomePage/components/{UnreviewedChangeRequests.tsx => ChangeRequestsToReview.tsx} (88%) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 603a91c0bb..39f44432d7 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; +import ChangeRequestsToReview from './components/ChangeRequestsToReview'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -28,7 +28,7 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - + diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 98d46cc3b0..e927f9adf9 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -9,7 +9,7 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UnreviewedChangeRequests from './components/UnreviewedChangeRequests'; +import ChangeRequestsToReview from './components/ChangeRequestsToReview'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; interface LeadHomePageProps { @@ -37,7 +37,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { }} > - + diff --git a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx similarity index 88% rename from src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx rename to src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx index e8db5cbf8c..a003cf636b 100644 --- a/src/frontend/src/pages/HomePage/components/UnreviewedChangeRequests.tsx +++ b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx @@ -10,11 +10,11 @@ import ChangeRequestDetailCard from '../../../components/ChangeRequestDetailCard import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; -interface UnreviewedChangeRequestsProps { +interface ChangeRequestsToReviewProps { user: AuthenticatedUser; } -const NoUnreviewedChangeRequests: React.FC = () => { +const NoChangeRequestsToReview: React.FC = () => { return ( } @@ -24,7 +24,7 @@ const NoUnreviewedChangeRequests: React.FC = () => { ); }; -const UnreviewedChangeRequests: React.FC = ({ user }) => { +const ChangeRequestsToReview: React.FC = ({ user }) => { const { data: changeRequests, isError: crIsError, isLoading: crIsLoading, error: crError } = useAllChangeRequests(); const { data: projects, isError: projectIsError, isLoading: projectLoading, error: projectError } = useAllProjects(); const { data: workPackages, isError: wpIsError, isLoading: wpLoading, error: wpError } = useAllWorkPackages(); @@ -40,7 +40,7 @@ const UnreviewedChangeRequests: React.FC = ({ use return ( {crsToReview.length === 0 ? ( - + ) : ( crsToReview.map((cr: ChangeRequest) => ) )} @@ -48,4 +48,4 @@ const UnreviewedChangeRequests: React.FC = ({ use ); }; -export default UnreviewedChangeRequests; +export default ChangeRequestsToReview; From 4ae2563ae54b418b2587687742d7d0d37eab8811 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 6 Dec 2024 11:36:48 -0500 Subject: [PATCH 198/320] #2817-added zoom link and fixed confirmation --- .../HomePage/components/DesignReviewCard.tsx | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 46fbd73f2c..2a2d6ef5f6 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -4,7 +4,7 @@ import { datePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; -import { LocationOnOutlined } from '@mui/icons-material'; +import { LocationOnOutlined, Computer } from '@mui/icons-material'; import { useHistory } from 'react-router-dom'; import { NERButton } from '../../../components/NERButton'; import { meetingStartTimePipe } from '../../../../../backend/src/utils/design-reviews.utils'; @@ -14,6 +14,25 @@ interface DesignReviewProps { user: User; } +const DesignReviewInfo = ({ icon, text, link }: { icon: React.ReactNode; text: string; link?: boolean }) => { + return ( + + {icon} + {link ? ( + + + {text} + + + ) : ( + + {text} + + )} + + ); +}; + const DisplayStatus: React.FC = ({ designReview, user }) => { const history = useHistory(); @@ -28,7 +47,7 @@ const DisplayStatus: React.FC = ({ designReview, user }) => { size="small" sx={{ color: 'white', padding: 1 }} onClick={() => { - history.push(`${routes.CALENDAR}/${designReview.designReviewId}`); + history.push(`${routes.SETTINGS_PREFERENCES}?drId=${designReview.designReviewId}`); }} component={RouterLink} > @@ -80,12 +99,12 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, meetingStartTimePipe(designReview.meetingTimes)} - - {} - - {designReview.location} - - + {designReview.isInPerson && !!designReview.location && ( + } text={designReview.location} /> + )} + {designReview.isOnline && !!designReview.zoomLink && ( + } text={designReview.zoomLink} link /> + )} From f0e1cb46decc562a36eb491b011ffe967479398f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 6 Dec 2024 11:46:41 -0500 Subject: [PATCH 199/320] fixed typo --- .../src/pages/HomePage/components/ChangeRequestsToReview.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx index a003cf636b..e7161db966 100644 --- a/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx +++ b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx @@ -19,7 +19,7 @@ const NoChangeRequestsToReview: React.FC = () => { } heading={`You're all caught up!`} - message={'Uou have no unreviewed changre requests!'} + message={'You have no unreviewed changre requests!'} /> ); }; From 606be3624ebe82a6c15982e3d21363c0f873d246 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 6 Dec 2024 12:07:36 -0500 Subject: [PATCH 200/320] #2809-fixed merge conflicts --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 234be25bb8..4dc62858e0 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -27,11 +27,11 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - - + + - + From dc18abe55d2eb8709f39d1da1ffa3020eba6d75d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 11:29:06 -0500 Subject: [PATCH 201/320] #2821-reversed changes to card --- .../src/pages/HomePage/AdminHomePage.tsx | 10 +- .../HomePage/components/WorkPackageCard.tsx | 130 +++++++++++++++--- 2 files changed, 113 insertions(+), 27 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 6d7f1c6b0b..ee4b3e08cc 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -26,13 +26,11 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - - - - - + + + - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 57814b4f3f..14557f015f 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -6,15 +6,19 @@ import { Chip, CircularProgress, CircularProgressProps, + Grid, Link, Stack, Typography, useTheme } from '@mui/material'; import { wbsPipe, WorkPackage } from 'shared'; -import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; +import { datePipe, fullNamePipe, projectWbsPipe, wbsNamePipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; +import { daysOverdue } from '../../../utils/datetime.utils'; +import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; export const CircularProgressWithLabel = (props: CircularProgressProps & { value: number }) => { return ( @@ -36,6 +40,29 @@ export const CircularProgressWithLabel = (props: CircularProgressProps & { value const WorkPackageCard = ({ wp }: { wp: WorkPackage }) => { const theme = useTheme(); + const { data: blockedByWps, isLoading } = useGetManyWorkPackages(wp.blockedBy); + const numDaysOverdue = daysOverdue(new Date(wp.endDate)); + const isOverdue = numDaysOverdue > 0; + if (isLoading || !blockedByWps) return ; + + const WpChipDisplay = ({ wp, isOverdue }: { wp: WorkPackage; isOverdue: boolean }) => { + const chipSize = isOverdue ? 'small' : 'medium'; + return ( + + } label={fullNamePipe(wp.lead)} size={chipSize} /> + } label={fullNamePipe(wp.manager)} size={chipSize} /> + } label={'TEAM'} size={chipSize} /> + + ); + }; + return ( { }} > - - - - - {projectWbsPipe(wp.wbsNum)} - {wp.projectName} - - - - - {wbsPipe(wp.wbsNum)} - {wp.name} + + + + + + {wbsPipe(wp.wbsNum)} - {wp.name} + + + + + {projectWbsPipe(wp.wbsNum)} - {wp.projectName} + + + {!isOverdue && ( + + {datePipe(wp.startDate) + ' ⟝ ' + wp.duration + ' wks ⟞ ' + datePipe(wp.endDate)} + + )} + + Blocked By: - - - {datePipe(wp.startDate) + ' ⟝ ' + wp.duration + ' wks ⟞ ' + datePipe(wp.endDate)} - - - - - } label={fullNamePipe(wp.lead)} size="medium" /> - } label={fullNamePipe(wp.manager)} size="medium" /> - +
    + {blockedByWps.length === 0 ? ( +
  • + + No Blockers + +
  • + ) : ( + blockedByWps.map((wp) => ( +
  • + + {wbsNamePipe(wp)} + +
  • + )) + )} +
+ {!isOverdue && } + +
+ {isOverdue && ( + + + + + + {numDaysOverdue} + + + + Days + + + Overdue + + + + + + )} +
); From a987afc41c5cf5c5e0061d552aadbb66dfc9e7a1 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 11:44:37 -0500 Subject: [PATCH 202/320] #2821-fixed changes on wp card --- .../HomePage/components/WorkPackageCard.tsx | 130 +++--------------- 1 file changed, 21 insertions(+), 109 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 7fcb42f29c..5419731678 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -6,19 +6,15 @@ import { Chip, CircularProgress, CircularProgressProps, - Grid, Link, Stack, Typography, useTheme } from '@mui/material'; import { wbsPipe, WorkPackage } from 'shared'; -import { datePipe, fullNamePipe, projectWbsPipe, wbsNamePipe } from '../../../utils/pipes'; +import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; -import { daysOverdue } from '../../../utils/datetime.utils'; -import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; export const CircularProgressWithLabel = (props: CircularProgressProps & { value: number }) => { return ( @@ -40,29 +36,6 @@ export const CircularProgressWithLabel = (props: CircularProgressProps & { value const WorkPackageCard = ({ wp }: { wp: WorkPackage }) => { const theme = useTheme(); - const { data: blockedByWps, isLoading } = useGetManyWorkPackages(wp.blockedBy); - const numDaysOverdue = daysOverdue(new Date(wp.endDate)); - const isOverdue = numDaysOverdue > 0; - if (isLoading || !blockedByWps) return ; - - const WpChipDisplay = ({ wp, isOverdue }: { wp: WorkPackage; isOverdue: boolean }) => { - const chipSize = isOverdue ? 'small' : 'medium'; - return ( - - } label={fullNamePipe(wp.lead)} size={chipSize} /> - } label={fullNamePipe(wp.manager)} size={chipSize} /> - } label={'TEAM'} size={chipSize} /> - - ); - }; - return ( { }} > - - - - - - {wbsPipe(wp.wbsNum)} - {wp.name} - - - - - {projectWbsPipe(wp.wbsNum)} - {wp.projectName} - - - {!isOverdue && ( - - {datePipe(wp.startDate) + ' ⟝ ' + wp.duration + ' wks ⟞ ' + datePipe(wp.endDate)} - - )} - - Blocked By: + + + + + {projectWbsPipe(wp.wbsNum)} - {wp.projectName} + + + + + {wbsPipe(wp.wbsNum)} - {wp.name} -
    - {blockedByWps.length === 0 ? ( -
  • - - No Blockers - -
  • - ) : ( - blockedByWps.map((wp) => ( -
  • - - {wbsNamePipe(wp)} - -
  • - )) - )} -
- {!isOverdue && } -
-
- {isOverdue && ( - - - - - - {numDaysOverdue} - - - - Days - - - Overdue - - - - - - )} -
+ + + {datePipe(wp.startDate) + ' ⟝ ' + wp.duration + ' wks ⟞ ' + datePipe(wp.endDate)} + +
+ + + } label={fullNamePipe(wp.lead)} size="medium" /> + } label={fullNamePipe(wp.manager)} size="medium" /> + ); From 6e8bc4be4284164f37eda1d8680d247a4a2d23f2 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 11:54:30 -0500 Subject: [PATCH 203/320] #2821-Added to admin homepage --- .../src/pages/HomePage/AdminHomePage.tsx | 28 ++++++++++++++----- .../components/OverdueWorkPackageView.tsx | 11 +++----- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 4dc62858e0..b83e32a6ab 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Typography, Grid } from '@mui/material'; +import { Typography, Grid, Box } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -11,6 +11,7 @@ import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; import ChangeRequestsToReview from './components/ChangeRequestsToReview'; +import OverdueWorkPackages from './components/OverdueWorkPackages'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -27,14 +28,27 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { Welcome, {user.firstName}! - - + + + + + + + + + + - - - - + ); }; diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index c80c4de9bc..2dba485587 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -1,6 +1,5 @@ import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; import WorkPackageCard from './WorkPackageCard'; -import { PAGE_GRID_HEIGHT } from '../../../components/PageLayout'; import { WorkPackage } from 'shared'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; @@ -21,9 +20,8 @@ const NoOverdueWPsDisplay: React.FC = () => { const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { const theme = useTheme(); - const isEmpty = workPackages.length === 0; return ( - + = ({ workP > - - {isEmpty ? : workPackages.map((wp) => )} + + {workPackages.length === 0 ? : workPackages.map((wp) => )} From 911723737435b2d6e41b3bd456dc9a488808f9a1 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 13:15:48 -0500 Subject: [PATCH 204/320] #2821-fixed spacings --- .../src/pages/HomePage/AdminHomePage.tsx | 4 +- .../components/OverdueWorkPackageView.tsx | 40 +++++++++++-------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index b83e32a6ab..edee46bbab 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -41,10 +41,10 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - + - + diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index 2dba485587..24a48cf2f6 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -21,18 +21,18 @@ const NoOverdueWPsDisplay: React.FC = () => { const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { const theme = useTheme(); return ( - + = ({ workP = ({ workP > - + {workPackages.length === 0 ? : workPackages.map((wp) => )} From 8f609281e17f8fcdb77f7715ad144f23f53e56b1 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 13:17:28 -0500 Subject: [PATCH 205/320] #2821-fixed margins on empty --- .../src/pages/HomePage/components/OverdueWorkPackageView.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index 24a48cf2f6..b3621c742c 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -20,6 +20,7 @@ const NoOverdueWPsDisplay: React.FC = () => { const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { const theme = useTheme(); + const isEmpty = workPackages.length === 0; return ( = ({ workP > = ({ workP height: '100%' }} > - {workPackages.length === 0 ? : workPackages.map((wp) => )} + {isEmpty ? : workPackages.map((wp) => )} From afd33a088198a895930069d42e2c239713adbcdc Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 13:53:34 -0500 Subject: [PATCH 206/320] #2821-reverted updates --- .../src/pages/HomePage/AdminHomePage.tsx | 4 +- .../components/OverdueWorkPackageView.tsx | 43 +++++++++++-------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index b83e32a6ab..edee46bbab 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -41,10 +41,10 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - + - + diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index 2dba485587..b3621c742c 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -20,19 +20,20 @@ const NoOverdueWPsDisplay: React.FC = () => { const OverdueWorkPackagesView: React.FC = ({ workPackages }) => { const theme = useTheme(); + const isEmpty = workPackages.length === 0; return ( - + = ({ workP = ({ workP > - - {workPackages.length === 0 ? : workPackages.map((wp) => )} + + {isEmpty ? : workPackages.map((wp) => )} From 0d27cb3a82f843f46ba9c0554f650f864f5bd2b0 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Sun, 8 Dec 2024 15:16:37 -0500 Subject: [PATCH 207/320] #2817 prettier --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - .../pages/HomePage/components/UpcomingDesignReviews.tsx | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index da2cb2d75c..946bdcdb5b 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -13,7 +13,6 @@ import UpcomingDesignReviews from './components/UpcomingDesignReviews'; import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; import ChangeRequestsToReview from './components/ChangeRequestsToReview'; - interface AdminHomePageProps { user: AuthenticatedUser; } diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 2b316a99cf..15fe1c59a3 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -12,6 +12,7 @@ import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import { Box } from '@mui/material'; import { Error } from '@mui/icons-material'; +import designReviewsRouter from '../../../../../backend/src/routes/design-reviews.routes'; interface UpcomingDesignReviewProps { user: AuthenticatedUser; @@ -63,11 +64,11 @@ const UpcomingDesignReviews: React.FC = ({ user }) => }); const fullDisplay = ( - - {filteredDesignReviews.length === 0 ? ( + + {designReviews.length === 0 ? ( ) : ( - filteredDesignReviews.map((d) => ) + designReviews.map((d) => ) )} ); From 31887226f1ea91f339be38afc305ef8c366ce6e7 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Sun, 8 Dec 2024 15:19:16 -0500 Subject: [PATCH 208/320] #2817 linting --- .../src/pages/HomePage/components/UpcomingDesignReviews.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 15fe1c59a3..1d39e5442c 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -12,7 +12,6 @@ import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import { Box } from '@mui/material'; import { Error } from '@mui/icons-material'; -import designReviewsRouter from '../../../../../backend/src/routes/design-reviews.routes'; interface UpcomingDesignReviewProps { user: AuthenticatedUser; From df2865b3ce9437bc0a6552139b1552ea0725e055 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Sun, 8 Dec 2024 15:23:18 -0500 Subject: [PATCH 209/320] #2817 linting again --- .../src/pages/HomePage/components/UpcomingDesignReviews.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 1d39e5442c..2b316a99cf 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -63,11 +63,11 @@ const UpcomingDesignReviews: React.FC = ({ user }) => }); const fullDisplay = ( - - {designReviews.length === 0 ? ( + + {filteredDesignReviews.length === 0 ? ( ) : ( - designReviews.map((d) => ) + filteredDesignReviews.map((d) => ) )} ); From 314b2bb1c28734f2bc409264c2b387c2eab2b12f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 15:39:49 -0500 Subject: [PATCH 210/320] #2817-added components --- .../components/ChangeRequestsToReview.tsx | 51 +++++++ .../HomePage/components/WorkPackageSelect.tsx | 91 ++++++++++++ .../components/WorkPackagesSelectionView.tsx | 129 ++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx create mode 100644 src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx create mode 100644 src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx diff --git a/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx new file mode 100644 index 0000000000..e7161db966 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx @@ -0,0 +1,51 @@ +import { useAllWorkPackages } from '../../../hooks/work-packages.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; +import { useAllChangeRequests } from '../../../hooks/change-requests.hooks'; +import { useAllProjects } from '../../../hooks/projects.hooks'; +import { getCRsToReview } from '../../../utils/change-request.utils'; +import ScrollablePageBlock from './ScrollablePageBlock'; +import { AuthenticatedUser, ChangeRequest } from 'shared'; +import ChangeRequestDetailCard from '../../../components/ChangeRequestDetailCard'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; + +interface ChangeRequestsToReviewProps { + user: AuthenticatedUser; +} + +const NoChangeRequestsToReview: React.FC = () => { + return ( + } + heading={`You're all caught up!`} + message={'You have no unreviewed changre requests!'} + /> + ); +}; + +const ChangeRequestsToReview: React.FC = ({ user }) => { + const { data: changeRequests, isError: crIsError, isLoading: crIsLoading, error: crError } = useAllChangeRequests(); + const { data: projects, isError: projectIsError, isLoading: projectLoading, error: projectError } = useAllProjects(); + const { data: workPackages, isError: wpIsError, isLoading: wpLoading, error: wpError } = useAllWorkPackages(); + + if (crIsLoading || projectLoading || wpLoading || !changeRequests || !projects || !workPackages) + return ; + if (crIsError) return ; + if (projectIsError) return ; + if (wpIsError) return ; + + const crsToReview = getCRsToReview(projects, workPackages, user, changeRequests); + + return ( + + {crsToReview.length === 0 ? ( + + ) : ( + crsToReview.map((cr: ChangeRequest) => ) + )} + + ); +}; + +export default ChangeRequestsToReview; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx new file mode 100644 index 0000000000..996a28cb0c --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/WorkPackageSelect.tsx @@ -0,0 +1,91 @@ +import { Box, Card, Typography, useTheme } from '@mui/material'; +import { useEffect, useRef, useState } from 'react'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; + +interface CustomSelectProps { + options: string[]; + onSelect: (selectedOption: number) => void; + selected?: number; +} + +const WorkPackageSelect: React.FC = ({ options, onSelect, selected = 0 }) => { + const theme = useTheme(); + const [isOpen, setIsOpen] = useState(false); + const dropdownRef = useRef(null); + + const handleSelect = (option: string) => { + setIsOpen(false); + onSelect(options.indexOf(option)); + }; + + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsOpen(false); + } + }; + + useEffect(() => { + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside); + } else { + document.removeEventListener('mousedown', handleClickOutside); + } + }, [isOpen]); + + return ( + + setIsOpen(!isOpen)} + variant="h5" + sx={{ paddingX: 2, paddingY: 1, display: 'inline-block', cursor: 'pointer' }} + > + + {options[selected]} + + {isOpen && ( + setIsOpen(!isOpen)} sx={{ position: 'absolute', top: '-40%', cursor: 'pointer' }}> + + + {options[selected]} + + {options + .filter((option) => option !== options.at(selected)) + .map((option) => ( + { + handleSelect(option); + }} + sx={{ + cursor: 'pointer', + paddingX: 2, + paddingY: 1, + backgroundColor: theme.palette.background.paper, + position: 'relative', + '&:hover': { + backgroundColor: theme.palette.action.hover + } + }} + variant="h5" + > + {option} + + ))} + + + )} + + ); +}; + +export default WorkPackageSelect; diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx new file mode 100644 index 0000000000..2b05907c4d --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -0,0 +1,129 @@ +import { WorkPackage } from 'shared'; +import { Box, Card, CardContent, useTheme } from '@mui/material'; +import { + getInProgressWorkPackages, + getOverdueWorkPackages, + getUpcomingWorkPackages +} from '../../../utils/work-package.utils'; +import { useCurrentUser } from '../../../hooks/users.hooks'; +import WorkPackageCard from './WorkPackageCard'; +import WorkPackageSelect from './WorkPackageSelect'; +import React, { useState } from 'react'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; + +const NoWorkPackages: React.FC = () => { + return ( + } + heading={`You're all set!`} + message={'You have no pending work packages of this type!'} + /> + ); +}; + +const WorkPackagesSelectionView: React.FC = () => { + const user = useCurrentUser(); + const theme = useTheme(); + + const teamsAsHead = user.teamsAsHead ?? []; + const teamsAsLead = user.teamsAsLead ?? []; + const teamsAsLeadership = [...teamsAsHead, ...teamsAsLead]; + + const relevantWPs = teamsAsLeadership.map((team) => team.projects.map((project) => project.workPackages)).flat(2); + + const upcomingWPs: WorkPackage[] = getUpcomingWorkPackages(relevantWPs); + const inProgressWPs: WorkPackage[] = getInProgressWorkPackages(relevantWPs); + const overdueWPs: WorkPackage[] = getOverdueWorkPackages(relevantWPs); + + // options for selection + const workPackageOptions: [string, WorkPackage[]][] = [ + [`Upcoming Work Packages (${upcomingWPs.length})`, upcomingWPs], + [`In Progress Work Packages (${inProgressWPs.length})`, inProgressWPs], + [`Overdue Work Packages (${overdueWPs.length})`, overdueWPs] + ]; + + let defaultFirstDisplay = 2; + if (workPackageOptions[2][1].length === 0) { + defaultFirstDisplay = 1; + if (workPackageOptions[1][1].length === 0) { + defaultFirstDisplay = 0; + } + } + + const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); + + // destructuring tuple to get wps of selected option + const [, currentWps] = workPackageOptions[currentDisplayedWPs]; + + const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( + + {workPackages.map((wp) => ( + + ))} + + ); + + return ( + + + wp[0])} + onSelect={setCurrentDisplayedWPs} + selected={currentDisplayedWPs} + /> + + {currentWps.length === 0 ? : WorkPackagesDisplay(currentWps)} + + + + ); +}; + +export default WorkPackagesSelectionView; From 2da092d86b3206c36d26a6618685f5d2f6dde352 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 15:43:05 -0500 Subject: [PATCH 211/320] #2817-added to lead home page --- .../src/pages/HomePage/AdminHomePage.tsx | 3 --- .../src/pages/HomePage/LeadHomePage.tsx | 2 +- .../components/UpcomingDesignReviews.tsx | 21 +++++-------------- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 946bdcdb5b..86ed4c5f33 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -32,9 +32,6 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - - - diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 4b432b212b..5466cdc285 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -40,7 +40,7 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { - + diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 2b316a99cf..6c1a960888 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -19,22 +19,11 @@ interface UpcomingDesignReviewProps { const NoUpcomingDesignReviewsDisplay: React.FC = () => { return ( - - } - heading={'No Upcoming Design Reviews'} - message={'There are no Upcoming Design Reviews to Display'} - /> - + } + heading={'No Upcoming Design Reviews'} + message={'There are no Upcoming Design Reviews to Display'} + /> ); }; From f7b397307612251d0cd0b9e6c434a4475b0ba63d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 15:46:38 -0500 Subject: [PATCH 212/320] #2817-linting --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 1 - .../src/pages/HomePage/components/UpcomingDesignReviews.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index 86ed4c5f33..4dc62858e0 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -9,7 +9,6 @@ import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; -import UpcomingDesignReviews from './components/UpcomingDesignReviews'; import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; import ChangeRequestsToReview from './components/ChangeRequestsToReview'; diff --git a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx index 6c1a960888..68ee4bc4a2 100644 --- a/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx +++ b/src/frontend/src/pages/HomePage/components/UpcomingDesignReviews.tsx @@ -10,7 +10,6 @@ import { AuthenticatedUser, DesignReviewStatus, wbsPipe } from 'shared'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ScrollablePageBlock from './ScrollablePageBlock'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; -import { Box } from '@mui/material'; import { Error } from '@mui/icons-material'; interface UpcomingDesignReviewProps { From b71ec0050d967128ef0679fe80c0667d550414a2 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 16:08:51 -0500 Subject: [PATCH 213/320] #2821-yarn install --- .../src/pages/HomePage/components/WorkPackagesSelectionView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index 2b05907c4d..abbcaee8b6 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -53,7 +53,7 @@ const WorkPackagesSelectionView: React.FC = () => { const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); - // destructuring tuple to get wps of selected option + // destructuring tuple to get wps of selected options const [, currentWps] = workPackageOptions[currentDisplayedWPs]; const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( From b3718e01a5544d679ca2cabc6319e06a16a70f49 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 16:11:51 -0500 Subject: [PATCH 214/320] #2821-up to date --- .../src/pages/HomePage/components/WorkPackagesSelectionView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx index abbcaee8b6..2b05907c4d 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackagesSelectionView.tsx @@ -53,7 +53,7 @@ const WorkPackagesSelectionView: React.FC = () => { const [currentDisplayedWPs, setCurrentDisplayedWPs] = useState(defaultFirstDisplay); - // destructuring tuple to get wps of selected options + // destructuring tuple to get wps of selected option const [, currentWps] = workPackageOptions[currentDisplayedWPs]; const WorkPackagesDisplay = (workPackages: WorkPackage[]) => ( From db222ba5389b00906af313697d5c0355e4b8afe4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 22:35:01 -0500 Subject: [PATCH 215/320] #3060-created hooks --- src/frontend/src/apis/organizations.api.ts | 12 +++++++++ src/frontend/src/hooks/organizations.hooks.ts | 26 ++++++++++++++++++- src/frontend/src/utils/urls.ts | 4 +++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 486b22256a..32b4aefab6 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -23,3 +23,15 @@ export const setOrganizationDescription = async (description: string) => { description }); }; + +export const getOrganizationLogo = async () => { + return axios.get(apiUrls.organizationsLogoImage(), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +export const setOrganizationLogo = async (file: File) => { + const formData = new FormData(); + formData.append('logo', file); + return axios.post(apiUrls.organizationsSetLogoImage(), formData); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index d182994fa2..9dce4e608c 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -2,7 +2,14 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization, Project } from 'shared'; -import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; +import { + getFeaturedProjects, + getCurrentOrganization, + setOrganizationDescription, + getOrganizationLogo, + setOrganizationLogo +} from '../apis/organizations.api'; +import { downloadGoogleImage } from '../apis/finance.api'; interface OrganizationProvider { organizationId: string; @@ -64,3 +71,20 @@ export const useSetOrganizationDescription = () => { } ); }; + +export const useSetOrganizationLogo = () => { + return useMutation(['reimbursement-requsts', 'edit'], async (file: File) => { + const { data } = await setOrganizationLogo(file); + return data; + }); +}; + +export const useOrganizationLogo = () => { + return useQuery(['organizations', 'logo'], async () => { + const { data: fileId } = await getOrganizationLogo(); + + const imageBlob = await downloadGoogleImage(fileId); + + return URL.createObjectURL(imageBlob); + }); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 1b00a9e46b..1fba20024c 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -177,6 +177,8 @@ const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; const organizationsSetDescription = () => `${organizations()}/description/set`; const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; +const organizationsLogoImage = () => `${organizations()}/logo`; +const organizationsSetLogoImage = () => `${organizations()}/logo/update`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -336,6 +338,8 @@ export const apiUrls = { organizationsSetUsefulLinks, organizationsFeaturedProjects, organizationsSetDescription, + organizationsLogoImage, + organizationsSetLogoImage, cars, carsCreate, From 32e23a42c16d7623c7f7064cacaccc940a7b9d71 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 10 Dec 2024 17:23:16 -0500 Subject: [PATCH 216/320] #3060-created forms --- .../controllers/organizations.controllers.ts | 1 + src/frontend/src/hooks/organizations.hooks.ts | 2 + .../pages/AdminToolsPage/AdminToolsPage.tsx | 5 +- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 21 ++++++ .../EditGuestView/EditLogoForm.tsx | 66 +++++++++++++++++++ 5 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx diff --git a/src/backend/src/controllers/organizations.controllers.ts b/src/backend/src/controllers/organizations.controllers.ts index af14eb1dd8..c418d4d779 100644 --- a/src/backend/src/controllers/organizations.controllers.ts +++ b/src/backend/src/controllers/organizations.controllers.ts @@ -78,6 +78,7 @@ export default class OrganizationsController { if (!req.file) { throw new HttpException(400, 'Invalid or undefined image data'); } + const updatedOrg = await OrganizationsService.setLogoImage(req.file, req.currentUser, req.organization); res.status(200).json(updatedOrg); diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 9dce4e608c..fdc288c6f0 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -73,8 +73,10 @@ export const useSetOrganizationDescription = () => { }; export const useSetOrganizationLogo = () => { + const queryClient = useQueryClient(); return useMutation(['reimbursement-requsts', 'edit'], async (file: File) => { const { data } = await setOrganizationLogo(file); + queryClient.invalidateQueries(['organizations']); return data; }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 04856d5265..059f2a2514 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -19,6 +19,7 @@ import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; import EditDescription from './EditGuestView/EditDescription'; +import EditLogo from './EditGuestView/EditLogo'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); @@ -94,9 +95,7 @@ const AdminToolsPage: React.FC = () => { ) : tabIndex === 3 ? ( ) : tabIndex === 4 ? ( - - - + ) : ( diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx new file mode 100644 index 0000000000..311ec282f0 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { useCurrentOrganization, useOrganizationLogo, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import EditLogoForm from './EditLogoForm'; + +const EditLogo = () => { + const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); + const { mutateAsync } = useSetOrganizationLogo(); + const { data: imageUrl } = useOrganizationLogo(); + + if (organizationIsLoading || !organization) return ; + + const onSubmitWrapper = async (logoImage: File) => { + console.log('RECEIVED FILE'); + await mutateAsync(logoImage); + }; + + return ; +}; + +export default EditLogo; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx new file mode 100644 index 0000000000..56fb62c168 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { Box, Button, Stack, useTheme } from '@mui/material'; +import FileUploadIcon from '@mui/icons-material/FileUpload'; + +interface EditLogoFormProps { + logoImageUrl?: string; + onSubmit: (logoImage: File) => Promise; +} + +const EditLogoForm: React.FC = ({ logoImageUrl, onSubmit }) => { + const theme = useTheme(); + return ( + + {!logoImageUrl ? ( + + ) : ( + + )} + + + ); +}; + +export default EditLogoForm; From 907e54db029ac3b44d7a9cdc532dcb565f05991e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 10 Dec 2024 18:00:00 -0500 Subject: [PATCH 217/320] #3060-updated logo fom --- .../src/services/organizations.services.ts | 4 ++ .../pages/AdminToolsPage/AdminToolsPage.tsx | 1 - .../AdminToolsPage/EditGuestView/EditLogo.tsx | 16 +++++-- .../EditGuestView/EditLogoForm.tsx | 46 ++++++++----------- .../pages/HomePage/components/LogoDisplay.tsx | 24 ++++++++++ 5 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/LogoDisplay.tsx diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index c4ce91668b..ba785861cb 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -201,6 +201,10 @@ export default class OrganizationsService { const logoImageData = await uploadFile(logoImage); + if (!logoImageData?.name) { + throw new HttpException(500, 'Image Name not found'); + } + const updatedOrg = await prisma.organization.update({ where: { organizationId: organization.organizationId }, data: { diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 059f2a2514..cc90246456 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -18,7 +18,6 @@ import NERTabs from '../../components/Tabs'; import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; -import EditDescription from './EditGuestView/EditDescription'; import EditLogo from './EditGuestView/EditLogo'; const AdminToolsPage: React.FC = () => { diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 311ec282f0..e545a78e86 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -1,21 +1,29 @@ import React from 'react'; -import { useCurrentOrganization, useOrganizationLogo, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; +import { useCurrentOrganization, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import EditLogoForm from './EditLogoForm'; +import { useToast } from '../../../hooks/toasts.hooks'; const EditLogo = () => { const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); const { mutateAsync } = useSetOrganizationLogo(); - const { data: imageUrl } = useOrganizationLogo(); + const toast = useToast(); if (organizationIsLoading || !organization) return ; const onSubmitWrapper = async (logoImage: File) => { - console.log('RECEIVED FILE'); + try { + await mutateAsync(logoImage); + toast.success('Logo updated successfully!'); + } catch (e) { + if (e instanceof Error) { + toast.error(e.message); + } + } await mutateAsync(logoImage); }; - return ; + return ; }; export default EditLogo; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index 56fb62c168..18c64eb2ac 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -1,39 +1,31 @@ import React from 'react'; import { Box, Button, Stack, useTheme } from '@mui/material'; import FileUploadIcon from '@mui/icons-material/FileUpload'; +import LogoDisplay from '../../HomePage/components/LogoDisplay'; interface EditLogoFormProps { - logoImageUrl?: string; onSubmit: (logoImage: File) => Promise; } -const EditLogoForm: React.FC = ({ logoImageUrl, onSubmit }) => { +const EditLogoForm: React.FC = ({ onSubmit }) => { const theme = useTheme(); return ( - {!logoImageUrl ? ( - - ) : ( - - )} + + + + + {value.name !== 'undefined' && ( + + + {value.name} + + )} + + )} + /> + + + > + + Cancel + + + Save + + + + ); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx index 7e47085d0f..419bb2548c 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx @@ -1,13 +1,21 @@ -import { Stack } from '@mui/material'; +import { Stack, Grid } from '@mui/material'; import EditDescription from './EditDescription'; import EditFeaturedProjects from './EditFeaturedProjects'; +import EditLogo from './EditLogo'; const GuestViewConfig: React.FC = () => { return ( - - - - + + + + + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index 6ee1159d77..0f5c26a02e 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -1,23 +1,32 @@ -import { Box } from '@mui/material'; +import { Box, useTheme, Card } from '@mui/material'; import React from 'react'; -import { useOrganizationLogo } from '../../../hooks/organizations.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; -const LogoDisplay = () => { - const { data: imageUrl, isLoading } = useOrganizationLogo(); - - if (isLoading) return ; +interface LogoDisplayProps { + imageUrl?: string; +} +const LogoDisplay: React.FC = ({ imageUrl = './default-logo.png' }) => { + const theme = useTheme(); return ( - + > + + ); }; From ed36d21a80a6ca64f34dd239161a199ddb109f18 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 13 Dec 2024 19:14:48 -0500 Subject: [PATCH 234/320] #3060-small fix --- .../src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 8d9e2d5461..8f5c6294b4 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -65,7 +65,7 @@ const EditLogo = () => { ) : ( <> - + Date: Sat, 14 Dec 2024 00:18:24 -0500 Subject: [PATCH 235/320] #3060-default logo showing --- src/frontend/src/hooks/organizations.hooks.ts | 15 +++++++++------ .../AdminToolsPage/EditGuestView/EditLogo.tsx | 4 ++-- .../src/pages/HomePage/components/LogoDisplay.tsx | 4 ++-- src/frontend/src/utils/image.utils.ts | 8 ++++++++ 4 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 src/frontend/src/utils/image.utils.ts diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 3d425b4a8e..162476bcdf 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -11,6 +11,7 @@ import { setOrganizationFeaturedProjects } from '../apis/organizations.api'; import { downloadGoogleImage } from '../apis/finance.api'; +import { getDefaultImageData } from '../utils/image.utils'; interface OrganizationProvider { organizationId: string; @@ -98,11 +99,13 @@ export const useSetOrganizationLogo = () => { }; export const useOrganizationLogo = () => { - return useQuery<{ url: string; blob: Blob }, Error>(['organizations', 'logo'], async () => { - const { data: fileId } = await getOrganizationLogo(); - - const imageBlob = await downloadGoogleImage(fileId); - - return { url: URL.createObjectURL(imageBlob), blob: imageBlob }; + return useQuery(['organizations', 'logo'], async () => { + try { + const { data: fileId } = await getOrganizationLogo(); + return await downloadGoogleImage(fileId); + } catch { + // return default logo if fileId was not found + return getDefaultImageData(); + } }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 8f5c6294b4..6fd56bbe66 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -60,12 +60,12 @@ const EditLogo = () => { ) : ( <> - + = ({ imageUrl = './default-logo.png' }) => { +const LogoDisplay: React.FC = ({ imageUrl }) => { const theme = useTheme(); return ( { + const { data } = await axios.get('/default-logo.png', { + responseType: 'blob' + }); + return data; +}; From b466c25a509b5ee162a7917eeaca3377f9b41b5f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 00:44:47 -0500 Subject: [PATCH 236/320] #3060-small fix --- .../src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index ec27cfb67a..dab8640e95 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -7,7 +7,7 @@ import NERSuccessButton from '../../../components/NERSuccessButton'; import ImageIcon from '@mui/icons-material/Image'; export interface EditLogoInput { - logoImage?: File; + logoImage: File; } interface EditLogoFormProps { From 61b6cf8913a3241a4d98789ab79cc7dde8e9f385 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 00:50:58 -0500 Subject: [PATCH 237/320] #3060-await --- src/frontend/src/hooks/organizations.hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 162476bcdf..4c04bc0c60 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -105,7 +105,7 @@ export const useOrganizationLogo = () => { return await downloadGoogleImage(fileId); } catch { // return default logo if fileId was not found - return getDefaultImageData(); + return await getDefaultImageData(); } }); }; From 0e2fed53ee52e61de92fdc29692a5e3a296d0377 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 14:10:11 -0500 Subject: [PATCH 238/320] #3060-fixed tests --- src/backend/tests/unmocked/organization.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index 2c0affdff9..dcfbdcf574 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -55,7 +55,7 @@ describe('Organization Tests', () => { it('Succeeds and updates all the images', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); (uploadFile as Mock).mockImplementation((file) => { - return Promise.resolve({ id: `uploaded-${file.originalname}` }); + return Promise.resolve({ name: `${file.originalname}`, id: `uploaded-${file.originalname}` }); }); await OrganizationsService.setImages(file1, file2, testBatman, organization); @@ -240,7 +240,7 @@ describe('Organization Tests', () => { it('Succeeds and updates the logo', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); (uploadFile as Mock).mockImplementation((file) => { - return Promise.resolve({ id: `uploaded-${file.originalname}` }); + return Promise.resolve({ name: `${file.originalname}`, id: `uploaded-${file.originalname}` }); }); await OrganizationsService.setLogoImage(file1, testBatman, organization); From bcf10578f7534cbc4797fcf05c11697e7ae9e94f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 14:53:21 -0500 Subject: [PATCH 239/320] #2817 fixed scrolling on firefox --- .../components/ChangeRequestsToReview.tsx | 2 +- .../HomePage/components/DesignReviewCard.tsx | 7 +++--- .../components/OverdueWorkPackageView.tsx | 22 +++++++++++-------- .../components/ScrollablePageBlock.tsx | 11 ++++++---- .../HomePage/components/TeamTaskCard.tsx | 2 +- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx index e7161db966..148ed6c822 100644 --- a/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx +++ b/src/frontend/src/pages/HomePage/components/ChangeRequestsToReview.tsx @@ -19,7 +19,7 @@ const NoChangeRequestsToReview: React.FC = () => { } heading={`You're all caught up!`} - message={'You have no unreviewed changre requests!'} + message={'You have no unreviewed change requests!'} /> ); }; diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 446ebfb12b..6357d9b4b5 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -77,13 +77,14 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, - + diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index b3621c742c..fcf630d68a 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -57,32 +57,36 @@ const OverdueWorkPackagesView: React.FC = ({ workP - {isEmpty ? : workPackages.map((wp) => )} - + diff --git a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx index 25045b6d39..54b11ce434 100644 --- a/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx +++ b/src/frontend/src/pages/HomePage/components/ScrollablePageBlock.tsx @@ -34,23 +34,26 @@ const ScrollablePageBlock: React.FC = ({ children, tit sx={{ mt: 2, display: 'flex', - flexDirection: horizontal ? 'row' : 'column', + flexDirection: 'row', + flexWrap: 'wrap', gap: 2, height: '100%', overflowX: horizontal ? 'auto' : 'hidden', overflowY: horizontal ? 'hidden' : 'auto', '&::-webkit-scrollbar': { - height: '20px' + width: '20px' }, '&::-webkit-scrollbar-track': { backgroundColor: 'transparent' }, '&::-webkit-scrollbar-thumb': { - backgroundColor: theme.palette.error.dark, + backgroundColor: theme.palette.primary.main, borderRadius: '20px', border: '6px solid transparent', backgroundClip: 'content-box' - } + }, + scrollbarWidth: 'auto', + scrollbarColor: `${theme.palette.primary.main} transparent` }} > {children} diff --git a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx index 76b80e93c3..dfd1485e64 100644 --- a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx @@ -28,7 +28,7 @@ const TeamTaskCard: React.FC = ({ task, taskNumber }) => { Date: Sat, 14 Dec 2024 14:53:45 -0500 Subject: [PATCH 240/320] #2817-linting --- .../src/pages/HomePage/components/OverdueWorkPackageView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index fcf630d68a..03c820e85b 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -1,4 +1,4 @@ -import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Typography, useTheme } from '@mui/material'; import WorkPackageCard from './WorkPackageCard'; import { WorkPackage } from 'shared'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; From f429ccca852f1b7b70b683f4e311c5028694f8a4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 15:34:30 -0500 Subject: [PATCH 241/320] #2820-added overdue days to new overdue work package card --- .../src/pages/HomePage/AdminHomePage.tsx | 4 +- .../components/OverdueWorkPackageCard.tsx | 143 ++++++++++++++++++ .../components/OverdueWorkPackageView.tsx | 6 +- 3 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index edee46bbab..b83e32a6ab 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -41,10 +41,10 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => { - + - + diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx new file mode 100644 index 0000000000..db54cad9aa --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx @@ -0,0 +1,143 @@ +import { Construction, Work, CalendarMonth } from '@mui/icons-material'; +import { + Box, + Card, + CardContent, + Chip, + CircularProgress, + CircularProgressProps, + Link, + Stack, + Typography, + useTheme +} from '@mui/material'; +import { wbsPipe, WorkPackage } from 'shared'; +import { datePipe, fullNamePipe, projectWbsPipe, wbsNamePipe } from '../../../utils/pipes'; +import { routes } from '../../../utils/routes'; +import { Link as RouterLink } from 'react-router-dom'; +import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; +import { daysOverdue } from '../../../utils/datetime.utils'; +import LoadingIndicator from '../../../components/LoadingIndicator'; + +export const CircularProgressWithLabel = (props: CircularProgressProps & { value: number }) => { + return ( + + +
+ {`${Math.round(props.value)}%`} +
+
+ ); +}; + +const OverdueWorkPackageCard = ({ wp }: { wp: WorkPackage }) => { + const theme = useTheme(); + const { data: blockedByWps, isLoading } = useGetManyWorkPackages(wp.blockedBy); + const numDaysOverdue = daysOverdue(new Date(wp.endDate)); + if (isLoading || !blockedByWps) return ; + return ( + + + + + + + {projectWbsPipe(wp.wbsNum)} - {wp.projectName} + + + + + {wbsPipe(wp.wbsNum)} - {wp.name} + + + + Blocked By: + +
    + {blockedByWps.length === 0 ? ( +
  • + + No Blockers + +
  • + ) : ( + blockedByWps.map((wp) => ( +
  • + + {wbsNamePipe(wp)} + +
  • + )) + )} +
+
+ + + } label={fullNamePipe(wp.lead)} size={'small'} /> + } label={fullNamePipe(wp.manager)} size={'small'} /> + } label={datePipe(new Date(wp.endDate))} size={'small'} /> + + + + + {numDaysOverdue} + + + + Days + + + Overdue + + + + +
+
+
+ ); +}; + +export default OverdueWorkPackageCard; diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index b3621c742c..4686213017 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -1,8 +1,8 @@ import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; -import WorkPackageCard from './WorkPackageCard'; import { WorkPackage } from 'shared'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import OverdueWorkPackageCard from './OverdueWorkPackageCard'; interface OverdueWorkPackagesViewProps { workPackages: WorkPackage[]; @@ -41,7 +41,7 @@ const OverdueWorkPackagesView: React.FC = ({ workP }} > - Overdue Work Packages + All Overdue Work Packages
= ({ workP height: '100%' }} > - {isEmpty ? : workPackages.map((wp) => )} + {isEmpty ? : workPackages.map((wp) => )} From f5ed749c2def867ce141733a8bfb6e52ce34a287 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 15:44:06 -0500 Subject: [PATCH 242/320] 2820-unused import --- .../pages/HomePage/components/OverdueWorkPackageCard.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx index db54cad9aa..deb86badb5 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageCard.tsx @@ -12,7 +12,7 @@ import { useTheme } from '@mui/material'; import { wbsPipe, WorkPackage } from 'shared'; -import { datePipe, fullNamePipe, projectWbsPipe, wbsNamePipe } from '../../../utils/pipes'; +import { datePipe, fullNamePipe, projectWbsPipe } from '../../../utils/pipes'; import { routes } from '../../../utils/routes'; import { Link as RouterLink } from 'react-router-dom'; import { useGetManyWorkPackages } from '../../../hooks/work-packages.hooks'; @@ -84,8 +84,10 @@ const OverdueWorkPackageCard = ({ wp }: { wp: WorkPackage }) => { ) : ( blockedByWps.map((wp) => (
  • - - {wbsNamePipe(wp)} + + + {projectWbsPipe(wp.wbsNum)} - {wp.projectName} +
  • )) From 5c2f759bd941a8fc0c14c458d4b70e95df03b262 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Sat, 14 Dec 2024 17:04:37 -0500 Subject: [PATCH 243/320] #2817 added datetime util to fix timezone offset --- .../src/pages/HomePage/components/DesignReviewCard.tsx | 8 ++++---- src/frontend/src/utils/datetime.utils.ts | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 6357d9b4b5..c26badf593 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -8,6 +8,7 @@ import { LocationOnOutlined, Computer } from '@mui/icons-material'; import { useHistory } from 'react-router-dom'; import { NERButton } from '../../../components/NERButton'; import { meetingStartTimePipe } from '../../../../../backend/src/utils/design-reviews.utils'; +import { timezoneOffset } from '../../../utils/datetime.utils'; interface DesignReviewProps { designReview: DesignReview; @@ -71,8 +72,7 @@ function removeYear(str: string): string { const UpcomingDesignReviewsCard: React.FC = ({ designReview, user }) => { const theme = useTheme(); - const datePlusOne = new Date(designReview.dateScheduled); - datePlusOne.setDate(datePlusOne.getDate() + 1); + const timezoneAdjustedDate = timezoneOffset(designReview.dateScheduled); return ( = ({ designReview, {} - {getWeekday(datePlusOne) + + {getWeekday(timezoneAdjustedDate) + ', ' + - removeYear(datePipe(datePlusOne)) + + removeYear(datePipe(timezoneAdjustedDate)) + ' @ ' + meetingStartTimePipe(designReview.meetingTimes)} diff --git a/src/frontend/src/utils/datetime.utils.ts b/src/frontend/src/utils/datetime.utils.ts index e728bb5cbf..1b23c43118 100644 --- a/src/frontend/src/utils/datetime.utils.ts +++ b/src/frontend/src/utils/datetime.utils.ts @@ -34,3 +34,8 @@ export const formatDate = (date: Date) => { export const daysOverdue = (deadline: Date) => { return Math.round((new Date().getTime() - deadline.getTime()) / (1000 * 60 * 60 * 24)); }; + +export const timezoneOffset = (date: Date) => { + const timestamp = new Date(date).getTime() - new Date(date).getTimezoneOffset() * -60000; + return new Date(timestamp); +}; From e84cf52c88fb39f222137667a6234da3879c8694 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 18:12:00 -0500 Subject: [PATCH 244/320] #2817-fxied mistake --- .../src/pages/HomePage/components/OverdueWorkPackageView.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx index 022e18d979..d0d42294b1 100644 --- a/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx +++ b/src/frontend/src/pages/HomePage/components/OverdueWorkPackageView.tsx @@ -1,4 +1,4 @@ -import { Box, Card, CardContent, Stack, Typography, useTheme } from '@mui/material'; +import { Box, Card, CardContent, Typography, useTheme } from '@mui/material'; import { WorkPackage } from 'shared'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; @@ -86,7 +86,7 @@ const OverdueWorkPackagesView: React.FC = ({ workP }} > {isEmpty ? : workPackages.map((wp) => )} - +
    From 11291e84ed3dd4dba01e02493d85d403efa1b4f6 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 15:40:08 -0500 Subject: [PATCH 245/320] event-listening --- .../src/controllers/slack.controllers.ts | 43 +++++++++++++++++++ src/backend/src/routes/slack.routes.ts | 10 +++++ 2 files changed, 53 insertions(+) create mode 100644 src/backend/src/controllers/slack.controllers.ts create mode 100644 src/backend/src/routes/slack.routes.ts diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts new file mode 100644 index 0000000000..028272c075 --- /dev/null +++ b/src/backend/src/controllers/slack.controllers.ts @@ -0,0 +1,43 @@ +import { Request, Response } from 'express'; +import crypto from 'crypto'; +import slackServices from '../services/slack.services'; + +export default class slackController { + static async handleEvent(req: Request, res: Response) { + console.log('got a slack req'); + /* + if (req.body.type === 'url_verification') { + res.status(200).send({ challenge: req.body.challenge }); + } + */ + res.status(200).send({ challenge: req.body.challenge }); + + /* + const slackSignature = req.headers['x-slack-signature'] as string; + const slackTimeStamp = req.headers['X-Slack-Request-Timestamp'] as string; + + if (Math.abs(Date.now() - Number(slackTimeStamp) * 1000) > 60 * 5 * 1000) { + res.status(400).send('Slack request verification failed due to expired timestamp'); + } + + const reqBody = req.body; + + const signatureBase = 'v0:' + slackTimeStamp + ':' + reqBody; + + const finalSignature = + 'v0=' + crypto.createHmac('sha256', '124ce6afb575881aa36952d6abd4af0b').update(signatureBase).digest('hex'); + + if ( + crypto.timingSafeEqual( + Uint8Array.from(Buffer.from(finalSignature, 'utf8')), + Uint8Array.from(Buffer.from(slackSignature, 'utf8')) + ) + ) { + slackServices.processEvent(reqBody); + res.status(200).send('Event recieved'); + } + + res.status(400).send('Slack request verification failed due to incorrect signature'); + */ + } +} diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts new file mode 100644 index 0000000000..6e0c91e26e --- /dev/null +++ b/src/backend/src/routes/slack.routes.ts @@ -0,0 +1,10 @@ +import { slackEvents } from '../..'; + +slackEvents.on('message', async (event) => { + try { + console.log(`Message received: ${event.text}`); + // Respond or process the message as needed + } catch (error) { + console.error('Error handling message event:', error); + } +}); From 3369a6e153b317f8335624eac841dac835ff2957 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 16:01:47 -0500 Subject: [PATCH 246/320] #2999-remove notification endpoint created --- src/backend/src/controllers/users.controllers.ts | 13 +++++++++++++ src/backend/src/routes/users.routes.ts | 5 +++++ src/backend/src/services/users.services.ts | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index e491d3f4f4..bf965c8d8e 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -203,4 +203,17 @@ export default class UsersController { next(error); } } + + static async removeUserNotification(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { notificationId } = req.body; + const { organization } = req; + + const unreadNotifications = await UsersService.removeUserNotification(userId, notificationId, organization); + res.status(200).json(unreadNotifications); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 34ae1a0136..622a6fb01c 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -55,5 +55,10 @@ userRouter.post( UsersController.getManyUserTasks ); userRouter.get('/:userId/notifications', UsersController.getUserUnreadNotifications); +userRouter.post( + '/:userId/notifications/remove', + nonEmptyString(body('notificationId')), + UsersController.removeUserNotification +); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index d9d37b259e..3b5ecf3bdc 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -578,4 +578,20 @@ export default class UsersService { return requestedUser.unreadNotifications.map(notificationTransformer); } + + static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { + const requestedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadNotifications: { + disconnect: { + notificationId + } + } + }, + include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } + }); + + return requestedUser.unreadNotifications.map(notificationTransformer); + } } From 4ad0bef2530b71866d31a7cb5df8b03f47447856 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 16:18:54 -0500 Subject: [PATCH 247/320] #2999-created tests --- src/backend/src/services/users.services.ts | 10 +++++-- src/backend/tests/unmocked/users.test.ts | 33 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 3b5ecf3bdc..fce1944a57 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -580,7 +580,13 @@ export default class UsersService { } static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { - const requestedUser = await prisma.user.update({ + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + const updatedUser = await prisma.user.update({ where: { userId }, data: { unreadNotifications: { @@ -592,6 +598,6 @@ export default class UsersService { include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } }); - return requestedUser.unreadNotifications.map(notificationTransformer); + return updatedUser.unreadNotifications.map(notificationTransformer); } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 14d8b0bffe..512a651b90 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -69,4 +69,37 @@ describe('User Tests', () => { expect(notifications[1].text).toBe('test2'); }); }); + + describe('Remove Notifications', () => { + it('Fails with invalid user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); + + await expect( + async () => await UsersService.removeUserNotification('1', notifications[0].notificationId, organization) + ).rejects.toThrow(new NotFoundException('User', '1')); + }); + + it('Succeeds and gets user notifications', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + await NotificationsService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); + + const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); + + expect(notifications).toHaveLength(2); + expect(notifications[0].text).toBe('test1'); + expect(notifications[1].text).toBe('test2'); + + const updatedNotifications = await UsersService.removeUserNotification( + testBatman.userId, + notifications[0].notificationId, + organization + ); + + expect(updatedNotifications).toHaveLength(1); + expect(updatedNotifications[0].text).toBe('test2'); + }); + }); }); From bc4200482fd5cd091cde97e9a3a3edd628becb0d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 18:47:18 -0500 Subject: [PATCH 248/320] #2999-javadocs --- src/backend/src/services/users.services.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index fce1944a57..1358ca5f6c 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -569,6 +569,12 @@ export default class UsersService { return resolvedTasks.flat(); } + /** + * Gets all of a user's unread notifications + * @param userId id of user to get unread notifications from + * @param organization the user's orgainzation + * @returns the unread notifications of the user + */ static async getUserUnreadNotifications(userId: string, organization: Organization) { const requestedUser = await prisma.user.findUnique({ where: { userId }, @@ -579,6 +585,13 @@ export default class UsersService { return requestedUser.unreadNotifications.map(notificationTransformer); } + /** + * Removes a notification from the user's unread notifications + * @param userId id of the user to remove notification from + * @param notificationId id of the notification to remove + * @param organization the user's organization + * @returns the user's updated unread notifications + */ static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { const requestedUser = await prisma.user.findUnique({ where: { userId } From 7a9985d68d8bb6950ebddf282686c8e0ba656fa6 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 19:35:07 -0500 Subject: [PATCH 249/320] #3044-slack event received --- .../src/controllers/slack.controllers.ts | 27 ++++++++++++------- src/backend/src/services/slack.services.ts | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts index e3c042291b..51388961a6 100644 --- a/src/backend/src/controllers/slack.controllers.ts +++ b/src/backend/src/controllers/slack.controllers.ts @@ -1,42 +1,51 @@ import { Request, Response } from 'express'; -import crypto from 'crypto'; +//import crypto from 'crypto'; import slackServices from '../services/slack.services'; export default class slackController { static async handleEvent(req: Request, res: Response) { console.log('got a slack req'); if (req.body.type === 'url_verification') { - return res.status(200).send({ challenge: req.body.challenge }); + res.status(200).send({ challenge: req.body.challenge }); } - const slackSignature = req.headers['x-slack-signature'] as string; + console.log('EVENT'); + + //const slackSignature = req.headers['x-slack-signature'] as string; const slackTimeStamp = req.headers['X-Slack-Request-Timestamp'] as string; if (Math.abs(Date.now() - Number(slackTimeStamp) * 1000) > 60 * 5 * 1000) { - return res.status(400).send('Slack request verification failed due to expired timestamp'); + res.status(400).send('Slack request verification failed due to expired timestamp'); } - + /* const reqBody = req.body; const signatureBase = 'v0:' + slackTimeStamp + ':' + reqBody; - + const finalSignature = 'v0=' + crypto .createHmac('sha256', process.env.SLACK_BOT_TOKEN ? process.env.SLACK_BOT_TOKEN : '') .update(signatureBase) .digest('hex'); + */ + console.log('PROCESSING'); + slackServices.processEvent(req.body); + res.status(200).send('Event recieved'); + /* if ( crypto.timingSafeEqual( Uint8Array.from(Buffer.from(finalSignature, 'utf8')), Uint8Array.from(Buffer.from(slackSignature, 'utf8')) ) ) { + console.log('WORKING'); slackServices.processEvent(req.body); - return res.status(200).send('Event recieved'); + res.status(200).send('Event recieved'); } - - return res.status(400).send('Slack request verification failed due to incorrect signature'); + console.log('INVALID SIGNITURE'); + res.status(400).send('Slack request verification failed due to incorrect signature'); + */ } } diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 641c746314..20cbd3039f 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -1,5 +1,5 @@ export default class slackServices { - static async processEvent(req: any ) { + static async processEvent(req: any) { //TODO: process request console.log(req); } From 5516efd2d863dd29cf289988fc8bc9733cea429b Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 19:55:14 -0500 Subject: [PATCH 250/320] #3044-receiving events --- package.json | 1 + src/backend/index.ts | 5 + .../src/controllers/slack.controllers.ts | 43 ------ src/backend/src/routes/slack.routes.ts | 11 +- yarn.lock | 130 +++++++++++++++++- 5 files changed, 134 insertions(+), 56 deletions(-) delete mode 100644 src/backend/src/controllers/slack.controllers.ts diff --git a/package.json b/package.json index bc13987bec..6530b87e3e 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@types/react-dom": "17.0.1" }, "dependencies": { + "@slack/events-api": "^3.0.1", "mitt": "^3.0.1", "react-hook-form-persist": "^3.0.0", "typescript": "^4.1.5" diff --git a/src/backend/index.ts b/src/backend/index.ts index babf50b843..abe9cc0a61 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -17,6 +17,7 @@ import workPackageTemplatesRouter from './src/routes/work-package-templates.rout import carsRouter from './src/routes/cars.routes'; import organizationRouter from './src/routes/organizations.routes'; import recruitmentRouter from './src/routes/recruitment.routes'; +import { slackEvents } from './src/routes/slack.routes'; const app = express(); @@ -40,6 +41,10 @@ const options: cors.CorsOptions = { allowedHeaders }; +// so we can listen to slack messages +// NOTE: must be done before using json +app.use('/slack', slackEvents.requestListener()); + // so that we can use cookies and json app.use(cookieParser()); app.use(express.json()); diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts deleted file mode 100644 index 028272c075..0000000000 --- a/src/backend/src/controllers/slack.controllers.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Request, Response } from 'express'; -import crypto from 'crypto'; -import slackServices from '../services/slack.services'; - -export default class slackController { - static async handleEvent(req: Request, res: Response) { - console.log('got a slack req'); - /* - if (req.body.type === 'url_verification') { - res.status(200).send({ challenge: req.body.challenge }); - } - */ - res.status(200).send({ challenge: req.body.challenge }); - - /* - const slackSignature = req.headers['x-slack-signature'] as string; - const slackTimeStamp = req.headers['X-Slack-Request-Timestamp'] as string; - - if (Math.abs(Date.now() - Number(slackTimeStamp) * 1000) > 60 * 5 * 1000) { - res.status(400).send('Slack request verification failed due to expired timestamp'); - } - - const reqBody = req.body; - - const signatureBase = 'v0:' + slackTimeStamp + ':' + reqBody; - - const finalSignature = - 'v0=' + crypto.createHmac('sha256', '124ce6afb575881aa36952d6abd4af0b').update(signatureBase).digest('hex'); - - if ( - crypto.timingSafeEqual( - Uint8Array.from(Buffer.from(finalSignature, 'utf8')), - Uint8Array.from(Buffer.from(slackSignature, 'utf8')) - ) - ) { - slackServices.processEvent(reqBody); - res.status(200).send('Event recieved'); - } - - res.status(400).send('Slack request verification failed due to incorrect signature'); - */ - } -} diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts index 6e0c91e26e..ebefdc8840 100644 --- a/src/backend/src/routes/slack.routes.ts +++ b/src/backend/src/routes/slack.routes.ts @@ -1,10 +1,7 @@ -import { slackEvents } from '../..'; +import { createEventAdapter } from '@slack/events-api'; + +export const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET || ''); slackEvents.on('message', async (event) => { - try { - console.log(`Message received: ${event.text}`); - // Respond or process the message as needed - } catch (error) { - console.error('Error handling message event:', error); - } + console.log('EVENT:', event); }); diff --git a/yarn.lock b/yarn.lock index 139b47dd19..3ae1a42802 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3260,6 +3260,30 @@ __metadata: languageName: node linkType: hard +"@slack/events-api@npm:^3.0.1": + version: 3.0.1 + resolution: "@slack/events-api@npm:3.0.1" + dependencies: + "@types/debug": ^4.1.4 + "@types/express": ^4.17.0 + "@types/lodash.isstring": ^4.0.6 + "@types/node": ">=12.13.0 < 13" + "@types/yargs": ^15.0.4 + debug: ^2.6.1 + express: ^4.0.0 + lodash.isstring: ^4.0.1 + raw-body: ^2.3.3 + tsscmp: ^1.0.6 + yargs: ^15.3.1 + dependenciesMeta: + express: + optional: true + bin: + slack-verify: dist/verify.js + checksum: ce62dc2ee9dd93b88820e18f88f543228740243dc390caf49b3a7e1ad351b298e3961898bd78f5eb43e9f6acac067458257cd34c9661089f684bb5cf4af468c3 + languageName: node + linkType: hard + "@slack/logger@npm:^3.0.0": version: 3.0.0 resolution: "@slack/logger@npm:3.0.0" @@ -3706,7 +3730,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.1.7": +"@types/debug@npm:^4.1.4, @types/debug@npm:^4.1.7": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -3756,6 +3780,18 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: b0576eddc2d25ccdf10e68ba09598b87a4d7b2ad04a81dc847cb39fe56beb0b6a5cc017b1e00aa0060cb3b38e700384ce96d291a116a0f1e54895564a104aae9 + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:^5.0.0": version: 5.0.2 resolution: "@types/express-serve-static-core@npm:5.0.2" @@ -3789,6 +3825,18 @@ __metadata: languageName: node linkType: hard +"@types/express@npm:^4.17.0": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 + languageName: node + linkType: hard + "@types/file-saver@npm:^2.0.5": version: 2.0.7 resolution: "@types/file-saver@npm:2.0.7" @@ -3939,7 +3987,16 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.14.175": +"@types/lodash.isstring@npm:^4.0.6": + version: 4.0.9 + resolution: "@types/lodash.isstring@npm:4.0.9" + dependencies: + "@types/lodash": "*" + checksum: ef381be69b459caa42d7c5dc4ff5b3653e6b3c9b2393f6e92848efeafe7690438e058b26f036b11b4e535fc7645ff12d1203847b9a82e9ae0593bdd3b25a971b + languageName: node + linkType: hard + +"@types/lodash@npm:*, @types/lodash@npm:^4.14.175": version: 4.17.13 resolution: "@types/lodash@npm:4.17.13" checksum: d0bf8fbd950be71946e0076b30fd40d492293baea75f05931b6b5b906fd62583708c6229abdb95b30205ad24ce1ed2f48bc9d419364f682320edd03405cc0c7e @@ -4008,6 +4065,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=12.13.0 < 13": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 + languageName: node + linkType: hard + "@types/nodemailer@npm:^6.4.0": version: 6.4.17 resolution: "@types/nodemailer@npm:6.4.17" @@ -4292,7 +4356,7 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^15.0.0": +"@types/yargs@npm:^15.0.0, @types/yargs@npm:^15.0.4": version: 15.0.19 resolution: "@types/yargs@npm:15.0.19" dependencies: @@ -8054,7 +8118,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.1": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -10062,6 +10126,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.0.0": + version: 4.21.2 + resolution: "express@npm:4.21.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: ~1.1.2 + on-finished: 2.4.1 + parseurl: ~1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: ~2.0.7 + qs: 6.13.0 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 3aef1d355622732e20b8f3a7c112d4391d44e2131f4f449e1f273a309752a41abfad714e881f177645517cbe29b3ccdc10b35e7e25c13506114244a5b72f549d + languageName: node + linkType: hard + "express@npm:^4.17.1": version: 4.21.1 resolution: "express@npm:4.21.1" @@ -10464,6 +10567,7 @@ __metadata: "@babel/plugin-transform-object-assign": ^7.18.6 "@babel/preset-react": ^7.18.6 "@babel/preset-typescript": ^7.18.6 + "@slack/events-api": ^3.0.1 "@types/jest": ^28.1.6 "@types/node": 18.17.1 "@typescript-eslint/eslint-plugin": 4.18.0 @@ -15863,6 +15967,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: ab237858bee7b25ecd885189f175ab5b5161e7b712b360d44f5c4516b8d271da3e4bf7bf0a7b9153ecb04c7d90ce8ff5158614e1208819cf62bac2b08452722e + languageName: node + linkType: hard + "path-to-regexp@npm:^1.7.0": version: 1.9.0 resolution: "path-to-regexp@npm:1.9.0" @@ -17379,7 +17490,7 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.2": +"raw-body@npm:2.5.2, raw-body@npm:^2.3.3": version: 2.5.2 resolution: "raw-body@npm:2.5.2" dependencies: @@ -20522,6 +20633,13 @@ __metadata: languageName: node linkType: hard +"tsscmp@npm:^1.0.6": + version: 1.0.6 + resolution: "tsscmp@npm:1.0.6" + checksum: 1512384def36bccc9125cabbd4c3b0e68608d7ee08127ceaa0b84a71797263f1a01c7f82fa69be8a3bd3c1396e2965d2f7b52d581d3a5eeaf3967fbc52e3b3bf + languageName: node + linkType: hard + "tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -22349,7 +22467,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.4.1": +"yargs@npm:^15.3.1, yargs@npm:^15.4.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: From 46b80c73ebf71042a8f949731ac5783c19d9b451 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 15 Dec 2024 21:28:28 -0500 Subject: [PATCH 251/320] #3000-created remove hook --- .../src/services/design-reviews.services.ts | 3 +++ src/frontend/src/apis/users.api.ts | 15 ++++++------ .../src/components/NotificationAlert.tsx | 18 ++++++++++---- .../src/components/NotificationCard.tsx | 5 ++-- src/frontend/src/hooks/users.hooks.ts | 24 ++++++++++++++++++- src/frontend/src/utils/urls.ts | 4 ++-- 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 8f7511b73c..1804e9ffcc 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,6 +39,7 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; +import NotificationsService from './notifications.services'; export default class DesignReviewsService { /** @@ -211,6 +212,8 @@ export default class DesignReviewsService { await sendSlackDRNotifications(teams, designReview, submitter, wbsElement.name); } + NotificationsService.sendNotifcationToUsers('DR created!', 'star', [submitter.userId], organization.organizationId); + return designReviewTransformer(designReview); } diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index 3bcc945281..5a91bff5fd 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -24,7 +24,6 @@ import { import { AuthenticatedUser, UserSettings } from 'shared'; import { projectTransformer } from './transformers/projects.transformers'; import { taskTransformer } from './transformers/tasks.transformers'; -import notificationTransformer from '../../../backend/src/transformers/notification.transformer'; /** * Fetches all users. @@ -162,13 +161,6 @@ export const getManyUserTasks = (userIds: string[]) => { ); }; -/* - * Sends a notification to the user with the given id - */ -export const sendNotification = (id: string, notification: Notification) => { - return axios.post(apiUrls.userSendNotifications(id), notification); -}; - /* * Gets all unread notifications of the user with the given id */ @@ -177,3 +169,10 @@ export const getNotifications = (id: string) => { transformResponse: (data) => JSON.parse(data) }); }; + +/* + * Removes a notification from the user with the given id + */ +export const removeNotification = (userId: string, notificationId: string) => { + return axios.post(apiUrls.userRemoveNotifications(userId), { notificationId }); +}; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index 9b60b48760..e7295c119a 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -1,17 +1,23 @@ import { Box } from '@mui/material'; import React from 'react'; -import { User } from 'shared'; +import { Notification, User } from 'shared'; import NotificationCard from './NotificationCard'; -import { useUserNotifications } from '../hooks/users.hooks'; +import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; interface NotificationAlertProps { user: User; } const NotificationAlert: React.FC = ({ user }) => { - const { data: notifications } = useUserNotifications(user.userId); + const { data: notifications, isLoading: notificationIsLoading } = useUserNotifications(user.userId); + const { mutateAsync: removeNotification } = useRemoveUserNotification(user.userId); - const currentNotification = notifications && notifications.length > 0 ? notifications[0] : undefined; + const currentNotification = + !notificationIsLoading && notifications && notifications.length > 0 ? notifications[0] : undefined; + + const removeNotificationWrapper = async (notification: Notification) => { + await removeNotification(notification); + }; return ( = ({ user }) => { transition: 'transform 0.5s ease-out' }} > - {currentNotification && } + {currentNotification && ( + + )} ); }; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index 432517fa98..5f2a213bc2 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -5,9 +5,10 @@ import CloseIcon from '@mui/icons-material/Close'; interface NotificationCardProps { notification: Notification; + removeNotification: (notificationId: Notification) => Promise; } -const NotificationCard: React.FC = ({ notification }) => { +const NotificationCard: React.FC = ({ notification, removeNotification }) => { const theme = useTheme(); return ( @@ -51,7 +52,7 @@ const NotificationCard: React.FC = ({ notification }) => }} > {notification.text} - + removeNotification(notification)}>
    diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index e2278ee136..32279217f9 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -20,7 +20,8 @@ import { updateUserScheduleSettings, getUserTasks, getManyUserTasks, - getNotifications + getNotifications, + removeNotification } from '../apis/users.api'; import { User, @@ -274,3 +275,24 @@ export const useUserNotifications = (userId: string) => { return data; }); }; + +/** + * Curstom react hook to remove a notification from a user's unread notifications + * @param userId id of user to get unread notifications from + * @returns + */ +export const useRemoveUserNotification = (userId: string) => { + const queryClient = useQueryClient(); + return useMutation( + ['users', userId, 'notifications', 'remove'], + async (notification: Notification) => { + const { data } = await removeNotification(userId, notification.notificationId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['users', userId, 'notifications']); + } + } + ); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index e5e5a207c0..d50675ed69 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -26,8 +26,8 @@ const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; const manyUserTasks = () => `${users()}/tasks/get-many`; -const userSendNotifications = (id: string) => `${usersById(id)}/notifications/send`; const userNotifications = (id: string) => `${usersById(id)}/notifications`; +const userRemoveNotifications = (id: string) => `${usersById(id)}/notifications/remove`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -214,8 +214,8 @@ export const apiUrls = { userScheduleSettingsSet, userTasks, manyUserTasks, - userSendNotifications, userNotifications, + userRemoveNotifications, projects, allProjects, From 6b4c7a9466b18f7f30a25c1d56a9ac8552a3c20c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 16 Dec 2024 14:39:51 -0500 Subject: [PATCH 252/320] #3000-mulitple notifications showing --- .../src/services/design-reviews.services.ts | 3 --- .../src/components/NotificationAlert.tsx | 17 +++++++++++------ .../src/components/NotificationCard.tsx | 7 ++++--- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 1804e9ffcc..8f7511b73c 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,7 +39,6 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; -import NotificationsService from './notifications.services'; export default class DesignReviewsService { /** @@ -212,8 +211,6 @@ export default class DesignReviewsService { await sendSlackDRNotifications(teams, designReview, submitter, wbsElement.name); } - NotificationsService.sendNotifcationToUsers('DR created!', 'star', [submitter.userId], organization.organizationId); - return designReviewTransformer(designReview); } diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index e7295c119a..e053d6fcaf 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -1,5 +1,5 @@ import { Box } from '@mui/material'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { Notification, User } from 'shared'; import NotificationCard from './NotificationCard'; import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; @@ -9,13 +9,18 @@ interface NotificationAlertProps { } const NotificationAlert: React.FC = ({ user }) => { - const { data: notifications, isLoading: notificationIsLoading } = useUserNotifications(user.userId); - const { mutateAsync: removeNotification } = useRemoveUserNotification(user.userId); + const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(user.userId); + const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(user.userId); + const [currentNotification, setCurrentNotification] = useState(); - const currentNotification = - !notificationIsLoading && notifications && notifications.length > 0 ? notifications[0] : undefined; + useEffect(() => { + if (notifications && notifications.length > 0) { + setCurrentNotification(notifications[0]); + } + }, [notifications]); const removeNotificationWrapper = async (notification: Notification) => { + setCurrentNotification(undefined); await removeNotification(notification); }; @@ -29,7 +34,7 @@ const NotificationAlert: React.FC = ({ user }) => { transition: 'transform 0.5s ease-out' }} > - {currentNotification && ( + {!removeIsLoading && !notificationsIsLoading && currentNotification && ( )}
    diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index 5f2a213bc2..a25f1d240e 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -1,4 +1,4 @@ -import { Box, Icon, IconButton, Typography, useTheme } from '@mui/material'; +import { Box, Card, Icon, IconButton, Typography, useTheme } from '@mui/material'; import React from 'react'; import { Notification } from 'shared'; import CloseIcon from '@mui/icons-material/Close'; @@ -12,7 +12,8 @@ const NotificationCard: React.FC = ({ notification, remov const theme = useTheme(); return ( - = ({ notification, remov -
    + ); }; From 56e668c7aef56b3bcca4f3636090451c6628b36d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 16 Dec 2024 15:21:52 -0500 Subject: [PATCH 253/320] #3000-added notifications to sercives --- .../src/services/change-requests.services.ts | 14 ++++++++++++++ .../src/services/design-reviews.services.ts | 8 ++++++++ src/frontend/src/components/NotificationCard.tsx | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/backend/src/services/change-requests.services.ts b/src/backend/src/services/change-requests.services.ts index 89cbaaa370..1cbd4a0611 100644 --- a/src/backend/src/services/change-requests.services.ts +++ b/src/backend/src/services/change-requests.services.ts @@ -46,6 +46,7 @@ import { import { ChangeRequestQueryArgs, getChangeRequestQueryArgs } from '../prisma-query-args/change-requests.query-args'; import proposedSolutionTransformer from '../transformers/proposed-solutions.transformer'; import { getProposedSolutionQueryArgs } from '../prisma-query-args/proposed-solutions.query-args'; +import NotificationsService from './notifications.services'; export default class ChangeRequestsService { /** @@ -153,6 +154,12 @@ export default class ChangeRequestsService { // send a reply to a CR's notifications of its updated status await sendSlackCRStatusToThread(updated.notificationSlackThreads, foundCR.crId, foundCR.identifier, accepted); + await NotificationsService.sendNotifcationToUsers( + `CR #${updated.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, + accepted ? 'check_circle' : 'cancel', + [updated.submitter.userId], + organization.organizationId + ); return updated.crId; } @@ -1078,5 +1085,12 @@ export default class ChangeRequestsService { // send slack message to CR reviewers await sendSlackRequestedReviewNotification(newReviewers, changeRequestTransformer(foundCR)); + + await NotificationsService.sendNotifcationToUsers( + `Your review has been requested on CR #${foundCR.identifier}`, + 'edit_note', + newReviewers.map((reviewer) => reviewer.userId), + organization.organizationId + ); } } diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 8f7511b73c..83ceb74ceb 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,6 +39,7 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; +import NotificationsService from './notifications.services'; export default class DesignReviewsService { /** @@ -205,6 +206,13 @@ export default class DesignReviewsService { } } + await NotificationsService.sendNotifcationToUsers( + `You have been invited to the ${designReview.wbsElement.name} Design Review!`, + 'calendar_month', + members.map((member) => member.userId), + organization.organizationId + ); + const project = wbsElement.workPackage?.project; const teams = project?.teams; if (teams && teams.length > 0) { diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index a25f1d240e..d31e576588 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -31,7 +31,7 @@ const NotificationCard: React.FC = ({ notification, remov justifyContent: 'center', alignItems: 'center', padding: 2, - background: 'red', + background: theme.palette.primary.main, width: '30%', borderRadius: 4 }} From e5f2a44fa4d90eb0524df89059134c34e559e0dc Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 16 Dec 2024 15:25:17 -0500 Subject: [PATCH 254/320] #3000-removed test notifications --- src/backend/src/prisma/seed.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index 6fed93e2c2..fdb5ffefdb 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1894,9 +1894,6 @@ const performSeed: () => Promise = async () => { await RecruitmentServices.createFaq(batman, 'When was FinishLine created?', 'FinishLine was created in 2019', ner); await RecruitmentServices.createFaq(batman, 'How many developers are working on FinishLine?', '178 as of 2024', ner); - - await NotificationsService.sendNotifcationToUsers('test1', 'star', [thomasEmrax.userId], ner.organizationId); - await NotificationsService.sendNotifcationToUsers('test2', 'star', [thomasEmrax.userId], ner.organizationId); }; performSeed() From 07180f93136a419180f22e65690c2fc25ed96462 Mon Sep 17 00:00:00 2001 From: jessegarcia1 Date: Mon, 16 Dec 2024 15:51:28 -0500 Subject: [PATCH 255/320] #2817 functions to const and removed line --- .../src/pages/HomePage/components/DesignReviewCard.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index c26badf593..7ecf0dac6a 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -36,9 +36,7 @@ const DesignReviewInfo = ({ icon, text, link }: { icon: React.ReactNode; text: s const DisplayStatus: React.FC = ({ designReview, user }) => { const history = useHistory(); - const confirmedMemberIds = designReview.confirmedMembers.map((user) => user.userId); - console.log('CONFIRMED:', confirmedMemberIds); return ( <> @@ -61,14 +59,14 @@ const DisplayStatus: React.FC = ({ designReview, user }) => { ); }; -function getWeekday(date: Date): string { +const getWeekday = (date: Date): string => { const weekdays: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; return weekdays[date.getDay()]; -} +}; -function removeYear(str: string): string { +const removeYear = (str: string): string => { return str.substring(0, str.length - 5); -} +}; const UpcomingDesignReviewsCard: React.FC = ({ designReview, user }) => { const theme = useTheme(); From 8477e8723ecdcc52d5934edbffde4697dd0fb9c8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:36:19 -0500 Subject: [PATCH 256/320] #3060-removed default image --- .../src/services/organizations.services.ts | 6 +----- src/frontend/public/default-logo.png | Bin 114559 -> 0 bytes src/frontend/src/hooks/organizations.hooks.ts | 13 +++++-------- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 6 +++--- .../EditGuestView/EditLogoForm.tsx | 10 ++++++---- .../pages/HomePage/components/LogoDisplay.tsx | 6 +++--- src/frontend/src/utils/image.utils.ts | 8 -------- 7 files changed, 18 insertions(+), 31 deletions(-) delete mode 100644 src/frontend/public/default-logo.png delete mode 100644 src/frontend/src/utils/image.utils.ts diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index ba785861cb..5feed48fc4 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -220,7 +220,7 @@ export default class OrganizationsService { * @param organizationId the id of the organization * @returns the id of the image */ - static async getLogoImage(organizationId: string): Promise { + static async getLogoImage(organizationId: string): Promise { const organization = await prisma.organization.findUnique({ where: { organizationId } }); @@ -229,10 +229,6 @@ export default class OrganizationsService { throw new NotFoundException('Organization', organizationId); } - if (!organization.logoImageId) { - throw new HttpException(404, `Organization ${organizationId} does not have a logo image`); - } - return organization.logoImageId; } diff --git a/src/frontend/public/default-logo.png b/src/frontend/public/default-logo.png deleted file mode 100644 index a549f0ea6997896cac671426ae22fa2b8366f8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114559 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�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 LTe(Eh>goRhAO`T! diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 4c04bc0c60..bd2f3ac964 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -11,7 +11,6 @@ import { setOrganizationFeaturedProjects } from '../apis/organizations.api'; import { downloadGoogleImage } from '../apis/finance.api'; -import { getDefaultImageData } from '../utils/image.utils'; interface OrganizationProvider { organizationId: string; @@ -99,13 +98,11 @@ export const useSetOrganizationLogo = () => { }; export const useOrganizationLogo = () => { - return useQuery(['organizations', 'logo'], async () => { - try { - const { data: fileId } = await getOrganizationLogo(); - return await downloadGoogleImage(fileId); - } catch { - // return default logo if fileId was not found - return await getDefaultImageData(); + return useQuery(['organizations', 'logo'], async () => { + const { data: fileId } = await getOrganizationLogo(); + if (!fileId) { + return; } + return await downloadGoogleImage(fileId); }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 6fd56bbe66..9ba6a4643e 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -15,7 +15,7 @@ const EditLogo = () => { const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); - if (isLoading || !mutateAsync || organizationIsLoading || !organization || !imageData || imageDataIsLoading) + if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; const handleClose = () => { @@ -60,12 +60,12 @@ const EditLogo = () => { ) : ( <> - + Promise; onHide: () => void; - orgLogo: File; + orgLogo?: File; } const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide }) => { @@ -24,7 +24,9 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } }); const onSubmitWrapper = async (data: EditLogoInput) => { - await onSubmit(data); + if (!!data.logoImage) { + await onSubmit(data); + } reset(); }; @@ -85,7 +87,7 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } hidden /> - {value.name !== 'undefined' && ( + {value && value.name !== 'undefined' && ( {value.name} diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index a0699c9916..e56da136cf 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -2,7 +2,7 @@ import { Box, useTheme, Card } from '@mui/material'; import React from 'react'; interface LogoDisplayProps { - imageUrl: string; + imageUrl?: string; } const LogoDisplay: React.FC = ({ imageUrl }) => { @@ -17,7 +17,7 @@ const LogoDisplay: React.FC = ({ imageUrl }) => { borderRadius: 2 }} > - = ({ imageUrl }) => { width: '100%', borderRadius: 2 }} - /> + />} ); }; diff --git a/src/frontend/src/utils/image.utils.ts b/src/frontend/src/utils/image.utils.ts deleted file mode 100644 index 198e07ed88..0000000000 --- a/src/frontend/src/utils/image.utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -import axios from 'axios'; - -export const getDefaultImageData = async () => { - const { data } = await axios.get('/default-logo.png', { - responseType: 'blob' - }); - return data; -}; From 53d5e72e5f409033ea357dd675c9c9663887f05c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:38:02 -0500 Subject: [PATCH 257/320] #3060-removed check for no logo --- src/backend/tests/unmocked/organization.test.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index dcfbdcf574..a66814357b 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -273,12 +273,6 @@ describe('Organization Tests', () => { ); }); - it('Fails if the organization does not have a logo image', async () => { - await expect(async () => await OrganizationsService.getLogoImage(orgId)).rejects.toThrow( - new HttpException(404, `Organization ${orgId} does not have a logo image`) - ); - }); - it('Succeeds and gets the image', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await OrganizationsService.setLogoImage( From 55f17f4d4dfc231a8344924c2ad5ff0f4cadf4fe Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:40:16 -0500 Subject: [PATCH 258/320] #3060-prettier --- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 3 +-- .../pages/HomePage/components/LogoDisplay.tsx | 20 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 9ba6a4643e..13ef97a3f6 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -15,8 +15,7 @@ const EditLogo = () => { const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); - if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) - return ; + if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; const handleClose = () => { setIsEditMode(false); diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index e56da136cf..0ebeb68db5 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -17,15 +17,17 @@ const LogoDisplay: React.FC = ({ imageUrl }) => { borderRadius: 2 }} > - {imageUrl && } + {imageUrl && ( + + )} ); }; From 2722e7dc164482749532790dd84c569f3160f2d5 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 18:17:03 -0500 Subject: [PATCH 259/320] #3060-added onboarding endpoints --- src/backend/index.ts | 2 ++ .../src/controllers/onboarding.controller.ts | 22 +++++++++++++++++++ src/backend/src/routes/onboarding.routes.ts | 8 +++++++ .../src/services/onboarding.services.ts | 12 ++++++++++ src/frontend/src/apis/onboarding.api.ts | 17 ++++++++++++++ src/frontend/src/hooks/organizations.hooks.ts | 2 +- src/frontend/src/utils/urls.ts | 5 +++++ 7 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/backend/src/controllers/onboarding.controller.ts create mode 100644 src/backend/src/routes/onboarding.routes.ts create mode 100644 src/backend/src/services/onboarding.services.ts create mode 100644 src/frontend/src/apis/onboarding.api.ts diff --git a/src/backend/index.ts b/src/backend/index.ts index babf50b843..680ead6886 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -17,6 +17,7 @@ import workPackageTemplatesRouter from './src/routes/work-package-templates.rout import carsRouter from './src/routes/cars.routes'; import organizationRouter from './src/routes/organizations.routes'; import recruitmentRouter from './src/routes/recruitment.routes'; +import onboardingRouter from './src/routes/onboarding.routes'; const app = express(); @@ -68,6 +69,7 @@ app.use('/templates', workPackageTemplatesRouter); app.use('/cars', carsRouter); app.use('/organizations', organizationRouter); app.use('/recruitment', recruitmentRouter); +app.use('/onboarding', onboardingRouter); app.use('/', (_req, res) => { res.status(200).json('Welcome to FinishLine'); }); diff --git a/src/backend/src/controllers/onboarding.controller.ts b/src/backend/src/controllers/onboarding.controller.ts new file mode 100644 index 0000000000..9c89420e78 --- /dev/null +++ b/src/backend/src/controllers/onboarding.controller.ts @@ -0,0 +1,22 @@ +import { NextFunction, Request, Response } from 'express'; +import OnboardingServices from '../services/onboarding.services'; + +export default class OnboardingController { + static async downloadImage(req: Request, res: Response, next: NextFunction) { + try { + const { fileId } = req.params; + console.log('FILE ID:', fileId); + + const imageData = await OnboardingServices.downloadImage(fileId); + + // Set the appropriate headers for the HTTP response + res.setHeader('content-type', String(imageData.type)); + res.setHeader('content-length', imageData.buffer.length); + + // Send the Buffer as the response body + res.send(imageData.buffer); + } catch (error: unknown) { + return next(error); + } + } +} diff --git a/src/backend/src/routes/onboarding.routes.ts b/src/backend/src/routes/onboarding.routes.ts new file mode 100644 index 0000000000..fabce68796 --- /dev/null +++ b/src/backend/src/routes/onboarding.routes.ts @@ -0,0 +1,8 @@ +import express from 'express'; +import OnboardingController from '../controllers/onboarding.controller'; + +const onboardingRouter = express.Router(); + +onboardingRouter.get('/image/:fileId', OnboardingController.downloadImage); + +export default onboardingRouter; diff --git a/src/backend/src/services/onboarding.services.ts b/src/backend/src/services/onboarding.services.ts new file mode 100644 index 0000000000..823451c580 --- /dev/null +++ b/src/backend/src/services/onboarding.services.ts @@ -0,0 +1,12 @@ +import { NotFoundException } from '../utils/errors.utils'; +import { downloadImageFile } from '../utils/google-integration.utils'; + +export default class OnboardingServices { + static async downloadImage(fileId: string) { + const fileData = await downloadImageFile(fileId); + console.log('FILE DATA RECEIVED'); + + if (!fileData) throw new NotFoundException('Image File', fileId); + return fileData; + } +} diff --git a/src/frontend/src/apis/onboarding.api.ts b/src/frontend/src/apis/onboarding.api.ts new file mode 100644 index 0000000000..e6cbf8c53a --- /dev/null +++ b/src/frontend/src/apis/onboarding.api.ts @@ -0,0 +1,17 @@ +import axios from 'axios'; +import { apiUrls } from '../utils/urls'; + +/** + * API Call to download a google image + * @param fileId file id to be downloaded + * @returns an image blob + */ +export const downloadGoogleImage = async (fileId: string): Promise => { + const response = await axios.get(apiUrls.imageById(fileId), { + responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer + }); + console.log('ID IN API:', fileId); + const imageBuffer = new Uint8Array(response.data); + const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); + return imageBlob; +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index bd2f3ac964..ddcbaf1190 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -10,7 +10,7 @@ import { setOrganizationLogo, setOrganizationFeaturedProjects } from '../apis/organizations.api'; -import { downloadGoogleImage } from '../apis/finance.api'; +import { downloadGoogleImage } from '../apis/onboarding.api'; interface OrganizationProvider { organizationId: string; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 4cb11c03e9..ae65afe744 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -196,6 +196,10 @@ const faqCreate = () => `${recruitment()}/faq/create`; const faqEdit = (id: string) => `${recruitment()}/faq/${id}/edit`; const faqDelete = (id: string) => `${recruitment()}/faq/${id}/delete`; +/************** Onboarding Endpoints ***************/ +const onboarding = () => `${API_URL}/onboarding`; +const imageById = (imageId: string) => `${onboarding()}/image/${imageId}`; + /**************** Other Endpoints ****************/ const version = () => `https://api.github.com/repos/Northeastern-Electric-Racing/FinishLine/releases/latest`; @@ -354,6 +358,7 @@ export const apiUrls = { faqCreate, faqEdit, faqDelete, + imageById, version }; From 8806ff1084eed9904c7cedd9dff62eb40e40a728 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 20:30:41 -0500 Subject: [PATCH 260/320] #3000-goes to link on click --- .../migration.sql | 1 + src/backend/src/prisma/schema.prisma | 5 +- .../src/services/change-requests.services.ts | 17 ++---- .../src/services/design-reviews.services.ts | 9 +-- .../src/services/notifications.services.ts | 12 +++- .../transformers/notifications.transformer.ts | 3 +- src/backend/src/utils/notifications.utils.ts | 58 ++++++++++++++++++- .../notifications.transformers.ts | 13 ----- .../src/components/NotificationAlert.tsx | 16 ++++- .../src/components/NotificationCard.tsx | 51 +++++++++------- src/shared/src/types/notifications.types.ts | 1 + 11 files changed, 125 insertions(+), 61 deletions(-) rename src/backend/src/prisma/migrations/{20241211195435_announcements_and_notifications => 20241217232127_announcements_and_notifications}/migration.sql (98%) delete mode 100644 src/frontend/src/apis/transformers/notifications.transformers.ts diff --git a/src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql b/src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql similarity index 98% rename from src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql rename to src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql index c57afabd25..fac3e9f480 100644 --- a/src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql +++ b/src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql @@ -13,6 +13,7 @@ CREATE TABLE "Notification" ( "notificationId" TEXT NOT NULL, "text" TEXT NOT NULL, "iconName" TEXT NOT NULL, + "eventLink" TEXT, CONSTRAINT "Notification_pkey" PRIMARY KEY ("notificationId") ); diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index c06ca3d45f..e0157c3353 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -941,8 +941,9 @@ model Announcement { } model Notification { - notificationId String @id @default(uuid()) + notificationId String @id @default(uuid()) text String iconName String - users User[] @relation("userNotifications") + users User[] @relation("userNotifications") + eventLink String? } diff --git a/src/backend/src/services/change-requests.services.ts b/src/backend/src/services/change-requests.services.ts index 1cbd4a0611..85e0dc5579 100644 --- a/src/backend/src/services/change-requests.services.ts +++ b/src/backend/src/services/change-requests.services.ts @@ -46,7 +46,7 @@ import { import { ChangeRequestQueryArgs, getChangeRequestQueryArgs } from '../prisma-query-args/change-requests.query-args'; import proposedSolutionTransformer from '../transformers/proposed-solutions.transformer'; import { getProposedSolutionQueryArgs } from '../prisma-query-args/proposed-solutions.query-args'; -import NotificationsService from './notifications.services'; +import { sendHomeCrRequestReviewNotification, sendHomeCrReviewedNotification } from '../utils/notifications.utils'; export default class ChangeRequestsService { /** @@ -151,15 +151,11 @@ export default class ChangeRequestsService { // send a notification to the submitter that their change request has been reviewed await sendCRSubmitterReviewedNotification(updated); + await sendHomeCrReviewedNotification(foundCR, updated.submitter, accepted, organization.organizationId); + // send a reply to a CR's notifications of its updated status await sendSlackCRStatusToThread(updated.notificationSlackThreads, foundCR.crId, foundCR.identifier, accepted); - await NotificationsService.sendNotifcationToUsers( - `CR #${updated.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, - accepted ? 'check_circle' : 'cancel', - [updated.submitter.userId], - organization.organizationId - ); return updated.crId; } @@ -1086,11 +1082,6 @@ export default class ChangeRequestsService { // send slack message to CR reviewers await sendSlackRequestedReviewNotification(newReviewers, changeRequestTransformer(foundCR)); - await NotificationsService.sendNotifcationToUsers( - `Your review has been requested on CR #${foundCR.identifier}`, - 'edit_note', - newReviewers.map((reviewer) => reviewer.userId), - organization.organizationId - ); + await sendHomeCrRequestReviewNotification(foundCR, newReviewers, organization.organizationId); } } diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 83ceb74ceb..644903fa43 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,7 +39,7 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; -import NotificationsService from './notifications.services'; +import { sendHomeDrNotification } from '../utils/notifications.utils'; export default class DesignReviewsService { /** @@ -206,12 +206,7 @@ export default class DesignReviewsService { } } - await NotificationsService.sendNotifcationToUsers( - `You have been invited to the ${designReview.wbsElement.name} Design Review!`, - 'calendar_month', - members.map((member) => member.userId), - organization.organizationId - ); + await sendHomeDrNotification(designReview, members, submitter, wbsElement.name, organization.organizationId); const project = wbsElement.workPackage?.project; const teams = project?.teams; diff --git a/src/backend/src/services/notifications.services.ts b/src/backend/src/services/notifications.services.ts index 483e6ed9d6..e0617301f5 100644 --- a/src/backend/src/services/notifications.services.ts +++ b/src/backend/src/services/notifications.services.ts @@ -202,13 +202,21 @@ export default class NotificationsService { * @param iconName icon that appears in the notification * @param userIds ids of users to send the notification to * @param organizationId + * @param eventLink link the notification will go to when clicked * @returns the created notification */ - static async sendNotifcationToUsers(text: string, iconName: string, userIds: string[], organizationId: string) { + static async sendNotifcationToUsers( + text: string, + iconName: string, + userIds: string[], + organizationId: string, + eventLink?: string + ) { const createdNotification = await prisma.notification.create({ data: { text, - iconName + iconName, + eventLink }, ...getNotificationQueryArgs(organizationId) }); diff --git a/src/backend/src/transformers/notifications.transformer.ts b/src/backend/src/transformers/notifications.transformer.ts index 32666b151a..45dd25dee9 100644 --- a/src/backend/src/transformers/notifications.transformer.ts +++ b/src/backend/src/transformers/notifications.transformer.ts @@ -6,7 +6,8 @@ const notificationTransformer = (notification: Prisma.NotificationGetPayload { endOfDay.setDate(startOfDay.getDate() + 1); return endOfDay; }; + +export const sendHomeDrNotification = async ( + designReview: Design_Review, + members: User[], + submitter: User, + workPackageName: string, + organizationId: string +) => { + const designReviewLink = `/settings/preferences?drId=${designReview.designReviewId}`; + + const msg = `Design Review for ${workPackageName} is being scheduled by ${submitter.firstName} ${submitter.lastName}`; + await NotificationsService.sendNotifcationToUsers( + msg, + 'calendar_month', + members.map((member) => member.userId), + organizationId, + designReviewLink + ); +}; + +export const sendHomeCrReviewedNotification = async ( + changeRequest: Change_Request, + submitter: User, + accepted: boolean, + organizationId: string +) => { + const isProd = process.env.NODE_ENV === 'production'; + + const changeRequestLink = isProd + ? `https://finishlinebyner.com/change-requests/${changeRequest.crId}` + : `http://localhost:3000/change-requests/${changeRequest.crId}`; + await NotificationsService.sendNotifcationToUsers( + `CR #${changeRequest.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, + accepted ? 'check_circle' : 'cancel', + [submitter.userId], + organizationId, + changeRequestLink + ); +}; + +export const sendHomeCrRequestReviewNotification = async ( + changeRequest: Change_Request, + newReviewers: User[], + organizationId: string +) => { + const changeRequestLink = `/change-requests/${changeRequest.crId}`; + await NotificationsService.sendNotifcationToUsers( + `Your review has been requested on CR #${changeRequest.identifier}`, + 'edit_note', + newReviewers.map((reviewer) => reviewer.userId), + organizationId, + changeRequestLink + ); +}; diff --git a/src/frontend/src/apis/transformers/notifications.transformers.ts b/src/frontend/src/apis/transformers/notifications.transformers.ts deleted file mode 100644 index b429b61efc..0000000000 --- a/src/frontend/src/apis/transformers/notifications.transformers.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Notification } from 'shared'; - -/** - * Transforms a notification - * - * @param notification Incoming task object supplied by the HTTP response. - * @returns Properly transformed notification object. - */ -export const notificationTransformer = (notification: Notification): Notification => { - return { - ...notification - }; -}; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index e053d6fcaf..f334e06064 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -3,6 +3,8 @@ import React, { useEffect, useState } from 'react'; import { Notification, User } from 'shared'; import NotificationCard from './NotificationCard'; import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; +import { useHistory } from 'react-router-dom'; +import { routes } from '../utils/routes'; interface NotificationAlertProps { user: User; @@ -12,6 +14,7 @@ const NotificationAlert: React.FC = ({ user }) => { const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(user.userId); const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(user.userId); const [currentNotification, setCurrentNotification] = useState(); + const history = useHistory(); useEffect(() => { if (notifications && notifications.length > 0) { @@ -24,6 +27,13 @@ const NotificationAlert: React.FC = ({ user }) => { await removeNotification(notification); }; + const onClick = async (notification: Notification) => { + if (!!notification.eventLink) { + await removeNotification(notification); + history.push(notification.eventLink); + } + }; + return ( = ({ user }) => { }} > {!removeIsLoading && !notificationsIsLoading && currentNotification && ( - + )} ); diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index d31e576588..1e4cfb4c02 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -6,11 +6,11 @@ import CloseIcon from '@mui/icons-material/Close'; interface NotificationCardProps { notification: Notification; removeNotification: (notificationId: Notification) => Promise; + onClick: (notificationId: Notification) => Promise; } -const NotificationCard: React.FC = ({ notification, removeNotification }) => { +const NotificationCard: React.FC = ({ notification, removeNotification, onClick }) => { const theme = useTheme(); - return ( = ({ notification, remov > - await onClick(notification)} sx={{ - fontSize: 36 + display: 'flex', + gap: 1, + cursor: !!notification.eventLink ? 'pointer' : 'default' }} > - {notification.iconName} - - - - {notification.text} + + + {notification.iconName} + + + {notification.text} + removeNotification(notification)}> diff --git a/src/shared/src/types/notifications.types.ts b/src/shared/src/types/notifications.types.ts index e4419ef2ed..abd16fcd21 100644 --- a/src/shared/src/types/notifications.types.ts +++ b/src/shared/src/types/notifications.types.ts @@ -2,4 +2,5 @@ export interface Notification { notificationId: string; text: string; iconName: string; + eventLink?: string; } From 0ea40750d43045480cc67de897bbfd77a5bf4852 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 21:07:15 -0500 Subject: [PATCH 261/320] #3000-javadocs --- src/backend/src/utils/notifications.utils.ts | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/backend/src/utils/notifications.utils.ts b/src/backend/src/utils/notifications.utils.ts index da3ef08f19..7b28ae5b5c 100644 --- a/src/backend/src/utils/notifications.utils.ts +++ b/src/backend/src/utils/notifications.utils.ts @@ -38,6 +38,14 @@ export const endOfDayTomorrow = () => { return endOfDay; }; +/** + * Sends a finishline notification that a design review was scheduled + * @param designReview + * @param members + * @param submitter + * @param workPackageName + * @param organizationId + */ export const sendHomeDrNotification = async ( designReview: Design_Review, members: User[], @@ -57,6 +65,13 @@ export const sendHomeDrNotification = async ( ); }; +/** + * Sends a finishline notification that a change request was reviewed + * @param changeRequest + * @param submitter + * @param accepted + * @param organizationId + */ export const sendHomeCrReviewedNotification = async ( changeRequest: Change_Request, submitter: User, @@ -77,6 +92,12 @@ export const sendHomeCrReviewedNotification = async ( ); }; +/** + * Sends a finishline notification to all requested reviewers of a change request + * @param changeRequest + * @param newReviewers + * @param organizationId + */ export const sendHomeCrRequestReviewNotification = async ( changeRequest: Change_Request, newReviewers: User[], From 382e65b017c2fa462d9d0e617f99261b369c282f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 21:09:30 -0500 Subject: [PATCH 262/320] #3000-linting --- src/frontend/src/components/NotificationAlert.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index f334e06064..8fcc707855 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -4,7 +4,6 @@ import { Notification, User } from 'shared'; import NotificationCard from './NotificationCard'; import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; import { useHistory } from 'react-router-dom'; -import { routes } from '../utils/routes'; interface NotificationAlertProps { user: User; From c12b8ede495d402f01881000b2639357efa09b5f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 21:10:39 -0500 Subject: [PATCH 263/320] #3000-small fix --- src/frontend/src/components/NotificationAlert.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index 8fcc707855..581d849ef0 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -28,7 +28,7 @@ const NotificationAlert: React.FC = ({ user }) => { const onClick = async (notification: Notification) => { if (!!notification.eventLink) { - await removeNotification(notification); + await removeNotificationWrapper(notification); history.push(notification.eventLink); } }; From 47da71e6c99b92392230f85e0939f688f9a7dc2e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 22:14:49 -0500 Subject: [PATCH 264/320] #3000-consolidated migraations --- .../migration.sql | 8 ------ .../migration.sql | 9 ------ .../migration.sql | 9 ++++++ src/backend/src/utils/notifications.utils.ts | 28 +++++++++---------- 4 files changed, 23 insertions(+), 31 deletions(-) delete mode 100644 src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql delete mode 100644 src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql rename src/backend/src/prisma/migrations/{20241217232127_announcements_and_notifications => 20241218031222_home_page_updates}/migration.sql (85%) diff --git a/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql b/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql deleted file mode 100644 index fe5771a6b1..0000000000 --- a/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ --- AlterTable -ALTER TABLE "Organization" ADD COLUMN "logoImage" TEXT; - --- AlterTable -ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; - --- AddForeignKey -ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql b/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql deleted file mode 100644 index 2ddd9fa7b6..0000000000 --- a/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql +++ /dev/null @@ -1,9 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `logoImage` on the `Organization` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE "Organization" DROP COLUMN "logoImage", -ADD COLUMN "logoImageId" TEXT; diff --git a/src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql b/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql similarity index 85% rename from src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql rename to src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql index fac3e9f480..c7975f2e21 100644 --- a/src/backend/src/prisma/migrations/20241217232127_announcements_and_notifications/migration.sql +++ b/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql @@ -1,3 +1,9 @@ +-- AlterTable +ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT; + +-- AlterTable +ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; + -- CreateTable CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, @@ -42,6 +48,9 @@ CREATE UNIQUE INDEX "_userNotifications_AB_unique" ON "_userNotifications"("A", -- CreateIndex CREATE INDEX "_userNotifications_B_index" ON "_userNotifications"("B"); +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_userCreatedId_fkey" FOREIGN KEY ("userCreatedId") REFERENCES "User"("userId") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/src/backend/src/utils/notifications.utils.ts b/src/backend/src/utils/notifications.utils.ts index 7b28ae5b5c..c47ba9b7a0 100644 --- a/src/backend/src/utils/notifications.utils.ts +++ b/src/backend/src/utils/notifications.utils.ts @@ -40,11 +40,11 @@ export const endOfDayTomorrow = () => { /** * Sends a finishline notification that a design review was scheduled - * @param designReview - * @param members - * @param submitter - * @param workPackageName - * @param organizationId + * @param designReview dr that was created + * @param members optional and required members of the dr + * @param submitter the user who created the dr + * @param workPackageName the name of the work package associated witht the dr + * @param organizationId id of the organization of the dr */ export const sendHomeDrNotification = async ( designReview: Design_Review, @@ -67,10 +67,10 @@ export const sendHomeDrNotification = async ( /** * Sends a finishline notification that a change request was reviewed - * @param changeRequest - * @param submitter - * @param accepted - * @param organizationId + * @param changeRequest cr that was requested review + * @param submitter the user who submitted the cr + * @param accepted true if the cr changes were accepted, false if denied + * @param organizationId id of the organization of the cr */ export const sendHomeCrReviewedNotification = async ( changeRequest: Change_Request, @@ -94,20 +94,20 @@ export const sendHomeCrReviewedNotification = async ( /** * Sends a finishline notification to all requested reviewers of a change request - * @param changeRequest - * @param newReviewers - * @param organizationId + * @param changeRequest cr that was requested review + * @param reviewers user's reviewing the cr + * @param organizationId id of the organization of the cr */ export const sendHomeCrRequestReviewNotification = async ( changeRequest: Change_Request, - newReviewers: User[], + reviewers: User[], organizationId: string ) => { const changeRequestLink = `/change-requests/${changeRequest.crId}`; await NotificationsService.sendNotifcationToUsers( `Your review has been requested on CR #${changeRequest.identifier}`, 'edit_note', - newReviewers.map((reviewer) => reviewer.userId), + reviewers.map((reviewer) => reviewer.userId), organizationId, changeRequestLink ); From 2f337d9a9da3fd31fd980760e6a5bddb4734de22 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 23:50:44 -0500 Subject: [PATCH 265/320] #3074-created get unread announcements endpoint --- .../src/controllers/users.controllers.ts | 12 ++++++++++++ .../announcements.query.args.ts | 12 ++++++++++++ .../migration.sql | 4 +++- src/backend/src/prisma/schema.prisma | 16 +++++++++------- src/backend/src/routes/users.routes.ts | 1 + src/backend/src/services/users.services.ts | 18 ++++++++++++++++++ .../transformers/announcements.transformer.ts | 17 +++++++++++++++++ src/shared/index.ts | 1 + src/shared/src/types/announcements.types.ts | 10 ++++++++++ 9 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 src/backend/src/prisma-query-args/announcements.query.args.ts rename src/backend/src/prisma/migrations/{20241218031222_home_page_updates => 20241218044032_homepage_updates}/migration.sql (95%) create mode 100644 src/backend/src/transformers/announcements.transformer.ts create mode 100644 src/shared/src/types/announcements.types.ts diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index bf965c8d8e..cc084c714e 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -216,4 +216,16 @@ export default class UsersController { next(error); } } + + static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { organization } = req; + + const unreadAnnouncements = await UsersService.getUserUnreadAnnouncements(userId, organization); + res.status(200).json(unreadAnnouncements); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/prisma-query-args/announcements.query.args.ts b/src/backend/src/prisma-query-args/announcements.query.args.ts new file mode 100644 index 0000000000..2f0e1ba294 --- /dev/null +++ b/src/backend/src/prisma-query-args/announcements.query.args.ts @@ -0,0 +1,12 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type AnnouncementQueryArgs = ReturnType; + +export const getAnnouncementQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + usersReceived: getUserQueryArgs(organizationId), + userCreated: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql b/src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql similarity index 95% rename from src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql rename to src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql index c7975f2e21..f35a709d3f 100644 --- a/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql +++ b/src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql @@ -8,8 +8,10 @@ ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, - "dateCrated" TIMESTAMP(3) NOT NULL, + "dateCreated" TIMESTAMP(3) NOT NULL, "userCreatedId" TEXT NOT NULL, + "slackEventId" TEXT NOT NULL, + "slackChannelName" TEXT NOT NULL, CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") ); diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index e0157c3353..f70d812b2a 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -180,7 +180,7 @@ model User { deletedFrequentlyAskedQuestions FrequentlyAskedQuestion[] @relation(name: "frequentlyAskedQuestionDeleter") createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") - receivedAnnouncements Announcement[] @relation(name: "receivedAnnouncements") + unreadAnnouncements Announcement[] @relation(name: "receivedAnnouncements") createdAnnouncements Announcement[] @relation(name: "createdAnnouncements") unreadNotifications Notification[] @relation(name: "userNotifications") } @@ -932,12 +932,14 @@ model Milestone { } model Announcement { - announcementId String @id @default(uuid()) - text String - usersReceived User[] @relation("receivedAnnouncements") - dateCrated DateTime - userCreatedId String - userCreated User @relation("createdAnnouncements", fields: [userCreatedId], references: [userId]) + announcementId String @id @default(uuid()) + text String + usersReceived User[] @relation("receivedAnnouncements") + dateCreated DateTime + userCreatedId String + userCreated User @relation("createdAnnouncements", fields: [userCreatedId], references: [userId]) + slackEventId String + slackChannelName String } model Notification { diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 622a6fb01c..802d586500 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -55,6 +55,7 @@ userRouter.post( UsersController.getManyUserTasks ); userRouter.get('/:userId/notifications', UsersController.getUserUnreadNotifications); +userRouter.get('/:userId/announcements', UsersController.getUserUnreadAnnouncements); userRouter.post( '/:userId/notifications/remove', nonEmptyString(body('notificationId')), diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 1358ca5f6c..fff25ef56b 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -40,6 +40,8 @@ import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; import notificationTransformer from '../transformers/notifications.transformer'; +import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import announcementTransformer from '../transformers/announcements.transformer'; export default class UsersService { /** @@ -585,6 +587,22 @@ export default class UsersService { return requestedUser.unreadNotifications.map(notificationTransformer); } + /** + * Gets all of a user's unread announcements + * @param userId id of user to get unread announcements from + * @param organization the user's orgainzation + * @returns the unread announcements of the user + */ + static async getUserUnreadAnnouncements(userId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ + where: { userId }, + include: { unreadAnnouncements: getAnnouncementQueryArgs(organization.organizationId) } + }); + if (!requestedUser) throw new NotFoundException('User', userId); + + return requestedUser.unreadAnnouncements.map(announcementTransformer); + } + /** * Removes a notification from the user's unread notifications * @param userId id of the user to remove notification from diff --git a/src/backend/src/transformers/announcements.transformer.ts b/src/backend/src/transformers/announcements.transformer.ts new file mode 100644 index 0000000000..2a8f77e6b0 --- /dev/null +++ b/src/backend/src/transformers/announcements.transformer.ts @@ -0,0 +1,17 @@ +import { Prisma } from '@prisma/client'; +import { AnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import { Announcement } from 'shared'; +import { userTransformer } from './user.transformer'; + +const announcementTransformer = (announcement: Prisma.AnnouncementGetPayload): Announcement => { + return { + announcementId: announcement.announcementId, + text: announcement.text, + dateCreated: announcement.dateCreated, + userCreated: userTransformer(announcement.userCreated), + slackEventId: announcement.slackEventId, + slackChannelName: announcement.slackChannelName + }; +}; + +export default announcementTransformer; diff --git a/src/shared/index.ts b/src/shared/index.ts index 409dae2e65..40246d0fe4 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -12,6 +12,7 @@ export * from './src/types/task-types'; export * from './src/types/reimbursement-requests-types'; export * from './src/types/design-review-types'; export * from './src/types/notifications.types'; +export * from './src/types/announcements.types'; export * from './src/validate-wbs'; export * from './src/date-utils'; diff --git a/src/shared/src/types/announcements.types.ts b/src/shared/src/types/announcements.types.ts new file mode 100644 index 0000000000..9315535c86 --- /dev/null +++ b/src/shared/src/types/announcements.types.ts @@ -0,0 +1,10 @@ +import { User } from './user-types'; + +export interface Announcement { + announcementId: string; + text: string; + userCreated: User; + dateCreated: Date; + slackEventId: string; + slackChannelName: string; +} From 64462020de458e05b01175eddf22ffb78811c448 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 23:54:43 -0500 Subject: [PATCH 266/320] #3075-created get unread announcements endpoint --- .../src/controllers/users.controllers.ts | 13 +++++++++ src/backend/src/routes/users.routes.ts | 5 ++++ src/backend/src/services/users.services.ts | 29 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index cc084c714e..2f39b8ad29 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -228,4 +228,17 @@ export default class UsersController { next(error); } } + + static async removeUserAnnouncement(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { announcementId } = req.body; + const { organization } = req; + + const unreadAnnouncements = await UsersService.removeUserAnnouncement(userId, announcementId, organization); + res.status(200).json(unreadAnnouncements); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 802d586500..9c8be506d3 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -61,5 +61,10 @@ userRouter.post( nonEmptyString(body('notificationId')), UsersController.removeUserNotification ); +userRouter.post( + '/:userId/announcements/remove', + nonEmptyString(body('announcementId')), + UsersController.removeUserAnnouncement +); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index fff25ef56b..7ddcabcc06 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -631,4 +631,33 @@ export default class UsersService { return updatedUser.unreadNotifications.map(notificationTransformer); } + + /** + * Removes a announcement from the user's unread announcement + * @param userId id of the user to remove announcement from + * @param announcementId id of the announcement to remove + * @param organization the user's organization + * @returns the user's updated unread announcement + */ + static async removeUserAnnouncement(userId: string, announcementId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + const updatedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadAnnouncements: { + disconnect: { + announcementId + } + } + }, + include: { unreadAnnouncements: getAnnouncementQueryArgs(organization.organizationId) } + }); + + return updatedUser.unreadAnnouncements.map(announcementTransformer); + } } From 35e2a275213943267a2991cf28f42b7249b4ddba Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Wed, 18 Dec 2024 14:31:01 -0500 Subject: [PATCH 267/320] #2823 merge with getUnreadAnnouncements and slack message processing functionality --- .../src/controllers/users.controllers.ts | 25 ++++ .../announcements.query.args.ts | 11 ++ .../migration.sql | 8 -- .../migration.sql | 9 -- .../migration.sql | 19 ++- src/backend/src/prisma/schema.prisma | 22 +-- src/backend/src/prisma/seed.ts | 2 - src/backend/src/routes/slack.routes.ts | 2 +- src/backend/src/routes/users.routes.ts | 6 + .../src/services/announcement.service.ts | 86 ++++++++++++ .../src/services/change-requests.services.ts | 5 + .../src/services/design-reviews.services.ts | 3 + .../src/services/notifications.services.ts | 12 +- src/backend/src/services/slack.services.ts | 126 ++++++++++++++---- src/backend/src/services/users.services.ts | 53 ++++++++ .../transformers/announcements.transformer.ts | 19 +++ .../transformers/notifications.transformer.ts | 3 +- src/backend/src/utils/errors.utils.ts | 3 +- src/backend/src/utils/notifications.utils.ts | 79 ++++++++++- src/backend/tests/unmocked/users.test.ts | 33 +++++ src/frontend/src/apis/users.api.ts | 17 +++ .../src/components/NotificationAlert.tsx | 57 ++++++++ .../src/components/NotificationCard.tsx | 73 ++++++++++ src/frontend/src/hooks/users.hooks.ts | 40 +++++- src/frontend/src/pages/HomePage/Home.tsx | 26 ++-- src/frontend/src/utils/urls.ts | 4 + src/shared/index.ts | 1 + src/shared/src/types/announcements.types.ts | 12 ++ src/shared/src/types/notifications.types.ts | 1 + 29 files changed, 681 insertions(+), 76 deletions(-) create mode 100644 src/backend/src/prisma-query-args/announcements.query.args.ts delete mode 100644 src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql delete mode 100644 src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql rename src/backend/src/prisma/migrations/{20241211195435_announcements_and_notifications => 20241218160143_homepage_updates}/migration.sql (73%) create mode 100644 src/backend/src/services/announcement.service.ts create mode 100644 src/backend/src/transformers/announcements.transformer.ts create mode 100644 src/frontend/src/components/NotificationAlert.tsx create mode 100644 src/frontend/src/components/NotificationCard.tsx create mode 100644 src/shared/src/types/announcements.types.ts diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index e491d3f4f4..cc084c714e 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -203,4 +203,29 @@ export default class UsersController { next(error); } } + + static async removeUserNotification(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { notificationId } = req.body; + const { organization } = req; + + const unreadNotifications = await UsersService.removeUserNotification(userId, notificationId, organization); + res.status(200).json(unreadNotifications); + } catch (error: unknown) { + next(error); + } + } + + static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { + try { + const { userId } = req.params; + const { organization } = req; + + const unreadAnnouncements = await UsersService.getUserUnreadAnnouncements(userId, organization); + res.status(200).json(unreadAnnouncements); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/prisma-query-args/announcements.query.args.ts b/src/backend/src/prisma-query-args/announcements.query.args.ts new file mode 100644 index 0000000000..b88c9fbf1d --- /dev/null +++ b/src/backend/src/prisma-query-args/announcements.query.args.ts @@ -0,0 +1,11 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type AnnouncementQueryArgs = ReturnType; + +export const getAnnouncementQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + usersReceived: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql b/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql deleted file mode 100644 index fe5771a6b1..0000000000 --- a/src/backend/src/prisma/migrations/20240910005616_add_logo_image_featured_project/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ --- AlterTable -ALTER TABLE "Organization" ADD COLUMN "logoImage" TEXT; - --- AlterTable -ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; - --- AddForeignKey -ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql b/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql deleted file mode 100644 index 2ddd9fa7b6..0000000000 --- a/src/backend/src/prisma/migrations/20240911164338_changed_logo_image_name_to_logo_image_id/migration.sql +++ /dev/null @@ -1,9 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `logoImage` on the `Organization` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE "Organization" DROP COLUMN "logoImage", -ADD COLUMN "logoImageId" TEXT; diff --git a/src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql b/src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql similarity index 73% rename from src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql rename to src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql index c57afabd25..37c468e58e 100644 --- a/src/backend/src/prisma/migrations/20241211195435_announcements_and_notifications/migration.sql +++ b/src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql @@ -1,9 +1,18 @@ +-- AlterTable +ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT; + +-- AlterTable +ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; + -- CreateTable CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, - "dateCrated" TIMESTAMP(3) NOT NULL, - "userCreatedId" TEXT NOT NULL, + "dateCreated" TIMESTAMP(3) NOT NULL, + "dateDeleted" TIMESTAMP(3), + "senderName" TEXT NOT NULL, + "slackEventId" TEXT NOT NULL, + "slackChannelName" TEXT NOT NULL, CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") ); @@ -13,6 +22,7 @@ CREATE TABLE "Notification" ( "notificationId" TEXT NOT NULL, "text" TEXT NOT NULL, "iconName" TEXT NOT NULL, + "eventLink" TEXT, CONSTRAINT "Notification_pkey" PRIMARY KEY ("notificationId") ); @@ -29,6 +39,9 @@ CREATE TABLE "_userNotifications" ( "B" TEXT NOT NULL ); +-- CreateIndex +CREATE UNIQUE INDEX "Announcement_slackEventId_key" ON "Announcement"("slackEventId"); + -- CreateIndex CREATE UNIQUE INDEX "_receivedAnnouncements_AB_unique" ON "_receivedAnnouncements"("A", "B"); @@ -42,7 +55,7 @@ CREATE UNIQUE INDEX "_userNotifications_AB_unique" ON "_userNotifications"("A", CREATE INDEX "_userNotifications_B_index" ON "_userNotifications"("B"); -- AddForeignKey -ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_userCreatedId_fkey" FOREIGN KEY ("userCreatedId") REFERENCES "User"("userId") ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index c06ca3d45f..bb8247266d 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -180,8 +180,7 @@ model User { deletedFrequentlyAskedQuestions FrequentlyAskedQuestion[] @relation(name: "frequentlyAskedQuestionDeleter") createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") - receivedAnnouncements Announcement[] @relation(name: "receivedAnnouncements") - createdAnnouncements Announcement[] @relation(name: "createdAnnouncements") + unreadAnnouncements Announcement[] @relation(name: "receivedAnnouncements") unreadNotifications Notification[] @relation(name: "userNotifications") } @@ -932,17 +931,20 @@ model Milestone { } model Announcement { - announcementId String @id @default(uuid()) - text String - usersReceived User[] @relation("receivedAnnouncements") - dateCrated DateTime - userCreatedId String - userCreated User @relation("createdAnnouncements", fields: [userCreatedId], references: [userId]) + announcementId String @id @default(uuid()) + text String + usersReceived User[] @relation("receivedAnnouncements") + dateCreated DateTime + dateDeleted DateTime? + senderName String + slackEventId String @unique + slackChannelName String } model Notification { - notificationId String @id @default(uuid()) + notificationId String @id @default(uuid()) text String iconName String - users User[] @relation("userNotifications") + users User[] @relation("userNotifications") + eventLink String? } diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index d19e61a98f..fdb5ffefdb 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1894,8 +1894,6 @@ const performSeed: () => Promise = async () => { await RecruitmentServices.createFaq(batman, 'When was FinishLine created?', 'FinishLine was created in 2019', ner); await RecruitmentServices.createFaq(batman, 'How many developers are working on FinishLine?', '178 as of 2024', ner); - - await NotificationsService.sendNotifcationToUsers('Admin!', 'star', [thomasEmrax.userId], ner.organizationId); }; performSeed() diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts index e88ed59893..a938ac0691 100644 --- a/src/backend/src/routes/slack.routes.ts +++ b/src/backend/src/routes/slack.routes.ts @@ -5,7 +5,7 @@ export const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET | slackEvents.on('message', async (event) => { console.log('EVENT:', event); - slackServices.processMessageSent(event); + slackServices.processMessageSent(event, process.env.DEV_ORGANIZATION_ID ?? ''); }); slackEvents.on('error', (error) => { diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 34ae1a0136..802d586500 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -55,5 +55,11 @@ userRouter.post( UsersController.getManyUserTasks ); userRouter.get('/:userId/notifications', UsersController.getUserUnreadNotifications); +userRouter.get('/:userId/announcements', UsersController.getUserUnreadAnnouncements); +userRouter.post( + '/:userId/notifications/remove', + nonEmptyString(body('notificationId')), + UsersController.removeUserNotification +); export default userRouter; diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts new file mode 100644 index 0000000000..c4199a40a8 --- /dev/null +++ b/src/backend/src/services/announcement.service.ts @@ -0,0 +1,86 @@ +import { Announcement } from 'shared'; +import prisma from '../prisma/prisma'; +import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import announcementTransformer from '../transformers/announcements.transformer'; +import { NotFoundException } from '../utils/errors.utils'; + +export default class AnnouncementService { + static async createAnnouncement( + text: string, + usersReceivedIds: string[], + dateCreated: Date, + senderName: string, + slackEventId: string, + slackChannelName: string, + organizationId: string + ): Promise { + const announcement = await prisma.announcement.create({ + data: { + text, + usersReceived: { + connect: usersReceivedIds.map((id) => ({ + userId: id + })) + }, + dateCreated, + senderName, + slackEventId, + slackChannelName + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + return announcementTransformer(announcement); + } + + static async UpdateAnnouncement( + text: string, + usersReceivedIds: string[], + dateCreated: Date, + senderName: string, + slackEventId: string, + slackChannelName: string, + organizationId: string + ): Promise { + const originalAnnouncement = await prisma.announcement.findUnique({ + where: { + slackEventId + } + }); + + if (!originalAnnouncement) throw new NotFoundException('Announcement', slackEventId); + + const announcement = await prisma.announcement.update({ + where: { announcementId: originalAnnouncement.announcementId }, + data: { + text, + usersReceived: { + connect: usersReceivedIds.map((id) => ({ + userId: id + })) + }, + slackEventId, + dateCreated, + senderName, + slackChannelName + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + return announcementTransformer(announcement); + } + + static async DeleteAnnouncement(slackEventId: string, organizationId: string): Promise { + const announcement = await prisma.announcement.update({ + where: { slackEventId }, + data: { + dateDeleted: new Date() + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + if (!announcement) throw new NotFoundException('Announcement', slackEventId); + + return announcementTransformer(announcement); + } +} diff --git a/src/backend/src/services/change-requests.services.ts b/src/backend/src/services/change-requests.services.ts index 89cbaaa370..85e0dc5579 100644 --- a/src/backend/src/services/change-requests.services.ts +++ b/src/backend/src/services/change-requests.services.ts @@ -46,6 +46,7 @@ import { import { ChangeRequestQueryArgs, getChangeRequestQueryArgs } from '../prisma-query-args/change-requests.query-args'; import proposedSolutionTransformer from '../transformers/proposed-solutions.transformer'; import { getProposedSolutionQueryArgs } from '../prisma-query-args/proposed-solutions.query-args'; +import { sendHomeCrRequestReviewNotification, sendHomeCrReviewedNotification } from '../utils/notifications.utils'; export default class ChangeRequestsService { /** @@ -150,6 +151,8 @@ export default class ChangeRequestsService { // send a notification to the submitter that their change request has been reviewed await sendCRSubmitterReviewedNotification(updated); + await sendHomeCrReviewedNotification(foundCR, updated.submitter, accepted, organization.organizationId); + // send a reply to a CR's notifications of its updated status await sendSlackCRStatusToThread(updated.notificationSlackThreads, foundCR.crId, foundCR.identifier, accepted); @@ -1078,5 +1081,7 @@ export default class ChangeRequestsService { // send slack message to CR reviewers await sendSlackRequestedReviewNotification(newReviewers, changeRequestTransformer(foundCR)); + + await sendHomeCrRequestReviewNotification(foundCR, newReviewers, organization.organizationId); } } diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 8f7511b73c..644903fa43 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,6 +39,7 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; +import { sendHomeDrNotification } from '../utils/notifications.utils'; export default class DesignReviewsService { /** @@ -205,6 +206,8 @@ export default class DesignReviewsService { } } + await sendHomeDrNotification(designReview, members, submitter, wbsElement.name, organization.organizationId); + const project = wbsElement.workPackage?.project; const teams = project?.teams; if (teams && teams.length > 0) { diff --git a/src/backend/src/services/notifications.services.ts b/src/backend/src/services/notifications.services.ts index 483e6ed9d6..e0617301f5 100644 --- a/src/backend/src/services/notifications.services.ts +++ b/src/backend/src/services/notifications.services.ts @@ -202,13 +202,21 @@ export default class NotificationsService { * @param iconName icon that appears in the notification * @param userIds ids of users to send the notification to * @param organizationId + * @param eventLink link the notification will go to when clicked * @returns the created notification */ - static async sendNotifcationToUsers(text: string, iconName: string, userIds: string[], organizationId: string) { + static async sendNotifcationToUsers( + text: string, + iconName: string, + userIds: string[], + organizationId: string, + eventLink?: string + ) { const createdNotification = await prisma.notification.create({ data: { text, - iconName + iconName, + eventLink }, ...getNotificationQueryArgs(organizationId) }); diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index a1fc3e3a0f..d9d028adbf 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -1,24 +1,38 @@ -import { UserWithScheduleSettings } from 'shared'; import UsersService from './users.services'; -import { WebClient } from '@slack/web-api'; import { getChannelName, getUserName, getUsersInChannel } from '../integrations/slack'; -import { UserWithId } from '../utils/teams.utils'; -import { UserWithSecureSettings, UserWithSettings } from '../utils/auth.utils'; import { User_Settings } from '@prisma/client'; -import NotificationsService from './notifications.services'; - -const slack = new WebClient(process.env.SLACK_BOT_TOKEN); +import AnnouncementService from './announcement.service'; +import { Announcement } from 'shared'; export interface SlackMessageEvent { - type: string; + type: 'message'; subtype?: string; channel: string; - user: string; - text: string; - ts: string; event_ts: string; channel_type: string; - blocks: any; +} + +export interface SlackMessage extends SlackMessageEvent { + user: string; + type: 'message'; + client_msg_id: string; + text: string; + blocks: { + type: string; + block_id: string; + elements: any[]; + }[]; +} + +export interface SlackDeletedMessage extends SlackMessageEvent { + subtype: 'message_deleted'; + previous_message: SlackMessage; +} + +export interface SlackUpdatedMessage extends SlackMessageEvent { + subtype: 'message_changed'; + message: SlackMessage; + previous_message: SlackMessage; } export interface SlackRichTextBlock { @@ -65,11 +79,11 @@ export default class slackServices { case 'text': return block.text ?? ''; case 'user': - let userName = block.user_id; + let userName: string = block.user_id ?? ''; try { - userName = await getUserName(block.user_id ?? ''); + userName = (await getUserName(block.user_id ?? '')) ?? `Unknown User:${block.user_id}`; } catch (error) { - userName = `ISSUE PARSING USER:${block.user_id}`; + userName = `Unknown_User:${block.user_id}`; } return '@' + userName; case 'usergroup': @@ -107,9 +121,35 @@ export default class slackServices { } } - static async processMessageSent(event: SlackMessageEvent) { + static async processMessageSent(event: SlackMessageEvent, organizationId: string): Promise { + const slackChannelName = await getChannelName(event.channel); + const dateCreated = new Date(Number(event.event_ts)); + + let eventMessage: SlackMessage; + + if (event.subtype) { + switch (event.subtype) { + case 'message_deleted': + eventMessage = (event as SlackDeletedMessage).previous_message; + try { + return AnnouncementService.DeleteAnnouncement(eventMessage.client_msg_id, organizationId); + } catch (ignored) { + return; + } + case 'message_changed': + eventMessage = (event as SlackUpdatedMessage).message; + break; + default: + //other events that do not effect announcements + return; + } + } else { + eventMessage = event as SlackMessage; + } + let messageText = ''; let userIdsToNotify: string[] = []; + const users = await UsersService.getAllUsers(); const userSettings = await Promise.all( users.map((user) => { @@ -117,22 +157,56 @@ export default class slackServices { }) ); - const richTextBlocks = event.blocks?.filter((eventBlock: any) => eventBlock.type === 'rich_text'); + let userName: string = ''; + try { + userName = (await getUserName(eventMessage.user)) ?? ''; + } catch (ignored) {} + + if (!userName) { + const userIdList = userSettings + .filter((userSetting) => userSetting.slackId === eventMessage.user) + .map((userSettings) => userSettings.userId); + if (userIdList.length !== 0) { + userName = users.find((user) => user.userId === userIdList[0])?.firstName ?? 'Unknown User:' + eventMessage.user; + } else { + userName = 'Unknown_User:' + eventMessage.user; + } + } + + const richTextBlocks = eventMessage.blocks?.filter((eventBlock: any) => eventBlock.type === 'rich_text'); if (richTextBlocks && richTextBlocks.length === 1) { for (const element of richTextBlocks[0].elements[0].elements) { messageText += await slackServices.blockToString(element); - userIdsToNotify = userIdsToNotify.concat(await slackServices.blockToMentionedUsers(element, userSettings, '')); + userIdsToNotify = userIdsToNotify.concat( + await slackServices.blockToMentionedUsers(element, userSettings, event.channel) + ); } + } else { + return; } - // if (event.subtype) { - // switch (event.subtype) { - // case '': - // } - // } - - // console.log(event.blocks.elements); - console.log(event.type === 'message'); + if (event.subtype === 'message_changed') { + try { + return AnnouncementService.UpdateAnnouncement( + messageText, + userIdsToNotify, + dateCreated, + userName, + eventMessage.client_msg_id, + slackChannelName, + organizationId + ); + } catch (ignored) {} + } + return AnnouncementService.createAnnouncement( + messageText, + userIdsToNotify, + dateCreated, + userName, + eventMessage.client_msg_id, + slackChannelName, + organizationId + ); } } diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index d9d37b259e..fff25ef56b 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -40,6 +40,8 @@ import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; import notificationTransformer from '../transformers/notifications.transformer'; +import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import announcementTransformer from '../transformers/announcements.transformer'; export default class UsersService { /** @@ -569,6 +571,12 @@ export default class UsersService { return resolvedTasks.flat(); } + /** + * Gets all of a user's unread notifications + * @param userId id of user to get unread notifications from + * @param organization the user's orgainzation + * @returns the unread notifications of the user + */ static async getUserUnreadNotifications(userId: string, organization: Organization) { const requestedUser = await prisma.user.findUnique({ where: { userId }, @@ -578,4 +586,49 @@ export default class UsersService { return requestedUser.unreadNotifications.map(notificationTransformer); } + + /** + * Gets all of a user's unread announcements + * @param userId id of user to get unread announcements from + * @param organization the user's orgainzation + * @returns the unread announcements of the user + */ + static async getUserUnreadAnnouncements(userId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ + where: { userId }, + include: { unreadAnnouncements: getAnnouncementQueryArgs(organization.organizationId) } + }); + if (!requestedUser) throw new NotFoundException('User', userId); + + return requestedUser.unreadAnnouncements.map(announcementTransformer); + } + + /** + * Removes a notification from the user's unread notifications + * @param userId id of the user to remove notification from + * @param notificationId id of the notification to remove + * @param organization the user's organization + * @returns the user's updated unread notifications + */ + static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + const updatedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadNotifications: { + disconnect: { + notificationId + } + } + }, + include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } + }); + + return updatedUser.unreadNotifications.map(notificationTransformer); + } } diff --git a/src/backend/src/transformers/announcements.transformer.ts b/src/backend/src/transformers/announcements.transformer.ts new file mode 100644 index 0000000000..4fee90eac2 --- /dev/null +++ b/src/backend/src/transformers/announcements.transformer.ts @@ -0,0 +1,19 @@ +import { Prisma } from '@prisma/client'; +import { AnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import { Announcement } from 'shared'; +import { userTransformer } from './user.transformer'; + +const announcementTransformer = (announcement: Prisma.AnnouncementGetPayload): Announcement => { + return { + announcementId: announcement.announcementId, + text: announcement.text, + usersReceived: announcement.usersReceived.map(userTransformer), + dateCreated: announcement.dateCreated, + senderName: announcement.senderName, + slackEventId: announcement.slackEventId, + slackChannelName: announcement.slackChannelName, + dateDeleted: announcement.dateDeleted ?? undefined + }; +}; + +export default announcementTransformer; diff --git a/src/backend/src/transformers/notifications.transformer.ts b/src/backend/src/transformers/notifications.transformer.ts index 32666b151a..45dd25dee9 100644 --- a/src/backend/src/transformers/notifications.transformer.ts +++ b/src/backend/src/transformers/notifications.transformer.ts @@ -6,7 +6,8 @@ const notificationTransformer = (notification: Prisma.NotificationGetPayload { endOfDay.setDate(startOfDay.getDate() + 1); return endOfDay; }; + +/** + * Sends a finishline notification that a design review was scheduled + * @param designReview dr that was created + * @param members optional and required members of the dr + * @param submitter the user who created the dr + * @param workPackageName the name of the work package associated witht the dr + * @param organizationId id of the organization of the dr + */ +export const sendHomeDrNotification = async ( + designReview: Design_Review, + members: User[], + submitter: User, + workPackageName: string, + organizationId: string +) => { + const designReviewLink = `/settings/preferences?drId=${designReview.designReviewId}`; + + const msg = `Design Review for ${workPackageName} is being scheduled by ${submitter.firstName} ${submitter.lastName}`; + await NotificationsService.sendNotifcationToUsers( + msg, + 'calendar_month', + members.map((member) => member.userId), + organizationId, + designReviewLink + ); +}; + +/** + * Sends a finishline notification that a change request was reviewed + * @param changeRequest cr that was requested review + * @param submitter the user who submitted the cr + * @param accepted true if the cr changes were accepted, false if denied + * @param organizationId id of the organization of the cr + */ +export const sendHomeCrReviewedNotification = async ( + changeRequest: Change_Request, + submitter: User, + accepted: boolean, + organizationId: string +) => { + const isProd = process.env.NODE_ENV === 'production'; + + const changeRequestLink = isProd + ? `https://finishlinebyner.com/change-requests/${changeRequest.crId}` + : `http://localhost:3000/change-requests/${changeRequest.crId}`; + await NotificationsService.sendNotifcationToUsers( + `CR #${changeRequest.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, + accepted ? 'check_circle' : 'cancel', + [submitter.userId], + organizationId, + changeRequestLink + ); +}; + +/** + * Sends a finishline notification to all requested reviewers of a change request + * @param changeRequest cr that was requested review + * @param reviewers user's reviewing the cr + * @param organizationId id of the organization of the cr + */ +export const sendHomeCrRequestReviewNotification = async ( + changeRequest: Change_Request, + reviewers: User[], + organizationId: string +) => { + const changeRequestLink = `/change-requests/${changeRequest.crId}`; + await NotificationsService.sendNotifcationToUsers( + `Your review has been requested on CR #${changeRequest.identifier}`, + 'edit_note', + reviewers.map((reviewer) => reviewer.userId), + organizationId, + changeRequestLink + ); +}; diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 14d8b0bffe..512a651b90 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -69,4 +69,37 @@ describe('User Tests', () => { expect(notifications[1].text).toBe('test2'); }); }); + + describe('Remove Notifications', () => { + it('Fails with invalid user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); + + await expect( + async () => await UsersService.removeUserNotification('1', notifications[0].notificationId, organization) + ).rejects.toThrow(new NotFoundException('User', '1')); + }); + + it('Succeeds and gets user notifications', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + await NotificationsService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); + + const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); + + expect(notifications).toHaveLength(2); + expect(notifications[0].text).toBe('test1'); + expect(notifications[1].text).toBe('test2'); + + const updatedNotifications = await UsersService.removeUserNotification( + testBatman.userId, + notifications[0].notificationId, + organization + ); + + expect(updatedNotifications).toHaveLength(1); + expect(updatedNotifications[0].text).toBe('test2'); + }); + }); }); diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index afa5ea00f6..5a91bff5fd 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -5,6 +5,7 @@ import axios from '../utils/axios'; import { + Notification, Project, SetUserScheduleSettingsPayload, Task, @@ -159,3 +160,19 @@ export const getManyUserTasks = (userIds: string[]) => { } ); }; + +/* + * Gets all unread notifications of the user with the given id + */ +export const getNotifications = (id: string) => { + return axios.get(apiUrls.userNotifications(id), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +/* + * Removes a notification from the user with the given id + */ +export const removeNotification = (userId: string, notificationId: string) => { + return axios.post(apiUrls.userRemoveNotifications(userId), { notificationId }); +}; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx new file mode 100644 index 0000000000..581d849ef0 --- /dev/null +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -0,0 +1,57 @@ +import { Box } from '@mui/material'; +import React, { useEffect, useState } from 'react'; +import { Notification, User } from 'shared'; +import NotificationCard from './NotificationCard'; +import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; +import { useHistory } from 'react-router-dom'; + +interface NotificationAlertProps { + user: User; +} + +const NotificationAlert: React.FC = ({ user }) => { + const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(user.userId); + const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(user.userId); + const [currentNotification, setCurrentNotification] = useState(); + const history = useHistory(); + + useEffect(() => { + if (notifications && notifications.length > 0) { + setCurrentNotification(notifications[0]); + } + }, [notifications]); + + const removeNotificationWrapper = async (notification: Notification) => { + setCurrentNotification(undefined); + await removeNotification(notification); + }; + + const onClick = async (notification: Notification) => { + if (!!notification.eventLink) { + await removeNotificationWrapper(notification); + history.push(notification.eventLink); + } + }; + + return ( + + {!removeIsLoading && !notificationsIsLoading && currentNotification && ( + + )} + + ); +}; + +export default NotificationAlert; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx new file mode 100644 index 0000000000..1e4cfb4c02 --- /dev/null +++ b/src/frontend/src/components/NotificationCard.tsx @@ -0,0 +1,73 @@ +import { Box, Card, Icon, IconButton, Typography, useTheme } from '@mui/material'; +import React from 'react'; +import { Notification } from 'shared'; +import CloseIcon from '@mui/icons-material/Close'; + +interface NotificationCardProps { + notification: Notification; + removeNotification: (notificationId: Notification) => Promise; + onClick: (notificationId: Notification) => Promise; +} + +const NotificationCard: React.FC = ({ notification, removeNotification, onClick }) => { + const theme = useTheme(); + return ( + + + await onClick(notification)} + sx={{ + display: 'flex', + gap: 1, + cursor: !!notification.eventLink ? 'pointer' : 'default' + }} + > + + + {notification.iconName} + + + {notification.text} + + removeNotification(notification)}> + + + + + ); +}; + +export default NotificationCard; diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index 96b659c1f1..32279217f9 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -19,7 +19,9 @@ import { getUserScheduleSettings, updateUserScheduleSettings, getUserTasks, - getManyUserTasks + getManyUserTasks, + getNotifications, + removeNotification } from '../apis/users.api'; import { User, @@ -31,7 +33,8 @@ import { UserScheduleSettings, UserWithScheduleSettings, SetUserScheduleSettingsPayload, - Task + Task, + Notification } from 'shared'; import { useAuth } from './auth.hooks'; import { useContext } from 'react'; @@ -260,3 +263,36 @@ export const useManyUserTasks = (userIds: string[]) => { return data; }); }; + +/** + * Curstom react hook to get all unread notifications from a user + * @param userId id of user to get unread notifications from + * @returns + */ +export const useUserNotifications = (userId: string) => { + return useQuery(['users', userId, 'notifications'], async () => { + const { data } = await getNotifications(userId); + return data; + }); +}; + +/** + * Curstom react hook to remove a notification from a user's unread notifications + * @param userId id of user to get unread notifications from + * @returns + */ +export const useRemoveUserNotification = (userId: string) => { + const queryClient = useQueryClient(); + return useMutation( + ['users', userId, 'notifications', 'remove'], + async (notification: Notification) => { + const { data } = await removeNotification(userId, notification.notificationId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['users', userId, 'notifications']); + } + } + ); +}; diff --git a/src/frontend/src/pages/HomePage/Home.tsx b/src/frontend/src/pages/HomePage/Home.tsx index 961430d92e..76db11f05a 100644 --- a/src/frontend/src/pages/HomePage/Home.tsx +++ b/src/frontend/src/pages/HomePage/Home.tsx @@ -11,20 +11,26 @@ import { useState } from 'react'; import MemberHomePage from './MemberHomePage'; import LeadHomePage from './LeadHomePage'; import AdminHomePage from './AdminHomePage'; +import NotificationAlert from '../../components/NotificationAlert'; const Home = () => { const user = useCurrentUser(); const [onMemberHomePage, setOnMemberHomePage] = useState(false); - return isGuest(user.role) && !onMemberHomePage ? ( - - ) : isMember(user.role) ? ( - - ) : isLead(user.role) ? ( - - ) : isAdmin(user.role) ? ( - - ) : ( - + return ( + <> + {!onMemberHomePage && } + {isGuest(user.role) && !onMemberHomePage ? ( + + ) : isMember(user.role) ? ( + + ) : isLead(user.role) ? ( + + ) : isAdmin(user.role) ? ( + + ) : ( + + )} + ); }; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 12877900fe..d50675ed69 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -26,6 +26,8 @@ const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; const manyUserTasks = () => `${users()}/tasks/get-many`; +const userNotifications = (id: string) => `${usersById(id)}/notifications`; +const userRemoveNotifications = (id: string) => `${usersById(id)}/notifications/remove`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -212,6 +214,8 @@ export const apiUrls = { userScheduleSettingsSet, userTasks, manyUserTasks, + userNotifications, + userRemoveNotifications, projects, allProjects, diff --git a/src/shared/index.ts b/src/shared/index.ts index 409dae2e65..40246d0fe4 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -12,6 +12,7 @@ export * from './src/types/task-types'; export * from './src/types/reimbursement-requests-types'; export * from './src/types/design-review-types'; export * from './src/types/notifications.types'; +export * from './src/types/announcements.types'; export * from './src/validate-wbs'; export * from './src/date-utils'; diff --git a/src/shared/src/types/announcements.types.ts b/src/shared/src/types/announcements.types.ts new file mode 100644 index 0000000000..c0e2d615a7 --- /dev/null +++ b/src/shared/src/types/announcements.types.ts @@ -0,0 +1,12 @@ +import { User } from './user-types'; + +export interface Announcement { + announcementId: string; + text: string; + usersReceived: User[]; + senderName: string; + dateCreated: Date; + slackEventId: string; + slackChannelName: string; + dateDeleted?: Date; +} diff --git a/src/shared/src/types/notifications.types.ts b/src/shared/src/types/notifications.types.ts index e4419ef2ed..abd16fcd21 100644 --- a/src/shared/src/types/notifications.types.ts +++ b/src/shared/src/types/notifications.types.ts @@ -2,4 +2,5 @@ export interface Notification { notificationId: string; text: string; iconName: string; + eventLink?: string; } From 882fcde66323f1fcd75535f4e43b99e9cae5f01e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Dec 2024 07:21:43 -0500 Subject: [PATCH 268/320] up to date --- .../announcements.query.args.ts | 11 +++ .../migration.sql | 70 +++++++++++++++ .../src/services/announcement.service.ts | 86 +++++++++++++++++++ .../transformers/announcements.transformer.ts | 19 ++++ .../src/components/NotificationAlert.tsx | 57 ++++++++++++ .../src/components/NotificationCard.tsx | 73 ++++++++++++++++ src/shared/src/types/announcements.types.ts | 12 +++ 7 files changed, 328 insertions(+) create mode 100644 src/backend/src/prisma-query-args/announcements.query.args.ts create mode 100644 src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql create mode 100644 src/backend/src/services/announcement.service.ts create mode 100644 src/backend/src/transformers/announcements.transformer.ts create mode 100644 src/frontend/src/components/NotificationAlert.tsx create mode 100644 src/frontend/src/components/NotificationCard.tsx create mode 100644 src/shared/src/types/announcements.types.ts diff --git a/src/backend/src/prisma-query-args/announcements.query.args.ts b/src/backend/src/prisma-query-args/announcements.query.args.ts new file mode 100644 index 0000000000..b88c9fbf1d --- /dev/null +++ b/src/backend/src/prisma-query-args/announcements.query.args.ts @@ -0,0 +1,11 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type AnnouncementQueryArgs = ReturnType; + +export const getAnnouncementQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + usersReceived: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql b/src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql new file mode 100644 index 0000000000..37c468e58e --- /dev/null +++ b/src/backend/src/prisma/migrations/20241218160143_homepage_updates/migration.sql @@ -0,0 +1,70 @@ +-- AlterTable +ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT; + +-- AlterTable +ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; + +-- CreateTable +CREATE TABLE "Announcement" ( + "announcementId" TEXT NOT NULL, + "text" TEXT NOT NULL, + "dateCreated" TIMESTAMP(3) NOT NULL, + "dateDeleted" TIMESTAMP(3), + "senderName" TEXT NOT NULL, + "slackEventId" TEXT NOT NULL, + "slackChannelName" TEXT NOT NULL, + + CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") +); + +-- CreateTable +CREATE TABLE "Notification" ( + "notificationId" TEXT NOT NULL, + "text" TEXT NOT NULL, + "iconName" TEXT NOT NULL, + "eventLink" TEXT, + + CONSTRAINT "Notification_pkey" PRIMARY KEY ("notificationId") +); + +-- CreateTable +CREATE TABLE "_receivedAnnouncements" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_userNotifications" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "Announcement_slackEventId_key" ON "Announcement"("slackEventId"); + +-- CreateIndex +CREATE UNIQUE INDEX "_receivedAnnouncements_AB_unique" ON "_receivedAnnouncements"("A", "B"); + +-- CreateIndex +CREATE INDEX "_receivedAnnouncements_B_index" ON "_receivedAnnouncements"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_userNotifications_AB_unique" ON "_userNotifications"("A", "B"); + +-- CreateIndex +CREATE INDEX "_userNotifications_B_index" ON "_userNotifications"("B"); + +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_userNotifications" ADD CONSTRAINT "_userNotifications_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("notificationId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_userNotifications" ADD CONSTRAINT "_userNotifications_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts new file mode 100644 index 0000000000..c4199a40a8 --- /dev/null +++ b/src/backend/src/services/announcement.service.ts @@ -0,0 +1,86 @@ +import { Announcement } from 'shared'; +import prisma from '../prisma/prisma'; +import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import announcementTransformer from '../transformers/announcements.transformer'; +import { NotFoundException } from '../utils/errors.utils'; + +export default class AnnouncementService { + static async createAnnouncement( + text: string, + usersReceivedIds: string[], + dateCreated: Date, + senderName: string, + slackEventId: string, + slackChannelName: string, + organizationId: string + ): Promise { + const announcement = await prisma.announcement.create({ + data: { + text, + usersReceived: { + connect: usersReceivedIds.map((id) => ({ + userId: id + })) + }, + dateCreated, + senderName, + slackEventId, + slackChannelName + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + return announcementTransformer(announcement); + } + + static async UpdateAnnouncement( + text: string, + usersReceivedIds: string[], + dateCreated: Date, + senderName: string, + slackEventId: string, + slackChannelName: string, + organizationId: string + ): Promise { + const originalAnnouncement = await prisma.announcement.findUnique({ + where: { + slackEventId + } + }); + + if (!originalAnnouncement) throw new NotFoundException('Announcement', slackEventId); + + const announcement = await prisma.announcement.update({ + where: { announcementId: originalAnnouncement.announcementId }, + data: { + text, + usersReceived: { + connect: usersReceivedIds.map((id) => ({ + userId: id + })) + }, + slackEventId, + dateCreated, + senderName, + slackChannelName + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + return announcementTransformer(announcement); + } + + static async DeleteAnnouncement(slackEventId: string, organizationId: string): Promise { + const announcement = await prisma.announcement.update({ + where: { slackEventId }, + data: { + dateDeleted: new Date() + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + if (!announcement) throw new NotFoundException('Announcement', slackEventId); + + return announcementTransformer(announcement); + } +} diff --git a/src/backend/src/transformers/announcements.transformer.ts b/src/backend/src/transformers/announcements.transformer.ts new file mode 100644 index 0000000000..4fee90eac2 --- /dev/null +++ b/src/backend/src/transformers/announcements.transformer.ts @@ -0,0 +1,19 @@ +import { Prisma } from '@prisma/client'; +import { AnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import { Announcement } from 'shared'; +import { userTransformer } from './user.transformer'; + +const announcementTransformer = (announcement: Prisma.AnnouncementGetPayload): Announcement => { + return { + announcementId: announcement.announcementId, + text: announcement.text, + usersReceived: announcement.usersReceived.map(userTransformer), + dateCreated: announcement.dateCreated, + senderName: announcement.senderName, + slackEventId: announcement.slackEventId, + slackChannelName: announcement.slackChannelName, + dateDeleted: announcement.dateDeleted ?? undefined + }; +}; + +export default announcementTransformer; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx new file mode 100644 index 0000000000..581d849ef0 --- /dev/null +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -0,0 +1,57 @@ +import { Box } from '@mui/material'; +import React, { useEffect, useState } from 'react'; +import { Notification, User } from 'shared'; +import NotificationCard from './NotificationCard'; +import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; +import { useHistory } from 'react-router-dom'; + +interface NotificationAlertProps { + user: User; +} + +const NotificationAlert: React.FC = ({ user }) => { + const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(user.userId); + const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(user.userId); + const [currentNotification, setCurrentNotification] = useState(); + const history = useHistory(); + + useEffect(() => { + if (notifications && notifications.length > 0) { + setCurrentNotification(notifications[0]); + } + }, [notifications]); + + const removeNotificationWrapper = async (notification: Notification) => { + setCurrentNotification(undefined); + await removeNotification(notification); + }; + + const onClick = async (notification: Notification) => { + if (!!notification.eventLink) { + await removeNotificationWrapper(notification); + history.push(notification.eventLink); + } + }; + + return ( + + {!removeIsLoading && !notificationsIsLoading && currentNotification && ( + + )} + + ); +}; + +export default NotificationAlert; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx new file mode 100644 index 0000000000..1e4cfb4c02 --- /dev/null +++ b/src/frontend/src/components/NotificationCard.tsx @@ -0,0 +1,73 @@ +import { Box, Card, Icon, IconButton, Typography, useTheme } from '@mui/material'; +import React from 'react'; +import { Notification } from 'shared'; +import CloseIcon from '@mui/icons-material/Close'; + +interface NotificationCardProps { + notification: Notification; + removeNotification: (notificationId: Notification) => Promise; + onClick: (notificationId: Notification) => Promise; +} + +const NotificationCard: React.FC = ({ notification, removeNotification, onClick }) => { + const theme = useTheme(); + return ( + + + await onClick(notification)} + sx={{ + display: 'flex', + gap: 1, + cursor: !!notification.eventLink ? 'pointer' : 'default' + }} + > + + + {notification.iconName} + + + {notification.text} + + removeNotification(notification)}> + + + + + ); +}; + +export default NotificationCard; diff --git a/src/shared/src/types/announcements.types.ts b/src/shared/src/types/announcements.types.ts new file mode 100644 index 0000000000..c0e2d615a7 --- /dev/null +++ b/src/shared/src/types/announcements.types.ts @@ -0,0 +1,12 @@ +import { User } from './user-types'; + +export interface Announcement { + announcementId: string; + text: string; + usersReceived: User[]; + senderName: string; + dateCreated: Date; + slackEventId: string; + slackChannelName: string; + dateDeleted?: Date; +} From cc6e64310744e8611fa00af32da8c49dcc4089ce Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Dec 2024 07:58:15 -0500 Subject: [PATCH 269/320] #3074-updated announcements in schema --- .../src/prisma-query-args/announcements.query.args.ts | 3 +-- .../migration.sql | 9 +++++---- src/backend/src/prisma/schema.prisma | 11 +++++------ .../src/transformers/announcements.transformer.ts | 6 ++++-- src/shared/src/types/announcements.types.ts | 4 +++- 5 files changed, 18 insertions(+), 15 deletions(-) rename src/backend/src/prisma/migrations/{20241218044032_homepage_updates => 20241219125602_homepage_updates}/migration.sql (90%) diff --git a/src/backend/src/prisma-query-args/announcements.query.args.ts b/src/backend/src/prisma-query-args/announcements.query.args.ts index 2f0e1ba294..b88c9fbf1d 100644 --- a/src/backend/src/prisma-query-args/announcements.query.args.ts +++ b/src/backend/src/prisma-query-args/announcements.query.args.ts @@ -6,7 +6,6 @@ export type AnnouncementQueryArgs = ReturnType; export const getAnnouncementQueryArgs = (organizationId: string) => Prisma.validator()({ include: { - usersReceived: getUserQueryArgs(organizationId), - userCreated: getUserQueryArgs(organizationId) + usersReceived: getUserQueryArgs(organizationId) } }); diff --git a/src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql b/src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql similarity index 90% rename from src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql rename to src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql index f35a709d3f..37c468e58e 100644 --- a/src/backend/src/prisma/migrations/20241218044032_homepage_updates/migration.sql +++ b/src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql @@ -9,7 +9,8 @@ CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, "dateCreated" TIMESTAMP(3) NOT NULL, - "userCreatedId" TEXT NOT NULL, + "dateDeleted" TIMESTAMP(3), + "senderName" TEXT NOT NULL, "slackEventId" TEXT NOT NULL, "slackChannelName" TEXT NOT NULL, @@ -38,6 +39,9 @@ CREATE TABLE "_userNotifications" ( "B" TEXT NOT NULL ); +-- CreateIndex +CREATE UNIQUE INDEX "Announcement_slackEventId_key" ON "Announcement"("slackEventId"); + -- CreateIndex CREATE UNIQUE INDEX "_receivedAnnouncements_AB_unique" ON "_receivedAnnouncements"("A", "B"); @@ -53,9 +57,6 @@ CREATE INDEX "_userNotifications_B_index" ON "_userNotifications"("B"); -- AddForeignKey ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; --- AddForeignKey -ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_userCreatedId_fkey" FOREIGN KEY ("userCreatedId") REFERENCES "User"("userId") ON DELETE RESTRICT ON UPDATE CASCADE; - -- AddForeignKey ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index f70d812b2a..bb8247266d 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -181,7 +181,6 @@ model User { createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") unreadAnnouncements Announcement[] @relation(name: "receivedAnnouncements") - createdAnnouncements Announcement[] @relation(name: "createdAnnouncements") unreadNotifications Notification[] @relation(name: "userNotifications") } @@ -932,13 +931,13 @@ model Milestone { } model Announcement { - announcementId String @id @default(uuid()) + announcementId String @id @default(uuid()) text String - usersReceived User[] @relation("receivedAnnouncements") + usersReceived User[] @relation("receivedAnnouncements") dateCreated DateTime - userCreatedId String - userCreated User @relation("createdAnnouncements", fields: [userCreatedId], references: [userId]) - slackEventId String + dateDeleted DateTime? + senderName String + slackEventId String @unique slackChannelName String } diff --git a/src/backend/src/transformers/announcements.transformer.ts b/src/backend/src/transformers/announcements.transformer.ts index 2a8f77e6b0..4fee90eac2 100644 --- a/src/backend/src/transformers/announcements.transformer.ts +++ b/src/backend/src/transformers/announcements.transformer.ts @@ -7,10 +7,12 @@ const announcementTransformer = (announcement: Prisma.AnnouncementGetPayload Date: Thu, 19 Dec 2024 08:24:31 -0500 Subject: [PATCH 270/320] #3074-tests --- src/backend/src/prisma/seed.ts | 12 +++++- .../src/services/announcement.service.ts | 34 ++++++++++++++++ src/backend/tests/test-utils.ts | 1 + src/backend/tests/unmocked/users.test.ts | 39 ++++++++++++++++++- 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/backend/src/services/announcement.service.ts diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index fdb5ffefdb..ddd4e190cb 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -33,7 +33,7 @@ import { writeFileSync } from 'fs'; import WorkPackageTemplatesService from '../services/work-package-template.services'; import RecruitmentServices from '../services/recruitment.services'; import OrganizationsService from '../services/organizations.services'; -import NotificationsService from '../services/notifications.services'; +import AnnouncementService from '../services/announcement.service'; const prisma = new PrismaClient(); @@ -1894,6 +1894,16 @@ const performSeed: () => Promise = async () => { await RecruitmentServices.createFaq(batman, 'When was FinishLine created?', 'FinishLine was created in 2019', ner); await RecruitmentServices.createFaq(batman, 'How many developers are working on FinishLine?', '178 as of 2024', ner); + + await AnnouncementService.createAnnouncement( + 'Welcome to Finishline!', + [regina.userId], + new Date(), + 'Thomas Emrax', + '1', + 'software', + ner.organizationId + ); }; performSeed() diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts new file mode 100644 index 0000000000..5b9fdab389 --- /dev/null +++ b/src/backend/src/services/announcement.service.ts @@ -0,0 +1,34 @@ +import { Announcement } from 'shared'; +import prisma from '../prisma/prisma'; +import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; +import announcementTransformer from '../transformers/announcements.transformer'; + +export default class AnnouncementService { + static async createAnnouncement( + text: string, + usersReceivedIds: string[], + dateCreated: Date, + senderName: string, + slackEventId: string, + slackChannelName: string, + organizationId: string + ): Promise { + const announcement = await prisma.announcement.create({ + data: { + text, + usersReceived: { + connect: usersReceivedIds.map((id) => ({ + userId: id + })) + }, + dateCreated, + senderName, + slackEventId, + slackChannelName + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + return announcementTransformer(announcement); + } +} diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 99f2a010e2..b399e44fe8 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -120,6 +120,7 @@ export const resetUsers = async () => { await prisma.frequentlyAskedQuestion.deleteMany(); await prisma.organization.deleteMany(); await prisma.user.deleteMany(); + await prisma.announcement.deleteMany(); }; export const createFinanceTeamAndLead = async (organization?: Organization) => { diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 512a651b90..789109a2ae 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -4,6 +4,7 @@ import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; import NotificationsService from '../../src/services/notifications.services'; +import AnnouncementService from '../../src/services/announcement.service'; describe('User Tests', () => { let orgId: string; @@ -81,7 +82,7 @@ describe('User Tests', () => { ).rejects.toThrow(new NotFoundException('User', '1')); }); - it('Succeeds and gets user notifications', async () => { + it('Succeeds and removes user notification', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); await NotificationsService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); @@ -102,4 +103,40 @@ describe('User Tests', () => { expect(updatedNotifications[0].text).toBe('test2'); }); }); + + describe('Get Announcements', () => { + it('fails on invalid user id', async () => { + await expect(async () => await UsersService.getUserUnreadAnnouncements('1', organization)).rejects.toThrow( + new NotFoundException('User', '1') + ); + }); + + it('Succeeds and gets user announcements', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await AnnouncementService.createAnnouncement( + 'test1', + [testBatman.userId], + new Date(), + 'Thomas Emrax', + '1', + 'software', + organization.organizationId + ); + await AnnouncementService.createAnnouncement( + 'test2', + [testBatman.userId], + new Date(), + 'Superman', + '50', + 'mechanical', + organization.organizationId + ); + + const announcements = await UsersService.getUserUnreadAnnouncements(testBatman.userId, organization); + + expect(announcements).toHaveLength(2); + expect(announcements[0].text).toBe('test1'); + expect(announcements[1].text).toBe('test2'); + }); + }); }); From 0dfedd2c315c5d2a6cc5e94078555d1c44d74f43 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 19 Dec 2024 19:20:51 -0500 Subject: [PATCH 271/320] #2074-javadocs --- src/backend/src/services/announcement.service.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 5b9fdab389..eb0d9a5f1b 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -4,6 +4,18 @@ import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.que import announcementTransformer from '../transformers/announcements.transformer'; export default class AnnouncementService { + /** + * Creates an announcement that is sent to users + * this data is populated from slack events + * @param text slack message text + * @param usersReceivedIds users to send announcements to + * @param dateCreated date created of slack message + * @param senderName name of user who sent slack message + * @param slackEventId id of slack event (provided by slack api) + * @param slackChannelName name of channel message was sent in + * @param organizationId id of organization of users + * @returns the created announcement + */ static async createAnnouncement( text: string, usersReceivedIds: string[], From 8cf7ff171decb91573bb4604eb74c1e5c0f86655 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 07:45:48 -0500 Subject: [PATCH 272/320] #3075-added test --- src/backend/tests/unmocked/users.test.ts | 57 ++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 789109a2ae..154a2d057a 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -139,4 +139,61 @@ describe('User Tests', () => { expect(announcements[1].text).toBe('test2'); }); }); + + describe('Remove Announcement', () => { + it('Fails with invalid user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await AnnouncementService.createAnnouncement( + 'test1', + [testBatman.userId], + new Date(), + 'Thomas Emrax', + '1', + 'software', + organization.organizationId + ); + const announcements = await UsersService.getUserUnreadAnnouncements(testBatman.userId, organization); + + await expect( + async () => await UsersService.removeUserAnnouncement('1', announcements[0].announcementId, organization) + ).rejects.toThrow(new NotFoundException('User', '1')); + }); + + it('Succeeds and removes user announcement', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await AnnouncementService.createAnnouncement( + 'test1', + [testBatman.userId], + new Date(), + 'Thomas Emrax', + '1', + 'software', + organization.organizationId + ); + await AnnouncementService.createAnnouncement( + 'test2', + [testBatman.userId], + new Date(), + 'Superman', + '50', + 'mechanical', + organization.organizationId + ); + + const announcements = await UsersService.getUserUnreadAnnouncements(testBatman.userId, organization); + + expect(announcements).toHaveLength(2); + expect(announcements[0].text).toBe('test1'); + expect(announcements[1].text).toBe('test2'); + + const updatedAnnouncements = await UsersService.removeUserAnnouncement( + testBatman.userId, + announcements[0].announcementId, + organization + ); + + expect(updatedAnnouncements).toHaveLength(1); + expect(updatedAnnouncements[0].text).toBe('test2'); + }); + }); }); From 66f5837a16e4a267cfbdc8232d1cbe862efebfab Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 08:48:20 -0500 Subject: [PATCH 273/320] #3074-using current user --- .../src/controllers/users.controllers.ts | 21 +++++----- src/backend/src/routes/users.routes.ts | 10 ++--- src/backend/src/services/users.services.ts | 42 +++++++++++-------- src/backend/tests/unmocked/users.test.ts | 22 ---------- 4 files changed, 38 insertions(+), 57 deletions(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index cc084c714e..b3fee931c2 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -194,10 +194,9 @@ export default class UsersController { static async getUserUnreadNotifications(req: Request, res: Response, next: NextFunction) { try { - const { userId } = req.params; - const { organization } = req; + const { organization, currentUser } = req; - const unreadNotifications = await UsersService.getUserUnreadNotifications(userId, organization); + const unreadNotifications = await UsersService.getUserUnreadNotifications(currentUser.userId, organization); res.status(200).json(unreadNotifications); } catch (error: unknown) { next(error); @@ -206,11 +205,14 @@ export default class UsersController { static async removeUserNotification(req: Request, res: Response, next: NextFunction) { try { - const { userId } = req.params; - const { notificationId } = req.body; - const { organization } = req; + const { notificationId } = req.params; + const { organization, currentUser } = req; - const unreadNotifications = await UsersService.removeUserNotification(userId, notificationId, organization); + const unreadNotifications = await UsersService.removeUserNotification( + currentUser.userId, + notificationId, + organization + ); res.status(200).json(unreadNotifications); } catch (error: unknown) { next(error); @@ -219,10 +221,9 @@ export default class UsersController { static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { try { - const { userId } = req.params; - const { organization } = req; + const { organization, currentUser } = req; - const unreadAnnouncements = await UsersService.getUserUnreadAnnouncements(userId, organization); + const unreadAnnouncements = await UsersService.getUserUnreadAnnouncements(currentUser.userId, organization); res.status(200).json(unreadAnnouncements); } catch (error: unknown) { next(error); diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 802d586500..96be49828c 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,12 +54,8 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); -userRouter.get('/:userId/notifications', UsersController.getUserUnreadNotifications); -userRouter.get('/:userId/announcements', UsersController.getUserUnreadAnnouncements); -userRouter.post( - '/:userId/notifications/remove', - nonEmptyString(body('notificationId')), - UsersController.removeUserNotification -); +userRouter.get('/notifications/current-user', UsersController.getUserUnreadNotifications); +userRouter.get('/announcements/current-user', UsersController.getUserUnreadAnnouncements); +userRouter.post('/notifications/:notificationId/remove', UsersController.removeUserNotification); export default userRouter; diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index fff25ef56b..b537d019d2 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -578,45 +578,49 @@ export default class UsersService { * @returns the unread notifications of the user */ static async getUserUnreadNotifications(userId: string, organization: Organization) { - const requestedUser = await prisma.user.findUnique({ - where: { userId }, - include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } + const unreadNotifications = await prisma.notification.findMany({ + where: { + users: { + some: { userId } + } + }, + ...getNotificationQueryArgs(organization.organizationId) }); - if (!requestedUser) throw new NotFoundException('User', userId); - return requestedUser.unreadNotifications.map(notificationTransformer); + if (!unreadNotifications) throw new HttpException(404, 'User Unread Notifications Not Found'); + + return unreadNotifications.map(notificationTransformer); } /** * Gets all of a user's unread announcements - * @param userId id of user to get unread announcements from + * @param userId id of the current user * @param organization the user's orgainzation * @returns the unread announcements of the user */ static async getUserUnreadAnnouncements(userId: string, organization: Organization) { - const requestedUser = await prisma.user.findUnique({ - where: { userId }, - include: { unreadAnnouncements: getAnnouncementQueryArgs(organization.organizationId) } + const unreadAnnouncements = await prisma.announcement.findMany({ + where: { + usersReceived: { + some: { userId } + } + }, + ...getAnnouncementQueryArgs(organization.organizationId) }); - if (!requestedUser) throw new NotFoundException('User', userId); - return requestedUser.unreadAnnouncements.map(announcementTransformer); + if (!unreadAnnouncements) throw new HttpException(404, 'User Unread Announcements Not Found'); + + return unreadAnnouncements.map(announcementTransformer); } /** * Removes a notification from the user's unread notifications - * @param userId id of the user to remove notification from + * @param userId id of the current user * @param notificationId id of the notification to remove * @param organization the user's organization * @returns the user's updated unread notifications */ static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { - const requestedUser = await prisma.user.findUnique({ - where: { userId } - }); - - if (!requestedUser) throw new NotFoundException('User', userId); - const updatedUser = await prisma.user.update({ where: { userId }, data: { @@ -629,6 +633,8 @@ export default class UsersService { include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } }); + if (!updatedUser) throw new HttpException(404, `Failed to remove notication: ${notificationId}`); + return updatedUser.unreadNotifications.map(notificationTransformer); } } diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index 789109a2ae..bd0b934270 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -52,12 +52,6 @@ describe('User Tests', () => { }); describe('Get Notifications', () => { - it('fails on invalid user id', async () => { - await expect(async () => await UsersService.getUserUnreadNotifications('1', organization)).rejects.toThrow( - new NotFoundException('User', '1') - ); - }); - it('Succeeds and gets user notifications', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); @@ -72,16 +66,6 @@ describe('User Tests', () => { }); describe('Remove Notifications', () => { - it('Fails with invalid user', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); - const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); - - await expect( - async () => await UsersService.removeUserNotification('1', notifications[0].notificationId, organization) - ).rejects.toThrow(new NotFoundException('User', '1')); - }); - it('Succeeds and removes user notification', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); @@ -105,12 +89,6 @@ describe('User Tests', () => { }); describe('Get Announcements', () => { - it('fails on invalid user id', async () => { - await expect(async () => await UsersService.getUserUnreadAnnouncements('1', organization)).rejects.toThrow( - new NotFoundException('User', '1') - ); - }); - it('Succeeds and gets user announcements', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await AnnouncementService.createAnnouncement( From b9206bd2f32e4248739269da7c8f58c16322c028 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 11:53:52 -0500 Subject: [PATCH 274/320] #3060-removed finance get image --- .../src/controllers/onboarding.controller.ts | 1 - src/frontend/src/apis/onboarding.api.ts | 1 - src/frontend/src/apis/organizations.api.ts | 15 +++++++++++++++ src/frontend/src/hooks/organizations.hooks.ts | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/backend/src/controllers/onboarding.controller.ts b/src/backend/src/controllers/onboarding.controller.ts index 9c89420e78..2bd8660a35 100644 --- a/src/backend/src/controllers/onboarding.controller.ts +++ b/src/backend/src/controllers/onboarding.controller.ts @@ -5,7 +5,6 @@ export default class OnboardingController { static async downloadImage(req: Request, res: Response, next: NextFunction) { try { const { fileId } = req.params; - console.log('FILE ID:', fileId); const imageData = await OnboardingServices.downloadImage(fileId); diff --git a/src/frontend/src/apis/onboarding.api.ts b/src/frontend/src/apis/onboarding.api.ts index e6cbf8c53a..7912e80516 100644 --- a/src/frontend/src/apis/onboarding.api.ts +++ b/src/frontend/src/apis/onboarding.api.ts @@ -10,7 +10,6 @@ export const downloadGoogleImage = async (fileId: string): Promise => { const response = await axios.get(apiUrls.imageById(fileId), { responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer }); - console.log('ID IN API:', fileId); const imageBuffer = new Uint8Array(response.data); const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); return imageBlob; diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 47311f1f19..7c7f37af1f 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -41,3 +41,18 @@ export const setOrganizationFeaturedProjects = async (featuredProjectIds: string projectIds: featuredProjectIds }); }; + +/** + * Downloads a given fileId from google drive into a blob + * + * @param fileId the google id of the file to download + * @returns the downloaded file as a Blob + */ +export const downloadGoogleImage = async (fileId: string): Promise => { + const response = await axios.get(apiUrls.imageById(fileId), { + responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer + }); + const imageBuffer = new Uint8Array(response.data); + const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); + return imageBlob; +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index ddcbaf1190..573ece5bdb 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -10,7 +10,7 @@ import { setOrganizationLogo, setOrganizationFeaturedProjects } from '../apis/organizations.api'; -import { downloadGoogleImage } from '../apis/onboarding.api'; +import { downloadGoogleImage } from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; From 06df95061e749f6e1d9f9739e15788c6221d8b50 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 12:03:01 -0500 Subject: [PATCH 275/320] #3060-fixed issues --- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 14 +++++++++++--- .../AdminToolsPage/EditGuestView/EditLogoForm.tsx | 14 +------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 13ef97a3f6..d4c10f0e76 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -6,16 +6,24 @@ import { useToast } from '../../../hooks/toasts.hooks'; import { Box, Card, Typography, useTheme } from '@mui/material'; import LogoDisplay from '../../HomePage/components/LogoDisplay'; import { NERButton } from '../../../components/NERButton'; +import ErrorPage from '../../ErrorPage'; const EditLogo = () => { - const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); - const { data: imageData, isLoading: imageDataIsLoading } = useOrganizationLogo(); + const { + data: organization, + isLoading: organizationIsLoading, + isError: organizationIsError, + error: organizationError + } = useCurrentOrganization(); + const { data: imageData, isLoading: imageDataIsLoading, isError: imageIsError, error: imageError } = useOrganizationLogo(); const { mutateAsync, isLoading } = useSetOrganizationLogo(); const toast = useToast(); const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; + if (organizationIsError) return ; + if (imageIsError) return ; const handleClose = () => { setIsEditMode(false); @@ -23,8 +31,8 @@ const EditLogo = () => { const onSubmit = async (logoInput: EditLogoInput) => { try { - console.log(logoInput); if (!logoInput.logoImage) { + toast.error('No logo image submitted.'); handleClose(); return; } diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index 3ebb20cf53..72be9d618e 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -23,13 +23,6 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } } }); - const onSubmitWrapper = async (data: EditLogoInput) => { - if (!!data.logoImage) { - await onSubmit(data); - } - reset(); - }; - const onHideWrapper = () => { onHide(); reset(); @@ -106,12 +99,7 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } Cancel - + Save From e80337e30c0323633d4fe4cca1ace30fcf39565e Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 20 Dec 2024 15:28:51 -0500 Subject: [PATCH 276/320] #2823 slack service comments and tests --- .../src/controllers/slack.controllers.ts | 42 -- .../src/services/announcement.service.ts | 4 +- src/backend/src/services/slack.services.ts | 109 +++- .../{unmocked => mocked}/organization.test.ts | 0 .../tests/mocked/slackMessages.test.ts | 464 ++++++++++++++++++ src/backend/tests/test-utils.ts | 32 ++ 6 files changed, 591 insertions(+), 60 deletions(-) delete mode 100644 src/backend/src/controllers/slack.controllers.ts rename src/backend/tests/{unmocked => mocked}/organization.test.ts (100%) create mode 100644 src/backend/tests/mocked/slackMessages.test.ts diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts deleted file mode 100644 index e3c042291b..0000000000 --- a/src/backend/src/controllers/slack.controllers.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Request, Response } from 'express'; -import crypto from 'crypto'; -import slackServices from '../services/slack.services'; - -export default class slackController { - static async handleEvent(req: Request, res: Response) { - console.log('got a slack req'); - if (req.body.type === 'url_verification') { - return res.status(200).send({ challenge: req.body.challenge }); - } - - const slackSignature = req.headers['x-slack-signature'] as string; - const slackTimeStamp = req.headers['X-Slack-Request-Timestamp'] as string; - - if (Math.abs(Date.now() - Number(slackTimeStamp) * 1000) > 60 * 5 * 1000) { - return res.status(400).send('Slack request verification failed due to expired timestamp'); - } - - const reqBody = req.body; - - const signatureBase = 'v0:' + slackTimeStamp + ':' + reqBody; - - const finalSignature = - 'v0=' + - crypto - .createHmac('sha256', process.env.SLACK_BOT_TOKEN ? process.env.SLACK_BOT_TOKEN : '') - .update(signatureBase) - .digest('hex'); - - if ( - crypto.timingSafeEqual( - Uint8Array.from(Buffer.from(finalSignature, 'utf8')), - Uint8Array.from(Buffer.from(slackSignature, 'utf8')) - ) - ) { - slackServices.processEvent(req.body); - return res.status(200).send('Event recieved'); - } - - return res.status(400).send('Slack request verification failed due to incorrect signature'); - } -} diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index c4199a40a8..7be31175f0 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -33,7 +33,7 @@ export default class AnnouncementService { return announcementTransformer(announcement); } - static async UpdateAnnouncement( + static async updateAnnouncement( text: string, usersReceivedIds: string[], dateCreated: Date, @@ -70,7 +70,7 @@ export default class AnnouncementService { return announcementTransformer(announcement); } - static async DeleteAnnouncement(slackEventId: string, organizationId: string): Promise { + static async deleteAnnouncement(slackEventId: string, organizationId: string): Promise { const announcement = await prisma.announcement.update({ where: { slackEventId }, data: { diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index d9d028adbf..991af8fc18 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -4,17 +4,23 @@ import { User_Settings } from '@prisma/client'; import AnnouncementService from './announcement.service'; import { Announcement } from 'shared'; +/** + * Represents a slack event for a message in a channel. + */ export interface SlackMessageEvent { type: 'message'; subtype?: string; channel: string; event_ts: string; channel_type: string; + [key: string]: any; } +/** + * Represents a slack message event for a standard sent message. + */ export interface SlackMessage extends SlackMessageEvent { user: string; - type: 'message'; client_msg_id: string; text: string; blocks: { @@ -24,17 +30,27 @@ export interface SlackMessage extends SlackMessageEvent { }[]; } +/** + * Represents a slack message event for a deleted message. + */ export interface SlackDeletedMessage extends SlackMessageEvent { subtype: 'message_deleted'; previous_message: SlackMessage; } +/** + * Represents a slack message event for an edited message. + */ export interface SlackUpdatedMessage extends SlackMessageEvent { subtype: 'message_changed'; message: SlackMessage; previous_message: SlackMessage; } +/** + * Represents a block of information within a message. These blocks with an array + * make up all the information needed to represent the content of a message. + */ export interface SlackRichTextBlock { type: 'broadcast' | 'color' | 'channel' | 'date' | 'emoji' | 'link' | 'text' | 'user' | 'usergroup'; range?: string; @@ -50,6 +66,11 @@ export interface SlackRichTextBlock { } export default class slackServices { + /** + * Converts a SlackRichTextBlock into a string representation for an announcement. + * @param block the block of information from slack + * @returns the string that will be combined with other block's strings to create the announcement + */ private static async blockToString(block: SlackRichTextBlock): Promise { switch (block.type) { case 'broadcast': @@ -57,6 +78,7 @@ export default class slackServices { case 'color': return block.value ?? ''; case 'channel': + //channels are represented as an id, get the name from the slack api let channelName = block.channel_id; try { channelName = await getChannelName(block.channel_id ?? ''); @@ -67,8 +89,10 @@ export default class slackServices { case 'date': return new Date(block.timestamp ?? 0).toISOString(); case 'emoji': + //if the emoji is a unicode emoji, convert the unicode to a string, + //if it is a slack emoji just use the name of the emoji if (block.unicode) { - return String.fromCharCode(parseInt(block.unicode, 16)); + return String.fromCodePoint(parseInt(block.unicode, 16)); } return 'emoji:' + block.name; case 'link': @@ -79,6 +103,7 @@ export default class slackServices { case 'text': return block.text ?? ''; case 'user': + //users are represented as an id, get the name of the user from the slack api let userName: string = block.user_id ?? ''; try { userName = (await getUserName(block.user_id ?? '')) ?? `Unknown User:${block.user_id}`; @@ -91,6 +116,13 @@ export default class slackServices { } } + /** + * Gets the users notified in a specific SlackRichTextBlock. + * @param block the block that may contain mentioned user/users + * @param usersSettings the settings of all the users in prisma + * @param channelId the id of the channel that the block is being sent in + * @returns an array of prisma user ids of users to be notified + */ private static async blockToMentionedUsers( block: SlackRichTextBlock, usersSettings: User_Settings[], @@ -103,7 +135,11 @@ export default class slackServices { return usersSettings.map((usersSettings) => usersSettings.userId); case 'channel': case 'here': - const slackIds = await getUsersInChannel(channelId); + //@here behaves the same as @channel; notifies all the users in that channel + let slackIds: string[] = []; + try { + slackIds = await getUsersInChannel(channelId); + } catch (ignored) {} return usersSettings .filter((userSettings) => { return slackIds.some((slackId) => slackId === userSettings.slackId); @@ -117,22 +153,38 @@ export default class slackServices { .filter((userSettings) => userSettings.slackId === block.user_id) .map((userSettings) => userSettings.userId); default: + //only broadcasts and specific user mentions add recievers to announcements return []; } } + /** + * Given a slack event representing a message in a channel, + * make the appropriate announcement change in prisma. + * @param event the slack event that will be processed + * @param organizationId the id of the organization represented by the slack api + * @returns an annoucement if an announcement was processed and created/modified/deleted + */ static async processMessageSent(event: SlackMessageEvent, organizationId: string): Promise { - const slackChannelName = await getChannelName(event.channel); + let slackChannelName: string; + //get the name of the channel from the slack api + try { + slackChannelName = await getChannelName(event.channel); + } catch (error) { + slackChannelName = `Unknown_Channel:${event.channel}`; + } const dateCreated = new Date(Number(event.event_ts)); + //get the message that will be processed either as the event or within a subtype let eventMessage: SlackMessage; if (event.subtype) { switch (event.subtype) { case 'message_deleted': + //delete the message using the client_msg_id eventMessage = (event as SlackDeletedMessage).previous_message; try { - return AnnouncementService.DeleteAnnouncement(eventMessage.client_msg_id, organizationId); + return AnnouncementService.deleteAnnouncement(eventMessage.client_msg_id, organizationId); } catch (ignored) { return; } @@ -147,9 +199,12 @@ export default class slackServices { eventMessage = event as SlackMessage; } + //loop through the blocks of the meta data while accumulating the + //text and users notified let messageText = ''; let userIdsToNotify: string[] = []; + //Get the settings of all users in this organization to compare slack ids const users = await UsersService.getAllUsers(); const userSettings = await Promise.all( users.map((user) => { @@ -157,22 +212,28 @@ export default class slackServices { }) ); + //get the name of the user that sent the message from slack let userName: string = ''; try { userName = (await getUserName(eventMessage.user)) ?? ''; } catch (ignored) {} + //if slack could not produce the name of the user, look for their name in prisma if (!userName) { const userIdList = userSettings .filter((userSetting) => userSetting.slackId === eventMessage.user) .map((userSettings) => userSettings.userId); if (userIdList.length !== 0) { - userName = users.find((user) => user.userId === userIdList[0])?.firstName ?? 'Unknown User:' + eventMessage.user; + const prismaUserName = users.find((user) => user.userId === userIdList[0]); + userName = prismaUserName + ? `${prismaUserName?.firstName} ${prismaUserName?.lastName}` + : 'Unknown User:' + eventMessage.user; } else { userName = 'Unknown_User:' + eventMessage.user; } } + //pull out the blocks of data from the metadata within the message event const richTextBlocks = eventMessage.blocks?.filter((eventBlock: any) => eventBlock.type === 'rich_text'); if (richTextBlocks && richTextBlocks.length === 1) { @@ -186,9 +247,20 @@ export default class slackServices { return; } + //get rid of duplicates within the users to notify + userIdsToNotify = [...new Set(userIdsToNotify)]; + + //if no users are notified, disregard the message + if (userIdsToNotify.length === 0) { + return; + } + + console.log('processed event'); + if (event.subtype === 'message_changed') { + //try to edit the announcement, if no announcement with that id exists create a new announcement try { - return AnnouncementService.UpdateAnnouncement( + return await AnnouncementService.updateAnnouncement( messageText, userIdsToNotify, dateCreated, @@ -199,14 +271,19 @@ export default class slackServices { ); } catch (ignored) {} } - return AnnouncementService.createAnnouncement( - messageText, - userIdsToNotify, - dateCreated, - userName, - eventMessage.client_msg_id, - slackChannelName, - organizationId - ); + try { + return await AnnouncementService.createAnnouncement( + messageText, + userIdsToNotify, + dateCreated, + userName, + eventMessage.client_msg_id, + slackChannelName, + organizationId + ); + } catch (error) { + //if announcement does not have unique cient_msg_id disregard it + return; + } } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/mocked/organization.test.ts similarity index 100% rename from src/backend/tests/unmocked/organization.test.ts rename to src/backend/tests/mocked/organization.test.ts diff --git a/src/backend/tests/mocked/slackMessages.test.ts b/src/backend/tests/mocked/slackMessages.test.ts new file mode 100644 index 0000000000..f8fc76f4ab --- /dev/null +++ b/src/backend/tests/mocked/slackMessages.test.ts @@ -0,0 +1,464 @@ +import { Organization, User } from '@prisma/client'; +import { createSlackMessageEvent, createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import { + batmanAppAdmin, + batmanSettings, + supermanAdmin, + supermanSettings, + wonderwomanGuest, + wonderwomanSettings +} from '../test-data/users.test-data'; +import * as apiFunctions from '../../src/integrations/slack'; +import AnnouncementService from '../../src/services/announcement.service'; +import slackServices from '../../src/services/slack.services'; +import { vi } from 'vitest'; +import { HttpException } from '../../src/utils/errors.utils'; + +vi.mock('../../src/integrations/slack', async (importOriginal) => { + return { + ...(await importOriginal()), + getUserName: vi.fn(), + getChannelName: vi.fn(), + getUsersInChannel: vi.fn() + }; +}); + +describe('Slack message tests', () => { + let orgId: string; + let organization: Organization; + let batman: User; + let superman: User; + let wonderwoman: User; + + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + batman = await createTestUser(batmanAppAdmin, orgId, batmanSettings); + superman = await createTestUser(supermanAdmin, orgId, supermanSettings); + wonderwoman = await createTestUser(wonderwomanGuest, orgId, wonderwomanSettings); + }); + + afterEach(async () => { + await resetUsers(); + vi.clearAllMocks(); + }); + + it('adds message to everyone with @everyone', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'text', text: 'test with ' }, + { type: 'broadcast', range: 'everyone' }, + { type: 'text', text: ' broadcast (@everyone)' } + ]), + orgId + ); + + console.log(announcement); + + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith( + 'test with @everyone broadcast (@everyone)', + [organization.userCreatedId, batman.userId, superman.userId, wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement?.text).toBe('test with @everyone broadcast (@everyone)'); + expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.senderName).toBe('Slack User Name'); + expect(announcement?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement?.slackEventId).toBe('id_1'); + expect(announcement?.usersReceived).toHaveLength(4); + }); + + it('Adds message to people in channel with @channel and @mention (w/o duplicates)', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + vi.mocked(apiFunctions.getUsersInChannel).mockReturnValue(Promise.resolve(['slack', 'slackWW'])); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'text', text: 'test with ' }, + { type: 'broadcast', range: 'channel' }, + { type: 'text', text: ' broadcast (@channel)' }, + { type: 'user', user_id: 'slackWW' }, + { type: 'user', user_id: 'slackSM' } + ]), + orgId + ); + + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith( + 'test with @channel broadcast (@channel)@Slack User Name@Slack User Name', + [batman.userId, wonderwoman.userId, superman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement?.text).toBe('test with @channel broadcast (@channel)@Slack User Name@Slack User Name'); + expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.senderName).toBe('Slack User Name'); + expect(announcement?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement?.slackEventId).toBe('id_1'); + expect(announcement?.usersReceived).toHaveLength(3); + }); + + it('Sends the announcement to a single person with a mention', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'text', text: 'test with ' }, + { type: 'user', user_id: 'slackWW' }, + { type: 'text', text: ' broadcast (@wonderwoman)' } + ]), + orgId + ); + + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith( + 'test with @Slack User Name broadcast (@wonderwoman)', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement?.text).toBe('test with @Slack User Name broadcast (@wonderwoman)'); + expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.senderName).toBe('Slack User Name'); + expect(announcement?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement?.slackEventId).toBe('id_1'); + expect(announcement?.usersReceived).toHaveLength(1); + }); + + it('Correctly processes other types of blocks', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'text', text: 'test with: ' }, + { type: 'link', url: 'http://www.example.com', text: 'link' }, + { type: 'text', text: 'Italics', style: { italic: true } }, + { type: 'text', text: ' and a unicode emoji: ' }, + { + type: 'emoji', + name: 'stuck_out_tongue_closed_eyes', + unicode: '1f61d' + }, + { type: 'text', text: ' and a slack emoji: ' }, + { + type: 'emoji', + name: 'birthday-parrot' + }, + { type: 'user', user_id: 'slackWW' } + ]), + orgId + ); + + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith( + 'test with: link:(http://www.example.com)Italics and a unicode emoji: 😝 and a slack emoji: emoji:birthday-parrot@Slack User Name', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement?.text).toBe( + 'test with: link:(http://www.example.com)Italics and a unicode emoji: 😝 and a slack emoji: emoji:birthday-parrot@Slack User Name' + ); + expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.senderName).toBe('Slack User Name'); + expect(announcement?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement?.slackEventId).toBe('id_1'); + expect(announcement?.usersReceived).toHaveLength(1); + }); + + it('Deals with errors from slack API', async () => { + vi.mocked(apiFunctions.getUserName).mockImplementation(() => { + throw new HttpException(500, 'sample error'); + }); + vi.mocked(apiFunctions.getChannelName).mockImplementation(() => { + throw new HttpException(500, 'sample error'); + }); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'slackWW', 'id_1', [ + { type: 'user', user_id: 'slackWW' }, + { type: 'text', text: ' prisma user and non-prisma user ' }, + { type: 'user', user_id: 'non-prisma-slack-id' } + ]), + orgId + ); + + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith( + '@Unknown_User:slackWW prisma user and non-prisma user @Unknown_User:non-prisma-slack-id', + [wonderwoman.userId], + new Date(1000000000000), + 'Wonder Woman', + 'id_1', + 'Unknown_Channel:channel id', + orgId + ); + + expect(announcement?.text).toBe( + '@Unknown_User:slackWW prisma user and non-prisma user @Unknown_User:non-prisma-slack-id' + ); + expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.senderName).toBe('Wonder Woman'); + expect(announcement?.slackChannelName).toBe('Unknown_Channel:channel id'); + expect(announcement?.slackEventId).toBe('id_1'); + expect(announcement?.usersReceived).toHaveLength(1); + }); + + it("Doesn't create an announcement if no one is mentioned", async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'text', text: 'just a text message' } + ]), + orgId + ); + + expect(spy).toBeCalledTimes(0); + + expect(announcement).toBeUndefined(); + }); + + it('Does nothing if an announcement with the same slack id has already been created', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), + orgId + ); + expect(createSpy).toBeCalledWith( + '@Slack User Name', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + const announcement2 = await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' }, + { type: 'text', text: ' added text' } + ]), + orgId + ); + expect(announcement2).toBeUndefined(); + }); + + it('Updates an edit made to a message', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + const updateSpy = vi.spyOn(AnnouncementService, 'updateAnnouncement'); + + await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), + orgId + ); + expect(createSpy).toBeCalledWith( + '@Slack User Name', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + const announcement2 = await slackServices.processMessageSent( + { + type: 'message', + subtype: 'message_changed', + channel: 'channel id', + event_ts: '1000000000000', + channel_type: 'channel', + message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' }, + { type: 'text', text: ' added text' } + ]), + previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' } + ]) + }, + orgId + ); + + expect(updateSpy).toBeCalledWith( + '@Slack User Name added text', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement2?.text).toBe('@Slack User Name added text'); + expect(announcement2?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement2?.senderName).toBe('Slack User Name'); + expect(announcement2?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement2?.slackEventId).toBe('id_1'); + expect(announcement2?.usersReceived).toHaveLength(1); + + expect(createSpy).toBeCalledTimes(1); + expect(updateSpy).toBeCalledTimes(1); + }); + + it('Creates a new announcement if the announcement to update is not found', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + const updateSpy = vi.spyOn(AnnouncementService, 'updateAnnouncement'); + + const announcement2 = await slackServices.processMessageSent( + { + type: 'message', + subtype: 'message_changed', + channel: 'channel id', + event_ts: '1000000000000', + channel_type: 'channel', + message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' }, + { type: 'text', text: ' added text' } + ]), + previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' } + ]) + }, + orgId + ); + + expect(updateSpy).toBeCalledWith( + '@Slack User Name added text', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(createSpy).toBeCalledWith( + '@Slack User Name added text', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + expect(announcement2?.text).toBe('@Slack User Name added text'); + expect(announcement2?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement2?.senderName).toBe('Slack User Name'); + expect(announcement2?.slackChannelName).toBe('Slack Channel Name'); + expect(announcement2?.slackEventId).toBe('id_1'); + expect(announcement2?.usersReceived).toHaveLength(1); + + expect(createSpy).toBeCalledTimes(1); + expect(updateSpy).toBeCalledTimes(1); + }); + + it('Creates and deletes and announcement', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + const deleteSpy = vi.spyOn(AnnouncementService, 'deleteAnnouncement'); + + await slackServices.processMessageSent( + createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), + orgId + ); + expect(createSpy).toBeCalledWith( + '@Slack User Name', + [wonderwoman.userId], + new Date(1000000000000), + 'Slack User Name', + 'id_1', + 'Slack Channel Name', + orgId + ); + + await slackServices.processMessageSent( + { + type: 'message', + subtype: 'message_deleted', + channel: 'channel id', + event_ts: '1000000000000', + channel_type: 'channel', + previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + { type: 'user', user_id: 'slackWW' } + ]) + }, + orgId + ); + expect(createSpy).toBeCalledTimes(1); + expect(deleteSpy).toBeCalledTimes(1); + expect(deleteSpy).toBeCalledWith('id_1', orgId); + }); + + it('Does nothing if recieves other message subtype', async () => { + vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); + vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); + + const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); + + const announcement = await slackServices.processMessageSent( + { + type: 'message', + subtype: 'other-nonprocessed-subtype', + channel: 'channel id', + event_ts: '1000000000000', + channel_type: 'channel', + bogus_data: 'other data' + }, + orgId + ); + expect(createSpy).toBeCalledTimes(0); + expect(announcement).toBeUndefined(); + }); +}); diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 99f2a010e2..fc6698ff06 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -18,6 +18,7 @@ import { getWorkPackageTemplateQueryArgs } from '../src/prisma-query-args/work-p import DesignReviewsService from '../src/services/design-reviews.services'; import TasksService from '../src/services/tasks.services'; import ProjectsService from '../src/services/projects.services'; +import { SlackMessage } from '../src/services/slack.services'; export interface CreateTestUserParams { firstName: string; @@ -119,6 +120,7 @@ export const resetUsers = async () => { await prisma.milestone.deleteMany(); await prisma.frequentlyAskedQuestion.deleteMany(); await prisma.organization.deleteMany(); + await prisma.announcement.deleteMany(); await prisma.user.deleteMany(); }; @@ -454,3 +456,33 @@ export const createTestTask = async (user: User, organization?: Organization) => if (!task) throw new Error('Failed to create task'); return { task, organization, orgId }; }; + +export const createSlackMessageEvent = ( + channel: string, + event_ts: string, + user: string, + client_msg_id: string, + elements: any[] +): SlackMessage => { + return { + type: 'message', + channel, + event_ts, + channel_type: 'channel', + user, + client_msg_id, + text: 'sample text', + blocks: [ + { + type: 'rich_text', + block_id: 'block id', + elements: [ + { + type: 'rich_text_section', + elements + } + ] + } + ] + }; +}; From 5a7cb3ddf7815e0dd0e77c89667a187ed0a54d19 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 15:58:00 -0500 Subject: [PATCH 277/320] #3074-set date created to now in schema --- .../migration.sql | 2 +- src/backend/src/prisma/schema.prisma | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/backend/src/prisma/migrations/{20241219125602_homepage_updates => 20241220205608_homepage_redesign}/migration.sql (97%) diff --git a/src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql b/src/backend/src/prisma/migrations/20241220205608_homepage_redesign/migration.sql similarity index 97% rename from src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql rename to src/backend/src/prisma/migrations/20241220205608_homepage_redesign/migration.sql index 37c468e58e..9dc929526c 100644 --- a/src/backend/src/prisma/migrations/20241219125602_homepage_updates/migration.sql +++ b/src/backend/src/prisma/migrations/20241220205608_homepage_redesign/migration.sql @@ -8,7 +8,7 @@ ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, - "dateCreated" TIMESTAMP(3) NOT NULL, + "dateCreated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "dateDeleted" TIMESTAMP(3), "senderName" TEXT NOT NULL, "slackEventId" TEXT NOT NULL, diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index bb8247266d..1b7b2d5375 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -934,7 +934,7 @@ model Announcement { announcementId String @id @default(uuid()) text String usersReceived User[] @relation("receivedAnnouncements") - dateCreated DateTime + dateCreated DateTime @default(now()) dateDeleted DateTime? senderName String slackEventId String @unique From e71442b8294f0796974743a9d9fc0a34c38af415 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 16:08:34 -0500 Subject: [PATCH 278/320] #3074-fixed service --- src/backend/src/services/announcement.service.ts | 2 -- src/backend/tests/unmocked/users.test.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index eb0d9a5f1b..28f5c8e71b 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -19,7 +19,6 @@ export default class AnnouncementService { static async createAnnouncement( text: string, usersReceivedIds: string[], - dateCreated: Date, senderName: string, slackEventId: string, slackChannelName: string, @@ -33,7 +32,6 @@ export default class AnnouncementService { userId: id })) }, - dateCreated, senderName, slackEventId, slackChannelName diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index bd0b934270..a9f1488530 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -94,7 +94,6 @@ describe('User Tests', () => { await AnnouncementService.createAnnouncement( 'test1', [testBatman.userId], - new Date(), 'Thomas Emrax', '1', 'software', @@ -103,7 +102,6 @@ describe('User Tests', () => { await AnnouncementService.createAnnouncement( 'test2', [testBatman.userId], - new Date(), 'Superman', '50', 'mechanical', From 43b9bd0266b5c0a85207077d1f6478f3ec367e39 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 16:12:08 -0500 Subject: [PATCH 279/320] #3074-fixed seed --- src/backend/src/prisma/seed.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index ddd4e190cb..e7b5aa4c84 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1898,7 +1898,6 @@ const performSeed: () => Promise = async () => { await AnnouncementService.createAnnouncement( 'Welcome to Finishline!', [regina.userId], - new Date(), 'Thomas Emrax', '1', 'software', From 811b608798bb0321b705a5a2e24d4eb57f858d5b Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 20 Dec 2024 16:23:00 -0500 Subject: [PATCH 280/320] #2823 slack id to organization schema change, service funcs, and slack router addition --- src/backend/src/integrations/slack.ts | 19 +++++++++++ .../migration.sql | 3 +- src/backend/src/prisma/schema.prisma | 1 + src/backend/src/routes/slack.routes.ts | 10 ++++-- .../src/services/organizations.services.ts | 34 +++++++++++++++++++ src/backend/tests/mocked/organization.test.ts | 32 +++++++++++++++++ 6 files changed, 96 insertions(+), 3 deletions(-) rename src/backend/src/prisma/migrations/{20241220204035_homepage_updates => 20241220204512_home_page_updates}/migration.sql (95%) diff --git a/src/backend/src/integrations/slack.ts b/src/backend/src/integrations/slack.ts index d2440e6288..7c80fa819a 100644 --- a/src/backend/src/integrations/slack.ts +++ b/src/backend/src/integrations/slack.ts @@ -220,4 +220,23 @@ export const getUserName = async (userId: string) => { } }; +/** + * Get the workspace id of the workspace this slack api is registered with + * @returns the id of the workspace + */ +export const getWorkspaceId = async () => { + const { SLACK_BOT_TOKEN } = process.env; + if (!SLACK_BOT_TOKEN) return; + + try { + const response = await slack.auth.test(); + if (response.ok) { + return response.team_id; + } + throw new Error(response.error); + } catch (error) { + throw new HttpException(500, 'Error getting slack workspace id: ' + (error as any).data.error); + } +}; + export default slack; diff --git a/src/backend/src/prisma/migrations/20241220204035_homepage_updates/migration.sql b/src/backend/src/prisma/migrations/20241220204512_home_page_updates/migration.sql similarity index 95% rename from src/backend/src/prisma/migrations/20241220204035_homepage_updates/migration.sql rename to src/backend/src/prisma/migrations/20241220204512_home_page_updates/migration.sql index 37c468e58e..e20892547e 100644 --- a/src/backend/src/prisma/migrations/20241220204035_homepage_updates/migration.sql +++ b/src/backend/src/prisma/migrations/20241220204512_home_page_updates/migration.sql @@ -1,5 +1,6 @@ -- AlterTable -ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT; +ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT, +ADD COLUMN "slackWorkspaceId" TEXT; -- AlterTable ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index bb8247266d..3068c9558f 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -877,6 +877,7 @@ model Organization { applyInterestImageId String? @unique exploreAsGuestImageId String? @unique logoImageId String? + slackWorkspaceId String? // Relation references wbsElements WBS_Element[] diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts index a938ac0691..82b98b0a0b 100644 --- a/src/backend/src/routes/slack.routes.ts +++ b/src/backend/src/routes/slack.routes.ts @@ -1,11 +1,17 @@ import { createEventAdapter } from '@slack/events-api'; import slackServices from '../services/slack.services'; +import OrganizationsService from '../services/organizations.services'; +import { getWorkspaceId } from '../integrations/slack'; export const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET || ''); slackEvents.on('message', async (event) => { - console.log('EVENT:', event); - slackServices.processMessageSent(event, process.env.DEV_ORGANIZATION_ID ?? ''); + const organizations = await OrganizationsService.getAllOrganizations(); + const nerSlackWorkspaceId = await getWorkspaceId(); + const orgId = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId)?.organizationId; + if (orgId) { + slackServices.processMessageSent(event, orgId); + } }); slackEvents.on('error', (error) => { diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index c4ce91668b..acd6f24865 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -12,6 +12,14 @@ import { getProjectQueryArgs } from '../prisma-query-args/projects.query-args'; import projectTransformer from '../transformers/projects.transformer'; export default class OrganizationsService { + /** + * Retrieve all the organizations + * @returns an array of every organization + */ + static async getAllOrganizations(): Promise { + return prisma.organization.findMany(); + } + /** * Gets the current organization * @param organizationId the organizationId to be fetched @@ -275,4 +283,30 @@ export default class OrganizationsService { return organization.featuredProjects.map(projectTransformer); } + + /** + * Sets the slack workspace id used to initialize slack bots for this organization + * @param slackWorkspaceId the id of the organization's slack workspace + * @param submitter the user making this submission (must be an admin) + * @param organization the organization being changed + * @returns the changed organization + */ + static async setOrganizationSlackWorkspaceId( + slackWorkspaceId: string, + submitter: User, + organization: Organization + ): Promise { + if (!(await userHasPermission(submitter.userId, organization.organizationId, isAdmin))) { + throw new AccessDeniedAdminOnlyException('set slack workspace id'); + } + const updatedOrg = prisma.organization.update({ + where: { + organizationId: organization.organizationId + }, + data: { + slackWorkspaceId + } + }); + return updatedOrg; + } } diff --git a/src/backend/tests/mocked/organization.test.ts b/src/backend/tests/mocked/organization.test.ts index 2c0affdff9..295b96031d 100644 --- a/src/backend/tests/mocked/organization.test.ts +++ b/src/backend/tests/mocked/organization.test.ts @@ -325,4 +325,36 @@ describe('Organization Tests', () => { expect(oldOrganization?.description).toBe(returnedOrganization.description); }); }); + + describe('Set Organization slack id', () => { + it('Fails if user is not an admin', async () => { + await expect( + OrganizationsService.setOrganizationSlackWorkspaceId( + 'test slack id', + await createTestUser(wonderwomanGuest, orgId), + organization + ) + ).rejects.toThrow(new AccessDeniedAdminOnlyException('set slack workspace id')); + }); + + it('Succeeds and updates the slack id', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + + const returnedOrganization = await OrganizationsService.setOrganizationSlackWorkspaceId( + 'sample slack id', + testBatman, + organization + ); + + const oldOrganization = await prisma.organization.findUnique({ + where: { + organizationId: orgId + } + }); + + expect(oldOrganization).not.toBeNull(); + expect(oldOrganization?.slackWorkspaceId).toBe('sample slack id'); + expect(oldOrganization?.slackWorkspaceId).toBe(returnedOrganization.slackWorkspaceId); + }); + }); }); From 147b5ddca972b079d746bc53bf2f18f0a6c3efa4 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 20 Dec 2024 16:55:52 -0500 Subject: [PATCH 281/320] #2823 announcement service function tests --- .../src/services/announcement.service.ts | 17 +- .../tests/unmocked/announcements.test.ts | 158 ++++++++++++++++++ 2 files changed, 171 insertions(+), 4 deletions(-) create mode 100644 src/backend/tests/unmocked/announcements.test.ts diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 342d5de296..9ff1e7007e 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -67,7 +67,7 @@ export default class AnnouncementService { data: { text, usersReceived: { - connect: usersReceivedIds.map((id) => ({ + set: usersReceivedIds.map((id) => ({ userId: id })) }, @@ -83,16 +83,25 @@ export default class AnnouncementService { } static async deleteAnnouncement(slackEventId: string, organizationId: string): Promise { + const originalAnnouncement = await prisma.announcement.findUnique({ + where: { + slackEventId + } + }); + + if (!originalAnnouncement) throw new NotFoundException('Announcement', slackEventId); + const announcement = await prisma.announcement.update({ where: { slackEventId }, data: { - dateDeleted: new Date() + dateDeleted: new Date(), + usersReceived: { + set: [] + } }, ...getAnnouncementQueryArgs(organizationId) }); - if (!announcement) throw new NotFoundException('Announcement', slackEventId); - return announcementTransformer(announcement); } } diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unmocked/announcements.test.ts new file mode 100644 index 0000000000..7bd6781a1d --- /dev/null +++ b/src/backend/tests/unmocked/announcements.test.ts @@ -0,0 +1,158 @@ +import { Organization, User } from '@prisma/client'; +import { createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import { + batmanAppAdmin, + batmanSettings, + supermanAdmin, + supermanSettings, + wonderwomanGuest, + wonderwomanSettings +} from '../test-data/users.test-data'; +import AnnouncementService from '../../src/services/announcement.service'; +import UsersService from '../../src/services/users.services'; +import { NotFoundException } from '../../src/utils/errors.utils'; + +describe('announcement tests', () => { + let orgId: string; + let organization: Organization; + let batman: User; + let superman: User; + let wonderwoman: User; + + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + batman = await createTestUser(batmanAppAdmin, orgId, batmanSettings); + superman = await createTestUser(supermanAdmin, orgId, supermanSettings); + wonderwoman = await createTestUser(wonderwomanGuest, orgId, wonderwomanSettings); + }); + + afterEach(async () => { + await resetUsers(); + }); + + it('creates announcements which can be recieved via users', async () => { + const announcement = await AnnouncementService.createAnnouncement( + 'text', + [superman.userId, batman.userId], + new Date(1000000000000), + 'sender name', + 'slack id', + 'channel name', + orgId + ); + expect(announcement?.text).toBe('text'); + expect(announcement?.usersReceived).toHaveLength(2); + expect(announcement?.senderName).toBe('sender name'); + expect(announcement?.dateCreated).toStrictEqual(new Date(1000000000000)); + expect(announcement?.slackEventId).toBe('slack id'); + expect(announcement?.slackChannelName).toBe('channel name'); + expect(announcement?.dateDeleted).toBeUndefined(); + + const smAnnouncements = await UsersService.getUserUnreadAnnouncements(superman.userId, organization); + const bmAnnouncements = await UsersService.getUserUnreadAnnouncements(batman.userId, organization); + const wwAnnouncements = await UsersService.getUserUnreadAnnouncements(wonderwoman.userId, organization); + + expect(smAnnouncements).toHaveLength(1); + expect(smAnnouncements[0]?.text).toBe('text'); + expect(smAnnouncements[0]?.usersReceived).toHaveLength(2); + expect(smAnnouncements[0]?.senderName).toBe('sender name'); + expect(smAnnouncements[0]?.dateCreated).toStrictEqual(new Date(1000000000000)); + expect(smAnnouncements[0]?.slackEventId).toBe('slack id'); + expect(smAnnouncements[0]?.slackChannelName).toBe('channel name'); + expect(smAnnouncements[0]?.dateDeleted).toBeUndefined(); + + expect(bmAnnouncements).toHaveLength(1); + expect(wwAnnouncements).toHaveLength(0); + }); + + it('updates an announcement', async () => { + await AnnouncementService.createAnnouncement( + 'text', + [superman.userId, batman.userId], + new Date(1000000000000), + 'sender name', + 'slack id', + 'channel name', + orgId + ); + + let smAnnouncements = await UsersService.getUserUnreadAnnouncements(superman.userId, organization); + let bmAnnouncements = await UsersService.getUserUnreadAnnouncements(batman.userId, organization); + let wwAnnouncements = await UsersService.getUserUnreadAnnouncements(wonderwoman.userId, organization); + + expect(smAnnouncements).toHaveLength(1); + expect(bmAnnouncements).toHaveLength(1); + expect(wwAnnouncements).toHaveLength(0); + + const updatedAnnouncement = await AnnouncementService.updateAnnouncement( + 'new text', + [batman.userId, wonderwoman.userId], + new Date(1000000000000), + 'sender name', + 'slack id', + 'channel name', + orgId + ); + + smAnnouncements = await UsersService.getUserUnreadAnnouncements(superman.userId, organization); + bmAnnouncements = await UsersService.getUserUnreadAnnouncements(batman.userId, organization); + wwAnnouncements = await UsersService.getUserUnreadAnnouncements(wonderwoman.userId, organization); + + expect(smAnnouncements).toHaveLength(0); + expect(bmAnnouncements).toHaveLength(1); + expect(wwAnnouncements).toHaveLength(1); + expect(bmAnnouncements[0]?.text).toBe('new text'); + expect(wwAnnouncements[0]?.text).toBe('new text'); + expect(updatedAnnouncement?.text).toBe('new text'); + }); + + it('fails to update if there is no slack id', async () => { + await expect( + async () => + await AnnouncementService.updateAnnouncement( + 'new text', + [batman.userId, wonderwoman.userId], + new Date(1000000000000), + 'sender name', + 'slack id', + 'channel name', + orgId + ) + ).rejects.toThrow(new NotFoundException('Announcement', 'slack id')); + }); + + it('deletes an announcement', async () => { + await AnnouncementService.createAnnouncement( + 'text', + [superman.userId, batman.userId], + new Date(1000000000000), + 'sender name', + 'slack id', + 'channel name', + orgId + ); + + let smAnnouncements = await UsersService.getUserUnreadAnnouncements(superman.userId, organization); + let bmAnnouncements = await UsersService.getUserUnreadAnnouncements(batman.userId, organization); + + expect(smAnnouncements).toHaveLength(1); + expect(bmAnnouncements).toHaveLength(1); + + const deletedAnnouncement = await AnnouncementService.deleteAnnouncement('slack id', orgId); + + smAnnouncements = await UsersService.getUserUnreadAnnouncements(superman.userId, organization); + bmAnnouncements = await UsersService.getUserUnreadAnnouncements(batman.userId, organization); + + expect(smAnnouncements).toHaveLength(0); + expect(bmAnnouncements).toHaveLength(0); + expect(deletedAnnouncement?.text).toBe('text'); + expect(deletedAnnouncement?.dateDeleted).toBeDefined(); + }); + + it('throws if it cannot find the announcement to delete', async () => { + await expect(async () => await AnnouncementService.deleteAnnouncement('non-existent id', orgId)).rejects.toThrow( + new NotFoundException('Announcement', 'non-existent id') + ); + }); +}); From 9ce32f92f4caca0f1e20a8d907842bd785c9bca2 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 18:25:41 -0500 Subject: [PATCH 282/320] #3074-refactored notifications for route change --- src/backend/src/controllers/users.controllers.ts | 2 +- src/backend/src/routes/users.routes.ts | 2 +- src/frontend/src/apis/users.api.ts | 8 ++++---- src/frontend/src/components/NotificationAlert.tsx | 12 ++++-------- src/frontend/src/components/NotificationCard.tsx | 1 + src/frontend/src/hooks/users.hooks.ts | 14 +++++++------- src/frontend/src/pages/HomePage/Home.tsx | 2 +- src/frontend/src/utils/urls.ts | 4 ++-- 8 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index b3fee931c2..baa0d9228a 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -205,7 +205,7 @@ export default class UsersController { static async removeUserNotification(req: Request, res: Response, next: NextFunction) { try { - const { notificationId } = req.params; + const { notificationId } = req.body; const { organization, currentUser } = req; const unreadNotifications = await UsersService.removeUserNotification( diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 96be49828c..b859968e5a 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -56,6 +56,6 @@ userRouter.post( ); userRouter.get('/notifications/current-user', UsersController.getUserUnreadNotifications); userRouter.get('/announcements/current-user', UsersController.getUserUnreadAnnouncements); -userRouter.post('/notifications/:notificationId/remove', UsersController.removeUserNotification); +userRouter.post('/notifications/remove', nonEmptyString(body('notificationId')), UsersController.removeUserNotification); export default userRouter; diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index 5a91bff5fd..4999c8cb66 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -164,8 +164,8 @@ export const getManyUserTasks = (userIds: string[]) => { /* * Gets all unread notifications of the user with the given id */ -export const getNotifications = (id: string) => { - return axios.get(apiUrls.userNotifications(id), { +export const getNotifications = () => { + return axios.get(apiUrls.userNotifications(), { transformResponse: (data) => JSON.parse(data) }); }; @@ -173,6 +173,6 @@ export const getNotifications = (id: string) => { /* * Removes a notification from the user with the given id */ -export const removeNotification = (userId: string, notificationId: string) => { - return axios.post(apiUrls.userRemoveNotifications(userId), { notificationId }); +export const removeNotification = (notificationId: string) => { + return axios.post(apiUrls.userRemoveNotifications(), { notificationId }); }; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index 581d849ef0..668c0f3cfd 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -1,17 +1,13 @@ import { Box } from '@mui/material'; import React, { useEffect, useState } from 'react'; -import { Notification, User } from 'shared'; +import { Notification } from 'shared'; import NotificationCard from './NotificationCard'; import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; import { useHistory } from 'react-router-dom'; -interface NotificationAlertProps { - user: User; -} - -const NotificationAlert: React.FC = ({ user }) => { - const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(user.userId); - const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(user.userId); +const NotificationAlert: React.FC = () => { + const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(); + const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(); const [currentNotification, setCurrentNotification] = useState(); const history = useHistory(); diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index 1e4cfb4c02..38dd994029 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -37,6 +37,7 @@ const NotificationCard: React.FC = ({ notification, remov onClick={async () => await onClick(notification)} sx={{ display: 'flex', + alignItems: 'center', gap: 1, cursor: !!notification.eventLink ? 'pointer' : 'default' }} diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index 32279217f9..ffc7a65d75 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -269,9 +269,9 @@ export const useManyUserTasks = (userIds: string[]) => { * @param userId id of user to get unread notifications from * @returns */ -export const useUserNotifications = (userId: string) => { - return useQuery(['users', userId, 'notifications'], async () => { - const { data } = await getNotifications(userId); +export const useUserNotifications = () => { + return useQuery(['users', 'notifications'], async () => { + const { data } = await getNotifications(); return data; }); }; @@ -281,17 +281,17 @@ export const useUserNotifications = (userId: string) => { * @param userId id of user to get unread notifications from * @returns */ -export const useRemoveUserNotification = (userId: string) => { +export const useRemoveUserNotification = () => { const queryClient = useQueryClient(); return useMutation( - ['users', userId, 'notifications', 'remove'], + ['users', 'notifications', 'remove'], async (notification: Notification) => { - const { data } = await removeNotification(userId, notification.notificationId); + const { data } = await removeNotification(notification.notificationId); return data; }, { onSuccess: () => { - queryClient.invalidateQueries(['users', userId, 'notifications']); + queryClient.invalidateQueries(['users', 'notifications']); } } ); diff --git a/src/frontend/src/pages/HomePage/Home.tsx b/src/frontend/src/pages/HomePage/Home.tsx index 76db11f05a..f76ecc0e4c 100644 --- a/src/frontend/src/pages/HomePage/Home.tsx +++ b/src/frontend/src/pages/HomePage/Home.tsx @@ -18,7 +18,7 @@ const Home = () => { const [onMemberHomePage, setOnMemberHomePage] = useState(false); return ( <> - {!onMemberHomePage && } + {!onMemberHomePage && } {isGuest(user.role) && !onMemberHomePage ? ( ) : isMember(user.role) ? ( diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index d50675ed69..99c9d82c82 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -26,8 +26,8 @@ const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; const manyUserTasks = () => `${users()}/tasks/get-many`; -const userNotifications = (id: string) => `${usersById(id)}/notifications`; -const userRemoveNotifications = (id: string) => `${usersById(id)}/notifications/remove`; +const userNotifications = () => `${users()}/notifications/current-user`; +const userRemoveNotifications = () => `${users()}/notifications/remove`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; From fd4f299f77347a6a9daf139d3f0b400f7f669b2e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 18:49:00 -0500 Subject: [PATCH 283/320] #3074-fixed transformer --- src/backend/src/transformers/announcements.transformer.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/backend/src/transformers/announcements.transformer.ts b/src/backend/src/transformers/announcements.transformer.ts index 4fee90eac2..8b43031390 100644 --- a/src/backend/src/transformers/announcements.transformer.ts +++ b/src/backend/src/transformers/announcements.transformer.ts @@ -5,13 +5,8 @@ import { userTransformer } from './user.transformer'; const announcementTransformer = (announcement: Prisma.AnnouncementGetPayload): Announcement => { return { - announcementId: announcement.announcementId, - text: announcement.text, + ...announcement, usersReceived: announcement.usersReceived.map(userTransformer), - dateCreated: announcement.dateCreated, - senderName: announcement.senderName, - slackEventId: announcement.slackEventId, - slackChannelName: announcement.slackChannelName, dateDeleted: announcement.dateDeleted ?? undefined }; }; From d982e2efad671d14c00e1f1cac3eab3967276a0a Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 19:39:24 -0500 Subject: [PATCH 284/320] created endpoint to set workspace id --- .../src/controllers/organizations.controllers.ts | 15 +++++++++++++++ .../migration.sql | 5 +++-- src/backend/src/prisma/schema.prisma | 3 ++- src/backend/src/routes/organizations.routes.ts | 5 +++++ .../src/services/organizations.services.ts | 12 ++++++++++++ src/backend/tests/unmocked/organization.test.ts | 11 +++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) rename src/backend/src/prisma/migrations/{20241218031222_home_page_updates => 20241221002428_homepage_redesign}/migration.sql (93%) diff --git a/src/backend/src/controllers/organizations.controllers.ts b/src/backend/src/controllers/organizations.controllers.ts index af14eb1dd8..7b9759a3f1 100644 --- a/src/backend/src/controllers/organizations.controllers.ts +++ b/src/backend/src/controllers/organizations.controllers.ts @@ -117,4 +117,19 @@ export default class OrganizationsController { next(error); } } + + static async setSlackWorkspaceId(req: Request, res: Response, next: NextFunction) { + try { + const { workspaceId } = req.body; + + const updatedOrg = await OrganizationsService.setSlackWorkspaceId( + workspaceId, + req.currentUser, + req.organization.organizationId + ); + res.status(200).json(updatedOrg); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql b/src/backend/src/prisma/migrations/20241221002428_homepage_redesign/migration.sql similarity index 93% rename from src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql rename to src/backend/src/prisma/migrations/20241221002428_homepage_redesign/migration.sql index c7975f2e21..166c2bd8ae 100644 --- a/src/backend/src/prisma/migrations/20241218031222_home_page_updates/migration.sql +++ b/src/backend/src/prisma/migrations/20241221002428_homepage_redesign/migration.sql @@ -1,5 +1,6 @@ -- AlterTable -ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT; +ALTER TABLE "Organization" ADD COLUMN "logoImageId" TEXT, +ADD COLUMN "slackWorkspaceId" TEXT; -- AlterTable ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; @@ -8,7 +9,7 @@ ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, - "dateCrated" TIMESTAMP(3) NOT NULL, + "dateCreated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "userCreatedId" TEXT NOT NULL, CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index e0157c3353..b865f65f2c 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -878,6 +878,7 @@ model Organization { applyInterestImageId String? @unique exploreAsGuestImageId String? @unique logoImageId String? + slackWorkspaceId String? // Relation references wbsElements WBS_Element[] @@ -935,7 +936,7 @@ model Announcement { announcementId String @id @default(uuid()) text String usersReceived User[] @relation("receivedAnnouncements") - dateCrated DateTime + dateCreated DateTime @default(now()) userCreatedId String userCreated User @relation("createdAnnouncements", fields: [userCreatedId], references: [userId]) } diff --git a/src/backend/src/routes/organizations.routes.ts b/src/backend/src/routes/organizations.routes.ts index 4b3c534fb6..991eb8f95f 100644 --- a/src/backend/src/routes/organizations.routes.ts +++ b/src/backend/src/routes/organizations.routes.ts @@ -36,4 +36,9 @@ organizationRouter.post( OrganizationsController.setOrganizationDescription ); organizationRouter.get('/featured-projects', OrganizationsController.getOrganizationFeaturedProjects); +organizationRouter.post( + '/workspaceId/set', + nonEmptyString(body('workspaceId')), + OrganizationsController.setSlackWorkspaceId +); export default organizationRouter; diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index c4ce91668b..620ed3e6fa 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -275,4 +275,16 @@ export default class OrganizationsService { return organization.featuredProjects.map(projectTransformer); } + + static async setSlackWorkspaceId(workspaceId: string, submitter: User, organizationId: string) { + if (!(await userHasPermission(submitter.userId, organizationId, isAdmin))) { + throw new AccessDeniedAdminOnlyException('set workspace id'); + } + const updatedOrg = await prisma.organization.update({ + where: { organizationId }, + data: { slackWorkspaceId: workspaceId } + }); + + return updatedOrg; + } } diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index 2c0affdff9..b5c4f59fb0 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -325,4 +325,15 @@ describe('Organization Tests', () => { expect(oldOrganization?.description).toBe(returnedOrganization.description); }); }); + + describe('Set Organization Workspace Id', () => { + it('Succeeds and updates the workspace id', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + + const updatedOrganization = await OrganizationsService.setSlackWorkspaceId('1234', testBatman, orgId); + + expect(updatedOrganization).not.toBeNull(); + expect(updatedOrganization.slackWorkspaceId).toBe('1234'); + }); + }); }); From 3baf84cafc062cb74be330cb5f49c0a43899a0ce Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 19:46:06 -0500 Subject: [PATCH 285/320] created hook to set workspace if --- src/frontend/src/apis/organizations.api.ts | 6 ++++++ src/frontend/src/hooks/organizations.hooks.ts | 19 ++++++++++++++++++- src/shared/src/types/user-types.ts | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index e5903575c9..77ca2f86e4 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -29,3 +29,9 @@ export const setOrganizationFeaturedProjects = async (featuredProjectIds: string projectIds: featuredProjectIds }); }; + +export const setOrganizationWorkspaceId = async (workspaceId: string) => { + return axios.post(apiUrls.organizationsSetWorkspaceId(), { + workspaceId + }); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 24da9a5653..a6ecf726a8 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -6,7 +6,8 @@ import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription, - setOrganizationFeaturedProjects + setOrganizationFeaturedProjects, + setOrganizationWorkspaceId } from '../apis/organizations.api'; interface OrganizationProvider { @@ -84,3 +85,19 @@ export const useSetFeaturedProjects = () => { } ); }; + +export const useSetWorkspaceId = () => { + const queryClient = useQueryClient(); + return useMutation( + ['organizations', 'featured-projects'], + async (workspaceId: string) => { + const { data } = await setOrganizationWorkspaceId(workspaceId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['organizations']); + } + } + ); +}; diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index 2dc8fbb205..bde7948dab 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -44,6 +44,7 @@ export interface Organization { treasurer?: UserPreview; advisor?: UserPreview; description: string; + workspaceId?: string; } /** From 99fb4d1a64e9b4b8e63a5ec1fe48f079b9e58c6e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 21:06:43 -0500 Subject: [PATCH 286/320] created text field for setting workspace id --- .../pages/AdminToolsPage/AdminToolsPage.tsx | 2 + .../AdminToolsSlackWorkspaceId.tsx | 66 +++++++++++++++++++ src/frontend/src/utils/urls.ts | 2 + src/shared/src/types/user-types.ts | 2 +- 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index b96aa4c93b..f99d21f08e 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -19,6 +19,7 @@ import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; import GuestViewConfig from './EditGuestView/GuestViewConfig'; +import AdminToolsWorkspaceId from './AdminToolsSlackWorkspaceId'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); @@ -100,6 +101,7 @@ const AdminToolsPage: React.FC = () => { + )} diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx new file mode 100644 index 0000000000..2f002dde82 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx @@ -0,0 +1,66 @@ +/* + * This file is part of NER's FinishLine and licensed under GNU AGPLv3. + * See the LICENSE file in the repository root folder for details. + */ + +import { NERButton } from '../../components/NERButton'; +import { Box, TextField, Typography } from '@mui/material'; +import { useState } from 'react'; +import { useToast } from '../../hooks/toasts.hooks'; +import { useCurrentOrganization, useSetWorkspaceId } from '../../hooks/organizations.hooks'; +import LoadingIndicator from '../../components/LoadingIndicator'; +import ErrorPage from '../ErrorPage'; +import { Organization } from 'shared'; + +interface AdminToolsWorkspaceIdViewProps { + organization: Organization; +} + +const AdminToolsWorkspaceId: React.FC = () => { + const { data: organization, isLoading, isError, error } = useCurrentOrganization(); + if (!organization || isLoading) return ; + if (isError) return ; + + return ; +}; + +const AdminToolsWorkspaceIdView: React.FC = ({ organization }) => { + const toast = useToast(); + const { mutateAsync, isLoading } = useSetWorkspaceId(); + const [workspaceId, setWorkspaceId] = useState(organization.slackWorkspaceId ?? ''); + + const slackWorkspaceId = async () => { + try { + await mutateAsync(workspaceId); + toast.success('Successfully updated the slack workspace id'); + } catch (error: unknown) { + if (error instanceof Error) { + toast.error(error.message); + } + } + }; + + return ( + + + {organization.name} Slack Workspace Id + + + setWorkspaceId(e.target.value)} /> + + + Update + + + + + ); +}; + +export default AdminToolsWorkspaceId; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index d50675ed69..37182472dc 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -180,6 +180,7 @@ const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; const organizationsSetDescription = () => `${organizations()}/description/set`; const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; const organizationsSetFeaturedProjects = () => `${organizationsFeaturedProjects()}/set`; +const organizationsSetWorkspaceId = () => `${organizations()}/workspaceId/set`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -342,6 +343,7 @@ export const apiUrls = { organizationsFeaturedProjects, organizationsSetDescription, organizationsSetFeaturedProjects, + organizationsSetWorkspaceId, cars, carsCreate, diff --git a/src/shared/src/types/user-types.ts b/src/shared/src/types/user-types.ts index bde7948dab..f4432cc60a 100644 --- a/src/shared/src/types/user-types.ts +++ b/src/shared/src/types/user-types.ts @@ -44,7 +44,7 @@ export interface Organization { treasurer?: UserPreview; advisor?: UserPreview; description: string; - workspaceId?: string; + slackWorkspaceId?: string; } /** From c4774e04ff648f2d1dc8620bf61f5b6674aef638 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 21:15:57 -0500 Subject: [PATCH 287/320] javadocs --- src/backend/src/services/organizations.services.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 620ed3e6fa..34144d175a 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -276,6 +276,13 @@ export default class OrganizationsService { return organization.featuredProjects.map(projectTransformer); } + /** + * sets the slack workspace id of the organization + * @param workspaceId workspace id to set + * @param submitter user who submitted the workspace id + * @param organizationId id of organization to update with workspace id + * @returns updated organization + */ static async setSlackWorkspaceId(workspaceId: string, submitter: User, organizationId: string) { if (!(await userHasPermission(submitter.userId, organizationId, isAdmin))) { throw new AccessDeniedAdminOnlyException('set workspace id'); @@ -285,6 +292,8 @@ export default class OrganizationsService { data: { slackWorkspaceId: workspaceId } }); + console.log(updatedOrg); + return updatedOrg; } } From 388ad7eee3259ebf96effe5ce0c4a44f78f32783 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 21:28:58 -0500 Subject: [PATCH 288/320] added link for where to find workspace id --- .../src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx index 2f002dde82..ab9a79ee78 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx @@ -4,13 +4,14 @@ */ import { NERButton } from '../../components/NERButton'; -import { Box, TextField, Typography } from '@mui/material'; +import { Box, Link, TextField, Typography } from '@mui/material'; import { useState } from 'react'; import { useToast } from '../../hooks/toasts.hooks'; import { useCurrentOrganization, useSetWorkspaceId } from '../../hooks/organizations.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; import { Organization } from 'shared'; +import HelpIcon from '@mui/icons-material/Help'; interface AdminToolsWorkspaceIdViewProps { organization: Organization; @@ -52,6 +53,9 @@ const AdminToolsWorkspaceIdView: React.FC = ({ o alignItems: 'center' }} > + + + setWorkspaceId(e.target.value)} /> From 97a33e74bd0ccaf67dea252af80147ef7e339b21 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 21:50:32 -0500 Subject: [PATCH 289/320] #2795-updated component for changes --- src/frontend/src/pages/HomePage/GuestHomePage.tsx | 4 ++-- .../HomePage/components/OrganizationLogo.tsx | 15 +++++++++++++++ .../pages/HomePage/components/TaskDetailCard.tsx | 4 ++-- .../pages/HomePage/components/WorkPackageCard.tsx | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/OrganizationLogo.tsx diff --git a/src/frontend/src/pages/HomePage/GuestHomePage.tsx b/src/frontend/src/pages/HomePage/GuestHomePage.tsx index e8afa16a5d..297559c47a 100644 --- a/src/frontend/src/pages/HomePage/GuestHomePage.tsx +++ b/src/frontend/src/pages/HomePage/GuestHomePage.tsx @@ -12,7 +12,7 @@ import { AuthenticatedUser } from 'shared'; import MemberEncouragement from './components/MemberEncouragement'; import GuestOrganizationInfo from './components/GuestOrganizationInfo'; import FeaturedProjects from './components/FeaturedProjects'; -import LogoDisplay from './components/LogoDisplay'; +import OrganizationLogo from './components/OrganizationLogo'; interface GuestHomePageProps { user: AuthenticatedUser; @@ -50,7 +50,7 @@ const GuestHomePage = ({ user }: GuestHomePageProps) => {
    - +
    diff --git a/src/frontend/src/pages/HomePage/components/OrganizationLogo.tsx b/src/frontend/src/pages/HomePage/components/OrganizationLogo.tsx new file mode 100644 index 0000000000..c16a273c31 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/OrganizationLogo.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import LogoDisplay from './LogoDisplay'; +import { useOrganizationLogo } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import ErrorPage from '../../ErrorPage'; + +const OrganizationLogo = () => { + const { data: imageData, isLoading, isError, error } = useOrganizationLogo(); + if (isLoading) return ; + if (isError) return ; + + return ; +}; + +export default OrganizationLogo; diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 55d0f4e04c..1e4045ea07 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -58,8 +58,8 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)} sx={{ - minWidth: 'fit-content', - minHeight: 'fit-content', + width: '100%', + height: 'fit-content', mr: 3, background: theme.palette.background.default, border: taskOverdue && hover ? '1px solid red' : undefined diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 5419731678..11183972c1 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -40,7 +40,7 @@ const WorkPackageCard = ({ wp }: { wp: WorkPackage }) => { Date: Sat, 21 Dec 2024 13:31:41 -0500 Subject: [PATCH 290/320] #3074-refactored notifications to separate router --- .../controllers/notifications.controllers.ts | 30 ++++++++++++ .../src/controllers/users.controllers.ts | 27 ----------- .../src/routes/notifications.routes.ts | 8 ++++ src/backend/src/routes/users.routes.ts | 2 - .../src/services/notifications.services.ts | 46 ++++++++++++++++++ src/backend/src/services/users.services.ts | 48 ------------------- src/backend/src/utils/auth.utils.ts | 2 +- src/backend/src/utils/notifications.utils.ts | 6 +-- .../tests/unmocked/notifications.test.ts | 43 +++++++++++++++++ src/backend/tests/unmocked/users.test.ts | 38 --------------- src/frontend/src/apis/notifications.api.ts | 19 ++++++++ src/frontend/src/apis/users.api.ts | 17 ------- .../src/components/NotificationAlert.tsx | 4 +- src/frontend/src/hooks/notifications.hooks.ts | 36 ++++++++++++++ src/frontend/src/hooks/users.hooks.ts | 40 +--------------- src/frontend/src/utils/urls.ts | 13 +++-- 16 files changed, 197 insertions(+), 182 deletions(-) create mode 100644 src/frontend/src/apis/notifications.api.ts create mode 100644 src/frontend/src/hooks/notifications.hooks.ts diff --git a/src/backend/src/controllers/notifications.controllers.ts b/src/backend/src/controllers/notifications.controllers.ts index bdf9c44f13..0d944632bd 100644 --- a/src/backend/src/controllers/notifications.controllers.ts +++ b/src/backend/src/controllers/notifications.controllers.ts @@ -11,4 +11,34 @@ export default class NotificationsController { next(error); } } + + static async getUserUnreadNotifications(req: Request, res: Response, next: NextFunction) { + try { + const { organization, currentUser } = req; + + const unreadNotifications = await NotificationsService.getUserUnreadNotifications( + currentUser.userId, + organization.organizationId + ); + res.status(200).json(unreadNotifications); + } catch (error: unknown) { + next(error); + } + } + + static async removeUserNotification(req: Request, res: Response, next: NextFunction) { + try { + const { notificationId } = req.body; + const { organization, currentUser } = req; + + const unreadNotifications = await NotificationsService.removeUserNotification( + currentUser.userId, + notificationId, + organization.organizationId + ); + res.status(200).json(unreadNotifications); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index baa0d9228a..e9c0745b5c 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -192,33 +192,6 @@ export default class UsersController { } } - static async getUserUnreadNotifications(req: Request, res: Response, next: NextFunction) { - try { - const { organization, currentUser } = req; - - const unreadNotifications = await UsersService.getUserUnreadNotifications(currentUser.userId, organization); - res.status(200).json(unreadNotifications); - } catch (error: unknown) { - next(error); - } - } - - static async removeUserNotification(req: Request, res: Response, next: NextFunction) { - try { - const { notificationId } = req.body; - const { organization, currentUser } = req; - - const unreadNotifications = await UsersService.removeUserNotification( - currentUser.userId, - notificationId, - organization - ); - res.status(200).json(unreadNotifications); - } catch (error: unknown) { - next(error); - } - } - static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { try { const { organization, currentUser } = req; diff --git a/src/backend/src/routes/notifications.routes.ts b/src/backend/src/routes/notifications.routes.ts index 4701b0f3ea..95cde92c09 100644 --- a/src/backend/src/routes/notifications.routes.ts +++ b/src/backend/src/routes/notifications.routes.ts @@ -1,8 +1,16 @@ import express from 'express'; import NotificationsController from '../controllers/notifications.controllers'; +import { nonEmptyString } from '../utils/validation.utils'; +import { body } from 'express-validator'; const notificationsRouter = express.Router(); notificationsRouter.post('/task-deadlines', NotificationsController.sendDailySlackNotifications); +notificationsRouter.get('/current-user', NotificationsController.getUserUnreadNotifications); +notificationsRouter.post( + '/curent-user/remove', + nonEmptyString(body('notificationId')), + NotificationsController.removeUserNotification +); export default notificationsRouter; diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index b859968e5a..077e2fd02f 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,8 +54,6 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); -userRouter.get('/notifications/current-user', UsersController.getUserUnreadNotifications); userRouter.get('/announcements/current-user', UsersController.getUserUnreadAnnouncements); -userRouter.post('/notifications/remove', nonEmptyString(body('notificationId')), UsersController.removeUserNotification); export default userRouter; diff --git a/src/backend/src/services/notifications.services.ts b/src/backend/src/services/notifications.services.ts index e0617301f5..3da62b744f 100644 --- a/src/backend/src/services/notifications.services.ts +++ b/src/backend/src/services/notifications.services.ts @@ -196,6 +196,52 @@ export default class NotificationsService { await Promise.all(promises); } + /** + * Gets all of a user's unread notifications + * @param userId id of user to get unread notifications from + * @param organization the user's orgainzation + * @returns the unread notifications of the user + */ + static async getUserUnreadNotifications(userId: string, organizationId: string) { + const unreadNotifications = await prisma.notification.findMany({ + where: { + users: { + some: { userId } + } + }, + ...getNotificationQueryArgs(organizationId) + }); + + if (!unreadNotifications) throw new HttpException(404, 'User Unread Notifications Not Found'); + + return unreadNotifications.map(notificationTransformer); + } + + /** + * Removes a notification from the user's unread notifications + * @param userId id of the current user + * @param notificationId id of the notification to remove + * @param organization the user's organization + * @returns the user's updated unread notifications + */ + static async removeUserNotification(userId: string, notificationId: string, organizationId: string) { + const updatedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadNotifications: { + disconnect: { + notificationId + } + } + }, + include: { unreadNotifications: getNotificationQueryArgs(organizationId) } + }); + + if (!updatedUser) throw new HttpException(404, `Failed to remove notication: ${notificationId}`); + + return updatedUser.unreadNotifications.map(notificationTransformer); + } + /** * Creates and sends a notification to all users with the given userIds * @param text writing in the notification diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index b537d019d2..3dc8766113 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -38,8 +38,6 @@ import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args' import authenticatedUserTransformer from '../transformers/auth-user.transformer'; import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; -import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; -import notificationTransformer from '../transformers/notifications.transformer'; import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; import announcementTransformer from '../transformers/announcements.transformer'; @@ -571,27 +569,6 @@ export default class UsersService { return resolvedTasks.flat(); } - /** - * Gets all of a user's unread notifications - * @param userId id of user to get unread notifications from - * @param organization the user's orgainzation - * @returns the unread notifications of the user - */ - static async getUserUnreadNotifications(userId: string, organization: Organization) { - const unreadNotifications = await prisma.notification.findMany({ - where: { - users: { - some: { userId } - } - }, - ...getNotificationQueryArgs(organization.organizationId) - }); - - if (!unreadNotifications) throw new HttpException(404, 'User Unread Notifications Not Found'); - - return unreadNotifications.map(notificationTransformer); - } - /** * Gets all of a user's unread announcements * @param userId id of the current user @@ -612,29 +589,4 @@ export default class UsersService { return unreadAnnouncements.map(announcementTransformer); } - - /** - * Removes a notification from the user's unread notifications - * @param userId id of the current user - * @param notificationId id of the notification to remove - * @param organization the user's organization - * @returns the user's updated unread notifications - */ - static async removeUserNotification(userId: string, notificationId: string, organization: Organization) { - const updatedUser = await prisma.user.update({ - where: { userId }, - data: { - unreadNotifications: { - disconnect: { - notificationId - } - } - }, - include: { unreadNotifications: getNotificationQueryArgs(organization.organizationId) } - }); - - if (!updatedUser) throw new HttpException(404, `Failed to remove notication: ${notificationId}`); - - return updatedUser.unreadNotifications.map(notificationTransformer); - } } diff --git a/src/backend/src/utils/auth.utils.ts b/src/backend/src/utils/auth.utils.ts index 8520d881e4..7e7602eb6a 100644 --- a/src/backend/src/utils/auth.utils.ts +++ b/src/backend/src/utils/auth.utils.ts @@ -66,7 +66,7 @@ export const requireJwtDev = (req: Request, res: Response, next: NextFunction) = ) { next(); } else if ( - req.path.startsWith('/notifications') // task deadline notification endpoint + req.path.startsWith('/notifications/taskdeadlines') // task deadline notification endpoint ) { notificationEndpointAuth(req, res, next); } else { diff --git a/src/backend/src/utils/notifications.utils.ts b/src/backend/src/utils/notifications.utils.ts index c47ba9b7a0..445f36ed67 100644 --- a/src/backend/src/utils/notifications.utils.ts +++ b/src/backend/src/utils/notifications.utils.ts @@ -78,11 +78,7 @@ export const sendHomeCrReviewedNotification = async ( accepted: boolean, organizationId: string ) => { - const isProd = process.env.NODE_ENV === 'production'; - - const changeRequestLink = isProd - ? `https://finishlinebyner.com/change-requests/${changeRequest.crId}` - : `http://localhost:3000/change-requests/${changeRequest.crId}`; + const changeRequestLink = `/change-requests/${changeRequest.crId}`; await NotificationsService.sendNotifcationToUsers( `CR #${changeRequest.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, accepted ? 'check_circle' : 'cancel', diff --git a/src/backend/tests/unmocked/notifications.test.ts b/src/backend/tests/unmocked/notifications.test.ts index d3cce68361..026099c1c3 100644 --- a/src/backend/tests/unmocked/notifications.test.ts +++ b/src/backend/tests/unmocked/notifications.test.ts @@ -56,4 +56,47 @@ describe('Notifications Tests', () => { expect(supermanWithNotifications?.unreadNotifications[0].text).toBe('test notification'); }); }); + + describe('Get Notifications', () => { + it('Succeeds and gets user notifications', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + await NotificationService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); + + const notifications = await NotificationService.getUserUnreadNotifications( + testBatman.userId, + organization.organizationId + ); + + expect(notifications).toHaveLength(2); + expect(notifications[0].text).toBe('test1'); + expect(notifications[1].text).toBe('test2'); + }); + }); + + describe('Remove Notifications', () => { + it('Succeeds and removes user notification', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await NotificationService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); + await NotificationService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); + + const notifications = await NotificationService.getUserUnreadNotifications( + testBatman.userId, + organization.organizationId + ); + + expect(notifications).toHaveLength(2); + expect(notifications[0].text).toBe('test1'); + expect(notifications[1].text).toBe('test2'); + + const updatedNotifications = await NotificationService.removeUserNotification( + testBatman.userId, + notifications[0].notificationId, + organization.organizationId + ); + + expect(updatedNotifications).toHaveLength(1); + expect(updatedNotifications[0].text).toBe('test2'); + }); + }); }); diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index a9f1488530..c78a42d76f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,7 +3,6 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; -import NotificationsService from '../../src/services/notifications.services'; import AnnouncementService from '../../src/services/announcement.service'; describe('User Tests', () => { @@ -51,43 +50,6 @@ describe('User Tests', () => { }); }); - describe('Get Notifications', () => { - it('Succeeds and gets user notifications', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); - await NotificationsService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); - - const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); - - expect(notifications).toHaveLength(2); - expect(notifications[0].text).toBe('test1'); - expect(notifications[1].text).toBe('test2'); - }); - }); - - describe('Remove Notifications', () => { - it('Succeeds and removes user notification', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await NotificationsService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); - await NotificationsService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); - - const notifications = await UsersService.getUserUnreadNotifications(testBatman.userId, organization); - - expect(notifications).toHaveLength(2); - expect(notifications[0].text).toBe('test1'); - expect(notifications[1].text).toBe('test2'); - - const updatedNotifications = await UsersService.removeUserNotification( - testBatman.userId, - notifications[0].notificationId, - organization - ); - - expect(updatedNotifications).toHaveLength(1); - expect(updatedNotifications[0].text).toBe('test2'); - }); - }); - describe('Get Announcements', () => { it('Succeeds and gets user announcements', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); diff --git a/src/frontend/src/apis/notifications.api.ts b/src/frontend/src/apis/notifications.api.ts new file mode 100644 index 0000000000..a7cbd1894c --- /dev/null +++ b/src/frontend/src/apis/notifications.api.ts @@ -0,0 +1,19 @@ +import axios from 'axios'; +import { apiUrls } from '../utils/urls'; +import { Notification } from 'shared'; + +/* + * Gets all unread notifications of the user with the given id + */ +export const getNotifications = () => { + return axios.get(apiUrls.notificationsCurrentUser(), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +/* + * Removes a notification from the user with the given id + */ +export const removeNotification = (notificationId: string) => { + return axios.post(apiUrls.notificationsRemoveCurrentUser(), { notificationId }); +}; diff --git a/src/frontend/src/apis/users.api.ts b/src/frontend/src/apis/users.api.ts index 4999c8cb66..afa5ea00f6 100644 --- a/src/frontend/src/apis/users.api.ts +++ b/src/frontend/src/apis/users.api.ts @@ -5,7 +5,6 @@ import axios from '../utils/axios'; import { - Notification, Project, SetUserScheduleSettingsPayload, Task, @@ -160,19 +159,3 @@ export const getManyUserTasks = (userIds: string[]) => { } ); }; - -/* - * Gets all unread notifications of the user with the given id - */ -export const getNotifications = () => { - return axios.get(apiUrls.userNotifications(), { - transformResponse: (data) => JSON.parse(data) - }); -}; - -/* - * Removes a notification from the user with the given id - */ -export const removeNotification = (notificationId: string) => { - return axios.post(apiUrls.userRemoveNotifications(), { notificationId }); -}; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx index 668c0f3cfd..53b01a5aaa 100644 --- a/src/frontend/src/components/NotificationAlert.tsx +++ b/src/frontend/src/components/NotificationAlert.tsx @@ -2,11 +2,11 @@ import { Box } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { Notification } from 'shared'; import NotificationCard from './NotificationCard'; -import { useRemoveUserNotification, useUserNotifications } from '../hooks/users.hooks'; import { useHistory } from 'react-router-dom'; +import { useCurrentUserNotifications, useRemoveUserNotification } from '../hooks/notifications.hooks'; const NotificationAlert: React.FC = () => { - const { data: notifications, isLoading: notificationsIsLoading } = useUserNotifications(); + const { data: notifications, isLoading: notificationsIsLoading } = useCurrentUserNotifications(); const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(); const [currentNotification, setCurrentNotification] = useState(); const history = useHistory(); diff --git a/src/frontend/src/hooks/notifications.hooks.ts b/src/frontend/src/hooks/notifications.hooks.ts new file mode 100644 index 0000000000..0f7daea18b --- /dev/null +++ b/src/frontend/src/hooks/notifications.hooks.ts @@ -0,0 +1,36 @@ +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { Notification } from 'shared'; +import { getNotifications, removeNotification } from '../apis/notifications.api'; + +/** + * Curstom react hook to get all unread notifications from a user + * @param userId id of user to get unread notifications from + * @returns + */ +export const useCurrentUserNotifications = () => { + return useQuery(['notifications', 'current-user'], async () => { + const { data } = await getNotifications(); + return data; + }); +}; + +/** + * Curstom react hook to remove a notification from a user's unread notifications + * @param userId id of user to get unread notifications from + * @returns + */ +export const useRemoveUserNotification = () => { + const queryClient = useQueryClient(); + return useMutation( + ['notifications', 'currentUser', 'remove'], + async (notification: Notification) => { + const { data } = await removeNotification(notification.notificationId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['notifications', 'currentUser']); + } + } + ); +}; diff --git a/src/frontend/src/hooks/users.hooks.ts b/src/frontend/src/hooks/users.hooks.ts index ffc7a65d75..96b659c1f1 100644 --- a/src/frontend/src/hooks/users.hooks.ts +++ b/src/frontend/src/hooks/users.hooks.ts @@ -19,9 +19,7 @@ import { getUserScheduleSettings, updateUserScheduleSettings, getUserTasks, - getManyUserTasks, - getNotifications, - removeNotification + getManyUserTasks } from '../apis/users.api'; import { User, @@ -33,8 +31,7 @@ import { UserScheduleSettings, UserWithScheduleSettings, SetUserScheduleSettingsPayload, - Task, - Notification + Task } from 'shared'; import { useAuth } from './auth.hooks'; import { useContext } from 'react'; @@ -263,36 +260,3 @@ export const useManyUserTasks = (userIds: string[]) => { return data; }); }; - -/** - * Curstom react hook to get all unread notifications from a user - * @param userId id of user to get unread notifications from - * @returns - */ -export const useUserNotifications = () => { - return useQuery(['users', 'notifications'], async () => { - const { data } = await getNotifications(); - return data; - }); -}; - -/** - * Curstom react hook to remove a notification from a user's unread notifications - * @param userId id of user to get unread notifications from - * @returns - */ -export const useRemoveUserNotification = () => { - const queryClient = useQueryClient(); - return useMutation( - ['users', 'notifications', 'remove'], - async (notification: Notification) => { - const { data } = await removeNotification(notification.notificationId); - return data; - }, - { - onSuccess: () => { - queryClient.invalidateQueries(['users', 'notifications']); - } - } - ); -}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 99c9d82c82..93d6d80cf0 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -26,8 +26,6 @@ const userScheduleSettings = (id: string) => `${usersById(id)}/schedule-settings const userScheduleSettingsSet = () => `${users()}/schedule-settings/set`; const userTasks = (id: string) => `${usersById(id)}/tasks`; const manyUserTasks = () => `${users()}/tasks/get-many`; -const userNotifications = () => `${users()}/notifications/current-user`; -const userRemoveNotifications = () => `${users()}/notifications/remove`; /**************** Projects Endpoints ****************/ const projects = () => `${API_URL}/projects`; @@ -196,6 +194,11 @@ const faqCreate = () => `${recruitment()}/faq/create`; const faqEdit = (id: string) => `${recruitment()}/faq/${id}/edit`; const faqDelete = (id: string) => `${recruitment()}/faq/${id}/delete`; +/************** Notification Endpoints ***************/ +const notifications = () => `${API_URL}/notifications`; +const notificationsCurrentUser = () => `${notifications()}/current-user`; +const notificationsRemoveCurrentUser = () => `${notificationsCurrentUser()}/remove`; + /**************** Other Endpoints ****************/ const version = () => `https://api.github.com/repos/Northeastern-Electric-Racing/FinishLine/releases/latest`; @@ -214,8 +217,6 @@ export const apiUrls = { userScheduleSettingsSet, userTasks, manyUserTasks, - userNotifications, - userRemoveNotifications, projects, allProjects, @@ -355,5 +356,9 @@ export const apiUrls = { faqEdit, faqDelete, + notifications, + notificationsCurrentUser, + notificationsRemoveCurrentUser, + version }; From 962e88c52bdae3c4e6037ab80ad7c1af81cfdf61 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 13:45:50 -0500 Subject: [PATCH 291/320] #3074-refactored announcements to be on separate route --- src/backend/index.ts | 2 + .../controllers/announcements.controllers.ts | 18 +++++++ .../src/controllers/users.controllers.ts | 11 ----- .../src/routes/announcements.routes.ts | 6 +++ src/backend/src/routes/users.routes.ts | 1 - .../src/services/announcement.service.ts | 22 +++++++++ src/backend/src/services/users.services.ts | 23 --------- .../tests/unmocked/announcements.test.ts | 47 +++++++++++++++++++ src/backend/tests/unmocked/users.test.ts | 29 ------------ 9 files changed, 95 insertions(+), 64 deletions(-) create mode 100644 src/backend/src/controllers/announcements.controllers.ts create mode 100644 src/backend/src/routes/announcements.routes.ts create mode 100644 src/backend/tests/unmocked/announcements.test.ts diff --git a/src/backend/index.ts b/src/backend/index.ts index babf50b843..8f4289a81d 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -17,6 +17,7 @@ import workPackageTemplatesRouter from './src/routes/work-package-templates.rout import carsRouter from './src/routes/cars.routes'; import organizationRouter from './src/routes/organizations.routes'; import recruitmentRouter from './src/routes/recruitment.routes'; +import announcementsRouter from './src/routes/announcements.routes'; const app = express(); @@ -68,6 +69,7 @@ app.use('/templates', workPackageTemplatesRouter); app.use('/cars', carsRouter); app.use('/organizations', organizationRouter); app.use('/recruitment', recruitmentRouter); +app.use('/announcements', announcementsRouter); app.use('/', (_req, res) => { res.status(200).json('Welcome to FinishLine'); }); diff --git a/src/backend/src/controllers/announcements.controllers.ts b/src/backend/src/controllers/announcements.controllers.ts new file mode 100644 index 0000000000..e5ccafbe06 --- /dev/null +++ b/src/backend/src/controllers/announcements.controllers.ts @@ -0,0 +1,18 @@ +import { NextFunction, Request, Response } from 'express'; +import AnnouncementService from '../services/announcement.service'; + +export default class AnnouncementController { + static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { + try { + const { organization, currentUser } = req; + + const unreadAnnouncements = await AnnouncementService.getUserUnreadAnnouncements( + currentUser.userId, + organization.organizationId + ); + res.status(200).json(unreadAnnouncements); + } catch (error: unknown) { + next(error); + } + } +} diff --git a/src/backend/src/controllers/users.controllers.ts b/src/backend/src/controllers/users.controllers.ts index e9c0745b5c..8076e225d7 100644 --- a/src/backend/src/controllers/users.controllers.ts +++ b/src/backend/src/controllers/users.controllers.ts @@ -191,15 +191,4 @@ export default class UsersController { next(error); } } - - static async getUserUnreadAnnouncements(req: Request, res: Response, next: NextFunction) { - try { - const { organization, currentUser } = req; - - const unreadAnnouncements = await UsersService.getUserUnreadAnnouncements(currentUser.userId, organization); - res.status(200).json(unreadAnnouncements); - } catch (error: unknown) { - next(error); - } - } } diff --git a/src/backend/src/routes/announcements.routes.ts b/src/backend/src/routes/announcements.routes.ts new file mode 100644 index 0000000000..dbdb1fa295 --- /dev/null +++ b/src/backend/src/routes/announcements.routes.ts @@ -0,0 +1,6 @@ +import express from 'express'; +import AnnouncementController from '../controllers/announcements.controllers'; + +const announcementsRouter = express.Router(); + +announcementsRouter.get('/announcements/current-user', AnnouncementController.getUserUnreadAnnouncements); diff --git a/src/backend/src/routes/users.routes.ts b/src/backend/src/routes/users.routes.ts index 077e2fd02f..2f95201f6f 100644 --- a/src/backend/src/routes/users.routes.ts +++ b/src/backend/src/routes/users.routes.ts @@ -54,6 +54,5 @@ userRouter.post( validateInputs, UsersController.getManyUserTasks ); -userRouter.get('/announcements/current-user', UsersController.getUserUnreadAnnouncements); export default userRouter; diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 28f5c8e71b..7562755f01 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -2,6 +2,7 @@ import { Announcement } from 'shared'; import prisma from '../prisma/prisma'; import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; import announcementTransformer from '../transformers/announcements.transformer'; +import { HttpException } from '../utils/errors.utils'; export default class AnnouncementService { /** @@ -41,4 +42,25 @@ export default class AnnouncementService { return announcementTransformer(announcement); } + + /** + * Gets all of a user's unread announcements + * @param userId id of the current user + * @param organization the user's orgainzation + * @returns the unread announcements of the user + */ + static async getUserUnreadAnnouncements(userId: string, organizationId: string) { + const unreadAnnouncements = await prisma.announcement.findMany({ + where: { + usersReceived: { + some: { userId } + } + }, + ...getAnnouncementQueryArgs(organizationId) + }); + + if (!unreadAnnouncements) throw new HttpException(404, 'User Unread Announcements Not Found'); + + return unreadAnnouncements.map(announcementTransformer); + } } diff --git a/src/backend/src/services/users.services.ts b/src/backend/src/services/users.services.ts index 3dc8766113..d786c04137 100644 --- a/src/backend/src/services/users.services.ts +++ b/src/backend/src/services/users.services.ts @@ -38,8 +38,6 @@ import { getAuthUserQueryArgs } from '../prisma-query-args/auth-user.query-args' import authenticatedUserTransformer from '../transformers/auth-user.transformer'; import { getTaskQueryArgs } from '../prisma-query-args/tasks.query-args'; import taskTransformer from '../transformers/tasks.transformer'; -import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; -import announcementTransformer from '../transformers/announcements.transformer'; export default class UsersService { /** @@ -568,25 +566,4 @@ export default class UsersService { const resolvedTasks = await Promise.all(tasksPromises); return resolvedTasks.flat(); } - - /** - * Gets all of a user's unread announcements - * @param userId id of the current user - * @param organization the user's orgainzation - * @returns the unread announcements of the user - */ - static async getUserUnreadAnnouncements(userId: string, organization: Organization) { - const unreadAnnouncements = await prisma.announcement.findMany({ - where: { - usersReceived: { - some: { userId } - } - }, - ...getAnnouncementQueryArgs(organization.organizationId) - }); - - if (!unreadAnnouncements) throw new HttpException(404, 'User Unread Announcements Not Found'); - - return unreadAnnouncements.map(announcementTransformer); - } } diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unmocked/announcements.test.ts new file mode 100644 index 0000000000..534b546edb --- /dev/null +++ b/src/backend/tests/unmocked/announcements.test.ts @@ -0,0 +1,47 @@ +import { Organization } from '@prisma/client'; +import { batmanAppAdmin } from '../test-data/users.test-data'; +import { createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import AnnouncementService from '../../src/services/announcement.service'; + +describe('Announcemnts Tests', () => { + let orgId: string; + let organization: Organization; + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + }); + + afterEach(async () => { + await resetUsers(); + }); + describe('Get Announcements', () => { + it('Succeeds and gets user announcements', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await AnnouncementService.createAnnouncement( + 'test1', + [testBatman.userId], + 'Thomas Emrax', + '1', + 'software', + organization.organizationId + ); + await AnnouncementService.createAnnouncement( + 'test2', + [testBatman.userId], + 'Superman', + '50', + 'mechanical', + organization.organizationId + ); + + const announcements = await AnnouncementService.getUserUnreadAnnouncements( + testBatman.userId, + organization.organizationId + ); + + expect(announcements).toHaveLength(2); + expect(announcements[0].text).toBe('test1'); + expect(announcements[1].text).toBe('test2'); + }); + }); +}); diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unmocked/users.test.ts index c78a42d76f..c13a0c857f 100644 --- a/src/backend/tests/unmocked/users.test.ts +++ b/src/backend/tests/unmocked/users.test.ts @@ -3,7 +3,6 @@ import { createTestOrganization, createTestTask, createTestUser, resetUsers } fr import { batmanAppAdmin } from '../test-data/users.test-data'; import UsersService from '../../src/services/users.services'; import { NotFoundException } from '../../src/utils/errors.utils'; -import AnnouncementService from '../../src/services/announcement.service'; describe('User Tests', () => { let orgId: string; @@ -49,32 +48,4 @@ describe('User Tests', () => { expect(userTasks).toStrictEqual([batmanTask, batmanTask]); }); }); - - describe('Get Announcements', () => { - it('Succeeds and gets user announcements', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await AnnouncementService.createAnnouncement( - 'test1', - [testBatman.userId], - 'Thomas Emrax', - '1', - 'software', - organization.organizationId - ); - await AnnouncementService.createAnnouncement( - 'test2', - [testBatman.userId], - 'Superman', - '50', - 'mechanical', - organization.organizationId - ); - - const announcements = await UsersService.getUserUnreadAnnouncements(testBatman.userId, organization); - - expect(announcements).toHaveLength(2); - expect(announcements[0].text).toBe('test1'); - expect(announcements[1].text).toBe('test2'); - }); - }); }); From 05e984c7bae905da3fd2f7c9aeaab534b6b32921 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sat, 21 Dec 2024 14:55:48 -0500 Subject: [PATCH 292/320] #3044 refactoring and minor fixes --- .../src/controllers/slack.controllers.ts | 16 ++ src/backend/src/integrations/slack.ts | 8 +- src/backend/src/routes/slack.routes.ts | 11 +- src/backend/src/services/slack.services.ts | 159 +++--------------- src/backend/src/utils/slack.utils.ts | 93 +++++++++- .../slackMessages.test.ts | 71 -------- .../{unmocked => unit}/announcements.test.ts | 0 .../{unmocked => unit}/design-review.test.ts | 0 .../{unmocked => unit}/notifications.test.ts | 0 .../{mocked => unit}/organization.test.ts | 0 .../{unmocked => unit}/recruitment.test.ts | 0 .../reimbursement-requests.test.ts | 0 .../{unmocked => unit}/team-type.test.ts | 0 .../tests/{unmocked => unit}/users.test.ts | 0 .../work-package-template.test.ts | 0 15 files changed, 135 insertions(+), 223 deletions(-) create mode 100644 src/backend/src/controllers/slack.controllers.ts rename src/backend/tests/{mocked => integration}/slackMessages.test.ts (84%) rename src/backend/tests/{unmocked => unit}/announcements.test.ts (100%) rename src/backend/tests/{unmocked => unit}/design-review.test.ts (100%) rename src/backend/tests/{unmocked => unit}/notifications.test.ts (100%) rename src/backend/tests/{mocked => unit}/organization.test.ts (100%) rename src/backend/tests/{unmocked => unit}/recruitment.test.ts (100%) rename src/backend/tests/{unmocked => unit}/reimbursement-requests.test.ts (100%) rename src/backend/tests/{unmocked => unit}/team-type.test.ts (100%) rename src/backend/tests/{unmocked => unit}/users.test.ts (100%) rename src/backend/tests/{unmocked => unit}/work-package-template.test.ts (100%) diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts new file mode 100644 index 0000000000..def03d6870 --- /dev/null +++ b/src/backend/src/controllers/slack.controllers.ts @@ -0,0 +1,16 @@ +import { getWorkspaceId } from '../integrations/slack'; +import OrganizationsService from '../services/organizations.services'; +import slackServices from '../services/slack.services'; + +export default class SlackController { + static async processMessageEvent(event: any) { + try { + const organizations = await OrganizationsService.getAllOrganizations(); + const nerSlackWorkspaceId = await getWorkspaceId(); + const orgId = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId)?.organizationId; + if (orgId) { + slackServices.processMessageSent(event, orgId); + } + } catch (error: unknown) {} + } +} diff --git a/src/backend/src/integrations/slack.ts b/src/backend/src/integrations/slack.ts index 7c80fa819a..b24615743e 100644 --- a/src/backend/src/integrations/slack.ts +++ b/src/backend/src/integrations/slack.ts @@ -182,12 +182,12 @@ export const getUsersInChannel = async (channelId: string) => { return members; } catch (error) { - throw new HttpException(500, 'Error getting members from a slack channel: ' + (error as any).data.error); + return []; } }; /** - * Given a slack channel id, prood.uces the name of the channel + * Given a slack channel id, produces the name of the channel * @param channelId the id of the slack channel * @returns the name of the channel */ @@ -199,7 +199,7 @@ export const getChannelName = async (channelId: string) => { const channelRes = await slack.conversations.info({ channel: channelId }); return channelRes.channel?.name || 'Unknown Channel'; } catch (error) { - throw new HttpException(500, 'Error getting slack channel name: ' + (error as any).data.error); + return; } }; @@ -216,7 +216,7 @@ export const getUserName = async (userId: string) => { const userRes = await slack.users.info({ user: userId }); return userRes.user?.profile?.display_name || userRes.user?.real_name || 'Unkown User'; } catch (error) { - throw new HttpException(500, 'Error getting slack user name: ' + (error as any).data.error); + return; } }; diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts index 82b98b0a0b..a085ae4244 100644 --- a/src/backend/src/routes/slack.routes.ts +++ b/src/backend/src/routes/slack.routes.ts @@ -1,17 +1,10 @@ import { createEventAdapter } from '@slack/events-api'; -import slackServices from '../services/slack.services'; -import OrganizationsService from '../services/organizations.services'; -import { getWorkspaceId } from '../integrations/slack'; +import SlackController from '../controllers/slack.controllers'; export const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET || ''); slackEvents.on('message', async (event) => { - const organizations = await OrganizationsService.getAllOrganizations(); - const nerSlackWorkspaceId = await getWorkspaceId(); - const orgId = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId)?.organizationId; - if (orgId) { - slackServices.processMessageSent(event, orgId); - } + SlackController.processMessageEvent(event); }); slackEvents.on('error', (error) => { diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 991af8fc18..90c50995a9 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -1,8 +1,9 @@ import UsersService from './users.services'; -import { getChannelName, getUserName, getUsersInChannel } from '../integrations/slack'; -import { User_Settings } from '@prisma/client'; +import { getChannelName, getUserName } from '../integrations/slack'; import AnnouncementService from './announcement.service'; import { Announcement } from 'shared'; +import prisma from '../prisma/prisma'; +import { blockToMentionedUsers, blockToString } from '../utils/slack.utils'; /** * Represents a slack event for a message in a channel. @@ -66,98 +67,6 @@ export interface SlackRichTextBlock { } export default class slackServices { - /** - * Converts a SlackRichTextBlock into a string representation for an announcement. - * @param block the block of information from slack - * @returns the string that will be combined with other block's strings to create the announcement - */ - private static async blockToString(block: SlackRichTextBlock): Promise { - switch (block.type) { - case 'broadcast': - return '@' + block.range; - case 'color': - return block.value ?? ''; - case 'channel': - //channels are represented as an id, get the name from the slack api - let channelName = block.channel_id; - try { - channelName = await getChannelName(block.channel_id ?? ''); - } catch (error) { - channelName = `ISSUE PARSING CHANNEL:${block.channel_id}`; - } - return '#' + channelName; - case 'date': - return new Date(block.timestamp ?? 0).toISOString(); - case 'emoji': - //if the emoji is a unicode emoji, convert the unicode to a string, - //if it is a slack emoji just use the name of the emoji - if (block.unicode) { - return String.fromCodePoint(parseInt(block.unicode, 16)); - } - return 'emoji:' + block.name; - case 'link': - if (block.text) { - return `${block.text}:(${block.url})`; - } - return block.url ?? ''; - case 'text': - return block.text ?? ''; - case 'user': - //users are represented as an id, get the name of the user from the slack api - let userName: string = block.user_id ?? ''; - try { - userName = (await getUserName(block.user_id ?? '')) ?? `Unknown User:${block.user_id}`; - } catch (error) { - userName = `Unknown_User:${block.user_id}`; - } - return '@' + userName; - case 'usergroup': - return `usergroup:${block.usergroup_id}`; - } - } - - /** - * Gets the users notified in a specific SlackRichTextBlock. - * @param block the block that may contain mentioned user/users - * @param usersSettings the settings of all the users in prisma - * @param channelId the id of the channel that the block is being sent in - * @returns an array of prisma user ids of users to be notified - */ - private static async blockToMentionedUsers( - block: SlackRichTextBlock, - usersSettings: User_Settings[], - channelId: string - ): Promise { - switch (block.type) { - case 'broadcast': - switch (block.range) { - case 'everyone': - return usersSettings.map((usersSettings) => usersSettings.userId); - case 'channel': - case 'here': - //@here behaves the same as @channel; notifies all the users in that channel - let slackIds: string[] = []; - try { - slackIds = await getUsersInChannel(channelId); - } catch (ignored) {} - return usersSettings - .filter((userSettings) => { - return slackIds.some((slackId) => slackId === userSettings.slackId); - }) - .map((user) => user.userId); - default: - return []; - } - case 'user': - return usersSettings - .filter((userSettings) => userSettings.slackId === block.user_id) - .map((userSettings) => userSettings.userId); - default: - //only broadcasts and specific user mentions add recievers to announcements - return []; - } - } - /** * Given a slack event representing a message in a channel, * make the appropriate announcement change in prisma. @@ -166,13 +75,8 @@ export default class slackServices { * @returns an annoucement if an announcement was processed and created/modified/deleted */ static async processMessageSent(event: SlackMessageEvent, organizationId: string): Promise { - let slackChannelName: string; //get the name of the channel from the slack api - try { - slackChannelName = await getChannelName(event.channel); - } catch (error) { - slackChannelName = `Unknown_Channel:${event.channel}`; - } + const slackChannelName: string = (await getChannelName(event.channel)) ?? `Unknown_Channel:${event.channel}`; const dateCreated = new Date(Number(event.event_ts)); //get the message that will be processed either as the event or within a subtype @@ -183,11 +87,7 @@ export default class slackServices { case 'message_deleted': //delete the message using the client_msg_id eventMessage = (event as SlackDeletedMessage).previous_message; - try { - return AnnouncementService.deleteAnnouncement(eventMessage.client_msg_id, organizationId); - } catch (ignored) { - return; - } + return AnnouncementService.deleteAnnouncement(eventMessage.client_msg_id, organizationId); case 'message_changed': eventMessage = (event as SlackUpdatedMessage).message; break; @@ -213,22 +113,14 @@ export default class slackServices { ); //get the name of the user that sent the message from slack - let userName: string = ''; - try { - userName = (await getUserName(eventMessage.user)) ?? ''; - } catch (ignored) {} + let userName = (await getUserName(eventMessage.user)) ?? ''; //if slack could not produce the name of the user, look for their name in prisma if (!userName) { - const userIdList = userSettings - .filter((userSetting) => userSetting.slackId === eventMessage.user) - .map((userSettings) => userSettings.userId); - if (userIdList.length !== 0) { - const prismaUserName = users.find((user) => user.userId === userIdList[0]); - userName = prismaUserName - ? `${prismaUserName?.firstName} ${prismaUserName?.lastName}` - : 'Unknown User:' + eventMessage.user; - } else { + try { + const userWithThatSlackId = await prisma.user.findFirst({ where: { userSettings: { slackId: eventMessage.user } } }); + userName = `${userWithThatSlackId?.firstName} ${userWithThatSlackId?.lastName}`; + } catch { userName = 'Unknown_User:' + eventMessage.user; } } @@ -236,12 +128,10 @@ export default class slackServices { //pull out the blocks of data from the metadata within the message event const richTextBlocks = eventMessage.blocks?.filter((eventBlock: any) => eventBlock.type === 'rich_text'); - if (richTextBlocks && richTextBlocks.length === 1) { + if (richTextBlocks && richTextBlocks.length > 0 && richTextBlocks[0].elements.length > 0) { for (const element of richTextBlocks[0].elements[0].elements) { - messageText += await slackServices.blockToString(element); - userIdsToNotify = userIdsToNotify.concat( - await slackServices.blockToMentionedUsers(element, userSettings, event.channel) - ); + messageText += await blockToString(element); + userIdsToNotify = userIdsToNotify.concat(await blockToMentionedUsers(element, userSettings, event.channel)); } } else { return; @@ -271,19 +161,14 @@ export default class slackServices { ); } catch (ignored) {} } - try { - return await AnnouncementService.createAnnouncement( - messageText, - userIdsToNotify, - dateCreated, - userName, - eventMessage.client_msg_id, - slackChannelName, - organizationId - ); - } catch (error) { - //if announcement does not have unique cient_msg_id disregard it - return; - } + return await AnnouncementService.createAnnouncement( + messageText, + userIdsToNotify, + dateCreated, + userName, + eventMessage.client_msg_id, + slackChannelName, + organizationId + ); } } diff --git a/src/backend/src/utils/slack.utils.ts b/src/backend/src/utils/slack.utils.ts index ecc264610b..ea98a1a698 100644 --- a/src/backend/src/utils/slack.utils.ts +++ b/src/backend/src/utils/slack.utils.ts @@ -1,6 +1,14 @@ import { ChangeRequest, daysBetween, Task, UserPreview, wbsPipe, calculateEndDate } from 'shared'; -import { User } from '@prisma/client'; -import { editMessage, reactToMessage, replyToMessageInThread, sendMessage } from '../integrations/slack'; +import { User, User_Settings } from '@prisma/client'; +import { + editMessage, + getChannelName, + getUserName, + getUsersInChannel, + reactToMessage, + replyToMessageInThread, + sendMessage +} from '../integrations/slack'; import { getUserFullName, getUserSlackId } from './users.utils'; import prisma from '../prisma/prisma'; import { HttpException } from './errors.utils'; @@ -11,6 +19,7 @@ import { addHours, meetingStartTimePipe } from './design-reviews.utils'; import { WorkPackageQueryArgs } from '../prisma-query-args/work-packages.query-args'; import { Prisma } from '@prisma/client'; import { userTransformer } from '../transformers/user.transformer'; +import { SlackRichTextBlock } from '../services/slack.services'; interface SlackMessageThread { messageInfoId: string; @@ -470,3 +479,83 @@ export const addSlackThreadsToChangeRequest = async (crId: string, threads: { ch ); await Promise.all(promises); }; + +/** + * Converts a SlackRichTextBlock into a string representation for an announcement. + * @param block the block of information from slack + * @returns the string that will be combined with other block's strings to create the announcement + */ +export const blockToString = async (block: SlackRichTextBlock) => { + switch (block.type) { + case 'broadcast': + return '@' + block.range; + case 'color': + return block.value ?? ''; + case 'channel': + //channels are represented as an id, get the name from the slack api + const channelName: string = + (await getChannelName(block.channel_id ?? '')) ?? `ISSUE PARSING CHANNEL:${block.channel_id}`; + return '#' + channelName; + case 'date': + return new Date(block.timestamp ?? 0).toISOString(); + case 'emoji': + //if the emoji is a unicode emoji, convert the unicode to a string, + //if it is a slack emoji just use the name of the emoji + if (block.unicode) { + return String.fromCodePoint(parseInt(block.unicode, 16)); + } + return 'emoji:' + block.name; + case 'link': + if (block.text) { + return `${block.text}:(${block.url})`; + } + return block.url ?? ''; + case 'text': + return block.text ?? ''; + case 'user': + //users are represented as an id, get the name of the user from the slack api + const userName: string = (await getUserName(block.user_id ?? '')) ?? `Unknown User:${block.user_id}`; + return '@' + userName; + case 'usergroup': + return `usergroup:${block.usergroup_id}`; + } +}; + +/** + * Gets the users notified in a specific SlackRichTextBlock. + * @param block the block that may contain mentioned user/users + * @param usersSettings the settings of all the users in prisma + * @param channelId the id of the channel that the block is being sent in + * @returns an array of prisma user ids of users to be notified + */ +export const blockToMentionedUsers = async ( + block: SlackRichTextBlock, + usersSettings: User_Settings[], + channelId: string +) => { + switch (block.type) { + case 'broadcast': + switch (block.range) { + case 'everyone': + return usersSettings.map((usersSettings) => usersSettings.userId); + case 'channel': + case 'here': + //@here behaves the same as @channel; notifies all the users in that channel + const slackIds: string[] = await getUsersInChannel(channelId); + return usersSettings + .filter((userSettings) => { + return slackIds.some((slackId) => slackId === userSettings.slackId); + }) + .map((user) => user.userId); + default: + return []; + } + case 'user': + return usersSettings + .filter((userSettings) => userSettings.slackId === block.user_id) + .map((userSettings) => userSettings.userId); + default: + //only broadcasts and specific user mentions add recievers to announcements + return []; + } +}; diff --git a/src/backend/tests/mocked/slackMessages.test.ts b/src/backend/tests/integration/slackMessages.test.ts similarity index 84% rename from src/backend/tests/mocked/slackMessages.test.ts rename to src/backend/tests/integration/slackMessages.test.ts index f8fc76f4ab..99319d0bb0 100644 --- a/src/backend/tests/mocked/slackMessages.test.ts +++ b/src/backend/tests/integration/slackMessages.test.ts @@ -12,7 +12,6 @@ import * as apiFunctions from '../../src/integrations/slack'; import AnnouncementService from '../../src/services/announcement.service'; import slackServices from '../../src/services/slack.services'; import { vi } from 'vitest'; -import { HttpException } from '../../src/utils/errors.utils'; vi.mock('../../src/integrations/slack', async (importOriginal) => { return { @@ -198,46 +197,6 @@ describe('Slack message tests', () => { expect(announcement?.usersReceived).toHaveLength(1); }); - it('Deals with errors from slack API', async () => { - vi.mocked(apiFunctions.getUserName).mockImplementation(() => { - throw new HttpException(500, 'sample error'); - }); - vi.mocked(apiFunctions.getChannelName).mockImplementation(() => { - throw new HttpException(500, 'sample error'); - }); - - const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); - - const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'slackWW', 'id_1', [ - { type: 'user', user_id: 'slackWW' }, - { type: 'text', text: ' prisma user and non-prisma user ' }, - { type: 'user', user_id: 'non-prisma-slack-id' } - ]), - orgId - ); - - expect(spy).toBeCalledTimes(1); - expect(spy).toBeCalledWith( - '@Unknown_User:slackWW prisma user and non-prisma user @Unknown_User:non-prisma-slack-id', - [wonderwoman.userId], - new Date(1000000000000), - 'Wonder Woman', - 'id_1', - 'Unknown_Channel:channel id', - orgId - ); - - expect(announcement?.text).toBe( - '@Unknown_User:slackWW prisma user and non-prisma user @Unknown_User:non-prisma-slack-id' - ); - expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); - expect(announcement?.senderName).toBe('Wonder Woman'); - expect(announcement?.slackChannelName).toBe('Unknown_Channel:channel id'); - expect(announcement?.slackEventId).toBe('id_1'); - expect(announcement?.usersReceived).toHaveLength(1); - }); - it("Doesn't create an announcement if no one is mentioned", async () => { vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); @@ -256,36 +215,6 @@ describe('Slack message tests', () => { expect(announcement).toBeUndefined(); }); - it('Does nothing if an announcement with the same slack id has already been created', async () => { - vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); - vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); - - const createSpy = vi.spyOn(AnnouncementService, 'createAnnouncement'); - - await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), - orgId - ); - expect(createSpy).toBeCalledWith( - '@Slack User Name', - [wonderwoman.userId], - new Date(1000000000000), - 'Slack User Name', - 'id_1', - 'Slack Channel Name', - orgId - ); - - const announcement2 = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ - { type: 'user', user_id: 'slackWW' }, - { type: 'text', text: ' added text' } - ]), - orgId - ); - expect(announcement2).toBeUndefined(); - }); - it('Updates an edit made to a message', async () => { vi.mocked(apiFunctions.getUserName).mockReturnValue(Promise.resolve('Slack User Name')); vi.mocked(apiFunctions.getChannelName).mockReturnValue(Promise.resolve('Slack Channel Name')); diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unit/announcements.test.ts similarity index 100% rename from src/backend/tests/unmocked/announcements.test.ts rename to src/backend/tests/unit/announcements.test.ts diff --git a/src/backend/tests/unmocked/design-review.test.ts b/src/backend/tests/unit/design-review.test.ts similarity index 100% rename from src/backend/tests/unmocked/design-review.test.ts rename to src/backend/tests/unit/design-review.test.ts diff --git a/src/backend/tests/unmocked/notifications.test.ts b/src/backend/tests/unit/notifications.test.ts similarity index 100% rename from src/backend/tests/unmocked/notifications.test.ts rename to src/backend/tests/unit/notifications.test.ts diff --git a/src/backend/tests/mocked/organization.test.ts b/src/backend/tests/unit/organization.test.ts similarity index 100% rename from src/backend/tests/mocked/organization.test.ts rename to src/backend/tests/unit/organization.test.ts diff --git a/src/backend/tests/unmocked/recruitment.test.ts b/src/backend/tests/unit/recruitment.test.ts similarity index 100% rename from src/backend/tests/unmocked/recruitment.test.ts rename to src/backend/tests/unit/recruitment.test.ts diff --git a/src/backend/tests/unmocked/reimbursement-requests.test.ts b/src/backend/tests/unit/reimbursement-requests.test.ts similarity index 100% rename from src/backend/tests/unmocked/reimbursement-requests.test.ts rename to src/backend/tests/unit/reimbursement-requests.test.ts diff --git a/src/backend/tests/unmocked/team-type.test.ts b/src/backend/tests/unit/team-type.test.ts similarity index 100% rename from src/backend/tests/unmocked/team-type.test.ts rename to src/backend/tests/unit/team-type.test.ts diff --git a/src/backend/tests/unmocked/users.test.ts b/src/backend/tests/unit/users.test.ts similarity index 100% rename from src/backend/tests/unmocked/users.test.ts rename to src/backend/tests/unit/users.test.ts diff --git a/src/backend/tests/unmocked/work-package-template.test.ts b/src/backend/tests/unit/work-package-template.test.ts similarity index 100% rename from src/backend/tests/unmocked/work-package-template.test.ts rename to src/backend/tests/unit/work-package-template.test.ts From d95527d6b26ee5854fb530da54b26398aae5c319 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 17:58:18 -0500 Subject: [PATCH 293/320] #3074-fixed issues --- src/backend/src/routes/announcements.routes.ts | 2 ++ src/backend/src/routes/notifications.routes.ts | 2 +- src/frontend/src/apis/notifications.api.ts | 2 +- src/frontend/src/hooks/notifications.hooks.ts | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/backend/src/routes/announcements.routes.ts b/src/backend/src/routes/announcements.routes.ts index dbdb1fa295..4fa7696e72 100644 --- a/src/backend/src/routes/announcements.routes.ts +++ b/src/backend/src/routes/announcements.routes.ts @@ -4,3 +4,5 @@ import AnnouncementController from '../controllers/announcements.controllers'; const announcementsRouter = express.Router(); announcementsRouter.get('/announcements/current-user', AnnouncementController.getUserUnreadAnnouncements); + +export default announcementsRouter; diff --git a/src/backend/src/routes/notifications.routes.ts b/src/backend/src/routes/notifications.routes.ts index 95cde92c09..0aa23f3feb 100644 --- a/src/backend/src/routes/notifications.routes.ts +++ b/src/backend/src/routes/notifications.routes.ts @@ -8,7 +8,7 @@ const notificationsRouter = express.Router(); notificationsRouter.post('/task-deadlines', NotificationsController.sendDailySlackNotifications); notificationsRouter.get('/current-user', NotificationsController.getUserUnreadNotifications); notificationsRouter.post( - '/curent-user/remove', + '/current-user/remove', nonEmptyString(body('notificationId')), NotificationsController.removeUserNotification ); diff --git a/src/frontend/src/apis/notifications.api.ts b/src/frontend/src/apis/notifications.api.ts index a7cbd1894c..6a702964d9 100644 --- a/src/frontend/src/apis/notifications.api.ts +++ b/src/frontend/src/apis/notifications.api.ts @@ -1,4 +1,4 @@ -import axios from 'axios'; +import axios from '../utils/axios'; import { apiUrls } from '../utils/urls'; import { Notification } from 'shared'; diff --git a/src/frontend/src/hooks/notifications.hooks.ts b/src/frontend/src/hooks/notifications.hooks.ts index 0f7daea18b..5ca9ae621b 100644 --- a/src/frontend/src/hooks/notifications.hooks.ts +++ b/src/frontend/src/hooks/notifications.hooks.ts @@ -22,14 +22,14 @@ export const useCurrentUserNotifications = () => { export const useRemoveUserNotification = () => { const queryClient = useQueryClient(); return useMutation( - ['notifications', 'currentUser', 'remove'], + ['notifications', 'current-user', 'remove'], async (notification: Notification) => { const { data } = await removeNotification(notification.notificationId); return data; }, { onSuccess: () => { - queryClient.invalidateQueries(['notifications', 'currentUser']); + queryClient.invalidateQueries(['notifications', 'current-user']); } } ); From b3132f043504df888c2f7ccb7309671339629bad Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 18:33:49 -0500 Subject: [PATCH 294/320] #3074-small fix --- src/backend/src/routes/announcements.routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/src/routes/announcements.routes.ts b/src/backend/src/routes/announcements.routes.ts index 4fa7696e72..b772f09fbb 100644 --- a/src/backend/src/routes/announcements.routes.ts +++ b/src/backend/src/routes/announcements.routes.ts @@ -3,6 +3,6 @@ import AnnouncementController from '../controllers/announcements.controllers'; const announcementsRouter = express.Router(); -announcementsRouter.get('/announcements/current-user', AnnouncementController.getUserUnreadAnnouncements); +announcementsRouter.get('/current-user', AnnouncementController.getUserUnreadAnnouncements); export default announcementsRouter; From fb0f3a25bb16c1678d1096d6d21337af26bf944d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 18:48:31 -0500 Subject: [PATCH 295/320] #2795-removed log --- src/backend/src/services/onboarding.services.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/src/services/onboarding.services.ts b/src/backend/src/services/onboarding.services.ts index 823451c580..b351952bf9 100644 --- a/src/backend/src/services/onboarding.services.ts +++ b/src/backend/src/services/onboarding.services.ts @@ -4,7 +4,6 @@ import { downloadImageFile } from '../utils/google-integration.utils'; export default class OnboardingServices { static async downloadImage(fileId: string) { const fileData = await downloadImageFile(fileId); - console.log('FILE DATA RECEIVED'); if (!fileData) throw new NotFoundException('Image File', fileId); return fileData; From 96c103db4923fe7b046ee914a165c61760fd52c2 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 18:57:17 -0500 Subject: [PATCH 296/320] fixes --- src/backend/src/services/organizations.services.ts | 2 -- .../src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index 34144d175a..acf619f109 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -292,8 +292,6 @@ export default class OrganizationsService { data: { slackWorkspaceId: workspaceId } }); - console.log(updatedOrg); - return updatedOrg; } } diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx index ab9a79ee78..57404352d9 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsSlackWorkspaceId.tsx @@ -30,6 +30,8 @@ const AdminToolsWorkspaceIdView: React.FC = ({ o const { mutateAsync, isLoading } = useSetWorkspaceId(); const [workspaceId, setWorkspaceId] = useState(organization.slackWorkspaceId ?? ''); + if (isLoading) return ; + const slackWorkspaceId = async () => { try { await mutateAsync(workspaceId); From e1d11febfeeba8108fe67721b893e8ff1e8b9431 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 19:08:11 -0500 Subject: [PATCH 297/320] #2795-small fix --- src/frontend/logo.png | Bin 114559 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/frontend/logo.png diff --git a/src/frontend/logo.png b/src/frontend/logo.png deleted file mode 100644 index a549f0ea6997896cac671426ae22fa2b8366f8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114559 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�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 LTe(Eh>goRhAO`T! From 9d8ed90379e727c14b6aeb939973dc689cb2b79d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 21 Dec 2024 19:45:28 -0500 Subject: [PATCH 298/320] #3075-moved to announcements router --- .../controllers/announcements.controllers.ts | 16 ++++++++ .../src/routes/announcements.routes.ts | 7 ++++ .../src/services/announcement.service.ts | 31 +++++++++++++- .../tests/unmocked/announcements.test.ts | 40 +++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/backend/src/controllers/announcements.controllers.ts b/src/backend/src/controllers/announcements.controllers.ts index e5ccafbe06..3c21f8e877 100644 --- a/src/backend/src/controllers/announcements.controllers.ts +++ b/src/backend/src/controllers/announcements.controllers.ts @@ -15,4 +15,20 @@ export default class AnnouncementController { next(error); } } + + static async removeUserAnnouncement(req: Request, res: Response, next: NextFunction) { + try { + const { announcementId } = req.body; + const { organization, currentUser } = req; + + const unreadAnnouncements = await AnnouncementService.removeUserAnnouncement( + currentUser.userId, + announcementId, + organization.organizationId + ); + res.status(200).json(unreadAnnouncements); + } catch (error: unknown) { + next(error); + } + } } diff --git a/src/backend/src/routes/announcements.routes.ts b/src/backend/src/routes/announcements.routes.ts index b772f09fbb..0efa847c13 100644 --- a/src/backend/src/routes/announcements.routes.ts +++ b/src/backend/src/routes/announcements.routes.ts @@ -1,8 +1,15 @@ import express from 'express'; import AnnouncementController from '../controllers/announcements.controllers'; +import { nonEmptyString } from '../utils/validation.utils'; +import { body } from 'express-validator'; const announcementsRouter = express.Router(); announcementsRouter.get('/current-user', AnnouncementController.getUserUnreadAnnouncements); +announcementsRouter.post( + '/current-user/remove', + nonEmptyString(body('announcementId')), + AnnouncementController.removeUserAnnouncement +); export default announcementsRouter; diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 7562755f01..b05a29d444 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -2,7 +2,7 @@ import { Announcement } from 'shared'; import prisma from '../prisma/prisma'; import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; import announcementTransformer from '../transformers/announcements.transformer'; -import { HttpException } from '../utils/errors.utils'; +import { HttpException, NotFoundException } from '../utils/errors.utils'; export default class AnnouncementService { /** @@ -63,4 +63,33 @@ export default class AnnouncementService { return unreadAnnouncements.map(announcementTransformer); } + + /** + * Removes a announcement from the user's unread announcement + * @param userId id of the user to remove announcement from + * @param announcementId id of the announcement to remove + * @param organization the user's organization + * @returns the user's updated unread announcement + */ + static async removeUserAnnouncement(userId: string, announcementId: string, organizationId: string) { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + const updatedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadAnnouncements: { + disconnect: { + announcementId + } + } + }, + include: { unreadAnnouncements: getAnnouncementQueryArgs(organizationId) } + }); + + return updatedUser.unreadAnnouncements.map(announcementTransformer); + } } diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unmocked/announcements.test.ts index 534b546edb..21c521d83d 100644 --- a/src/backend/tests/unmocked/announcements.test.ts +++ b/src/backend/tests/unmocked/announcements.test.ts @@ -44,4 +44,44 @@ describe('Announcemnts Tests', () => { expect(announcements[1].text).toBe('test2'); }); }); + + describe('Remove Announcement', () => { + it('Succeeds and removes user announcement', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await AnnouncementService.createAnnouncement( + 'test1', + [testBatman.userId], + 'Thomas Emrax', + '1', + 'software', + organization.organizationId + ); + await AnnouncementService.createAnnouncement( + 'test2', + [testBatman.userId], + 'Superman', + '50', + 'mechanical', + organization.organizationId + ); + + const announcements = await AnnouncementService.getUserUnreadAnnouncements( + testBatman.userId, + organization.organizationId + ); + + expect(announcements).toHaveLength(2); + expect(announcements[0].text).toBe('test1'); + expect(announcements[1].text).toBe('test2'); + + const updatedAnnouncements = await AnnouncementService.removeUserAnnouncement( + testBatman.userId, + announcements[0].announcementId, + organization.organizationId + ); + + expect(updatedAnnouncements).toHaveLength(1); + expect(updatedAnnouncements[0].text).toBe('test2'); + }); + }); }); From 2be6d82649af19a38c670ab90af62b741359dd65 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Dec 2024 07:48:00 -0500 Subject: [PATCH 299/320] #3074-linting --- src/backend/src/routes/notifications.routes.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/src/routes/notifications.routes.ts b/src/backend/src/routes/notifications.routes.ts index 624dbc183c..d5411bddde 100644 --- a/src/backend/src/routes/notifications.routes.ts +++ b/src/backend/src/routes/notifications.routes.ts @@ -1,7 +1,5 @@ import express from 'express'; import NotificationsController from '../controllers/notifications.controllers'; -import { nonEmptyString } from '../utils/validation.utils'; -import { body } from 'express-validator'; const notificationsRouter = express.Router(); From ecc5609c44e560a435a4855d7e097b4508d29004 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Dec 2024 07:51:31 -0500 Subject: [PATCH 300/320] #3075-fixed endpoint --- src/backend/src/controllers/announcements.controllers.ts | 2 +- src/backend/src/routes/announcements.routes.ts | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/backend/src/controllers/announcements.controllers.ts b/src/backend/src/controllers/announcements.controllers.ts index 3c21f8e877..ec18d65538 100644 --- a/src/backend/src/controllers/announcements.controllers.ts +++ b/src/backend/src/controllers/announcements.controllers.ts @@ -18,7 +18,7 @@ export default class AnnouncementController { static async removeUserAnnouncement(req: Request, res: Response, next: NextFunction) { try { - const { announcementId } = req.body; + const { announcementId } = req.params; const { organization, currentUser } = req; const unreadAnnouncements = await AnnouncementService.removeUserAnnouncement( diff --git a/src/backend/src/routes/announcements.routes.ts b/src/backend/src/routes/announcements.routes.ts index 0efa847c13..9a5cabc913 100644 --- a/src/backend/src/routes/announcements.routes.ts +++ b/src/backend/src/routes/announcements.routes.ts @@ -1,15 +1,9 @@ import express from 'express'; import AnnouncementController from '../controllers/announcements.controllers'; -import { nonEmptyString } from '../utils/validation.utils'; -import { body } from 'express-validator'; const announcementsRouter = express.Router(); announcementsRouter.get('/current-user', AnnouncementController.getUserUnreadAnnouncements); -announcementsRouter.post( - '/current-user/remove', - nonEmptyString(body('announcementId')), - AnnouncementController.removeUserAnnouncement -); +announcementsRouter.post('/:announcementId/remove', AnnouncementController.removeUserAnnouncement); export default announcementsRouter; From 329b60fff17de2f8be779868259b50f0ca8364ec Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Dec 2024 10:57:40 -0500 Subject: [PATCH 301/320] #3074-refactored notifications into pop-ups --- src/backend/index.ts | 2 + .../controllers/notifications.controllers.ts | 30 ------ .../src/controllers/popUps.controllers.ts | 27 +++++ .../notifications.query-args.ts | 11 -- .../prisma-query-args/pop-up.query-args.ts | 11 ++ .../migration.sql | 18 ++-- src/backend/src/prisma/schema.prisma | 16 +-- src/backend/src/prisma/seed.ts | 1 + .../src/routes/notifications.routes.ts | 2 - src/backend/src/routes/pop-up.routes.ts | 9 ++ .../src/services/announcement.service.ts | 2 + .../src/services/change-requests.services.ts | 6 +- .../src/services/design-reviews.services.ts | 4 +- .../src/services/notifications.services.ts | 98 +---------------- src/backend/src/services/pop-up.services.ts | 100 +++++++++++++++++ .../transformers/notifications.transformer.ts | 14 --- .../src/transformers/pop-up.transformer.ts | 12 +++ src/backend/src/utils/auth.utils.ts | 2 +- src/backend/src/utils/notifications.utils.ts | 75 +------------ src/backend/src/utils/pop-up.utils.ts | 69 ++++++++++++ .../tests/unmocked/announcements.test.ts | 2 + .../tests/unmocked/notifications.test.ts | 102 ------------------ src/backend/tests/unmocked/pop-up.test.ts | 90 ++++++++++++++++ src/frontend/src/apis/notifications.api.ts | 19 ---- src/frontend/src/apis/pop-ups.api.ts | 19 ++++ .../src/components/NotificationAlert.tsx | 53 --------- .../src/components/NotificationCard.tsx | 24 ++--- src/frontend/src/components/PopUpAlert.tsx | 49 +++++++++ src/frontend/src/hooks/notifications.hooks.ts | 36 ------- src/frontend/src/hooks/pop-ups.hooks.ts | 36 +++++++ src/frontend/src/pages/HomePage/Home.tsx | 4 +- src/frontend/src/utils/urls.ts | 14 +-- src/shared/index.ts | 2 +- src/shared/src/types/announcements.types.ts | 2 +- ...notifications.types.ts => pop-up-types.ts} | 4 +- 35 files changed, 479 insertions(+), 486 deletions(-) create mode 100644 src/backend/src/controllers/popUps.controllers.ts delete mode 100644 src/backend/src/prisma-query-args/notifications.query-args.ts create mode 100644 src/backend/src/prisma-query-args/pop-up.query-args.ts rename src/backend/src/prisma/migrations/{20241222123937_homepage_redesign => 20241222150147_homepage_redesign}/migration.sql (70%) create mode 100644 src/backend/src/routes/pop-up.routes.ts create mode 100644 src/backend/src/services/pop-up.services.ts delete mode 100644 src/backend/src/transformers/notifications.transformer.ts create mode 100644 src/backend/src/transformers/pop-up.transformer.ts create mode 100644 src/backend/src/utils/pop-up.utils.ts delete mode 100644 src/backend/tests/unmocked/notifications.test.ts create mode 100644 src/backend/tests/unmocked/pop-up.test.ts delete mode 100644 src/frontend/src/apis/notifications.api.ts create mode 100644 src/frontend/src/apis/pop-ups.api.ts delete mode 100644 src/frontend/src/components/NotificationAlert.tsx create mode 100644 src/frontend/src/components/PopUpAlert.tsx delete mode 100644 src/frontend/src/hooks/notifications.hooks.ts create mode 100644 src/frontend/src/hooks/pop-ups.hooks.ts rename src/shared/src/types/{notifications.types.ts => pop-up-types.ts} (50%) diff --git a/src/backend/index.ts b/src/backend/index.ts index 8a505bff76..86470eb0a0 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -19,6 +19,7 @@ import organizationRouter from './src/routes/organizations.routes'; import recruitmentRouter from './src/routes/recruitment.routes'; import announcementsRouter from './src/routes/announcements.routes'; import onboardingRouter from './src/routes/onboarding.routes'; +import popUpsRouter from './src/routes/pop-up.routes'; const app = express(); @@ -70,6 +71,7 @@ app.use('/templates', workPackageTemplatesRouter); app.use('/cars', carsRouter); app.use('/organizations', organizationRouter); app.use('/recruitment', recruitmentRouter); +app.use('/pop-ups', popUpsRouter); app.use('/announcements', announcementsRouter); app.use('/onboarding', onboardingRouter); app.use('/', (_req, res) => { diff --git a/src/backend/src/controllers/notifications.controllers.ts b/src/backend/src/controllers/notifications.controllers.ts index e85846405b..bdf9c44f13 100644 --- a/src/backend/src/controllers/notifications.controllers.ts +++ b/src/backend/src/controllers/notifications.controllers.ts @@ -11,34 +11,4 @@ export default class NotificationsController { next(error); } } - - static async getUserUnreadNotifications(req: Request, res: Response, next: NextFunction) { - try { - const { organization, currentUser } = req; - - const unreadNotifications = await NotificationsService.getUserUnreadNotifications( - currentUser.userId, - organization.organizationId - ); - res.status(200).json(unreadNotifications); - } catch (error: unknown) { - next(error); - } - } - - static async removeUserNotification(req: Request, res: Response, next: NextFunction) { - try { - const { notificationId } = req.params; - const { organization, currentUser } = req; - - const unreadNotifications = await NotificationsService.removeUserNotification( - currentUser.userId, - notificationId, - organization.organizationId - ); - res.status(200).json(unreadNotifications); - } catch (error: unknown) { - next(error); - } - } } diff --git a/src/backend/src/controllers/popUps.controllers.ts b/src/backend/src/controllers/popUps.controllers.ts new file mode 100644 index 0000000000..6247a03fbd --- /dev/null +++ b/src/backend/src/controllers/popUps.controllers.ts @@ -0,0 +1,27 @@ +import { NextFunction, Request, Response } from 'express'; +import { PopUpService } from '../services/pop-up.services'; + +export default class PopUpsController { + static async getUserUnreadPopUps(req: Request, res: Response, next: NextFunction) { + try { + const { organization, currentUser } = req; + + const unreadPopUps = await PopUpService.getUserUnreadPopUps(currentUser.userId, organization.organizationId); + res.status(200).json(unreadPopUps); + } catch (error: unknown) { + next(error); + } + } + + static async removeUserPopUps(req: Request, res: Response, next: NextFunction) { + try { + const { popUpId } = req.params; + const { organization, currentUser } = req; + + const unreadPopUps = await PopUpService.removeUserPopUp(currentUser.userId, popUpId, organization.organizationId); + res.status(200).json(unreadPopUps); + } catch (error: unknown) { + next(error); + } + } +} diff --git a/src/backend/src/prisma-query-args/notifications.query-args.ts b/src/backend/src/prisma-query-args/notifications.query-args.ts deleted file mode 100644 index 4cf877ac5c..0000000000 --- a/src/backend/src/prisma-query-args/notifications.query-args.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Prisma } from '@prisma/client'; -import { getUserQueryArgs } from './user.query-args'; - -export type NotificationQueryArgs = ReturnType; - -export const getNotificationQueryArgs = (organizationId: string) => - Prisma.validator()({ - include: { - users: getUserQueryArgs(organizationId) - } - }); diff --git a/src/backend/src/prisma-query-args/pop-up.query-args.ts b/src/backend/src/prisma-query-args/pop-up.query-args.ts new file mode 100644 index 0000000000..0862956d22 --- /dev/null +++ b/src/backend/src/prisma-query-args/pop-up.query-args.ts @@ -0,0 +1,11 @@ +import { Prisma } from '@prisma/client'; +import { getUserQueryArgs } from './user.query-args'; + +export type PopUpQueryArgs = ReturnType; + +export const getPopUpQueryArgs = (organizationId: string) => + Prisma.validator()({ + include: { + users: getUserQueryArgs(organizationId) + } + }); diff --git a/src/backend/src/prisma/migrations/20241222123937_homepage_redesign/migration.sql b/src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql similarity index 70% rename from src/backend/src/prisma/migrations/20241222123937_homepage_redesign/migration.sql rename to src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql index 1ff99b84a0..17a36eb2d3 100644 --- a/src/backend/src/prisma/migrations/20241222123937_homepage_redesign/migration.sql +++ b/src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql @@ -9,7 +9,7 @@ ALTER TABLE "Project" ADD COLUMN "organizationId" TEXT; CREATE TABLE "Announcement" ( "announcementId" TEXT NOT NULL, "text" TEXT NOT NULL, - "dateCreated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "dateMessageSent" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "dateDeleted" TIMESTAMP(3), "senderName" TEXT NOT NULL, "slackEventId" TEXT NOT NULL, @@ -19,13 +19,13 @@ CREATE TABLE "Announcement" ( ); -- CreateTable -CREATE TABLE "Notification" ( - "notificationId" TEXT NOT NULL, +CREATE TABLE "PopUp" ( + "popUpId" TEXT NOT NULL, "text" TEXT NOT NULL, "iconName" TEXT NOT NULL, "eventLink" TEXT, - CONSTRAINT "Notification_pkey" PRIMARY KEY ("notificationId") + CONSTRAINT "PopUp_pkey" PRIMARY KEY ("popUpId") ); -- CreateTable @@ -35,7 +35,7 @@ CREATE TABLE "_receivedAnnouncements" ( ); -- CreateTable -CREATE TABLE "_userNotifications" ( +CREATE TABLE "_userPopUps" ( "A" TEXT NOT NULL, "B" TEXT NOT NULL ); @@ -50,10 +50,10 @@ CREATE UNIQUE INDEX "_receivedAnnouncements_AB_unique" ON "_receivedAnnouncement CREATE INDEX "_receivedAnnouncements_B_index" ON "_receivedAnnouncements"("B"); -- CreateIndex -CREATE UNIQUE INDEX "_userNotifications_AB_unique" ON "_userNotifications"("A", "B"); +CREATE UNIQUE INDEX "_userPopUps_AB_unique" ON "_userPopUps"("A", "B"); -- CreateIndex -CREATE INDEX "_userNotifications_B_index" ON "_userNotifications"("B"); +CREATE INDEX "_userPopUps_B_index" ON "_userPopUps"("B"); -- AddForeignKey ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; @@ -65,7 +65,7 @@ ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_A_fk ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "_userNotifications" ADD CONSTRAINT "_userNotifications_A_fkey" FOREIGN KEY ("A") REFERENCES "Notification"("notificationId") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "_userPopUps" ADD CONSTRAINT "_userPopUps_A_fkey" FOREIGN KEY ("A") REFERENCES "PopUp"("popUpId") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey -ALTER TABLE "_userNotifications" ADD CONSTRAINT "_userNotifications_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE "_userPopUps" ADD CONSTRAINT "_userPopUps_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("userId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index 9d9bcb1f7f..c62827da19 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -181,7 +181,7 @@ model User { createdMilestones Milestone[] @relation(name: "milestoneCreator") deletedMilestones Milestone[] @relation(name: "milestoneDeleter") unreadAnnouncements Announcement[] @relation(name: "receivedAnnouncements") - unreadNotifications Notification[] @relation(name: "userNotifications") + unreadPopUps PopUp[] @relation(name: "userPopUps") } model Role { @@ -935,17 +935,17 @@ model Announcement { announcementId String @id @default(uuid()) text String usersReceived User[] @relation("receivedAnnouncements") - dateCreated DateTime @default(now()) + dateMessageSent DateTime @default(now()) dateDeleted DateTime? senderName String slackEventId String @unique slackChannelName String } -model Notification { - notificationId String @id @default(uuid()) - text String - iconName String - users User[] @relation("userNotifications") - eventLink String? +model PopUp { + popUpId String @id @default(uuid()) + text String + iconName String + users User[] @relation("userPopUps") + eventLink String? } diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index e7b5aa4c84..ddd4e190cb 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1898,6 +1898,7 @@ const performSeed: () => Promise = async () => { await AnnouncementService.createAnnouncement( 'Welcome to Finishline!', [regina.userId], + new Date(), 'Thomas Emrax', '1', 'software', diff --git a/src/backend/src/routes/notifications.routes.ts b/src/backend/src/routes/notifications.routes.ts index d5411bddde..4701b0f3ea 100644 --- a/src/backend/src/routes/notifications.routes.ts +++ b/src/backend/src/routes/notifications.routes.ts @@ -4,7 +4,5 @@ import NotificationsController from '../controllers/notifications.controllers'; const notificationsRouter = express.Router(); notificationsRouter.post('/task-deadlines', NotificationsController.sendDailySlackNotifications); -notificationsRouter.get('/current-user', NotificationsController.getUserUnreadNotifications); -notificationsRouter.post('/:notificationId/remove', NotificationsController.removeUserNotification); export default notificationsRouter; diff --git a/src/backend/src/routes/pop-up.routes.ts b/src/backend/src/routes/pop-up.routes.ts new file mode 100644 index 0000000000..5ecaeff01f --- /dev/null +++ b/src/backend/src/routes/pop-up.routes.ts @@ -0,0 +1,9 @@ +import express from 'express'; +import PopUpsController from '../controllers/popUps.controllers'; + +const popUpsRouter = express.Router(); + +popUpsRouter.get('/current-user', PopUpsController.getUserUnreadPopUps); +popUpsRouter.post('/:popUpId/remove', PopUpsController.removeUserPopUps); + +export default popUpsRouter; diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 7562755f01..8d35cb879a 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -20,6 +20,7 @@ export default class AnnouncementService { static async createAnnouncement( text: string, usersReceivedIds: string[], + dateMessageSent: Date, senderName: string, slackEventId: string, slackChannelName: string, @@ -33,6 +34,7 @@ export default class AnnouncementService { userId: id })) }, + dateMessageSent, senderName, slackEventId, slackChannelName diff --git a/src/backend/src/services/change-requests.services.ts b/src/backend/src/services/change-requests.services.ts index 85e0dc5579..709f4b2e91 100644 --- a/src/backend/src/services/change-requests.services.ts +++ b/src/backend/src/services/change-requests.services.ts @@ -46,7 +46,7 @@ import { import { ChangeRequestQueryArgs, getChangeRequestQueryArgs } from '../prisma-query-args/change-requests.query-args'; import proposedSolutionTransformer from '../transformers/proposed-solutions.transformer'; import { getProposedSolutionQueryArgs } from '../prisma-query-args/proposed-solutions.query-args'; -import { sendHomeCrRequestReviewNotification, sendHomeCrReviewedNotification } from '../utils/notifications.utils'; +import { sendCrRequestReviewPopUp, sendCrReviewedPopUp } from '../utils/pop-up.utils'; export default class ChangeRequestsService { /** @@ -151,7 +151,7 @@ export default class ChangeRequestsService { // send a notification to the submitter that their change request has been reviewed await sendCRSubmitterReviewedNotification(updated); - await sendHomeCrReviewedNotification(foundCR, updated.submitter, accepted, organization.organizationId); + await sendCrReviewedPopUp(foundCR, updated.submitter, accepted, organization.organizationId); // send a reply to a CR's notifications of its updated status await sendSlackCRStatusToThread(updated.notificationSlackThreads, foundCR.crId, foundCR.identifier, accepted); @@ -1082,6 +1082,6 @@ export default class ChangeRequestsService { // send slack message to CR reviewers await sendSlackRequestedReviewNotification(newReviewers, changeRequestTransformer(foundCR)); - await sendHomeCrRequestReviewNotification(foundCR, newReviewers, organization.organizationId); + await sendCrRequestReviewPopUp(foundCR, newReviewers, organization.organizationId); } } diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 644903fa43..64363b0c61 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -39,7 +39,7 @@ import { getWorkPackageQueryArgs } from '../prisma-query-args/work-packages.quer import { UserWithSettings } from '../utils/auth.utils'; import { getUserScheduleSettingsQueryArgs } from '../prisma-query-args/user.query-args'; import { createCalendarEvent, deleteCalendarEvent, updateCalendarEvent } from '../utils/google-integration.utils'; -import { sendHomeDrNotification } from '../utils/notifications.utils'; +import { sendDrPopUp } from '../utils/pop-up.utils'; export default class DesignReviewsService { /** @@ -206,7 +206,7 @@ export default class DesignReviewsService { } } - await sendHomeDrNotification(designReview, members, submitter, wbsElement.name, organization.organizationId); + await sendDrPopUp(designReview, members, submitter, wbsElement.name, organization.organizationId); const project = wbsElement.workPackage?.project; const teams = project?.teams; diff --git a/src/backend/src/services/notifications.services.ts b/src/backend/src/services/notifications.services.ts index 3da62b744f..a443d93588 100644 --- a/src/backend/src/services/notifications.services.ts +++ b/src/backend/src/services/notifications.services.ts @@ -11,10 +11,8 @@ import { daysBetween, startOfDay, wbsPipe } from 'shared'; import { buildDueString } from '../utils/slack.utils'; import WorkPackagesService from './work-packages.services'; import { addWeeksToDate } from 'shared'; -import { HttpException, NotFoundException } from '../utils/errors.utils'; +import { HttpException } from '../utils/errors.utils'; import { meetingStartTimePipe } from '../utils/design-reviews.utils'; -import { getNotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; -import notificationTransformer from '../transformers/notifications.transformer'; export default class NotificationsService { static async sendDailySlackNotifications() { @@ -195,98 +193,4 @@ export default class NotificationsService { await Promise.all(promises); } - - /** - * Gets all of a user's unread notifications - * @param userId id of user to get unread notifications from - * @param organization the user's orgainzation - * @returns the unread notifications of the user - */ - static async getUserUnreadNotifications(userId: string, organizationId: string) { - const unreadNotifications = await prisma.notification.findMany({ - where: { - users: { - some: { userId } - } - }, - ...getNotificationQueryArgs(organizationId) - }); - - if (!unreadNotifications) throw new HttpException(404, 'User Unread Notifications Not Found'); - - return unreadNotifications.map(notificationTransformer); - } - - /** - * Removes a notification from the user's unread notifications - * @param userId id of the current user - * @param notificationId id of the notification to remove - * @param organization the user's organization - * @returns the user's updated unread notifications - */ - static async removeUserNotification(userId: string, notificationId: string, organizationId: string) { - const updatedUser = await prisma.user.update({ - where: { userId }, - data: { - unreadNotifications: { - disconnect: { - notificationId - } - } - }, - include: { unreadNotifications: getNotificationQueryArgs(organizationId) } - }); - - if (!updatedUser) throw new HttpException(404, `Failed to remove notication: ${notificationId}`); - - return updatedUser.unreadNotifications.map(notificationTransformer); - } - - /** - * Creates and sends a notification to all users with the given userIds - * @param text writing in the notification - * @param iconName icon that appears in the notification - * @param userIds ids of users to send the notification to - * @param organizationId - * @param eventLink link the notification will go to when clicked - * @returns the created notification - */ - static async sendNotifcationToUsers( - text: string, - iconName: string, - userIds: string[], - organizationId: string, - eventLink?: string - ) { - const createdNotification = await prisma.notification.create({ - data: { - text, - iconName, - eventLink - }, - ...getNotificationQueryArgs(organizationId) - }); - - if (!createdNotification) throw new HttpException(500, 'Failed to create notification'); - - const notificationsPromises = userIds.map(async (userId) => { - const requestedUser = await prisma.user.findUnique({ - where: { userId } - }); - - if (!requestedUser) throw new NotFoundException('User', userId); - - return await prisma.user.update({ - where: { userId: requestedUser.userId }, - data: { - unreadNotifications: { - connect: { notificationId: createdNotification.notificationId } - } - } - }); - }); - - await Promise.all(notificationsPromises); - return notificationTransformer(createdNotification); - } } diff --git a/src/backend/src/services/pop-up.services.ts b/src/backend/src/services/pop-up.services.ts new file mode 100644 index 0000000000..267c72761f --- /dev/null +++ b/src/backend/src/services/pop-up.services.ts @@ -0,0 +1,100 @@ +import { getPopUpQueryArgs } from '../prisma-query-args/pop-up.query-args'; +import prisma from '../prisma/prisma'; +import popUpTransformer from '../transformers/pop-up.transformer'; +import { HttpException, NotFoundException } from '../utils/errors.utils'; + +export class PopUpService { + /** + * Gets all of a user's unread pop up + * @param userId id of user to get unread pop up from + * @param organization the user's orgainzation + * @returns the unread pop up of the user + */ + static async getUserUnreadPopUps(userId: string, organizationId: string) { + const unreadPopUps = await prisma.popUp.findMany({ + where: { + users: { + some: { userId } + } + }, + ...getPopUpQueryArgs(organizationId) + }); + + if (!unreadPopUps) throw new HttpException(404, 'User Unread Notifications Not Found'); + + return unreadPopUps.map(popUpTransformer); + } + + /** + * Removes a pop up from the user's unread pop up + * @param userId id of the current user + * @param popUpId id of the pop up to remove + * @param organization the user's organization + * @returns the user's updated unread pop up + */ + static async removeUserPopUp(userId: string, popUpId: string, organizationId: string) { + const updatedUser = await prisma.user.update({ + where: { userId }, + data: { + unreadPopUps: { + disconnect: { + popUpId + } + } + }, + include: { unreadPopUps: getPopUpQueryArgs(organizationId) } + }); + + if (!updatedUser) throw new HttpException(404, `Failed to remove notication: ${popUpId}`); + + return updatedUser.unreadPopUps.map(popUpTransformer); + } + + /** + * Creates and sends a pop up to all users with the given userIds + * @param text writing in the pop up + * @param iconName icon that appears in the pop up + * @param userIds ids of users to send the pop up to + * @param organizationId + * @param eventLink link the pop up will go to when clicked + * @returns the created notification + */ + static async sendPopUpToUsers( + text: string, + iconName: string, + userIds: string[], + organizationId: string, + eventLink?: string + ) { + const createdPopUp = await prisma.popUp.create({ + data: { + text, + iconName, + eventLink + }, + ...getPopUpQueryArgs(organizationId) + }); + + if (!createdPopUp) throw new HttpException(500, 'Failed to create notification'); + + const popUpPromises = userIds.map(async (userId) => { + const requestedUser = await prisma.user.findUnique({ + where: { userId } + }); + + if (!requestedUser) throw new NotFoundException('User', userId); + + return await prisma.user.update({ + where: { userId: requestedUser.userId }, + data: { + unreadPopUps: { + connect: { popUpId: createdPopUp.popUpId } + } + } + }); + }); + + await Promise.all(popUpPromises); + return popUpTransformer(createdPopUp); + } +} diff --git a/src/backend/src/transformers/notifications.transformer.ts b/src/backend/src/transformers/notifications.transformer.ts deleted file mode 100644 index 45dd25dee9..0000000000 --- a/src/backend/src/transformers/notifications.transformer.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Prisma } from '@prisma/client'; -import { NotificationQueryArgs } from '../prisma-query-args/notifications.query-args'; -import { Notification } from 'shared'; - -const notificationTransformer = (notification: Prisma.NotificationGetPayload): Notification => { - return { - notificationId: notification.notificationId, - text: notification.text, - iconName: notification.iconName, - eventLink: notification.eventLink ?? undefined - }; -}; - -export default notificationTransformer; diff --git a/src/backend/src/transformers/pop-up.transformer.ts b/src/backend/src/transformers/pop-up.transformer.ts new file mode 100644 index 0000000000..1be7e4ec68 --- /dev/null +++ b/src/backend/src/transformers/pop-up.transformer.ts @@ -0,0 +1,12 @@ +import { Prisma } from '@prisma/client'; +import { PopUpQueryArgs } from '../prisma-query-args/pop-up.query-args'; +import { PopUp } from 'shared'; + +const popUpTransformer = (popUp: Prisma.PopUpGetPayload): PopUp => { + return { + ...popUp, + eventLink: popUp.eventLink ?? undefined + }; +}; + +export default popUpTransformer; diff --git a/src/backend/src/utils/auth.utils.ts b/src/backend/src/utils/auth.utils.ts index 7e7602eb6a..8520d881e4 100644 --- a/src/backend/src/utils/auth.utils.ts +++ b/src/backend/src/utils/auth.utils.ts @@ -66,7 +66,7 @@ export const requireJwtDev = (req: Request, res: Response, next: NextFunction) = ) { next(); } else if ( - req.path.startsWith('/notifications/taskdeadlines') // task deadline notification endpoint + req.path.startsWith('/notifications') // task deadline notification endpoint ) { notificationEndpointAuth(req, res, next); } else { diff --git a/src/backend/src/utils/notifications.utils.ts b/src/backend/src/utils/notifications.utils.ts index 445f36ed67..8fb6046318 100644 --- a/src/backend/src/utils/notifications.utils.ts +++ b/src/backend/src/utils/notifications.utils.ts @@ -1,7 +1,5 @@ -import { Task as Prisma_Task, WBS_Element, Design_Review, Change_Request } from '@prisma/client'; +import { Task as Prisma_Task, WBS_Element, Design_Review } from '@prisma/client'; import { UserWithSettings } from './auth.utils'; -import NotificationsService from '../services/notifications.services'; -import { User } from '@prisma/client'; export type TaskWithAssignees = Prisma_Task & { assignees: UserWithSettings[] | null; @@ -37,74 +35,3 @@ export const endOfDayTomorrow = () => { endOfDay.setDate(startOfDay.getDate() + 1); return endOfDay; }; - -/** - * Sends a finishline notification that a design review was scheduled - * @param designReview dr that was created - * @param members optional and required members of the dr - * @param submitter the user who created the dr - * @param workPackageName the name of the work package associated witht the dr - * @param organizationId id of the organization of the dr - */ -export const sendHomeDrNotification = async ( - designReview: Design_Review, - members: User[], - submitter: User, - workPackageName: string, - organizationId: string -) => { - const designReviewLink = `/settings/preferences?drId=${designReview.designReviewId}`; - - const msg = `Design Review for ${workPackageName} is being scheduled by ${submitter.firstName} ${submitter.lastName}`; - await NotificationsService.sendNotifcationToUsers( - msg, - 'calendar_month', - members.map((member) => member.userId), - organizationId, - designReviewLink - ); -}; - -/** - * Sends a finishline notification that a change request was reviewed - * @param changeRequest cr that was requested review - * @param submitter the user who submitted the cr - * @param accepted true if the cr changes were accepted, false if denied - * @param organizationId id of the organization of the cr - */ -export const sendHomeCrReviewedNotification = async ( - changeRequest: Change_Request, - submitter: User, - accepted: boolean, - organizationId: string -) => { - const changeRequestLink = `/change-requests/${changeRequest.crId}`; - await NotificationsService.sendNotifcationToUsers( - `CR #${changeRequest.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, - accepted ? 'check_circle' : 'cancel', - [submitter.userId], - organizationId, - changeRequestLink - ); -}; - -/** - * Sends a finishline notification to all requested reviewers of a change request - * @param changeRequest cr that was requested review - * @param reviewers user's reviewing the cr - * @param organizationId id of the organization of the cr - */ -export const sendHomeCrRequestReviewNotification = async ( - changeRequest: Change_Request, - reviewers: User[], - organizationId: string -) => { - const changeRequestLink = `/change-requests/${changeRequest.crId}`; - await NotificationsService.sendNotifcationToUsers( - `Your review has been requested on CR #${changeRequest.identifier}`, - 'edit_note', - reviewers.map((reviewer) => reviewer.userId), - organizationId, - changeRequestLink - ); -}; diff --git a/src/backend/src/utils/pop-up.utils.ts b/src/backend/src/utils/pop-up.utils.ts new file mode 100644 index 0000000000..30c0fecdf0 --- /dev/null +++ b/src/backend/src/utils/pop-up.utils.ts @@ -0,0 +1,69 @@ +import { Change_Request, Design_Review, User } from '@prisma/client'; +import { PopUpService } from '../services/pop-up.services'; + +/** + * Sends a pop up that a design review was scheduled + * @param designReview dr that was created + * @param members optional and required members of the dr + * @param submitter the user who created the dr + * @param workPackageName the name of the work package associated witht the dr + * @param organizationId id of the organization of the dr + */ +export const sendDrPopUp = async ( + designReview: Design_Review, + members: User[], + submitter: User, + workPackageName: string, + organizationId: string +) => { + const designReviewLink = `/settings/preferences?drId=${designReview.designReviewId}`; + + const msg = `Design Review for ${workPackageName} is being scheduled by ${submitter.firstName} ${submitter.lastName}`; + await PopUpService.sendPopUpToUsers( + msg, + 'calendar_month', + members.map((member) => member.userId), + organizationId, + designReviewLink + ); +}; + +/** + * Sends a pop up that a change request was reviewed + * @param changeRequest cr that was requested review + * @param submitter the user who submitted the cr + * @param accepted true if the cr changes were accepted, false if denied + * @param organizationId id of the organization of the cr + */ +export const sendCrReviewedPopUp = async ( + changeRequest: Change_Request, + submitter: User, + accepted: boolean, + organizationId: string +) => { + const changeRequestLink = `/change-requests/${changeRequest.crId}`; + await PopUpService.sendPopUpToUsers( + `CR #${changeRequest.identifier} has been ${accepted ? 'approved!' : 'denied.'}`, + accepted ? 'check_circle' : 'cancel', + [submitter.userId], + organizationId, + changeRequestLink + ); +}; + +/** + * Sends a finishline pop up to all requested reviewers of a change request + * @param changeRequest cr that was requested review + * @param reviewers user's reviewing the cr + * @param organizationId id of the organization of the cr + */ +export const sendCrRequestReviewPopUp = async (changeRequest: Change_Request, reviewers: User[], organizationId: string) => { + const changeRequestLink = `/change-requests/${changeRequest.crId}`; + await PopUpService.sendPopUpToUsers( + `Your review has been requested on CR #${changeRequest.identifier}`, + 'edit_note', + reviewers.map((reviewer) => reviewer.userId), + organizationId, + changeRequestLink + ); +}; diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unmocked/announcements.test.ts index 534b546edb..97ab4baeef 100644 --- a/src/backend/tests/unmocked/announcements.test.ts +++ b/src/backend/tests/unmocked/announcements.test.ts @@ -20,6 +20,7 @@ describe('Announcemnts Tests', () => { await AnnouncementService.createAnnouncement( 'test1', [testBatman.userId], + new Date(), 'Thomas Emrax', '1', 'software', @@ -28,6 +29,7 @@ describe('Announcemnts Tests', () => { await AnnouncementService.createAnnouncement( 'test2', [testBatman.userId], + new Date(), 'Superman', '50', 'mechanical', diff --git a/src/backend/tests/unmocked/notifications.test.ts b/src/backend/tests/unmocked/notifications.test.ts deleted file mode 100644 index 026099c1c3..0000000000 --- a/src/backend/tests/unmocked/notifications.test.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { Organization } from '@prisma/client'; -import { createTestOrganization, createTestUser, resetUsers } from '../test-utils'; -import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; -import { NotFoundException } from '../../src/utils/errors.utils'; -import prisma from '../../src/prisma/prisma'; -import NotificationService from '../../src/services/notifications.services'; - -describe('Notifications Tests', () => { - let orgId: string; - let organization: Organization; - beforeEach(async () => { - organization = await createTestOrganization(); - orgId = organization.organizationId; - }); - - afterEach(async () => { - await resetUsers(); - }); - - describe('Send Notification', () => { - it('fails on invalid user id', async () => { - await expect( - async () => - await NotificationService.sendNotifcationToUsers( - 'test notification', - 'star', - ['1', '2'], - organization.organizationId - ) - ).rejects.toThrow(new NotFoundException('User', '1')); - }); - - it('Succeeds and sends notification to user', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - const testSuperman = await createTestUser(supermanAdmin, orgId); - await NotificationService.sendNotifcationToUsers( - 'test notification', - 'star', - [testBatman.userId, testSuperman.userId], - organization.organizationId - ); - - const batmanWithNotifications = await prisma.user.findUnique({ - where: { userId: testBatman.userId }, - include: { unreadNotifications: true } - }); - - const supermanWithNotifications = await prisma.user.findUnique({ - where: { userId: testBatman.userId }, - include: { unreadNotifications: true } - }); - - expect(batmanWithNotifications?.unreadNotifications).toHaveLength(1); - expect(batmanWithNotifications?.unreadNotifications[0].text).toBe('test notification'); - expect(supermanWithNotifications?.unreadNotifications).toHaveLength(1); - expect(supermanWithNotifications?.unreadNotifications[0].text).toBe('test notification'); - }); - }); - - describe('Get Notifications', () => { - it('Succeeds and gets user notifications', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await NotificationService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); - await NotificationService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); - - const notifications = await NotificationService.getUserUnreadNotifications( - testBatman.userId, - organization.organizationId - ); - - expect(notifications).toHaveLength(2); - expect(notifications[0].text).toBe('test1'); - expect(notifications[1].text).toBe('test2'); - }); - }); - - describe('Remove Notifications', () => { - it('Succeeds and removes user notification', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); - await NotificationService.sendNotifcationToUsers('test1', 'test1', [testBatman.userId], orgId); - await NotificationService.sendNotifcationToUsers('test2', 'test2', [testBatman.userId], orgId); - - const notifications = await NotificationService.getUserUnreadNotifications( - testBatman.userId, - organization.organizationId - ); - - expect(notifications).toHaveLength(2); - expect(notifications[0].text).toBe('test1'); - expect(notifications[1].text).toBe('test2'); - - const updatedNotifications = await NotificationService.removeUserNotification( - testBatman.userId, - notifications[0].notificationId, - organization.organizationId - ); - - expect(updatedNotifications).toHaveLength(1); - expect(updatedNotifications[0].text).toBe('test2'); - }); - }); -}); diff --git a/src/backend/tests/unmocked/pop-up.test.ts b/src/backend/tests/unmocked/pop-up.test.ts new file mode 100644 index 0000000000..4421aea4f8 --- /dev/null +++ b/src/backend/tests/unmocked/pop-up.test.ts @@ -0,0 +1,90 @@ +import { Organization } from '@prisma/client'; +import { createTestOrganization, createTestUser, resetUsers } from '../test-utils'; +import { batmanAppAdmin, supermanAdmin } from '../test-data/users.test-data'; +import { NotFoundException } from '../../src/utils/errors.utils'; +import prisma from '../../src/prisma/prisma'; +import { PopUpService } from '../../src/services/pop-up.services'; + +describe('Pop Ups Tests', () => { + let orgId: string; + let organization: Organization; + beforeEach(async () => { + organization = await createTestOrganization(); + orgId = organization.organizationId; + }); + + afterEach(async () => { + await resetUsers(); + }); + + describe('Send Pop Up', () => { + it('fails on invalid user id', async () => { + await expect( + async () => await PopUpService.sendPopUpToUsers('test pop up', 'star', ['1', '2'], organization.organizationId) + ).rejects.toThrow(new NotFoundException('User', '1')); + }); + + it('Succeeds and sends pop up to user', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + const testSuperman = await createTestUser(supermanAdmin, orgId); + await PopUpService.sendPopUpToUsers( + 'test pop up', + 'star', + [testBatman.userId, testSuperman.userId], + organization.organizationId + ); + + const batmanWithPopUps = await prisma.user.findUnique({ + where: { userId: testBatman.userId }, + include: { unreadPopUps: true } + }); + + const supermanWithPopUps = await prisma.user.findUnique({ + where: { userId: testBatman.userId }, + include: { unreadPopUps: true } + }); + + expect(batmanWithPopUps?.unreadPopUps).toHaveLength(1); + expect(batmanWithPopUps?.unreadPopUps[0].text).toBe('test pop up'); + expect(supermanWithPopUps?.unreadPopUps).toHaveLength(1); + expect(supermanWithPopUps?.unreadPopUps[0].text).toBe('test pop up'); + }); + }); + + describe('Get Notifications', () => { + it('Succeeds and gets user pop ups', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await PopUpService.sendPopUpToUsers('test1', 'test1', [testBatman.userId], orgId); + await PopUpService.sendPopUpToUsers('test2', 'test2', [testBatman.userId], orgId); + + const popUps = await PopUpService.getUserUnreadPopUps(testBatman.userId, organization.organizationId); + + expect(popUps).toHaveLength(2); + expect(popUps[0].text).toBe('test1'); + expect(popUps[1].text).toBe('test2'); + }); + }); + + describe('Remove Pop Ups', () => { + it('Succeeds and removes user pop up', async () => { + const testBatman = await createTestUser(batmanAppAdmin, orgId); + await PopUpService.sendPopUpToUsers('test1', 'test1', [testBatman.userId], orgId); + await PopUpService.sendPopUpToUsers('test2', 'test2', [testBatman.userId], orgId); + + const popUps = await PopUpService.getUserUnreadPopUps(testBatman.userId, organization.organizationId); + + expect(popUps).toHaveLength(2); + expect(popUps[0].text).toBe('test1'); + expect(popUps[1].text).toBe('test2'); + + const updatedPopUps = await PopUpService.removeUserPopUp( + testBatman.userId, + popUps[0].popUpId, + organization.organizationId + ); + + expect(updatedPopUps).toHaveLength(1); + expect(updatedPopUps[0].text).toBe('test2'); + }); + }); +}); diff --git a/src/frontend/src/apis/notifications.api.ts b/src/frontend/src/apis/notifications.api.ts deleted file mode 100644 index 454e9d4170..0000000000 --- a/src/frontend/src/apis/notifications.api.ts +++ /dev/null @@ -1,19 +0,0 @@ -import axios from '../utils/axios'; -import { apiUrls } from '../utils/urls'; -import { Notification } from 'shared'; - -/* - * Gets all unread notifications of the user with the given id - */ -export const getNotifications = () => { - return axios.get(apiUrls.notificationsCurrentUser(), { - transformResponse: (data) => JSON.parse(data) - }); -}; - -/* - * Removes a notification from the user with the given id - */ -export const removeNotification = (notificationId: string) => { - return axios.post(apiUrls.notificationsRemove(notificationId)); -}; diff --git a/src/frontend/src/apis/pop-ups.api.ts b/src/frontend/src/apis/pop-ups.api.ts new file mode 100644 index 0000000000..a0674b9527 --- /dev/null +++ b/src/frontend/src/apis/pop-ups.api.ts @@ -0,0 +1,19 @@ +import axios from '../utils/axios'; +import { apiUrls } from '../utils/urls'; +import { PopUp } from 'shared'; + +/* + * Gets all unread notifications of the user with the given id + */ +export const getPopUps = () => { + return axios.get(apiUrls.popUpsCurrentUser(), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +/* + * Removes a notification from the user with the given id + */ +export const removePopUps = (notificationId: string) => { + return axios.post(apiUrls.popUpsRemove(notificationId)); +}; diff --git a/src/frontend/src/components/NotificationAlert.tsx b/src/frontend/src/components/NotificationAlert.tsx deleted file mode 100644 index 53b01a5aaa..0000000000 --- a/src/frontend/src/components/NotificationAlert.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { Box } from '@mui/material'; -import React, { useEffect, useState } from 'react'; -import { Notification } from 'shared'; -import NotificationCard from './NotificationCard'; -import { useHistory } from 'react-router-dom'; -import { useCurrentUserNotifications, useRemoveUserNotification } from '../hooks/notifications.hooks'; - -const NotificationAlert: React.FC = () => { - const { data: notifications, isLoading: notificationsIsLoading } = useCurrentUserNotifications(); - const { mutateAsync: removeNotification, isLoading: removeIsLoading } = useRemoveUserNotification(); - const [currentNotification, setCurrentNotification] = useState(); - const history = useHistory(); - - useEffect(() => { - if (notifications && notifications.length > 0) { - setCurrentNotification(notifications[0]); - } - }, [notifications]); - - const removeNotificationWrapper = async (notification: Notification) => { - setCurrentNotification(undefined); - await removeNotification(notification); - }; - - const onClick = async (notification: Notification) => { - if (!!notification.eventLink) { - await removeNotificationWrapper(notification); - history.push(notification.eventLink); - } - }; - - return ( - - {!removeIsLoading && !notificationsIsLoading && currentNotification && ( - - )} - - ); -}; - -export default NotificationAlert; diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/NotificationCard.tsx index 38dd994029..e905ca2ad6 100644 --- a/src/frontend/src/components/NotificationCard.tsx +++ b/src/frontend/src/components/NotificationCard.tsx @@ -1,15 +1,15 @@ import { Box, Card, Icon, IconButton, Typography, useTheme } from '@mui/material'; import React from 'react'; -import { Notification } from 'shared'; +import { PopUp } from 'shared'; import CloseIcon from '@mui/icons-material/Close'; -interface NotificationCardProps { - notification: Notification; - removeNotification: (notificationId: Notification) => Promise; - onClick: (notificationId: Notification) => Promise; +interface PopUpCardProps { + popUp: PopUp; + removePopUp: (popUp: PopUp) => Promise; + onClick: (popUp: PopUp) => Promise; } -const NotificationCard: React.FC = ({ notification, removeNotification, onClick }) => { +const PopUpCard: React.FC = ({ popUp, removePopUp, onClick }) => { const theme = useTheme(); return ( = ({ notification, remov }} > await onClick(notification)} + onClick={async () => await onClick(popUp)} sx={{ display: 'flex', alignItems: 'center', gap: 1, - cursor: !!notification.eventLink ? 'pointer' : 'default' + cursor: !!popUp.eventLink ? 'pointer' : 'default' }} > = ({ notification, remov fontSize: 36 }} > - {notification.iconName} + {popUp.iconName} - {notification.text} + {popUp.text} - removeNotification(notification)}> + removePopUp(popUp)}> @@ -71,4 +71,4 @@ const NotificationCard: React.FC = ({ notification, remov ); }; -export default NotificationCard; +export default PopUpCard; diff --git a/src/frontend/src/components/PopUpAlert.tsx b/src/frontend/src/components/PopUpAlert.tsx new file mode 100644 index 0000000000..452f28800d --- /dev/null +++ b/src/frontend/src/components/PopUpAlert.tsx @@ -0,0 +1,49 @@ +import { Box } from '@mui/material'; +import React, { useEffect, useState } from 'react'; +import { PopUp } from 'shared'; +import NotificationCard from './NotificationCard'; +import { useHistory } from 'react-router-dom'; +import { useCurrentUserPopUps, useRemoveUserPopUp } from '../hooks/pop-ups.hooks'; + +const PopUpAlert: React.FC = () => { + const { data: popUps, isLoading: popUpsIsLoading } = useCurrentUserPopUps(); + const { mutateAsync: removePopUp, isLoading: removeIsLoading } = useRemoveUserPopUp(); + const [currentPopUp, setCurrentPopUp] = useState(); + const history = useHistory(); + + useEffect(() => { + if (popUps && popUps.length > 0) { + setCurrentPopUp(popUps[0]); + } + }, [popUps]); + + const removePopUpWrapper = async (popUp: PopUp) => { + setCurrentPopUp(undefined); + await removePopUp(popUp); + }; + + const onClick = async (popUp: PopUp) => { + if (!!popUp.eventLink) { + await removePopUpWrapper(popUp); + history.push(popUp.eventLink); + } + }; + + return ( + + {!removeIsLoading && !popUpsIsLoading && currentPopUp && ( + + )} + + ); +}; + +export default PopUpAlert; diff --git a/src/frontend/src/hooks/notifications.hooks.ts b/src/frontend/src/hooks/notifications.hooks.ts deleted file mode 100644 index 5ca9ae621b..0000000000 --- a/src/frontend/src/hooks/notifications.hooks.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { useMutation, useQuery, useQueryClient } from 'react-query'; -import { Notification } from 'shared'; -import { getNotifications, removeNotification } from '../apis/notifications.api'; - -/** - * Curstom react hook to get all unread notifications from a user - * @param userId id of user to get unread notifications from - * @returns - */ -export const useCurrentUserNotifications = () => { - return useQuery(['notifications', 'current-user'], async () => { - const { data } = await getNotifications(); - return data; - }); -}; - -/** - * Curstom react hook to remove a notification from a user's unread notifications - * @param userId id of user to get unread notifications from - * @returns - */ -export const useRemoveUserNotification = () => { - const queryClient = useQueryClient(); - return useMutation( - ['notifications', 'current-user', 'remove'], - async (notification: Notification) => { - const { data } = await removeNotification(notification.notificationId); - return data; - }, - { - onSuccess: () => { - queryClient.invalidateQueries(['notifications', 'current-user']); - } - } - ); -}; diff --git a/src/frontend/src/hooks/pop-ups.hooks.ts b/src/frontend/src/hooks/pop-ups.hooks.ts new file mode 100644 index 0000000000..7816102dd6 --- /dev/null +++ b/src/frontend/src/hooks/pop-ups.hooks.ts @@ -0,0 +1,36 @@ +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { PopUp } from 'shared'; +import { getPopUps, removePopUps } from '../apis/pop-ups.api'; + +/** + * Curstom react hook to get all unread notifications from a user + * @param userId id of user to get unread notifications from + * @returns + */ +export const useCurrentUserPopUps = () => { + return useQuery(['pop-ups', 'current-user'], async () => { + const { data } = await getPopUps(); + return data; + }); +}; + +/** + * Curstom react hook to remove a notification from a user's unread notifications + * @param userId id of user to get unread notifications from + * @returns + */ +export const useRemoveUserPopUp = () => { + const queryClient = useQueryClient(); + return useMutation( + ['pop-ups', 'current-user', 'remove'], + async (popUp: PopUp) => { + const { data } = await removePopUps(popUp.popUpId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['pop-ups', 'current-user']); + } + } + ); +}; diff --git a/src/frontend/src/pages/HomePage/Home.tsx b/src/frontend/src/pages/HomePage/Home.tsx index f76ecc0e4c..1ce8f7c7f6 100644 --- a/src/frontend/src/pages/HomePage/Home.tsx +++ b/src/frontend/src/pages/HomePage/Home.tsx @@ -11,14 +11,14 @@ import { useState } from 'react'; import MemberHomePage from './MemberHomePage'; import LeadHomePage from './LeadHomePage'; import AdminHomePage from './AdminHomePage'; -import NotificationAlert from '../../components/NotificationAlert'; +import PopUpAlert from '../../components/PopUpAlert'; const Home = () => { const user = useCurrentUser(); const [onMemberHomePage, setOnMemberHomePage] = useState(false); return ( <> - {!onMemberHomePage && } + {!onMemberHomePage && } {isGuest(user.role) && !onMemberHomePage ? ( ) : isMember(user.role) ? ( diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index a924917909..15a25d3026 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -197,10 +197,10 @@ const faqCreate = () => `${recruitment()}/faq/create`; const faqEdit = (id: string) => `${recruitment()}/faq/${id}/edit`; const faqDelete = (id: string) => `${recruitment()}/faq/${id}/delete`; -/************** Notification Endpoints ***************/ -const notifications = () => `${API_URL}/notifications`; -const notificationsCurrentUser = () => `${notifications()}/current-user`; -const notificationsRemove = (id: string) => `${notifications()}/${id}/remove`; +/************** Pop Up Endpoints ***************/ +const popUps = () => `${API_URL}/pop-ups`; +const popUpsCurrentUser = () => `${popUps()}/current-user`; +const popUpsRemove = (id: string) => `${popUps()}/${id}/remove`; /************** Onboarding Endpoints ***************/ const onboarding = () => `${API_URL}/onboarding`; @@ -367,9 +367,9 @@ export const apiUrls = { faqDelete, imageById, - notifications, - notificationsCurrentUser, - notificationsRemove, + popUps, + popUpsCurrentUser, + popUpsRemove, version }; diff --git a/src/shared/index.ts b/src/shared/index.ts index 40246d0fe4..93e9c8899b 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -11,7 +11,7 @@ export * from './src/types/team-types'; export * from './src/types/task-types'; export * from './src/types/reimbursement-requests-types'; export * from './src/types/design-review-types'; -export * from './src/types/notifications.types'; +export * from './src/types/pop-up-types'; export * from './src/types/announcements.types'; export * from './src/validate-wbs'; export * from './src/date-utils'; diff --git a/src/shared/src/types/announcements.types.ts b/src/shared/src/types/announcements.types.ts index c0e2d615a7..ac31f72062 100644 --- a/src/shared/src/types/announcements.types.ts +++ b/src/shared/src/types/announcements.types.ts @@ -5,7 +5,7 @@ export interface Announcement { text: string; usersReceived: User[]; senderName: string; - dateCreated: Date; + dateMessageSent: Date; slackEventId: string; slackChannelName: string; dateDeleted?: Date; diff --git a/src/shared/src/types/notifications.types.ts b/src/shared/src/types/pop-up-types.ts similarity index 50% rename from src/shared/src/types/notifications.types.ts rename to src/shared/src/types/pop-up-types.ts index abd16fcd21..2b517a3900 100644 --- a/src/shared/src/types/notifications.types.ts +++ b/src/shared/src/types/pop-up-types.ts @@ -1,5 +1,5 @@ -export interface Notification { - notificationId: string; +export interface PopUp { + popUpId: string; text: string; iconName: string; eventLink?: string; From 74b287f47ce7c3b03e4d46f4cc04fdb2790216cc Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Sun, 22 Dec 2024 11:02:44 -0500 Subject: [PATCH 302/320] #3044 checking for notFound error and changed how we get org id --- src/backend/src/controllers/slack.controllers.ts | 6 +++--- src/backend/src/services/slack.services.ts | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts index def03d6870..d90c60ac35 100644 --- a/src/backend/src/controllers/slack.controllers.ts +++ b/src/backend/src/controllers/slack.controllers.ts @@ -7,9 +7,9 @@ export default class SlackController { try { const organizations = await OrganizationsService.getAllOrganizations(); const nerSlackWorkspaceId = await getWorkspaceId(); - const orgId = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId)?.organizationId; - if (orgId) { - slackServices.processMessageSent(event, orgId); + const relatedOrganization = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId); + if (relatedOrganization) { + slackServices.processMessageSent(event, relatedOrganization.organizationId); } } catch (error: unknown) {} } diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 90c50995a9..c94835d49d 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -4,6 +4,7 @@ import AnnouncementService from './announcement.service'; import { Announcement } from 'shared'; import prisma from '../prisma/prisma'; import { blockToMentionedUsers, blockToString } from '../utils/slack.utils'; +import { NotFoundException } from '../utils/errors.utils'; /** * Represents a slack event for a message in a channel. @@ -159,7 +160,12 @@ export default class slackServices { slackChannelName, organizationId ); - } catch (ignored) {} + } catch (error) { + //if couldn't find the announcement to edit, create a new one below + if (!(error instanceof NotFoundException)) { + throw error; + } + } } return await AnnouncementService.createAnnouncement( messageText, From c8392e96bbe996ec0bee13bdcace3d746e7d1257 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Dec 2024 11:09:31 -0500 Subject: [PATCH 303/320] #3075-fixed tests --- src/backend/tests/unmocked/announcements.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/tests/unmocked/announcements.test.ts b/src/backend/tests/unmocked/announcements.test.ts index 74cf8d689c..3981d1feb9 100644 --- a/src/backend/tests/unmocked/announcements.test.ts +++ b/src/backend/tests/unmocked/announcements.test.ts @@ -53,6 +53,7 @@ describe('Announcemnts Tests', () => { await AnnouncementService.createAnnouncement( 'test1', [testBatman.userId], + new Date(), 'Thomas Emrax', '1', 'software', @@ -61,6 +62,7 @@ describe('Announcemnts Tests', () => { await AnnouncementService.createAnnouncement( 'test2', [testBatman.userId], + new Date(), 'Superman', '50', 'mechanical', From dc35d6dce376caa9923b6ca9267a1811eae64ed0 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 22 Dec 2024 11:55:58 -0500 Subject: [PATCH 304/320] #3074-fixed pop up card --- src/frontend/src/components/PopUpAlert.tsx | 4 ++-- .../src/components/{NotificationCard.tsx => PopUpCard.tsx} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename src/frontend/src/components/{NotificationCard.tsx => PopUpCard.tsx} (100%) diff --git a/src/frontend/src/components/PopUpAlert.tsx b/src/frontend/src/components/PopUpAlert.tsx index 452f28800d..0a0b271b66 100644 --- a/src/frontend/src/components/PopUpAlert.tsx +++ b/src/frontend/src/components/PopUpAlert.tsx @@ -1,7 +1,7 @@ import { Box } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { PopUp } from 'shared'; -import NotificationCard from './NotificationCard'; +import PopUpCard from './PopUpCard'; import { useHistory } from 'react-router-dom'; import { useCurrentUserPopUps, useRemoveUserPopUp } from '../hooks/pop-ups.hooks'; @@ -40,7 +40,7 @@ const PopUpAlert: React.FC = () => { }} > {!removeIsLoading && !popUpsIsLoading && currentPopUp && ( - + )}
    ); diff --git a/src/frontend/src/components/NotificationCard.tsx b/src/frontend/src/components/PopUpCard.tsx similarity index 100% rename from src/frontend/src/components/NotificationCard.tsx rename to src/frontend/src/components/PopUpCard.tsx From 1bd863a361a9b9a9d1307deb4f90fe89704fe434 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 24 Dec 2024 09:58:45 -0500 Subject: [PATCH 305/320] #3044-fixed date --- src/backend/src/services/slack.services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 5496922d23..57a7b70023 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -78,7 +78,7 @@ export default class slackServices { static async processMessageSent(event: SlackMessageEvent, organizationId: string): Promise { //get the name of the channel from the slack api const slackChannelName: string = (await getChannelName(event.channel)) ?? `Unknown_Channel:${event.channel}`; - const dateCreated = new Date(Number(event.event_ts)); + const dateCreated = new Date(1000 * Number(event.event_ts)); //get the message that will be processed either as the event or within a subtype let eventMessage: SlackMessage; From c94172f84e49905223452a64e3053cb9703c445f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 24 Dec 2024 15:24:59 -0500 Subject: [PATCH 306/320] #3044-fixed tests --- src/backend/src/services/slack.services.ts | 2 - .../tests/integration/slackMessages.test.ts | 65 +++++++++---------- src/backend/tests/unit/announcements.test.ts | 45 +++++++++++-- 3 files changed, 72 insertions(+), 40 deletions(-) diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 57a7b70023..8bda71edcd 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -146,8 +146,6 @@ export default class slackServices { return; } - console.log('processed event'); - if (event.subtype === 'message_changed') { //try to edit the announcement, if no announcement with that id exists create a new announcement try { diff --git a/src/backend/tests/integration/slackMessages.test.ts b/src/backend/tests/integration/slackMessages.test.ts index 99319d0bb0..f870629260 100644 --- a/src/backend/tests/integration/slackMessages.test.ts +++ b/src/backend/tests/integration/slackMessages.test.ts @@ -30,6 +30,7 @@ describe('Slack message tests', () => { let wonderwoman: User; beforeEach(async () => { + await resetUsers(); organization = await createTestOrganization(); orgId = organization.organizationId; batman = await createTestUser(batmanAppAdmin, orgId, batmanSettings); @@ -49,7 +50,7 @@ describe('Slack message tests', () => { const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'text', text: 'test with ' }, { type: 'broadcast', range: 'everyone' }, { type: 'text', text: ' broadcast (@everyone)' } @@ -63,7 +64,7 @@ describe('Slack message tests', () => { expect(spy).toBeCalledWith( 'test with @everyone broadcast (@everyone)', [organization.userCreatedId, batman.userId, superman.userId, wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -71,7 +72,7 @@ describe('Slack message tests', () => { ); expect(announcement?.text).toBe('test with @everyone broadcast (@everyone)'); - expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement?.senderName).toBe('Slack User Name'); expect(announcement?.slackChannelName).toBe('Slack Channel Name'); expect(announcement?.slackEventId).toBe('id_1'); @@ -86,7 +87,7 @@ describe('Slack message tests', () => { const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'text', text: 'test with ' }, { type: 'broadcast', range: 'channel' }, { type: 'text', text: ' broadcast (@channel)' }, @@ -100,7 +101,7 @@ describe('Slack message tests', () => { expect(spy).toBeCalledWith( 'test with @channel broadcast (@channel)@Slack User Name@Slack User Name', [batman.userId, wonderwoman.userId, superman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -108,7 +109,7 @@ describe('Slack message tests', () => { ); expect(announcement?.text).toBe('test with @channel broadcast (@channel)@Slack User Name@Slack User Name'); - expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement?.senderName).toBe('Slack User Name'); expect(announcement?.slackChannelName).toBe('Slack Channel Name'); expect(announcement?.slackEventId).toBe('id_1'); @@ -122,7 +123,7 @@ describe('Slack message tests', () => { const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'text', text: 'test with ' }, { type: 'user', user_id: 'slackWW' }, { type: 'text', text: ' broadcast (@wonderwoman)' } @@ -134,7 +135,7 @@ describe('Slack message tests', () => { expect(spy).toBeCalledWith( 'test with @Slack User Name broadcast (@wonderwoman)', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -142,7 +143,7 @@ describe('Slack message tests', () => { ); expect(announcement?.text).toBe('test with @Slack User Name broadcast (@wonderwoman)'); - expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement?.senderName).toBe('Slack User Name'); expect(announcement?.slackChannelName).toBe('Slack Channel Name'); expect(announcement?.slackEventId).toBe('id_1'); @@ -156,7 +157,7 @@ describe('Slack message tests', () => { const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'text', text: 'test with: ' }, { type: 'link', url: 'http://www.example.com', text: 'link' }, { type: 'text', text: 'Italics', style: { italic: true } }, @@ -180,7 +181,7 @@ describe('Slack message tests', () => { expect(spy).toBeCalledWith( 'test with: link:(http://www.example.com)Italics and a unicode emoji: 😝 and a slack emoji: emoji:birthday-parrot@Slack User Name', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -190,7 +191,7 @@ describe('Slack message tests', () => { expect(announcement?.text).toBe( 'test with: link:(http://www.example.com)Italics and a unicode emoji: 😝 and a slack emoji: emoji:birthday-parrot@Slack User Name' ); - expect(announcement?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement?.senderName).toBe('Slack User Name'); expect(announcement?.slackChannelName).toBe('Slack Channel Name'); expect(announcement?.slackEventId).toBe('id_1'); @@ -204,9 +205,7 @@ describe('Slack message tests', () => { const spy = vi.spyOn(AnnouncementService, 'createAnnouncement'); const announcement = await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ - { type: 'text', text: 'just a text message' } - ]), + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [{ type: 'text', text: 'just a text message' }]), orgId ); @@ -223,13 +222,13 @@ describe('Slack message tests', () => { const updateSpy = vi.spyOn(AnnouncementService, 'updateAnnouncement'); await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), orgId ); expect(createSpy).toBeCalledWith( '@Slack User Name', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -241,13 +240,13 @@ describe('Slack message tests', () => { type: 'message', subtype: 'message_changed', channel: 'channel id', - event_ts: '1000000000000', + event_ts: '1', channel_type: 'channel', - message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + message: createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'user', user_id: 'slackWW' }, { type: 'text', text: ' added text' } ]), - previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + previous_message: createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'user', user_id: 'slackWW' } ]) }, @@ -257,7 +256,7 @@ describe('Slack message tests', () => { expect(updateSpy).toBeCalledWith( '@Slack User Name added text', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -265,7 +264,7 @@ describe('Slack message tests', () => { ); expect(announcement2?.text).toBe('@Slack User Name added text'); - expect(announcement2?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement2?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement2?.senderName).toBe('Slack User Name'); expect(announcement2?.slackChannelName).toBe('Slack Channel Name'); expect(announcement2?.slackEventId).toBe('id_1'); @@ -287,13 +286,13 @@ describe('Slack message tests', () => { type: 'message', subtype: 'message_changed', channel: 'channel id', - event_ts: '1000000000000', + event_ts: '1', channel_type: 'channel', - message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + message: createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'user', user_id: 'slackWW' }, { type: 'text', text: ' added text' } ]), - previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + previous_message: createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'user', user_id: 'slackWW' } ]) }, @@ -303,7 +302,7 @@ describe('Slack message tests', () => { expect(updateSpy).toBeCalledWith( '@Slack User Name added text', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -313,7 +312,7 @@ describe('Slack message tests', () => { expect(createSpy).toBeCalledWith( '@Slack User Name added text', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -321,7 +320,7 @@ describe('Slack message tests', () => { ); expect(announcement2?.text).toBe('@Slack User Name added text'); - expect(announcement2?.dateCreated.toDateString()).toBe(new Date(1000000000000).toDateString()); + expect(announcement2?.dateMessageSent.toDateString()).toBe(new Date(1000).toDateString()); expect(announcement2?.senderName).toBe('Slack User Name'); expect(announcement2?.slackChannelName).toBe('Slack Channel Name'); expect(announcement2?.slackEventId).toBe('id_1'); @@ -339,13 +338,13 @@ describe('Slack message tests', () => { const deleteSpy = vi.spyOn(AnnouncementService, 'deleteAnnouncement'); await slackServices.processMessageSent( - createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), + createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [{ type: 'user', user_id: 'slackWW' }]), orgId ); expect(createSpy).toBeCalledWith( '@Slack User Name', [wonderwoman.userId], - new Date(1000000000000), + new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -357,9 +356,9 @@ describe('Slack message tests', () => { type: 'message', subtype: 'message_deleted', channel: 'channel id', - event_ts: '1000000000000', + event_ts: '1', channel_type: 'channel', - previous_message: createSlackMessageEvent('channel id', '1000000000000', 'user name', 'id_1', [ + previous_message: createSlackMessageEvent('channel id', '1', 'user name', 'id_1', [ { type: 'user', user_id: 'slackWW' } ]) }, @@ -381,7 +380,7 @@ describe('Slack message tests', () => { type: 'message', subtype: 'other-nonprocessed-subtype', channel: 'channel id', - event_ts: '1000000000000', + event_ts: '1', channel_type: 'channel', bogus_data: 'other data' }, diff --git a/src/backend/tests/unit/announcements.test.ts b/src/backend/tests/unit/announcements.test.ts index 162bd9965e..6eb0ec5ab6 100644 --- a/src/backend/tests/unit/announcements.test.ts +++ b/src/backend/tests/unit/announcements.test.ts @@ -19,6 +19,7 @@ describe('announcement tests', () => { let wonderwoman: User; beforeEach(async () => { + await resetUsers(); organization = await createTestOrganization(); orgId = organization.organizationId; batman = await createTestUser(batmanAppAdmin, orgId, batmanSettings); @@ -157,10 +158,9 @@ describe('announcement tests', () => { describe('Get Announcements', () => { it('Succeeds and gets user announcements', async () => { - const testBatman = await createTestUser(batmanAppAdmin, orgId); await AnnouncementService.createAnnouncement( 'test1', - [testBatman.userId], + [batman.userId], new Date(), 'Thomas Emrax', '1', @@ -169,7 +169,7 @@ describe('announcement tests', () => { ); await AnnouncementService.createAnnouncement( 'test2', - [testBatman.userId], + [batman.userId], new Date(), 'Superman', '50', @@ -177,14 +177,49 @@ describe('announcement tests', () => { organization.organizationId ); - const announcements = await AnnouncementService.getUserUnreadAnnouncements( - testBatman.userId, + const announcements = await AnnouncementService.getUserUnreadAnnouncements(batman.userId, organization.organizationId); + + expect(announcements).toHaveLength(2); + expect(announcements[0].text).toBe('test1'); + expect(announcements[1].text).toBe('test2'); + }); + }); + + describe('Remove Announcement', () => { + it('Succeeds and removes user announcement', async () => { + await AnnouncementService.createAnnouncement( + 'test1', + [batman.userId], + new Date(), + 'Thomas Emrax', + '1', + 'software', organization.organizationId ); + await AnnouncementService.createAnnouncement( + 'test2', + [batman.userId], + new Date(), + 'Superman', + '50', + 'mechanical', + organization.organizationId + ); + + const announcements = await AnnouncementService.getUserUnreadAnnouncements(batman.userId, organization.organizationId); expect(announcements).toHaveLength(2); expect(announcements[0].text).toBe('test1'); expect(announcements[1].text).toBe('test2'); + + const updatedAnnouncements = await AnnouncementService.removeUserAnnouncement( + batman.userId, + announcements[0].announcementId, + organization.organizationId + ); + + expect(updatedAnnouncements).toHaveLength(1); + expect(updatedAnnouncements[0].text).toBe('test2'); }); }); }); From 4d181292877f786ceb4ba65a731796349cb69ac5 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 24 Dec 2024 15:30:46 -0500 Subject: [PATCH 307/320] #3044-small mistake --- src/backend/tests/test-utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 5d3f3eea76..fc6698ff06 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -122,7 +122,6 @@ export const resetUsers = async () => { await prisma.organization.deleteMany(); await prisma.announcement.deleteMany(); await prisma.user.deleteMany(); - await prisma.announcement.deleteMany(); }; export const createFinanceTeamAndLead = async (organization?: Organization) => { From 3019b550a7f43bc8dd5a901a0304857a0a8f3c74 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 26 Dec 2024 07:48:51 -0500 Subject: [PATCH 308/320] #3099-hook and api --- src/frontend/src/apis/announcements.api.ts | 0 src/frontend/src/hooks/announcements.hooks.ts | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/frontend/src/apis/announcements.api.ts create mode 100644 src/frontend/src/hooks/announcements.hooks.ts diff --git a/src/frontend/src/apis/announcements.api.ts b/src/frontend/src/apis/announcements.api.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/frontend/src/hooks/announcements.hooks.ts b/src/frontend/src/hooks/announcements.hooks.ts new file mode 100644 index 0000000000..043f412684 --- /dev/null +++ b/src/frontend/src/hooks/announcements.hooks.ts @@ -0,0 +1,36 @@ +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { Announcement } from 'shared'; +import { getAnnouncements, removeAnnouncement } from '../apis/announcements.api'; + +/** + * Curstom react hook to get all unread announcements from a user + * @param userId id of user to get unread announcements from + * @returns + */ +export const useUserAnnouncements = () => { + return useQuery(['announcements', 'current-user'], async () => { + const { data } = await getAnnouncements(); + return data; + }); +}; + +/** + * Curstom react hook to remove a announcement from a user's unread announcements + * @param userId id of user to get unread announcements from + * @returns + */ +export const useRemoveUserAnnouncement = () => { + const queryClient = useQueryClient(); + return useMutation( + ['announcements', 'current-user', 'remove'], + async (announcement: Announcement) => { + const { data } = await removeAnnouncement(announcement.announcementId); + return data; + }, + { + onSuccess: () => { + queryClient.invalidateQueries(['announcements', 'current-user']); + } + } + ); +}; From 64965dbad04115ba7769160f4cc8dec3fa915a4d Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 26 Dec 2024 07:52:43 -0500 Subject: [PATCH 309/320] #3099-created api --- src/frontend/src/apis/announcements.api.ts | 19 +++++++++++++++++++ src/frontend/src/utils/urls.ts | 9 +++++++++ 2 files changed, 28 insertions(+) diff --git a/src/frontend/src/apis/announcements.api.ts b/src/frontend/src/apis/announcements.api.ts index e69de29bb2..061357a542 100644 --- a/src/frontend/src/apis/announcements.api.ts +++ b/src/frontend/src/apis/announcements.api.ts @@ -0,0 +1,19 @@ +import { Announcement } from 'shared'; +import axios from '../utils/axios'; +import { apiUrls } from '../utils/urls'; + +/* + * Gets all unread announcement of the user with the given id + */ +export const getAnnouncements = () => { + return axios.get(apiUrls.announcementsCurrentUser(), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +/* + * Removes a notification from the user with the given id + */ +export const removeAnnouncement = (announcementId: string) => { + return axios.post(apiUrls.announcementsRemove(announcementId)); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 15a25d3026..63fe0c9957 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -202,6 +202,11 @@ const popUps = () => `${API_URL}/pop-ups`; const popUpsCurrentUser = () => `${popUps()}/current-user`; const popUpsRemove = (id: string) => `${popUps()}/${id}/remove`; +/************** Announcement Endpoints ***************/ +const announcements = () => `${API_URL}/announcements`; +const announcementsCurrentUser = () => `${announcements()}/current-user`; +const announcementsRemove = (id: string) => `${announcements()}/${id}/remove`; + /************** Onboarding Endpoints ***************/ const onboarding = () => `${API_URL}/onboarding`; const imageById = (imageId: string) => `${onboarding()}/image/${imageId}`; @@ -371,5 +376,9 @@ export const apiUrls = { popUpsCurrentUser, popUpsRemove, + announcements, + announcementsCurrentUser, + announcementsRemove, + version }; From b8ea0ab25d9b240bcd1a32e1f54afa4e2a392cdb Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 26 Dec 2024 08:02:55 -0500 Subject: [PATCH 310/320] #3099-created announcements display --- src/backend/src/prisma/seed.ts | 20 +++++++ .../src/pages/HomePage/MemberHomePage.tsx | 21 ++++++-- .../components/GeneralAnnouncementCard.tsx | 52 +++++++++++++++++++ .../components/GeneralAnnouncements.tsx | 42 +++++++++++++++ 4 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx create mode 100644 src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx diff --git a/src/backend/src/prisma/seed.ts b/src/backend/src/prisma/seed.ts index ddd4e190cb..709c398e6c 100644 --- a/src/backend/src/prisma/seed.ts +++ b/src/backend/src/prisma/seed.ts @@ -1904,6 +1904,26 @@ const performSeed: () => Promise = async () => { 'software', ner.organizationId ); + + await AnnouncementService.createAnnouncement( + 'Welcome to Finishline!', + [regina.userId], + new Date(), + 'Damian', + '2', + 'mechanical', + ner.organizationId + ); + + await AnnouncementService.createAnnouncement( + 'Welcome to Finishline!', + [regina.userId], + new Date(), + 'Batman', + '3', + 'powertrain', + ner.organizationId + ); }; performSeed() diff --git a/src/frontend/src/pages/HomePage/MemberHomePage.tsx b/src/frontend/src/pages/HomePage/MemberHomePage.tsx index 9cc45f7899..209b6c09a4 100644 --- a/src/frontend/src/pages/HomePage/MemberHomePage.tsx +++ b/src/frontend/src/pages/HomePage/MemberHomePage.tsx @@ -3,7 +3,7 @@ * See the LICENSE file in the repository root folder for details. */ -import { Grid, Typography } from '@mui/material'; +import { Box, Grid, Typography } from '@mui/material'; import { useSingleUserSettings } from '../../hooks/users.hooks'; import LoadingIndicator from '../../components/LoadingIndicator'; import ErrorPage from '../ErrorPage'; @@ -11,6 +11,7 @@ import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import MyTasks from './components/MyTasks'; import TeamWorkPackageDisplay from './components/TeamWorkPackageDisplay'; +import GeneralAnnouncements from './components/GeneralAnnouncements'; interface MemberHomePageProps { user: AuthenticatedUser; @@ -27,12 +28,26 @@ const MemberHomePage = ({ user }: MemberHomePageProps) => { Welcome, {user.firstName}! - + - + + + + + + + + diff --git a/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx b/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx new file mode 100644 index 0000000000..448d239fef --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx @@ -0,0 +1,52 @@ +import { Card, CardContent, Typography, IconButton, Box } from '@mui/material'; +import { useTheme } from '@mui/system'; +import React from 'react'; +import { Announcement } from 'shared'; +import { datePipe } from '../../../utils/pipes'; +import CloseIcon from '@mui/icons-material/Close'; + +interface GeneralAnnouncementCardProps { + announcement: Announcement; + removeAnnouncement: (announcement: Announcement) => Promise; +} + +const GeneralAnnouncementCard: React.FC = ({ announcement, removeAnnouncement }) => { + const theme = useTheme(); + return ( + + + + removeAnnouncement(announcement)}> + + + + + {announcement.senderName} ({datePipe(announcement.dateMessageSent)}) + + #{announcement.slackChannelName} + {announcement.text} + + + ); +}; + +export default GeneralAnnouncementCard; diff --git a/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx new file mode 100644 index 0000000000..4dceceec24 --- /dev/null +++ b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx @@ -0,0 +1,42 @@ +import { Announcement } from 'shared'; +import ScrollablePageBlock from './ScrollablePageBlock'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import GeneralAnnouncementCard from './GeneralAnnouncementCard'; +import { useRemoveUserAnnouncement, useUserAnnouncements } from '../../../hooks/announcements.hooks'; + +const NoGeneralAnnouncementsDisplay = () => { + return ( + } + heading={"You're all caught up!"} + message={'You have read all current general announcements!'} + /> + ); +}; + +const GeneralAnnouncements: React.FC = () => { + const { data: unreadAnnouncements, isLoading } = useUserAnnouncements(); + const { mutateAsync: removeAnnouncement, isLoading: removeAnnouncementIsLoading } = useRemoveUserAnnouncement(); + + if (isLoading || removeAnnouncementIsLoading || !unreadAnnouncements) return ; + + const removeAnnouncementWrapper = async (announcement: Announcement) => { + await removeAnnouncement(announcement); + }; + + return ( + + {unreadAnnouncements.length === 0 ? ( + + ) : ( + unreadAnnouncements.map((announcement) => ( + + )) + )} + + ); +}; + +export default GeneralAnnouncements; From 2b1f55aed141a0d17825ddd8ca28e76d5d827b8c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Thu, 26 Dec 2024 08:16:12 -0500 Subject: [PATCH 311/320] #3099-Organizing pages --- src/frontend/src/pages/HomePage/AdminHomePage.tsx | 12 ++++++++---- src/frontend/src/pages/HomePage/LeadHomePage.tsx | 8 ++++++-- .../pages/HomePage/components/DesignReviewCard.tsx | 2 +- .../src/pages/HomePage/components/TeamTaskCard.tsx | 2 +- .../pages/HomePage/components/WorkPackageCard.tsx | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/pages/HomePage/AdminHomePage.tsx b/src/frontend/src/pages/HomePage/AdminHomePage.tsx index b83e32a6ab..79c1a7678c 100644 --- a/src/frontend/src/pages/HomePage/AdminHomePage.tsx +++ b/src/frontend/src/pages/HomePage/AdminHomePage.tsx @@ -11,7 +11,8 @@ import PageLayout, { PAGE_GRID_HEIGHT } from '../../components/PageLayout'; import { AuthenticatedUser } from 'shared'; import WorkPackagesSelectionView from './components/WorkPackagesSelectionView'; import ChangeRequestsToReview from './components/ChangeRequestsToReview'; -import OverdueWorkPackages from './components/OverdueWorkPackages'; +import GeneralAnnouncements from './components/GeneralAnnouncements'; +import UpcomingDesignReviews from './components/UpcomingDesignReviews'; interface AdminHomePageProps { user: AuthenticatedUser; @@ -41,11 +42,14 @@ const AdminHomePage = ({ user }: AdminHomePageProps) => {
    - + + + + - - + +
    diff --git a/src/frontend/src/pages/HomePage/LeadHomePage.tsx b/src/frontend/src/pages/HomePage/LeadHomePage.tsx index 5466cdc285..8e1c2b9f6d 100644 --- a/src/frontend/src/pages/HomePage/LeadHomePage.tsx +++ b/src/frontend/src/pages/HomePage/LeadHomePage.tsx @@ -12,6 +12,7 @@ import { AuthenticatedUser } from 'shared'; import ChangeRequestsToReview from './components/ChangeRequestsToReview'; import MyTeamsOverdueTasks from './components/MyTeamsOverdueTasks'; import UpcomingDesignReviews from './components/UpcomingDesignReviews'; +import GeneralAnnouncements from './components/GeneralAnnouncements'; interface LeadHomePageProps { user: AuthenticatedUser; @@ -41,10 +42,13 @@ const LeadHomePage = ({ user }: LeadHomePageProps) => { - + + + + - + diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index 7ecf0dac6a..fdc80c595f 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -76,7 +76,7 @@ const UpcomingDesignReviewsCard: React.FC = ({ designReview, variant="outlined" sx={{ width: '100%', - minHeight: 'fit-content', + height: 'fit-content', mr: 3, background: theme.palette.background.default, borderRadius: 2 diff --git a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx index dfd1485e64..d9277350d7 100644 --- a/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx @@ -29,7 +29,7 @@ const TeamTaskCard: React.FC = ({ task, taskNumber }) => { variant="outlined" sx={{ width: '100%', - minHeight: 'fit-content', + height: 'fit-content', mr: 3, background: theme.palette.background.default, borderRadius: 2 diff --git a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx index 11183972c1..e6ddd11d14 100644 --- a/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx +++ b/src/frontend/src/pages/HomePage/components/WorkPackageCard.tsx @@ -41,7 +41,7 @@ const WorkPackageCard = ({ wp }: { wp: WorkPackage }) => { variant="outlined" sx={{ height: 'fit-content', - minWidth: 'fit-content', + width: '100%', mr: 3, background: theme.palette.background.default }} From 3d2c816ae9dff464acc14e949114bd4f630adf3c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 27 Dec 2024 06:51:20 -0500 Subject: [PATCH 312/320] #3099-error check --- .../pages/HomePage/components/GeneralAnnouncements.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx index 4dceceec24..aff509f530 100644 --- a/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx +++ b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx @@ -5,6 +5,7 @@ import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; import GeneralAnnouncementCard from './GeneralAnnouncementCard'; import { useRemoveUserAnnouncement, useUserAnnouncements } from '../../../hooks/announcements.hooks'; +import ErrorPage from '../../ErrorPage'; const NoGeneralAnnouncementsDisplay = () => { return ( @@ -17,10 +18,16 @@ const NoGeneralAnnouncementsDisplay = () => { }; const GeneralAnnouncements: React.FC = () => { - const { data: unreadAnnouncements, isLoading } = useUserAnnouncements(); + const { + data: unreadAnnouncements, + isLoading, + isError: announcementsIsError, + error: announcementsError + } = useUserAnnouncements(); const { mutateAsync: removeAnnouncement, isLoading: removeAnnouncementIsLoading } = useRemoveUserAnnouncement(); if (isLoading || removeAnnouncementIsLoading || !unreadAnnouncements) return ; + if (announcementsIsError) return ; const removeAnnouncementWrapper = async (announcement: Announcement) => { await removeAnnouncement(announcement); From 1dbb5502c7cb4a040f8717a6b5e1b58de62e7408 Mon Sep 17 00:00:00 2001 From: Chris Pyle Date: Fri, 27 Dec 2024 18:53:10 -0500 Subject: [PATCH 313/320] #3044 refactoring prisma queries and misc changes --- .../src/controllers/slack.controllers.ts | 4 +- src/backend/src/integrations/slack.ts | 23 +++------- src/backend/src/routes/slack.routes.ts | 8 +--- .../src/services/announcement.service.ts | 8 ++-- src/backend/src/services/slack.services.ts | 12 +----- src/backend/src/utils/slack.utils.ts | 43 +++++++++++++------ .../tests/integration/slackMessages.test.ts | 19 +++++--- src/backend/tests/unit/announcements.test.ts | 2 - 8 files changed, 61 insertions(+), 58 deletions(-) diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts index d90c60ac35..c16dcfeaba 100644 --- a/src/backend/src/controllers/slack.controllers.ts +++ b/src/backend/src/controllers/slack.controllers.ts @@ -11,6 +11,8 @@ export default class SlackController { if (relatedOrganization) { slackServices.processMessageSent(event, relatedOrganization.organizationId); } - } catch (error: unknown) {} + } catch (error: unknown) { + console.log(error); + } } } diff --git a/src/backend/src/integrations/slack.ts b/src/backend/src/integrations/slack.ts index b24615743e..6e855acae7 100644 --- a/src/backend/src/integrations/slack.ts +++ b/src/backend/src/integrations/slack.ts @@ -182,41 +182,35 @@ export const getUsersInChannel = async (channelId: string) => { return members; } catch (error) { - return []; + return members; } }; /** * Given a slack channel id, produces the name of the channel * @param channelId the id of the slack channel - * @returns the name of the channel + * @returns the name of the channel or undefined if it cannot be found */ export const getChannelName = async (channelId: string) => { - const { SLACK_BOT_TOKEN } = process.env; - if (!SLACK_BOT_TOKEN) return channelId; - try { const channelRes = await slack.conversations.info({ channel: channelId }); - return channelRes.channel?.name || 'Unknown Channel'; + return channelRes.channel?.name; } catch (error) { - return; + return undefined; } }; /** * Given a slack user id, prood.uces the name of the channel * @param userId the id of the slack user - * @returns the name of the user (real name if no display name) + * @returns the name of the user (real name if no display name), undefined if cannot be found */ export const getUserName = async (userId: string) => { - const { SLACK_BOT_TOKEN } = process.env; - if (!SLACK_BOT_TOKEN) return; - try { const userRes = await slack.users.info({ user: userId }); - return userRes.user?.profile?.display_name || userRes.user?.real_name || 'Unkown User'; + return userRes.user?.profile?.display_name || userRes.user?.real_name; } catch (error) { - return; + return undefined; } }; @@ -225,9 +219,6 @@ export const getUserName = async (userId: string) => { * @returns the id of the workspace */ export const getWorkspaceId = async () => { - const { SLACK_BOT_TOKEN } = process.env; - if (!SLACK_BOT_TOKEN) return; - try { const response = await slack.auth.test(); if (response.ok) { diff --git a/src/backend/src/routes/slack.routes.ts b/src/backend/src/routes/slack.routes.ts index a085ae4244..6878b176b1 100644 --- a/src/backend/src/routes/slack.routes.ts +++ b/src/backend/src/routes/slack.routes.ts @@ -3,10 +3,6 @@ import SlackController from '../controllers/slack.controllers'; export const slackEvents = createEventAdapter(process.env.SLACK_SIGNING_SECRET || ''); -slackEvents.on('message', async (event) => { - SlackController.processMessageEvent(event); -}); +slackEvents.on('message', SlackController.processMessageEvent); -slackEvents.on('error', (error) => { - console.log(error.name); -}); +slackEvents.on('error', console.log); diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index c885543059..64bb6a80da 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -2,7 +2,7 @@ import { Announcement } from 'shared'; import prisma from '../prisma/prisma'; import { getAnnouncementQueryArgs } from '../prisma-query-args/announcements.query.args'; import announcementTransformer from '../transformers/announcements.transformer'; -import { HttpException, NotFoundException } from '../utils/errors.utils'; +import { DeletedException, HttpException, NotFoundException } from '../utils/errors.utils'; export default class AnnouncementService { /** @@ -48,7 +48,6 @@ export default class AnnouncementService { static async updateAnnouncement( text: string, usersReceivedIds: string[], - dateMessageSent: Date, senderName: string, slackEventId: string, slackChannelName: string, @@ -62,6 +61,8 @@ export default class AnnouncementService { if (!originalAnnouncement) throw new NotFoundException('Announcement', slackEventId); + if (originalAnnouncement.dateDeleted) throw new DeletedException('Announcement', slackEventId); + const announcement = await prisma.announcement.update({ where: { announcementId: originalAnnouncement.announcementId }, data: { @@ -72,7 +73,6 @@ export default class AnnouncementService { })) }, slackEventId, - dateMessageSent, senderName, slackChannelName }, @@ -91,6 +91,8 @@ export default class AnnouncementService { if (!originalAnnouncement) throw new NotFoundException('Announcement', slackEventId); + if (originalAnnouncement.dateDeleted) throw new DeletedException('Announcement', slackEventId); + const announcement = await prisma.announcement.update({ where: { slackEventId }, data: { diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 8bda71edcd..5bdafb7413 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -1,4 +1,3 @@ -import UsersService from './users.services'; import { getChannelName, getUserName } from '../integrations/slack'; import AnnouncementService from './announcement.service'; import { Announcement } from 'shared'; @@ -105,14 +104,6 @@ export default class slackServices { let messageText = ''; let userIdsToNotify: string[] = []; - //Get the settings of all users in this organization to compare slack ids - const users = await UsersService.getAllUsers(); - const userSettings = await Promise.all( - users.map((user) => { - return UsersService.getUserSettings(user.userId); - }) - ); - //get the name of the user that sent the message from slack let userName = (await getUserName(eventMessage.user)) ?? ''; @@ -132,7 +123,7 @@ export default class slackServices { if (richTextBlocks && richTextBlocks.length > 0 && richTextBlocks[0].elements.length > 0) { for (const element of richTextBlocks[0].elements[0].elements) { messageText += await blockToString(element); - userIdsToNotify = userIdsToNotify.concat(await blockToMentionedUsers(element, userSettings, event.channel)); + userIdsToNotify = userIdsToNotify.concat(await blockToMentionedUsers(element, organizationId, event.channel)); } } else { return; @@ -152,7 +143,6 @@ export default class slackServices { return await AnnouncementService.updateAnnouncement( messageText, userIdsToNotify, - dateCreated, userName, eventMessage.client_msg_id, slackChannelName, diff --git a/src/backend/src/utils/slack.utils.ts b/src/backend/src/utils/slack.utils.ts index ea98a1a698..4019c6d6db 100644 --- a/src/backend/src/utils/slack.utils.ts +++ b/src/backend/src/utils/slack.utils.ts @@ -1,5 +1,5 @@ import { ChangeRequest, daysBetween, Task, UserPreview, wbsPipe, calculateEndDate } from 'shared'; -import { User, User_Settings } from '@prisma/client'; +import { User } from '@prisma/client'; import { editMessage, getChannelName, @@ -20,6 +20,7 @@ import { WorkPackageQueryArgs } from '../prisma-query-args/work-packages.query-a import { Prisma } from '@prisma/client'; import { userTransformer } from '../transformers/user.transformer'; import { SlackRichTextBlock } from '../services/slack.services'; +import UsersService from '../services/users.services'; interface SlackMessageThread { messageInfoId: string; @@ -524,38 +525,54 @@ export const blockToString = async (block: SlackRichTextBlock) => { /** * Gets the users notified in a specific SlackRichTextBlock. * @param block the block that may contain mentioned user/users - * @param usersSettings the settings of all the users in prisma + * @param orgainzationId the id of the organization corresponding to this slack channel * @param channelId the id of the channel that the block is being sent in * @returns an array of prisma user ids of users to be notified */ export const blockToMentionedUsers = async ( block: SlackRichTextBlock, - usersSettings: User_Settings[], + organizationId: string, channelId: string -) => { +): Promise => { switch (block.type) { case 'broadcast': switch (block.range) { case 'everyone': - return usersSettings.map((usersSettings) => usersSettings.userId); + const usersInOrg = await UsersService.getAllUsers(organizationId); + return usersInOrg.map((user) => user.userId); case 'channel': case 'here': //@here behaves the same as @channel; notifies all the users in that channel const slackIds: string[] = await getUsersInChannel(channelId); - return usersSettings - .filter((userSettings) => { - return slackIds.some((slackId) => slackId === userSettings.slackId); - }) - .map((user) => user.userId); + const prismaIds: (string | undefined)[] = await Promise.all(slackIds.map(getUserIdFromSlackId)); + return prismaIds.filter((id): id is string => id !== undefined); default: return []; } case 'user': - return usersSettings - .filter((userSettings) => userSettings.slackId === block.user_id) - .map((userSettings) => userSettings.userId); + const prismaId = await getUserIdFromSlackId(block.user_id ?? ''); + return prismaId ? [prismaId] : []; default: //only broadcasts and specific user mentions add recievers to announcements return []; } }; + +/** + * given a slack id, produce the user id of the corresponding user + * @param slackId the slack id in the settings of the user + * @returns the user id, or undefined if no users were found + */ +export const getUserIdFromSlackId = async (slackId: string): Promise => { + const user = await prisma.user.findFirst({ + where: { + userSettings: { + slackId + } + } + }); + + if (!user) return undefined; + + return user.userId; +}; diff --git a/src/backend/tests/integration/slackMessages.test.ts b/src/backend/tests/integration/slackMessages.test.ts index f870629260..703db97c1a 100644 --- a/src/backend/tests/integration/slackMessages.test.ts +++ b/src/backend/tests/integration/slackMessages.test.ts @@ -12,6 +12,7 @@ import * as apiFunctions from '../../src/integrations/slack'; import AnnouncementService from '../../src/services/announcement.service'; import slackServices from '../../src/services/slack.services'; import { vi } from 'vitest'; +import prisma from '../../src/prisma/prisma'; vi.mock('../../src/integrations/slack', async (importOriginal) => { return { @@ -36,6 +37,16 @@ describe('Slack message tests', () => { batman = await createTestUser(batmanAppAdmin, orgId, batmanSettings); superman = await createTestUser(supermanAdmin, orgId, supermanSettings); wonderwoman = await createTestUser(wonderwomanGuest, orgId, wonderwomanSettings); + await prisma.organization.update({ + where: { + organizationId: orgId + }, + data: { + users: { + set: [{ userId: batman.userId }, { userId: superman.userId }, { userId: wonderwoman.userId }] + } + } + }); }); afterEach(async () => { @@ -58,12 +69,10 @@ describe('Slack message tests', () => { orgId ); - console.log(announcement); - expect(spy).toBeCalledTimes(1); expect(spy).toBeCalledWith( 'test with @everyone broadcast (@everyone)', - [organization.userCreatedId, batman.userId, superman.userId, wonderwoman.userId], + [batman.userId, superman.userId, wonderwoman.userId], new Date(1000), 'Slack User Name', 'id_1', @@ -76,7 +85,7 @@ describe('Slack message tests', () => { expect(announcement?.senderName).toBe('Slack User Name'); expect(announcement?.slackChannelName).toBe('Slack Channel Name'); expect(announcement?.slackEventId).toBe('id_1'); - expect(announcement?.usersReceived).toHaveLength(4); + expect(announcement?.usersReceived).toHaveLength(3); }); it('Adds message to people in channel with @channel and @mention (w/o duplicates)', async () => { @@ -256,7 +265,6 @@ describe('Slack message tests', () => { expect(updateSpy).toBeCalledWith( '@Slack User Name added text', [wonderwoman.userId], - new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', @@ -302,7 +310,6 @@ describe('Slack message tests', () => { expect(updateSpy).toBeCalledWith( '@Slack User Name added text', [wonderwoman.userId], - new Date(1000), 'Slack User Name', 'id_1', 'Slack Channel Name', diff --git a/src/backend/tests/unit/announcements.test.ts b/src/backend/tests/unit/announcements.test.ts index 6eb0ec5ab6..8f701ec41d 100644 --- a/src/backend/tests/unit/announcements.test.ts +++ b/src/backend/tests/unit/announcements.test.ts @@ -88,7 +88,6 @@ describe('announcement tests', () => { const updatedAnnouncement = await AnnouncementService.updateAnnouncement( 'new text', [batman.userId, wonderwoman.userId], - new Date(1000000000000), 'sender name', 'slack id', 'channel name', @@ -113,7 +112,6 @@ describe('announcement tests', () => { await AnnouncementService.updateAnnouncement( 'new text', [batman.userId, wonderwoman.userId], - new Date(1000000000000), 'sender name', 'slack id', 'channel name', From 1b411a14d1740b1e2fb1598dc14182b2901590ef Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 27 Dec 2024 23:29:36 -0500 Subject: [PATCH 314/320] #3099-fixed issues --- src/frontend/src/apis/announcements.api.ts | 2 +- src/frontend/src/hooks/announcements.hooks.ts | 2 +- .../HomePage/components/GeneralAnnouncementCard.tsx | 2 +- .../pages/HomePage/components/GeneralAnnouncements.tsx | 9 ++------- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/frontend/src/apis/announcements.api.ts b/src/frontend/src/apis/announcements.api.ts index 061357a542..5bbb5e704b 100644 --- a/src/frontend/src/apis/announcements.api.ts +++ b/src/frontend/src/apis/announcements.api.ts @@ -15,5 +15,5 @@ export const getAnnouncements = () => { * Removes a notification from the user with the given id */ export const removeAnnouncement = (announcementId: string) => { - return axios.post(apiUrls.announcementsRemove(announcementId)); + return axios.post(apiUrls.announcementsRemove(announcementId)); }; diff --git a/src/frontend/src/hooks/announcements.hooks.ts b/src/frontend/src/hooks/announcements.hooks.ts index 043f412684..50cceea661 100644 --- a/src/frontend/src/hooks/announcements.hooks.ts +++ b/src/frontend/src/hooks/announcements.hooks.ts @@ -21,7 +21,7 @@ export const useUserAnnouncements = () => { */ export const useRemoveUserAnnouncement = () => { const queryClient = useQueryClient(); - return useMutation( + return useMutation( ['announcements', 'current-user', 'remove'], async (announcement: Announcement) => { const { data } = await removeAnnouncement(announcement.announcementId); diff --git a/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx b/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx index 448d239fef..b7e09741f1 100644 --- a/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx +++ b/src/frontend/src/pages/HomePage/components/GeneralAnnouncementCard.tsx @@ -7,7 +7,7 @@ import CloseIcon from '@mui/icons-material/Close'; interface GeneralAnnouncementCardProps { announcement: Announcement; - removeAnnouncement: (announcement: Announcement) => Promise; + removeAnnouncement: (announcement: Announcement) => Promise; } const GeneralAnnouncementCard: React.FC = ({ announcement, removeAnnouncement }) => { diff --git a/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx index aff509f530..17e5334199 100644 --- a/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx +++ b/src/frontend/src/pages/HomePage/components/GeneralAnnouncements.tsx @@ -1,4 +1,3 @@ -import { Announcement } from 'shared'; import ScrollablePageBlock from './ScrollablePageBlock'; import LoadingIndicator from '../../../components/LoadingIndicator'; import EmptyPageBlockDisplay from './EmptyPageBlockDisplay'; @@ -26,12 +25,8 @@ const GeneralAnnouncements: React.FC = () => { } = useUserAnnouncements(); const { mutateAsync: removeAnnouncement, isLoading: removeAnnouncementIsLoading } = useRemoveUserAnnouncement(); - if (isLoading || removeAnnouncementIsLoading || !unreadAnnouncements) return ; if (announcementsIsError) return ; - - const removeAnnouncementWrapper = async (announcement: Announcement) => { - await removeAnnouncement(announcement); - }; + if (isLoading || removeAnnouncementIsLoading || !unreadAnnouncements) return ; return ( @@ -39,7 +34,7 @@ const GeneralAnnouncements: React.FC = () => { ) : ( unreadAnnouncements.map((announcement) => ( - + )) )} From 21d33d5e94db86bacb17e3ac24c43bd63dc2d30c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 29 Dec 2024 00:56:52 -0500 Subject: [PATCH 315/320] #3099-transform result of api call --- src/backend/src/services/announcement.service.ts | 1 + src/frontend/src/apis/announcements.api.ts | 11 +++++++++-- .../apis/transformers/announcements.transformer.ts | 9 +++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 src/frontend/src/apis/transformers/announcements.transformer.ts diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 8f0770cd12..ed528eb98e 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -54,6 +54,7 @@ export default class AnnouncementService { static async getUserUnreadAnnouncements(userId: string, organizationId: string) { const unreadAnnouncements = await prisma.announcement.findMany({ where: { + dateDeleted: null, usersReceived: { some: { userId } } diff --git a/src/frontend/src/apis/announcements.api.ts b/src/frontend/src/apis/announcements.api.ts index 5bbb5e704b..6bac7d1c8e 100644 --- a/src/frontend/src/apis/announcements.api.ts +++ b/src/frontend/src/apis/announcements.api.ts @@ -1,13 +1,14 @@ import { Announcement } from 'shared'; import axios from '../utils/axios'; import { apiUrls } from '../utils/urls'; +import { announcementsTransformer } from './transformers/announcements.transformer'; /* * Gets all unread announcement of the user with the given id */ export const getAnnouncements = () => { return axios.get(apiUrls.announcementsCurrentUser(), { - transformResponse: (data) => JSON.parse(data) + transformResponse: (data) => JSON.parse(data).map(announcementsTransformer) }); }; @@ -15,5 +16,11 @@ export const getAnnouncements = () => { * Removes a notification from the user with the given id */ export const removeAnnouncement = (announcementId: string) => { - return axios.post(apiUrls.announcementsRemove(announcementId)); + return axios.post( + apiUrls.announcementsRemove(announcementId), + {}, + { + transformResponse: (data) => JSON.parse(data).map(announcementsTransformer) + } + ); }; diff --git a/src/frontend/src/apis/transformers/announcements.transformer.ts b/src/frontend/src/apis/transformers/announcements.transformer.ts new file mode 100644 index 0000000000..821b8d6043 --- /dev/null +++ b/src/frontend/src/apis/transformers/announcements.transformer.ts @@ -0,0 +1,9 @@ +import { Announcement } from 'shared'; + +export const announcementsTransformer = (announcement: Announcement): Announcement => { + return { + ...announcement, + dateMessageSent: new Date(announcement.dateMessageSent), + dateDeleted: announcement.dateDeleted ? new Date(announcement.dateDeleted) : undefined + }; +}; From 659f88cdfd8d5d7eefa3a7030b14e84f6f067ab7 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 30 Dec 2024 17:32:26 -0500 Subject: [PATCH 316/320] #3044-added organization to announcements and pop-ups --- .../src/controllers/slack.controllers.ts | 4 ++-- .../migration.sql | 8 +++++++ src/backend/src/prisma/schema.prisma | 24 ++++++++++++------- .../src/services/announcement.service.ts | 13 ++++++++-- src/backend/src/services/pop-up.services.ts | 6 +++-- src/backend/src/services/slack.services.ts | 2 +- 6 files changed, 41 insertions(+), 16 deletions(-) rename src/backend/src/prisma/migrations/{20241222150147_homepage_redesign => 20241230221615_homepage_redesign}/migration.sql (83%) diff --git a/src/backend/src/controllers/slack.controllers.ts b/src/backend/src/controllers/slack.controllers.ts index c16dcfeaba..e7336711d2 100644 --- a/src/backend/src/controllers/slack.controllers.ts +++ b/src/backend/src/controllers/slack.controllers.ts @@ -1,6 +1,6 @@ import { getWorkspaceId } from '../integrations/slack'; import OrganizationsService from '../services/organizations.services'; -import slackServices from '../services/slack.services'; +import SlackServices from '../services/slack.services'; export default class SlackController { static async processMessageEvent(event: any) { @@ -9,7 +9,7 @@ export default class SlackController { const nerSlackWorkspaceId = await getWorkspaceId(); const relatedOrganization = organizations.find((org) => org.slackWorkspaceId === nerSlackWorkspaceId); if (relatedOrganization) { - slackServices.processMessageSent(event, relatedOrganization.organizationId); + SlackServices.processMessageSent(event, relatedOrganization.organizationId); } } catch (error: unknown) { console.log(error); diff --git a/src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql b/src/backend/src/prisma/migrations/20241230221615_homepage_redesign/migration.sql similarity index 83% rename from src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql rename to src/backend/src/prisma/migrations/20241230221615_homepage_redesign/migration.sql index 17a36eb2d3..c62b11a4bb 100644 --- a/src/backend/src/prisma/migrations/20241222150147_homepage_redesign/migration.sql +++ b/src/backend/src/prisma/migrations/20241230221615_homepage_redesign/migration.sql @@ -14,6 +14,7 @@ CREATE TABLE "Announcement" ( "senderName" TEXT NOT NULL, "slackEventId" TEXT NOT NULL, "slackChannelName" TEXT NOT NULL, + "organizationId" TEXT NOT NULL, CONSTRAINT "Announcement_pkey" PRIMARY KEY ("announcementId") ); @@ -24,6 +25,7 @@ CREATE TABLE "PopUp" ( "text" TEXT NOT NULL, "iconName" TEXT NOT NULL, "eventLink" TEXT, + "organizationId" TEXT NOT NULL, CONSTRAINT "PopUp_pkey" PRIMARY KEY ("popUpId") ); @@ -58,6 +60,12 @@ CREATE INDEX "_userPopUps_B_index" ON "_userPopUps"("B"); -- AddForeignKey ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE SET NULL ON UPDATE CASCADE; +-- AddForeignKey +ALTER TABLE "Announcement" ADD CONSTRAINT "Announcement_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PopUp" ADD CONSTRAINT "PopUp_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("organizationId") ON DELETE RESTRICT ON UPDATE CASCADE; + -- AddForeignKey ALTER TABLE "_receivedAnnouncements" ADD CONSTRAINT "_receivedAnnouncements_A_fkey" FOREIGN KEY ("A") REFERENCES "Announcement"("announcementId") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/src/backend/src/prisma/schema.prisma b/src/backend/src/prisma/schema.prisma index c62827da19..7bd7cb7fff 100644 --- a/src/backend/src/prisma/schema.prisma +++ b/src/backend/src/prisma/schema.prisma @@ -900,6 +900,8 @@ model Organization { FrequentlyAskedQuestions FrequentlyAskedQuestion[] Milestone Milestone[] featuredProjects Project[] + PopUps PopUp[] + Announcements Announcement[] } model FrequentlyAskedQuestion { @@ -932,20 +934,24 @@ model Milestone { } model Announcement { - announcementId String @id @default(uuid()) + announcementId String @id @default(uuid()) text String - usersReceived User[] @relation("receivedAnnouncements") - dateMessageSent DateTime @default(now()) + usersReceived User[] @relation("receivedAnnouncements") + dateMessageSent DateTime @default(now()) dateDeleted DateTime? senderName String - slackEventId String @unique + slackEventId String @unique slackChannelName String + organizationId String + organization Organization @relation(fields: [organizationId], references: [organizationId]) } model PopUp { - popUpId String @id @default(uuid()) - text String - iconName String - users User[] @relation("userPopUps") - eventLink String? + popUpId String @id @default(uuid()) + text String + iconName String + users User[] @relation("userPopUps") + eventLink String? + organizationId String + organization Organization @relation(fields: [organizationId], references: [organizationId]) } diff --git a/src/backend/src/services/announcement.service.ts b/src/backend/src/services/announcement.service.ts index 64bb6a80da..6b5c758338 100644 --- a/src/backend/src/services/announcement.service.ts +++ b/src/backend/src/services/announcement.service.ts @@ -37,7 +37,8 @@ export default class AnnouncementService { dateMessageSent, senderName, slackEventId, - slackChannelName + slackChannelName, + organizationId }, ...getAnnouncementQueryArgs(organizationId) }); @@ -63,6 +64,9 @@ export default class AnnouncementService { if (originalAnnouncement.dateDeleted) throw new DeletedException('Announcement', slackEventId); + if (originalAnnouncement.organizationId !== organizationId) + throw new HttpException(400, `Announcement is not apart of the current organization`); + const announcement = await prisma.announcement.update({ where: { announcementId: originalAnnouncement.announcementId }, data: { @@ -93,6 +97,9 @@ export default class AnnouncementService { if (originalAnnouncement.dateDeleted) throw new DeletedException('Announcement', slackEventId); + if (originalAnnouncement.organizationId !== organizationId) + throw new HttpException(400, `Announcement is not apart of the current organization`); + const announcement = await prisma.announcement.update({ where: { slackEventId }, data: { @@ -116,9 +123,11 @@ export default class AnnouncementService { static async getUserUnreadAnnouncements(userId: string, organizationId: string) { const unreadAnnouncements = await prisma.announcement.findMany({ where: { + dateDeleted: null, usersReceived: { some: { userId } - } + }, + organizationId }, ...getAnnouncementQueryArgs(organizationId) }); diff --git a/src/backend/src/services/pop-up.services.ts b/src/backend/src/services/pop-up.services.ts index 267c72761f..61bba89bd0 100644 --- a/src/backend/src/services/pop-up.services.ts +++ b/src/backend/src/services/pop-up.services.ts @@ -15,7 +15,8 @@ export class PopUpService { where: { users: { some: { userId } - } + }, + organizationId }, ...getPopUpQueryArgs(organizationId) }); @@ -70,7 +71,8 @@ export class PopUpService { data: { text, iconName, - eventLink + eventLink, + organizationId }, ...getPopUpQueryArgs(organizationId) }); diff --git a/src/backend/src/services/slack.services.ts b/src/backend/src/services/slack.services.ts index 5bdafb7413..f6ece7ba85 100644 --- a/src/backend/src/services/slack.services.ts +++ b/src/backend/src/services/slack.services.ts @@ -66,7 +66,7 @@ export interface SlackRichTextBlock { usergroup_id?: string; } -export default class slackServices { +export default class SlackServices { /** * Given a slack event representing a message in a channel, * make the appropriate announcement change in prisma. From 1d118e086a182b6058c5574190e354e1d412e254 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Mon, 30 Dec 2024 17:38:19 -0500 Subject: [PATCH 317/320] #3044-fixed tests --- src/backend/tests/test-utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index fc6698ff06..29070fee07 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -119,8 +119,9 @@ export const resetUsers = async () => { await prisma.wBS_Element.deleteMany(); await prisma.milestone.deleteMany(); await prisma.frequentlyAskedQuestion.deleteMany(); - await prisma.organization.deleteMany(); await prisma.announcement.deleteMany(); + await prisma.popUp.deleteMany(); + await prisma.organization.deleteMany(); await prisma.user.deleteMany(); }; From 43e4bc80116310f9c1b46305b0b41c8581d61698 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 3 Jan 2025 22:18:14 -0500 Subject: [PATCH 318/320] adjusted for task deadline change --- src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx | 4 ++-- src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx index 1e4045ea07..160603a376 100644 --- a/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx +++ b/src/frontend/src/pages/HomePage/components/TaskDetailCard.tsx @@ -31,7 +31,7 @@ const NERToolTip = styled(({ className, ...props }: TooltipProps) => ( const TaskDetailCard: React.FC = ({ task, taskNumber }) => { const theme = useTheme(); - const taskDaysOverdue = daysOverdue(new Date(task.deadline)); + const taskDaysOverdue = task.deadline ? daysOverdue(task.deadline) : 0; const taskOverdue = taskDaysOverdue > 0; const [hover, setHover] = useState(false); const { data: project, isLoading, isError, error } = useSingleProject(task.wbsNum); @@ -99,7 +99,7 @@ const TaskDetailCard: React.FC = ({ task, taskNumber }) => label={task.priority} size="small" /> - } label={formatDate(new Date(task.deadline))} size="small" /> + {task.deadline && } label={formatDate(task.deadline)} size="small" />} = ({ task, taskNumber }) => { label={task.priority} size="medium" /> - } label={formatDate(new Date(task.deadline))} size="medium" /> + {task.deadline && } label={formatDate(task.deadline)} size="medium" />} From 2e085d7d00418f1b5a74a91dd60b1a21be5dac88 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 3 Jan 2025 22:26:24 -0500 Subject: [PATCH 319/320] small fix --- src/frontend/src/utils/task.utils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/utils/task.utils.ts b/src/frontend/src/utils/task.utils.ts index e79771b896..15e649324a 100644 --- a/src/frontend/src/utils/task.utils.ts +++ b/src/frontend/src/utils/task.utils.ts @@ -81,6 +81,10 @@ export const taskPriorityColor = (task: Task) => { }; export const getOverdueTasks = (tasks: Task[]) => { - const overdueTasks = new Set(tasks.filter((task) => daysOverdue(new Date(task.deadline)) > 0)); + const overdueTasks = new Set( + tasks.filter((task) => { + return task.deadline && daysOverdue(task.deadline) > 0; + }) + ); return [...overdueTasks]; }; From 00c220e14dff7df5bf2d867f7597c905bf978a4f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 3 Jan 2025 22:49:40 -0500 Subject: [PATCH 320/320] mistake --- src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx index fdc80c595f..c760cdc8da 100644 --- a/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx +++ b/src/frontend/src/pages/HomePage/components/DesignReviewCard.tsx @@ -7,7 +7,7 @@ import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; import { LocationOnOutlined, Computer } from '@mui/icons-material'; import { useHistory } from 'react-router-dom'; import { NERButton } from '../../../components/NERButton'; -import { meetingStartTimePipe } from '../../../../../backend/src/utils/design-reviews.utils'; +import { meetingStartTimePipe } from '../../../utils/pipes'; import { timezoneOffset } from '../../../utils/datetime.utils'; interface DesignReviewProps {