From f8654c322f8b5f993375d0e24798f1e69960107a Mon Sep 17 00:00:00 2001 From: Muhammad Afaq Shuaib <78806673+AfaqShuaib09@users.noreply.github.com> Date: Mon, 29 May 2023 16:18:50 +0500 Subject: [PATCH 001/123] chore: add eslint unused import plugin to projects seperately (#425) --- apps/backoffice-v2/package.json | 1 + packages/common/package.json | 1 + packages/config/eslintrc.base.cjs | 10 +++++++++- packages/rules-engine/package.json | 1 + packages/workflow-core/package.json | 1 + sdks/web-ui-sdk/package.json | 1 + sdks/workflow-browser-sdk/package.json | 1 + sdks/workflow-node-sdk/package.json | 1 + services/workflows-service/package.json | 1 + websites/docs/package.json | 1 + 10 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 4bb167f89a..9c2d78be49 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -112,6 +112,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-unused-imports" : "^2.0.0", "postcss": "^8.4.14", "prettier": "^2.8.0", "prettier-plugin-tailwindcss": "^0.2.1", diff --git a/packages/common/package.json b/packages/common/package.json index b2b2349cec..1663bf6f07 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -54,6 +54,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.0.2", "eslint-plugin-import": "^2.22.0", + "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", "prettier": "^2.1.1", "rimraf": "^4.1.2", diff --git a/packages/config/eslintrc.base.cjs b/packages/config/eslintrc.base.cjs index e503353380..f6936a1aa1 100644 --- a/packages/config/eslintrc.base.cjs +++ b/packages/config/eslintrc.base.cjs @@ -13,5 +13,13 @@ module.exports = { env: { es6: true, }, - plugins: ['@typescript-eslint'], + plugins: ['@typescript-eslint', 'unused-imports'], + rules: { + 'no-unused-vars': 'off', // We use the unused-imports plugin instead + 'unused-imports/no-unused-imports': 'error', + 'unused-imports/no-unused-vars': [ + 'warn', + { vars: 'all', args: 'after-used' }, + ], + }, }; diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 67034c1b35..15e70fa985 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -46,6 +46,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.0.2", "eslint-plugin-import": "^2.22.0", + "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", "prettier": "^2.1.1", "rollup": "2.70.2", diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 0296388cb9..e7945a25f7 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -54,6 +54,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.0.2", "eslint-plugin-import": "^2.22.0", + "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", "plugin-babel": "link:@types/@rollup/plugin-babel", "plugin-terser": "link:@types/@rollup/plugin-terser", diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 637372a286..9aebd408b1 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -74,6 +74,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-storybook": "^0.6.6", "eslint-plugin-svelte3": "^4.0.0", + "eslint-plugin-unused-imports": "^2.0.0", "jsdom": "^20.0.2", "postcss": "^8.4.18", "prettier": "^2.7.1", diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 93eb281e24..348a36f315 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -56,6 +56,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.0.2", "eslint-plugin-import": "^2.22.0", + "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", "jsdom": "^20.0.2", "msw": "^1.1.0", diff --git a/sdks/workflow-node-sdk/package.json b/sdks/workflow-node-sdk/package.json index f0cf1df3e8..e7f307e6d0 100644 --- a/sdks/workflow-node-sdk/package.json +++ b/sdks/workflow-node-sdk/package.json @@ -47,6 +47,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-functional": "^3.0.2", "eslint-plugin-import": "^2.22.0", + "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", "prettier": "^2.1.1", "rollup": "2.70.2", diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 4907e5c3fb..afcb9ea3e8 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -81,6 +81,7 @@ "eslint-config-prettier": "^8.7.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-import": "^2.27.5", + "eslint-plugin-unused-imports": "^2.0.0", "jest": "27.0.6", "jest-mock-extended": "^2.0.4", "prettier": "^2.8.4", diff --git a/websites/docs/package.json b/websites/docs/package.json index 890c07d9f7..144c02e96c 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -39,6 +39,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-config-standard-with-typescript": "^23.0.0", "eslint-plugin-astro": "^0.21.0", + "eslint-plugin-unused-imports": "^2.0.0", "html-escaper": "^3.0.3", "prettier": "^2.8.0", "prettier-plugin-astro": "^0.7.0" From 40b94370059321e5b7028c5f39c992f14c092d72 Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Tue, 6 Jun 2023 15:31:13 +0300 Subject: [PATCH 002/123] feat(generated assignee-asigned-guard): assign endpoint (#451) * feat(generated assignee-asigned-guard): generated assignee-asigned-guard for document desition updat generated assignee-asigned-guard for document desition updating * feat: added AssigneeAsignedGuard and assign endpoint * removed unnecessary changes * fixed comments and reverted unnecessary changes * updated wassigneed guard name * updated class validator on assgin workflow and query * reverted package json * feat(merged with dev): merged with dev --------- Co-authored-by: blokh <danielb@ballerine.com> --- .../src/domains/workflows/fetchers.ts | 16 +++++++++++++ .../useAssignWorkflowMutation.tsx | 4 ++-- .../auth/assignee-asigned-guard.service.ts | 16 +++++++++++++ .../src/filter/dtos/temp-zod-schemas.ts | 10 ++++++-- .../src/workflow/dtos/workflow-assignee-id.ts | 7 ++++++ .../workflow/workflow.controller.internal.ts | 23 +++++++++++++++++++ .../src/workflow/workflow.service.ts | 11 ++++++++- 7 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 services/workflows-service/src/auth/assignee-asigned-guard.service.ts create mode 100644 services/workflows-service/src/workflow/dtos/workflow-assignee-id.ts diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index 1c01193299..06657452f9 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -48,6 +48,22 @@ export const fetchUpdateWorkflowById = async ({ return handleZodError(error, workflow); }; +export const updateWorkflowSetAssignById = async ({ + workflowId, + body, +}: IWorkflowId & { + body: { assigneeId: string | null; isAssignedToMe?: boolean }; +}) => { + const [workflow, error] = await apiClient({ + endpoint: `workflows/assign/${workflowId}`, + method: Method.PATCH, + body, + schema: z.any(), + }); + + return handleZodError(error, workflow); +}; + export const fetchWorkflowEvent = async ({ workflowId, body, diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useAssignWorkflowMutation/useAssignWorkflowMutation.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useAssignWorkflowMutation/useAssignWorkflowMutation.tsx index ab23e230fc..9adabeffc0 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useAssignWorkflowMutation/useAssignWorkflowMutation.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useAssignWorkflowMutation/useAssignWorkflowMutation.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import toast from 'react-hot-toast'; import { t } from 'i18next'; -import { fetchUpdateWorkflowById } from '../../../fetchers'; +import { updateWorkflowSetAssignById } from '../../../fetchers'; import { useUsersQuery } from '../../../../users/hooks/queries/useUsersQuery/useUsersQuery'; const getToastActionAndContext = ({ @@ -29,7 +29,7 @@ export const useAssignWorkflowMutation = ({ workflowRuntimeId }: { workflowRunti return useMutation({ mutationFn: ({ assigneeId }: { assigneeId: string | null; isAssignedToMe: boolean }) => - fetchUpdateWorkflowById({ + updateWorkflowSetAssignById({ workflowId: workflowRuntimeId, body: { assigneeId, diff --git a/services/workflows-service/src/auth/assignee-asigned-guard.service.ts b/services/workflows-service/src/auth/assignee-asigned-guard.service.ts new file mode 100644 index 0000000000..a3dd60ab0e --- /dev/null +++ b/services/workflows-service/src/auth/assignee-asigned-guard.service.ts @@ -0,0 +1,16 @@ +import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; +import { Request } from 'express'; +import { WorkflowService } from '@/workflow/workflow.service'; + +@Injectable() +export class WorkflowAssigneeGuard implements CanActivate { + constructor(private service: WorkflowService) {} + async canActivate(context: ExecutionContext) { + const request = context.switchToHttp().getRequest<Request>(); + const workflowId = request.params.id; + const requestingUserId = request.user!.id; + const workflowRuntime = await this.service.getWorkflowRuntimeDataById(workflowId as string); + + return workflowRuntime.assigneeId === requestingUserId; + } +} diff --git a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts index 186983dc0a..46d94073c0 100644 --- a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts +++ b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts @@ -480,11 +480,17 @@ export const BusinessFilterSchema = FilterSchema.extend({ query: z .object({ select: BusinessSelectSchema.strict() - .refine(v => Object.keys(v).length > 0, 'At least one `select` field must be provided') + .refine( + value => Object.keys(value).length > 0, + 'At least one `select` field must be provided', + ) .optional(), where: BusinessWhereInputSchema.strict().optional(), }) - .refine(v => v.select || v.where, 'At least `query.select` or `query.where` must be provided'), + .refine( + value => value.select || value.where, + 'At least `query.select` or `query.where` must be provided', + ), }); export const BusinessFilterCreateSchema = BusinessFilterSchema.omit({ diff --git a/services/workflows-service/src/workflow/dtos/workflow-assignee-id.ts b/services/workflows-service/src/workflow/dtos/workflow-assignee-id.ts new file mode 100644 index 0000000000..ddae23e1b0 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/workflow-assignee-id.ts @@ -0,0 +1,7 @@ +import { IsOptional, IsString, ValidateIf } from 'class-validator'; + +export class WorkflowAssigneeId { + @IsString() + @ValidateIf((object, value) => value !== null) // no nullable class validator - skip validation if null + assigneeId!: string | null; +} diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.ts b/services/workflows-service/src/workflow/workflow.controller.internal.ts index e3f275c923..3eba69456b 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.ts @@ -21,6 +21,9 @@ import { Request } from 'express'; import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find-many-args'; import { WorkflowDefinitionUpdateInput } from '@/workflow/dtos/workflow-definition-update-input'; import { enrichWorkflowRuntimeData } from './enrich-workflow-runtime-data'; +import { UseGuards } from '@nestjs/common'; +import { WorkflowAssigneeGuard } from '@/auth/assignee-asigned-guard.service'; +import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; @swagger.ApiTags('internal/workflows') @common.Controller('internal/workflows') @@ -105,6 +108,7 @@ export class WorkflowControllerInternal { @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @UseGuards(WorkflowAssigneeGuard) async updateById( @common.Param() params: WorkflowDefinitionWhereUniqueInput, @common.Body() data: WorkflowDefinitionUpdateInput, @@ -119,6 +123,25 @@ export class WorkflowControllerInternal { } } + // PATCH /workflows/assign/:id + @common.Patch('/assign/:id') + @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) + @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + async assignWorkflowById( + @common.Param() params: WorkflowDefinitionWhereUniqueInput, + @common.Body() data: WorkflowAssigneeId, + ): Promise<WorkflowRuntimeData> { + try { + return await this.service.assignWorkflowToUser(params.id, data); + } catch (error) { + if (isRecordNotFoundError(error)) { + throw new errors.NotFoundException(`No resource was found for ${JSON.stringify(params)}`); + } + throw error; + } + } + @nestAccessControl.UseRoles({ resource: 'Workflow', action: 'delete', diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 70fb953106..8f845b0381 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -42,7 +42,7 @@ import { AwsS3FileConfig } from '@/providers/file/file-provider/aws-s3-file.conf import { TFileServiceProvider } from '@/providers/file/types'; import { updateDocuments } from '@/workflow/update-documents'; import { getDocumentId } from '@/documents/utils'; - +import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; import { ConfigSchema, WorkflowConfig } from './schemas/zod-schemas'; type TEntityId = string; @@ -294,6 +294,15 @@ export class WorkflowService { return updateResult; } + async assignWorkflowToUser(workflowRuntimeId: string, { assigneeId }: WorkflowAssigneeId) { + const updatedWorkflowRuntime = await this.workflowRuntimeDataRepository.updateById( + workflowRuntimeId, + { data: { assigneeId: assigneeId } }, + ); + + return updatedWorkflowRuntime; + } + private async getCorrelationIdFromWorkflow(runtimeData: WorkflowRuntimeData) { let correlationId: string; if (runtimeData.businessId) { From e627d717b286d8b66b0dcf706f7d6de8b91b87c8 Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Tue, 6 Jun 2023 15:44:45 +0300 Subject: [PATCH 003/123] Blokh/feat/backoffice image (#505) * feat(added env of image url): added env of image url which is fetched by env var * feat: minor refactoring * fixed minor bugs * fixed minor bugs --- .../src/common/components/organisms/Header/Header.Logo.tsx | 7 ++++++- apps/backoffice-v2/src/common/env/schema.ts | 1 + .../src/pages/Entities/components/Cases/Cases.tsx | 2 +- apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx | 3 ++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx index 00bd1ce002..fdab8dbb0a 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx @@ -1,6 +1,7 @@ import { FunctionComponent } from 'react'; import { BallerineLogo } from '../../atoms/icons'; import { Link } from 'react-router-dom'; +import { env } from '../../../env/env'; /** * @description {@link BallerineLogo} with navigation to "/" on click. @@ -13,7 +14,11 @@ export const Logo: FunctionComponent = () => { to={`/en`} className={`btn-ghost btn flex gap-x-3 text-2xl normal-case focus:outline-primary`} > - <BallerineLogo /> + {!!env.IMAGE_LOGO_URL ? ( + <img className={`h-20 w-40`} src={env.IMAGE_LOGO_URL} /> + ) : ( + <BallerineLogo /> + )} </Link> </h1> ); diff --git a/apps/backoffice-v2/src/common/env/schema.ts b/apps/backoffice-v2/src/common/env/schema.ts index 6064642dd0..8b2f603b06 100644 --- a/apps/backoffice-v2/src/common/env/schema.ts +++ b/apps/backoffice-v2/src/common/env/schema.ts @@ -16,4 +16,5 @@ export const EnvSchema = z.object({ .transform(v => v * 1000) .or(z.literal(false)) .catch(undefined), + IMAGE_LOGO_URL: z.string() }); diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index cd977e141a..5f33851798 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown dropdown-bottom dropdown-hover z-[60]"> + <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 56285a0150..eea3d4375c 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -22,6 +22,7 @@ import { FormItem } from '../../common/components/organisms/Form/Form.Item'; import { FormLabel } from '../../common/components/organisms/Form/Form.Label'; import { FormControl } from '../../common/components/organisms/Form/Form.Control'; import { FormMessage } from '../../common/components/organisms/Form/Form.Message'; +import { env } from '../../common/env/env'; export const SignIn: FunctionComponent = () => { const SignInSchema = z.object({ @@ -58,7 +59,7 @@ export const SignIn: FunctionComponent = () => { return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - <BallerineLogo /> + {!!env.IMAGE_LOGO_URL ? <img className={`w-40`} src={env.IMAGE_LOGO_URL} /> : <BallerineLogo />} </div> <Card className={`w-full max-w-lg`}> <CardHeader className={`mb-2 text-center text-4xl font-bold`}>Sign In</CardHeader> From 13a49245b31e9f0ecdfa95c14fd2b02c0fe589fe Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Tue, 6 Jun 2023 15:46:55 +0300 Subject: [PATCH 004/123] added logo url --- apps/backoffice-v2/src/common/env/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/common/env/schema.ts b/apps/backoffice-v2/src/common/env/schema.ts index 8b2f603b06..cd57f46c3a 100644 --- a/apps/backoffice-v2/src/common/env/schema.ts +++ b/apps/backoffice-v2/src/common/env/schema.ts @@ -16,5 +16,5 @@ export const EnvSchema = z.object({ .transform(v => v * 1000) .or(z.literal(false)) .catch(undefined), - IMAGE_LOGO_URL: z.string() + IMAGE_LOGO_URL: z.string().optional() }); From cecbc7f5120512eadef41bc5c773eb0cdf9bf417 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Tue, 6 Jun 2023 16:28:35 +0300 Subject: [PATCH 005/123] fix image logo by updating name to VITE_IMAGE_LOGO_URL --- .../src/common/components/organisms/Header/Header.Logo.tsx | 4 ++-- apps/backoffice-v2/src/common/env/schema.ts | 2 +- apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx index fdab8dbb0a..55d023d695 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Logo.tsx @@ -14,8 +14,8 @@ export const Logo: FunctionComponent = () => { to={`/en`} className={`btn-ghost btn flex gap-x-3 text-2xl normal-case focus:outline-primary`} > - {!!env.IMAGE_LOGO_URL ? ( - <img className={`h-20 w-40`} src={env.IMAGE_LOGO_URL} /> + {!!env.VITE_IMAGE_LOGO_URL ? ( + <img className={`h-20 w-40`} src={env.VITE_IMAGE_LOGO_URL} /> ) : ( <BallerineLogo /> )} diff --git a/apps/backoffice-v2/src/common/env/schema.ts b/apps/backoffice-v2/src/common/env/schema.ts index cd57f46c3a..ec80acf3e6 100644 --- a/apps/backoffice-v2/src/common/env/schema.ts +++ b/apps/backoffice-v2/src/common/env/schema.ts @@ -16,5 +16,5 @@ export const EnvSchema = z.object({ .transform(v => v * 1000) .or(z.literal(false)) .catch(undefined), - IMAGE_LOGO_URL: z.string().optional() + VITE_IMAGE_LOGO_URL: z.string().optional() }); diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index eea3d4375c..5b7b1cc3bb 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -59,7 +59,7 @@ export const SignIn: FunctionComponent = () => { return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - {!!env.IMAGE_LOGO_URL ? <img className={`w-40`} src={env.IMAGE_LOGO_URL} /> : <BallerineLogo />} + {!!env.VITE_IMAGE_LOGO_URL ? <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> : <BallerineLogo />} </div> <Card className={`w-full max-w-lg`}> <CardHeader className={`mb-2 text-center text-4xl font-bold`}>Sign In</CardHeader> From fb72c4500d7f8836a0999cf8a8107354d810302d Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 7 Jun 2023 16:54:51 +0300 Subject: [PATCH 006/123] refactor(db-schema): remove enduser unneccesary fields (#508) * refactor(db-schema): remove enduser unneccesary fields * feat(entities): add entities fields * fixes types * fixes types * fixes types --- .../migration.sql | 21 +++++++++++++++++++ .../workflows-service/prisma/schema.prisma | 15 +++++++------ services/workflows-service/scripts/seed.ts | 2 -- .../src/end-user/dtos/end-user-where-input.ts | 18 +++++++--------- .../src/filter/dtos/temp-zod-schemas.ts | 2 +- 5 files changed, 39 insertions(+), 19 deletions(-) create mode 100644 services/workflows-service/prisma/migrations/20230607122555_add_entity_fields/migration.sql diff --git a/services/workflows-service/prisma/migrations/20230607122555_add_entity_fields/migration.sql b/services/workflows-service/prisma/migrations/20230607122555_add_entity_fields/migration.sql new file mode 100644 index 0000000000..5be70b58cf --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230607122555_add_entity_fields/migration.sql @@ -0,0 +1,21 @@ +/* + Warnings: + + - You are about to drop the column `jsonData` on the `EndUser` table. All the data in the column will be lost. + - You are about to drop the column `verificationId` on the `EndUser` table. All the data in the column will be lost. + - Made the column `firstName` on table `EndUser` required. This step will fail if there are existing NULL values in that column. + - Made the column `lastName` on table `EndUser` required. This step will fail if there are existing NULL values in that column. + +*/ +-- AlterTable +ALTER TABLE "Business" ADD COLUMN "additionalInfo" JSONB, +ADD COLUMN "avatarUrl" TEXT, +ADD COLUMN "country" TEXT; + +-- AlterTable +ALTER TABLE "EndUser" DROP COLUMN "jsonData", +DROP COLUMN "verificationId", +ADD COLUMN "country" VARCHAR, +ADD COLUMN "nationalId" VARCHAR, +ALTER COLUMN "firstName" SET NOT NULL, +ALTER COLUMN "lastName" SET NOT NULL; diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index dbca4669a5..b3e8fc256f 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -44,20 +44,20 @@ enum ApprovalState { model EndUser { id String @id @default(cuid()) - correlationId String? @unique @db.VarChar - verificationId String? @db.VarChar + correlationId String? @unique @db.VarChar endUserType String? approvalState ApprovalState @default(NEW) stateReason String? @db.VarChar - jsonData Json? - firstName String? @db.VarChar - lastName String? @db.VarChar + firstName String @db.VarChar + lastName String @db.VarChar email String? @db.Text phone String? @db.VarChar + country String? @db.VarChar dateOfBirth DateTime? avatarUrl String? + nationalId String? @db.VarChar additionalInfo Json? workflowRuntimeData WorkflowRuntimeData[] @@ -93,6 +93,7 @@ model Business { companyName String // Official registered name of the business entity registrationNumber String? // Unique registration number assigned by the relevant authorities legalForm String? // Legal structure of the business entity, e.g., LLC, corporation, partnership + country String? countryOfIncorporation String? // Country where the business entity is incorporated dateOfIncorporation DateTime? // Date when the business entity was incorporated address String? // Registered address of the business entity @@ -106,6 +107,8 @@ model Business { numberOfEmployees Int? // Number of employees working for the business entity businessPurpose String? // Brief description of the business entity's purpose or main activities documents Json? // Collection of documents required for the KYB process, e.g., registration documents, financial statements + avatarUrl String? + additionalInfo Json? approvalState ApprovalState @default(NEW) // Current status of the KYB process for the business entity workflowRuntimeData WorkflowRuntimeData[] @@ -158,7 +161,7 @@ model WorkflowRuntimeData { workflowDefinitionId String workflowDefinitionVersion Int context Json - config Json? + config Json? // history state String? status WorkflowRuntimeDataStatus @default(active) diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 7afec76b9e..a2cd8507ed 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -604,11 +604,9 @@ async function seed(bcryptSalt: Salt) { select: { id: true, correlationId: true, - verificationId: true, endUserType: true, approvalState: true, stateReason: true, - jsonData: true, firstName: true, lastName: true, email: true, diff --git a/services/workflows-service/src/end-user/dtos/end-user-where-input.ts b/services/workflows-service/src/end-user/dtos/end-user-where-input.ts index 5fb429d97b..627d7e712f 100644 --- a/services/workflows-service/src/end-user/dtos/end-user-where-input.ts +++ b/services/workflows-service/src/end-user/dtos/end-user-where-input.ts @@ -48,20 +48,18 @@ export class EndUserWhereInput { stateReason?: StringNullableFilter; @ApiProperty({ - required: false, - type: StringNullableFilter, + required: true, + type: String, }) - @Type(() => StringNullableFilter) - @IsOptional() - firstName?: StringNullableFilter; + @Type(() => String) + firstName!: string; @ApiProperty({ - required: false, - type: StringNullableFilter, + required: true, + type: String, }) - @Type(() => StringNullableFilter) - @IsOptional() - lastName?: StringNullableFilter; + @Type(() => String) + lastName!: string; @ApiProperty({ required: false, diff --git a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts index 46d94073c0..70d78fd3d3 100644 --- a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts +++ b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts @@ -481,7 +481,7 @@ export const BusinessFilterSchema = FilterSchema.extend({ .object({ select: BusinessSelectSchema.strict() .refine( - value => Object.keys(value).length > 0, + (value: any) => Object.keys(value).length > 0, 'At least one `select` field must be provided', ) .optional(), From 39b099bdbf310df5c392e213fbcda0a35d1c24ba Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 7 Jun 2023 17:46:52 +0300 Subject: [PATCH 007/123] fixed document props update --- .../EditableDetails/EditableDetails.tsx | 12 +++-- services/workflows-service/scripts/seed.ts | 52 ++++++++++++++++++- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 5c4f39ba65..0fafda66f0 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -64,11 +64,15 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ return { ...document, - properties: Object.keys(document?.properties).reduce((acc, curr) => { - acc[curr] = data?.[curr]; + properties: Object.keys(document?.propertiesSchema?.properties ?? {}).reduce( + (acc, curr) => { + if (!data?.[curr]) return acc; + acc[curr] = data?.[curr]; - return acc; - }, {}), + return acc; + }, + {}, + ), }; }), }; diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index a2cd8507ed..8ac22d2c7b 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -596,6 +596,56 @@ async function seed(bcryptSalt: Salt) { }, }); + await client.filter.create({ + data: { + entity: 'individuals', + name: 'Onboarding - Individuals', + query: { + select: { + id: true, + correlationId: true, + endUserType: true, + approvalState: true, + stateReason: true, + firstName: true, + lastName: true, + email: true, + phone: true, + dateOfBirth: true, + avatarUrl: true, + additionalInfo: true, + createdAt: true, + updatedAt: true, + workflowRuntimeData: { + select: { + id: true, + status: true, + assigneeId: true, + createdAt: true, + workflowDefinition: { + select: { + id: true, + name: true, + }, + }, + }, + }, + }, + where: { + workflowRuntimeData: { + some: { + workflowDefinition: { + is: { + id: 'manualMachineId', + }, + }, + }, + }, + }, + }, + }, + }); + await client.filter.create({ data: { entity: 'individuals', @@ -636,7 +686,7 @@ async function seed(bcryptSalt: Salt) { some: { workflowDefinition: { is: { - id: manualMachineId, + id: 'risk-score-improvement-dev', }, }, }, From 969a6559498673fccb26d142143f06bf7ba50ca3 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 7 Jun 2023 18:38:43 +0300 Subject: [PATCH 008/123] backoffice: fixed addtional info on entity --- .../Entity/hooks/useEntity/useEntity.tsx | 13 +++- .../schemas/default-context-schema.json | 75 +++++++++++++++---- 2 files changed, 71 insertions(+), 17 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 9de049181a..07144ba793 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -14,6 +14,14 @@ const convertSnakeCaseToTitleCase = (input: string): string => .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); +function omit(obj, ...props) { + const result = { ...obj }; + props.forEach(function (prop) { + delete result[prop]; + }); + return result; +} + export const useEntity = () => { const { entityId } = useParams(); const { data: entity, isLoading } = useEntityWithWorkflowQuery(entityId); @@ -155,7 +163,10 @@ export const useEntity = () => { type: 'details', value: { title: `${toStartCase(contextEntity?.type)} Information`, - data: Object.entries(contextEntity?.data ?? {})?.map(([title, value]) => ({ + data: [ + ...Object.entries(omit(contextEntity?.data, 'additionalInfo') ?? {}), + ...Object.entries(contextEntity?.data?.additionalInfo ?? {}), + ]?.map(([title, value]) => ({ title, value, type: 'string', diff --git a/services/workflows-service/src/workflow/schemas/default-context-schema.json b/services/workflows-service/src/workflow/schemas/default-context-schema.json index e272bfc552..6718a06079 100644 --- a/services/workflows-service/src/workflow/schemas/default-context-schema.json +++ b/services/workflows-service/src/workflow/schemas/default-context-schema.json @@ -6,13 +6,19 @@ "type": "object", "properties": { "type": { - "enum": ["individual", "business"] + "enum": [ + "individual", + "business" + ] }, "data": { - "type": "object" - }, - "additionalDetails": { - "type": "object" + "type": "object", + "properties": { + "additionalInfo": { + "type": "object" + } + }, + "additionalProperties": true }, "ballerineEntityId": { "type": "string" @@ -21,13 +27,19 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "anyOf": [ { - "required": ["id"] + "required": [ + "id" + ] }, { - "required": ["ballerineEntityId"] + "required": [ + "ballerineEntityId" + ] } ], "additionalProperties": false @@ -62,7 +74,9 @@ "type": "object" } }, - "required": ["country"], + "required": [ + "country" + ], "additionalProperties": false }, "issuingVersion": { @@ -73,7 +87,13 @@ "properties": { "status": { "type": "string", - "enum": ["new", "pending", "revision", "approved", "rejected"] + "enum": [ + "new", + "pending", + "revision", + "approved", + "rejected" + ] }, "rejectionReason": { "anyOf": [ @@ -125,14 +145,24 @@ }, "provider": { "type": "string", - "enum": ["gcs", "http", "stream", "base64", "ftp"] + "enum": [ + "gcs", + "http", + "stream", + "base64", + "ftp" + ] }, "uri": { "type": "string", "format": "uri" }, "type": { - "enum": ["pdf", "png", "jpg"] + "enum": [ + "pdf", + "png", + "jpg" + ] }, "data": { "type": "string" @@ -150,7 +180,11 @@ "additionalProperties": false } }, - "required": ["provider", "uri", "type"], + "required": [ + "provider", + "uri", + "type" + ], "additionalProperties": false } }, @@ -172,10 +206,19 @@ } } }, - "required": ["category", "type", "issuer", "pages", "properties"], + "required": [ + "category", + "type", + "issuer", + "pages", + "properties" + ], "additionalProperties": false } } }, - "required": ["entity", "documents"] -} + "required": [ + "entity", + "documents" + ] +} \ No newline at end of file From 8d4ef047491bd1d7e67ee156011af73720065cb4 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 7 Jun 2023 19:24:57 +0300 Subject: [PATCH 009/123] add ajv keywords --- pnpm-lock.yaml | 271 +++++------------- services/workflows-service/package.json | 3 +- .../schemas/default-context-schema.json | 18 +- .../src/workflow/workflow.service.ts | 2 + 4 files changed, 94 insertions(+), 200 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07e0bfdf4d..63bf203fd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -248,7 +248,7 @@ importers: version: 10.4.14(postcss@8.4.21) daisyui: specifier: ^2.46.1 - version: 2.51.5(autoprefixer@10.4.14)(postcss@8.4.21) + version: 2.51.5(autoprefixer@10.4.14)(postcss@8.4.21)(ts-node@10.9.1) eslint: specifier: 8.22.0 version: 8.22.0 @@ -257,7 +257,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -281,7 +281,7 @@ importers: version: 7.0.0-rc.10 tailwindcss: specifier: ^3.2.4 - version: 3.3.1(postcss@8.4.21) + version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) typescript: specifier: ^4.9.3 version: 4.9.5 @@ -1250,6 +1250,9 @@ importers: '@typescript-eslint/parser': specifier: ^5.54.1 version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + ajv-keywords: + specifier: ^5.1.0 + version: 5.1.0(ajv@8.12.0) dotenv: specifier: ^16.0.3 version: 16.0.3 @@ -2693,7 +2696,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -2716,7 +2719,7 @@ packages: '@babel/traverse': 7.21.4 '@babel/types': 7.21.4 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -2857,7 +2860,7 @@ packages: '@babel/core': 7.21.4 '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.2 semver: 6.3.0 @@ -4947,7 +4950,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.4 '@babel/types': 7.21.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5869,7 +5872,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.5.1 globals: 13.20.0 ignore: 5.2.4 @@ -6054,7 +6057,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6622,7 +6625,7 @@ packages: '@open-draft/until': 1.0.3 '@types/debug': 4.1.7 '@xmldom/xmldom': 0.8.7 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) headers-polyfill: 3.1.2 outvariant: 1.4.0 strict-event-emitter: 0.2.8 @@ -7677,7 +7680,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2 + '@rollup/pluginutils': 5.0.2(rollup@2.70.2) estree-walker: 2.0.2 magic-string: 0.27.0 dev: false @@ -7717,20 +7720,6 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.2: - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.0 - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: false - /@rollup/pluginutils@5.0.2(rollup@2.70.2): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} @@ -8385,15 +8374,16 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.0.18: - resolution: {integrity: sha512-rpwBH5ANdPnugS6+7xG9qHSoS+aPSEnBxDKsONWFubfMTTXQuFkf/793rBbxGkoINdqh8kSdKOM2rIty6e9cmQ==} + /@storybook/channel-postmessage@7.1.0-alpha.29: + resolution: {integrity: sha512-+idcuszAPD3yavbQJ359Ufz/usXgydCif7aXmOfeZNGf/sukTbLcAAYpwlks6VbIdCn9TbJgubzCRPGQbukLGA==} dependencies: - '@storybook/channels': 7.0.18 - '@storybook/client-logger': 7.0.18 - '@storybook/core-events': 7.0.18 + '@storybook/channels': 7.1.0-alpha.29 + '@storybook/client-logger': 7.1.0-alpha.29 + '@storybook/core-events': 7.1.0-alpha.29 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 + tiny-invariant: 1.3.1 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -8417,8 +8407,8 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.0.18: - resolution: {integrity: sha512-rkA7ea0M3+dWS+71iHJdiZ5R2QuIdiVg0CgyLJHDagc1qej7pEVNhMWtppeq+X5Pwp9nkz8ZTQ7aCjTf6th0/A==} + /@storybook/channels@7.1.0-alpha.29: + resolution: {integrity: sha512-CK6A1DElBM+6lUr18izKQwUFFA9s6kibeWEAgZm/3dhKQm5vpz7ZxbaqxTcT2qAwuJYaNIA8ZGteZJNJ5puzog==} dev: true /@storybook/cli@7.0.0-rc.10: @@ -8483,8 +8473,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.0.18: - resolution: {integrity: sha512-uKgFdVedYoRDZBVrE1IBdWNHDFln1IxWEeI+7ZiNSQwREG9swHpU5Fa8DceclM/oLjJRuzG1jFzv+XZY8894+Q==} + /@storybook/client-logger@7.1.0-alpha.29: + resolution: {integrity: sha512-Apn48tKfcRYGBsXqFUjjY9zeOgxKmAC82AQQ0vNUC4z3dBSSU15rAnrH+V8cnbisWmtnWAlFNKLP0bJzP2b3cw==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -8588,8 +8578,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.0.18: - resolution: {integrity: sha512-7gxHBQDezdKOeq/u1LL80Bwjfcwsv7XOS3yWQElcgqp+gLaYB6OwwgtkCB2yV6a6l4nep9IdPWE8G3TxIzn9xw==} + /@storybook/core-events@7.1.0-alpha.29: + resolution: {integrity: sha512-e5gsuYezn97Y01RHf7Tz2L4upZfXm+CehcaU5FHB4exW4Rf+h93eV22Ic6vOxgu+0c2P9h+pQKDInyz9yoTBXQ==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -8725,14 +8715,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.0.18: - resolution: {integrity: sha512-fyQxeuVC0H+w3oyTuByE95xnAQ+l/WhUBVkHV2X+PWjg9vg9Y9JmrbNWynlvz5HLFlsY3qAWJh+ciVRVSvY5Jw==} + /@storybook/instrumenter@7.1.0-alpha.29: + resolution: {integrity: sha512-KGLGsb82OJnBIonTbVttMx1G/e/ZwKlI4fYZUKZngi6mS3L5fE7fDmSl+e6SKhVi3svX40MOuqzyu5XXvoIr6w==} dependencies: - '@storybook/channels': 7.0.18 - '@storybook/client-logger': 7.0.18 - '@storybook/core-events': 7.0.18 + '@storybook/channels': 7.1.0-alpha.29 + '@storybook/client-logger': 7.1.0-alpha.29 + '@storybook/core-events': 7.1.0-alpha.29 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.18 + '@storybook/preview-api': 7.1.0-alpha.29 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -8801,16 +8791,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.0.18: - resolution: {integrity: sha512-xxtC0gPGMn/DbwvS4ZuJaBwfFNsjUCf0yLYHFrNe6fxncbvcLZ550RuyUwYuIRfsiKrlgfa3QmmCa4JM/JesHQ==} + /@storybook/preview-api@7.1.0-alpha.29: + resolution: {integrity: sha512-rapTmuN2hRpdx13l0PTaAYVyLDk6H91VHTRsfoXdmq1lwsGPEdXXEA1t/KkeNbG/P4kx9z7t4TLX6fF3lZY43w==} dependencies: - '@storybook/channel-postmessage': 7.0.18 - '@storybook/channels': 7.0.18 - '@storybook/client-logger': 7.0.18 - '@storybook/core-events': 7.0.18 + '@storybook/channel-postmessage': 7.1.0-alpha.29 + '@storybook/channels': 7.1.0-alpha.29 + '@storybook/client-logger': 7.1.0-alpha.29 + '@storybook/core-events': 7.1.0-alpha.29 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.0.18 + '@storybook/types': 7.1.0-alpha.29 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -8958,8 +8948,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.0.18 - '@storybook/instrumenter': 7.0.18 + '@storybook/client-logger': 7.1.0-alpha.29 + '@storybook/instrumenter': 7.1.0-alpha.29 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -9002,10 +8992,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.0.18: - resolution: {integrity: sha512-qPop2CbvmX42/BX29YT9jIzW2TlMcMjAE+KCpcKLBiD1oT5DJ1fhMzpe6RW9HkMegkBxjWx54iamN4oHM/pwcQ==} + /@storybook/types@7.1.0-alpha.29: + resolution: {integrity: sha512-cS+zCWqcE/F5O7efIfzz2VcWaWtqrnIz27YbCdoVPpEjQrQRQsOjTdBQNXIxFVuQUrs5C6imnOMrR/fw1oCXag==} dependencies: - '@storybook/channels': 7.0.18 + '@storybook/channels': 7.1.0-alpha.29 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -9918,7 +9908,7 @@ packages: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/type-utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 @@ -9989,7 +9979,7 @@ packages: '@typescript-eslint/scope-manager': 5.58.0 '@typescript-eslint/types': 5.58.0 '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 typescript: 4.9.5 transitivePeerDependencies: @@ -10044,7 +10034,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 @@ -10114,7 +10104,7 @@ packages: dependencies: '@typescript-eslint/types': 5.58.0 '@typescript-eslint/visitor-keys': 5.58.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.4.0 @@ -10595,7 +10585,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10636,6 +10626,15 @@ packages: ajv: 6.12.6 dev: true + /ajv-keywords@5.1.0(ajv@8.12.0): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: true + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -12433,7 +12432,7 @@ packages: type: 1.2.0 dev: true - /daisyui@2.51.5(autoprefixer@10.4.14)(postcss@8.4.21): + /daisyui@2.51.5(autoprefixer@10.4.14)(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-L05dRw0tasmz2Ha+10LhftEGLq4kaA8vRR/T0wDaXfHwqcgsf81jfXDJ6NlZ63Z7Rl1k3rj7UHs0l0p7CM3aYA==} peerDependencies: autoprefixer: ^10.0.2 @@ -12444,7 +12443,7 @@ packages: css-selector-tokenizer: 0.8.0 postcss: 8.4.21 postcss-js: 4.0.1(postcss@8.4.21) - tailwindcss: 3.3.1(postcss@8.4.21) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: true @@ -12516,17 +12515,6 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -12717,7 +12705,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -13254,7 +13242,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.17.16 transitivePeerDependencies: - supports-color @@ -13546,35 +13534,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-astro@0.21.1(eslint@8.38.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -13671,39 +13630,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) - has: 1.0.3 - is-core-module: 2.12.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-n@15.7.0(eslint@8.38.0): resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} engines: {node: '>=12.22.0'} @@ -13797,7 +13723,7 @@ packages: dependencies: fast-glob: 3.2.12 postcss: 8.4.21 - tailwindcss: 3.3.1(postcss@8.4.21) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) dev: false /eslint-scope@5.1.1: @@ -13864,7 +13790,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -15413,7 +15339,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -15423,7 +15349,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -19204,22 +19130,6 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.21 - /postcss-load-config@3.1.4(postcss@8.4.21): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.21 - yaml: 1.10.2 - /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -19508,7 +19418,7 @@ packages: engines: {node: '>=8.16.0'} dependencies: '@types/mime-types': 2.1.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -21468,43 +21378,9 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.3.1(postcss@8.4.21) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) dev: false - /tailwindcss@3.3.1(postcss@8.4.21): - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} - engines: {node: '>=12.13.0'} - hasBin: true - peerDependencies: - postcss: ^8.0.9 - dependencies: - arg: 5.0.2 - chokidar: 3.5.3 - color-name: 1.1.4 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.2.12 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.18.2 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.21 - postcss-import: 14.1.0(postcss@8.4.21) - postcss-js: 4.0.1(postcss@8.4.21) - postcss-load-config: 3.1.4(postcss@8.4.21) - postcss-nested: 6.0.0(postcss@8.4.21) - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.2 - sucrase: 3.32.0 - transitivePeerDependencies: - - ts-node - /tailwindcss@3.3.1(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} engines: {node: '>=12.13.0'} @@ -21538,7 +21414,6 @@ packages: sucrase: 3.32.0 transitivePeerDependencies: - ts-node - dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -21759,6 +21634,10 @@ packages: globalyzer: 0.1.0 globrex: 0.1.2 + /tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + dev: true + /tinybench@2.4.0: resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} dev: true @@ -22583,7 +22462,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 @@ -22646,7 +22525,7 @@ packages: vite: ^2.0.0||^3.0.0||^4.0.0 dependencies: '@rollup/plugin-strip': 3.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) kolorist: 1.7.0 sirv: 2.0.2 ufo: 1.1.1 @@ -22936,7 +22815,7 @@ packages: acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) local-pkg: 0.4.3 pathe: 1.1.0 picocolors: 1.0.0 diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 0b5da4314b..82e6bfc053 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -59,6 +59,7 @@ "accesscontrol": "^2.2.1", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0", "axios": "^1.4.0", "bcrypt": "5.1.0", "class-transformer": "0.5.1", @@ -115,4 +116,4 @@ "type-fest": "0.11.0", "typescript": "^4.9.3" } -} +} \ No newline at end of file diff --git a/services/workflows-service/src/workflow/schemas/default-context-schema.json b/services/workflows-service/src/workflow/schemas/default-context-schema.json index 6718a06079..0eb0aa1039 100644 --- a/services/workflows-service/src/workflow/schemas/default-context-schema.json +++ b/services/workflows-service/src/workflow/schemas/default-context-schema.json @@ -50,10 +50,18 @@ "type": "object", "properties": { "category": { - "type": "string" + "type": "string", + "transform": [ + "trim", + "toLowerCase" + ] }, "type": { - "type": "string" + "type": "string", + "transform": [ + "trim", + "toLowerCase" + ] }, "issuer": { "type": "object", @@ -65,7 +73,11 @@ "type": "string" }, "country": { - "type": "string" + "type": "string", + "transform": [ + "trim", + "toUpperCase" + ] }, "city": { "type": "string" diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 8f845b0381..e080a6857c 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -26,6 +26,7 @@ import { WorkflowEventEmitterService } from './workflow-event-emitter.service'; import { BusinessRepository } from '@/business/business.repository'; import Ajv, { Schema } from 'ajv'; import addFormats from 'ajv-formats'; +import addKeywords from 'ajv-keywords'; import { DefaultContextSchema } from './schemas/context'; import * as console from 'console'; import { TRemoteFileConfig, TS3BucketConfig } from '@/providers/file/types/files-types'; @@ -52,6 +53,7 @@ const ajv = new Ajv({ coerceTypes: true, }); addFormats(ajv, { formats: ['email', 'uri', 'date'] }); +addKeywords(ajv); export const ResubmissionReason = { BLURRY_IMAGE: 'BLURRY_IMAGE', From 32194e253ef8ba61d0e0ddb2f2bb18d35733b638 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 7 Jun 2023 19:35:13 +0300 Subject: [PATCH 010/123] update pnpm lock file --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63bf203fd8..b4c1a44836 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1135,6 +1135,9 @@ importers: ajv-formats: specifier: ^2.1.1 version: 2.1.1(ajv@8.12.0) + ajv-keywords: + specifier: ^5.1.0 + version: 5.1.0(ajv@8.12.0) axios: specifier: ^1.4.0 version: 1.4.0 @@ -1250,9 +1253,6 @@ importers: '@typescript-eslint/parser': specifier: ^5.54.1 version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) - ajv-keywords: - specifier: ^5.1.0 - version: 5.1.0(ajv@8.12.0) dotenv: specifier: ^16.0.3 version: 16.0.3 @@ -10633,7 +10633,7 @@ packages: dependencies: ajv: 8.12.0 fast-deep-equal: 3.1.3 - dev: true + dev: false /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} From c8762aa40360a2d3a2384cbd9942ece28010c043 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 8 Jun 2023 01:21:53 +0300 Subject: [PATCH 011/123] Create SECURITY.md (#513) --- SECURITY.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..183da331d9 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,15 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 0.x.x | :white_check_mark: | + +## Reporting a Vulnerability + +Send an email to: dev@ballerine.com +Or contact us on slack From db18f377102d272a154fa8f6a1e114b49d292fbd Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 8 Jun 2023 10:39:58 +0300 Subject: [PATCH 012/123] fix pdf view in backoffice --- .../src/pages/Entity/hooks/useEntity/useEntity.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 07144ba793..81e948f37d 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -47,8 +47,10 @@ export const useEntity = () => { avatarUrl: entity?.avatarUrl, workflow: entity?.workflow, }; + const octetToFileType = (base64: string, fileType: string) => base64?.replace(/application\/octet-stream/gi, fileType); + const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ workflowId: entity?.workflow?.runtimeDataId, @@ -147,7 +149,7 @@ export const useEntity = () => { }`, imageUrl: type === 'pdf' - ? octetToFileType(results[docIndex][pageIndex], type) + ? octetToFileType(results[docIndex][pageIndex], `application/${type}`) : results[docIndex][pageIndex], fileType: type, }), From 7ffca00c0a1910f37f5b153fa99d17d2df827641 Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Thu, 8 Jun 2023 11:02:50 +0300 Subject: [PATCH 013/123] fix(backoffice-v2): fixed height for image viewer - addresses how pdfs are displayed --- .../src/common/components/organisms/ImageViewer/ImageViewer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.tsx b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.tsx index ce9e252537..35774f9995 100644 --- a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.tsx @@ -32,7 +32,7 @@ export const ImageViewer: FunctionComponent<IImageViewerProps> & IImageViewerChi ...rest }) => { return ( - <div className={ctw(`flex flex-col items-center gap-y-8`, className)} {...rest}> + <div className={ctw(`flex h-full flex-col items-center gap-y-8`, className)} {...rest}> <Provider selectedImage={selectedImage} onSelectImage={onSelectImage}> {children} </Provider> From 2a651aaa621f1cf2df8e11e87a719d1102470f7b Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Thu, 8 Jun 2023 11:11:38 +0300 Subject: [PATCH 014/123] Blokh/feat/default case filter assignee (#480) * feat(user controller internal): generate endpoint for create user * updated the user creation + return values from the DB to be more secured * updated select placement * removed unnecessary return types * feat: merged with dev * format * generated pre-search-filter logic * feat: generate logic for onLoad to set default filters * navigateDefaultFilterParams refactoring * Update apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts --------- Co-authored-by: blokh <danielb@ballerine.com> Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../src/routes/Entities/pre-search-filters.ts | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts b/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts index dcf5528e65..b4f0712123 100644 --- a/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts +++ b/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts @@ -1,4 +1,5 @@ import { CaseStatus, State } from '../../common/enums'; +import { TAuthenticatedUser } from '../../domains/auth/types'; const sharedPreSearchFilters = { sortDir: 'desc' as const, @@ -7,24 +8,29 @@ const sharedPreSearchFilters = { search: '', } as const; -export const preSearchFiltersByKind = { - businesses: { - sortBy: 'caseCreatedAt' as const, - entity: 'businesses' as const, - filter: { - assigneeId: [], - caseStatus: [CaseStatus.ACTIVE], +export const generatePreSearchFiltersByEntity = async ( + entityType: string, + authenticatedUser: TAuthenticatedUser, +) => { + return { + businesses: { + sortBy: 'caseCreatedAt' as const, + entity: 'businesses' as const, + filter: { + assigneeId: [null, authenticatedUser!.id], + caseStatus: [CaseStatus.ACTIVE], + }, + ...sharedPreSearchFilters, }, - ...sharedPreSearchFilters, - }, - individuals: { - sortBy: 'caseCreatedAt' as const, - entity: 'individuals' as const, - filter: { - approvalState: [], - assigneeId: [], - caseStatus: [CaseStatus.ACTIVE], + individuals: { + sortBy: 'caseCreatedAt' as const, + entity: 'individuals' as const, + filter: { + approvalState: [], + assigneeId: [null, authenticatedUser.id], + caseStatus: [CaseStatus.ACTIVE], + }, + ...sharedPreSearchFilters, }, - ...sharedPreSearchFilters, - }, -} as const; + }; +}; From 527df400fde7cdda7a4fcbff0ef4a694f045b8c7 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 8 Jun 2023 13:25:17 +0300 Subject: [PATCH 015/123] update doc type (#515) * began udaating view interface logic * added moving to commons the schema of workflows + policies * feat(updated common version): updated commmon version * feat: updated common * common release * common release * common release * feat(update doc type): finished updating doc type finished updating doc type - missing id * feat(docs): add id * fixed picking category and type * merged with update by id document * updated editable on submit * fixes * feat: updated assign document id if doesn't have any * feat: merged with dev * removed unnecessary git ignore * removed unnecessary ts ignore * fix(dd): d * fix(d): d d * pnpm lock file --------- Co-authored-by: blokh <danielblokhi@gmail.com> --- .changeset/smart-lobsters-turn.md | 5 - apps/backoffice-v2/package.json | 4 +- apps/backoffice-v2/src/common/env/schema.ts | 2 +- .../useWorkflowQuery/useWorkflowQuery.tsx | 4 - .../Entity/components/Details/interfaces.ts | 1 + .../EditableDetails/EditableDetails.tsx | 89 +- .../components/EditableDetails/interfaces.ts | 1 + .../Entity/hooks/useEntity/useEntity.tsx | 92 +- .../src/pages/SignIn/SignIn.page.tsx | 6 +- packages/common/CHANGELOG.md | 16 + packages/common/package.json | 2 +- packages/common/src/countries/index.ts | 1249 +++++++++++++++++ packages/common/src/index.ts | 10 + .../common/src/schemas/documents/context.ts | 1 + .../documents}/default-context-page-schema.ts | 2 +- .../documents}/default-context-schema.json | 84 +- .../workflow}/documents/schemas/GH.ts | 35 +- .../workflow}/documents/schemas/index.ts | 12 +- .../documents/workflow/documents/types.ts | 5 + .../documents/workflow}/documents/utils.ts | 6 +- packages/common/src/schemas/index.ts | 139 +- packages/common/src/schemas/policy-schema.ts | 130 ++ pnpm-lock.yaml | 8 +- sdks/workflow-browser-sdk/CHANGELOG.md | 8 + sdks/workflow-browser-sdk/package.json | 4 +- services/workflows-service/CHANGELOG.md | 15 + services/workflows-service/package.json | 6 +- services/workflows-service/scripts/seed.ts | 14 +- .../workflows-service/src/documents/types.ts | 5 - .../events/document-changed-webhook-caller.ts | 18 +- .../src/workflow/assign-id-to-documents.ts | 12 + .../dtos/workflow-definition-update-input.ts | 2 - .../src/workflow/dtos/workflow-run.ts | 2 +- .../workflow/enrich-workflow-runtime-data.ts | 14 +- .../src/workflow/update-documents.test.ts | 2 +- .../src/workflow/update-documents.ts | 9 +- .../workflow-event-emitter.service.ts | 3 +- .../src/workflow/workflow.module.ts | 1 - .../src/workflow/workflow.service.ts | 7 +- 39 files changed, 1704 insertions(+), 321 deletions(-) delete mode 100644 .changeset/smart-lobsters-turn.md create mode 100644 packages/common/src/countries/index.ts rename services/workflows-service/src/workflow/schemas/context.d.ts => packages/common/src/schemas/documents/context.ts (99%) rename {services/workflows-service/src/workflow/schemas => packages/common/src/schemas/documents}/default-context-page-schema.ts (60%) rename {services/workflows-service/src/workflow/schemas => packages/common/src/schemas/documents}/default-context-schema.json (75%) rename {services/workflows-service/src => packages/common/src/schemas/documents/workflow}/documents/schemas/GH.ts (92%) rename {services/workflows-service/src => packages/common/src/schemas/documents/workflow}/documents/schemas/index.ts (63%) create mode 100644 packages/common/src/schemas/documents/workflow/documents/types.ts rename {services/workflows-service/src => packages/common/src/schemas/documents/workflow}/documents/utils.ts (57%) create mode 100644 packages/common/src/schemas/policy-schema.ts delete mode 100644 services/workflows-service/src/documents/types.ts create mode 100644 services/workflows-service/src/workflow/assign-id-to-documents.ts diff --git a/.changeset/smart-lobsters-turn.md b/.changeset/smart-lobsters-turn.md deleted file mode 100644 index 3f8c2599ec..0000000000 --- a/.changeset/smart-lobsters-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@ballerine/common': minor ---- - -added error with name validation diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 89e345b063..8fd60779f0 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -47,8 +47,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "^0.4.3", - "@ballerine/workflow-browser-sdk": "^0.4.3", + "@ballerine/common": "^0.5.1", + "@ballerine/workflow-browser-sdk": "^0.4.4", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/apps/backoffice-v2/src/common/env/schema.ts b/apps/backoffice-v2/src/common/env/schema.ts index ec80acf3e6..535e273a07 100644 --- a/apps/backoffice-v2/src/common/env/schema.ts +++ b/apps/backoffice-v2/src/common/env/schema.ts @@ -16,5 +16,5 @@ export const EnvSchema = z.object({ .transform(v => v * 1000) .or(z.literal(false)) .catch(undefined), - VITE_IMAGE_LOGO_URL: z.string().optional() + VITE_IMAGE_LOGO_URL: z.string().optional(), }); diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx index f9e097161e..5eb8402169 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx @@ -23,10 +23,6 @@ export const useWorkflowQuery = ({ workflowId }: { workflowId: string }) => { workflowContext: { machineContext: { ...workflowRuntimeData?.context, - documents: workflowRuntimeData?.context?.documents?.map(document => ({ - ...document, - id: `${document?.category}-${document?.type}-${document?.issuer?.country}`.toLowerCase(), - })), }, state: workflowRuntimeData?.state ?? definition?.initial, }, diff --git a/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts index b4e3d52a19..5a03daaeae 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts @@ -10,6 +10,7 @@ export interface IDetailsProps { format?: string; pattern?: string; value: unknown; + dropdownOptions?: Array<{ label: string; value: string }>; }>; }; } diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 0fafda66f0..dfa507baae 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -14,6 +14,11 @@ import { FormItem } from '../../../../common/components/organisms/Form/Form.Item import { FormLabel } from '../../../../common/components/organisms/Form/Form.Label'; import { FormControl } from '../../../../common/components/organisms/Form/Form.Control'; import { FormMessage } from '../../../../common/components/organisms/Form/Form.Message'; +import { SelectItem } from '../../../../common/components/atoms/Select/Select.Item'; +import { SelectContent } from '../../../../common/components/atoms/Select/Select.Content'; +import { SelectTrigger } from '../../../../common/components/atoms/Select/Select.Trigger'; +import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; +import { Select } from '../../../../common/components/atoms/Select/Select'; export const EditableDetails: FunctionComponent<IEditableDetails> = ({ data, @@ -61,18 +66,21 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ const context = { documents: documents?.map(document => { if (document?.id !== valueId) return document; + const properties = Object.keys(document?.propertiesSchema?.properties ?? {}).reduce( + (acc, curr) => { + if (!data?.[curr]) return acc; + acc[curr] = data?.[curr]; + + return acc; + }, + {}, + ); return { ...document, - properties: Object.keys(document?.propertiesSchema?.properties ?? {}).reduce( - (acc, curr) => { - if (!data?.[curr]) return acc; - acc[curr] = data?.[curr]; - - return acc; - }, - {}, - ), + type: data.type, + category: data.category, + properties: properties, }; }), }; @@ -93,7 +101,7 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ 'grid-cols-3': id === 'entity-details', })} > - {data?.map(({ title, isEditable, type, format, pattern, value }) => + {data?.map(({ title, isEditable, type, format, pattern, value, dropdownOptions }) => isDecisionComponent && !value ? null : ( <FormField key={title} @@ -103,26 +111,47 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ <FormItem> <FormLabel>{toStartCase(camelCaseToSpace(title))}</FormLabel> <FormControl> - <Input - type={!format ? (type === 'string' ? 'text' : type) : format} - disabled={!isEditable} - className={ctw( - `p-1 disabled:cursor-auto disabled:border-none disabled:bg-background disabled:opacity-100`, - { - 'font-bold text-success': isDecisionPositive( - isDecisionComponent, - value, - ), - 'font-bold text-destructive': isDecisionNegative( - isDecisionComponent, - value, - ), - }, - )} - pattern={pattern} - autoComplete={'off'} - {...field} - /> + {dropdownOptions ? ( + <Select + disabled={!isEditable} + onValueChange={field.onChange} + defaultValue={field.value} + > + <SelectTrigger className="w-full"> + <SelectValue /> + </SelectTrigger> + <SelectContent> + {dropdownOptions?.map(({ label, value }) => { + return ( + <SelectItem key={value} value={value}> + {label} + </SelectItem> + ); + })} + </SelectContent> + </Select> + ) : ( + <Input + type={!format ? (type === 'string' ? 'text' : type) : format} + disabled={!isEditable} + className={ctw( + `p-1 disabled:cursor-auto disabled:border-none disabled:bg-background disabled:opacity-100`, + { + 'font-bold text-success': isDecisionPositive( + isDecisionComponent, + value, + ), + 'font-bold text-destructive': isDecisionNegative( + isDecisionComponent, + value, + ), + }, + )} + pattern={pattern} + autoComplete={'off'} + {...field} + /> + )} </FormControl> <FormMessage /> </FormItem> diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts index 0847c4cda6..ecae64495c 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts @@ -6,6 +6,7 @@ export interface IEditableDetails { type: string; format?: string; pattern?: string; + dropdownOptions?: Array<{ label: string; value: string }>; }>; valueId: string; id: string; diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 81e948f37d..d1b179c179 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -7,6 +7,7 @@ import { useCaseState } from '../../components/Case/hooks/useCaseState/useCaseSt import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; import { components } from './components'; +import { getDocumentsByCountry } from '@ballerine/common/src/schemas/documents/workflow/documents/schemas/index'; const convertSnakeCaseToTitleCase = (input: string): string => input @@ -14,6 +15,59 @@ const convertSnakeCaseToTitleCase = (input: string): string => .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); +const extractCountryCodeFromEntity = entity => { + const issuerCountryCode = entity?.workflow?.definition?.context?.documents?.find(document => { + return document?.issuer?.country; + })?.issuer?.country; + + return issuerCountryCode; +}; + +const uniqueArrayByKey = (array, key) => { + return [...new Map(array.map(item => [item[key], item])).values()]; +}; +const composePickableCategoryType = ( + categoryValue: string, + typeValue: string, + documentsSchema: any, +) => { + const documentTypesDropdownOptions: Array<{ value: string; label: string }> = []; + const documentCategoryDropdownOptions: Array<{ value: string; label: string }> = []; + + Object.values(documentsSchema).forEach(document => { + const category = document.category; + if (category) { + documentCategoryDropdownOptions.push({ + value: category as string, + label: convertSnakeCaseToTitleCase(category), + }); + } + const type = document.type; + if (type) { + documentTypesDropdownOptions.push({ + value: type as string, + label: convertSnakeCaseToTitleCase(type), + }); + } + }); + + const typeDropdownOptions = uniqueArrayByKey(documentTypesDropdownOptions, 'value'); + const categoryDropdownOptions = uniqueArrayByKey(documentCategoryDropdownOptions, 'value'); + return { + type: { title: 'type', type: 'string', dropdownOptions: typeDropdownOptions, value: typeValue }, + category: { + title: 'category', + type: 'string', + dropdownOptions: categoryDropdownOptions, + value: categoryValue, + }, + }; +}; + +const isExistingSchemaForDocument = documentsSchema => { + return Object.entries(documentsSchema).length > 0; +}; + function omit(obj, ...props) { const result = { ...obj }; props.forEach(function (prop) { @@ -21,7 +75,6 @@ function omit(obj, ...props) { }); return result; } - export const useEntity = () => { const { entityId } = useParams(); const { data: entity, isLoading } = useEntityWithWorkflowQuery(entityId); @@ -48,9 +101,11 @@ export const useEntity = () => { workflow: entity?.workflow, }; + const issuerCountryCode = extractCountryCodeFromEntity(entity); + const documentsSchema = issuerCountryCode && getDocumentsByCountry(issuerCountryCode); + const octetToFileType = (base64: string, fileType: string) => base64?.replace(/application\/octet-stream/gi, fileType); - const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ workflowId: entity?.workflow?.runtimeDataId, @@ -66,6 +121,10 @@ export const useEntity = () => { { id, type: docType, category, issuer, properties, propertiesSchema, decision }, docIndex, ) => { + const additionProperties = + isExistingSchemaForDocument(documentsSchema) && + composePickableCategoryType(category, docType, documentsSchema); + return [ { id: 'header', @@ -112,15 +171,28 @@ export const useEntity = () => { value: { id, title: `${category} - ${docType}`, - data: Object.entries(propertiesSchema?.properties ?? {})?.map( - ([title, { type, format, pattern, isEditable = true }]) => ({ + data: Object.entries( + { + ...additionProperties, + ...propertiesSchema?.properties, + } ?? {}, + )?.map( + ([ title, - value: properties?.[title] ?? '', - type, - format, - pattern, - isEditable: caseState.writeEnabled && isEditable, - }), + { type, format, pattern, isEditable = true, dropdownOptions, value }, + ]) => { + const fieldValue = value || (properties?.[title] ?? ''); + + return { + title, + value: fieldValue, + type, + format, + pattern, + isEditable: caseState.writeEnabled && isEditable, + dropdownOptions, + }; + }, ), }, }, diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 5b7b1cc3bb..e9469f72f9 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -59,7 +59,11 @@ export const SignIn: FunctionComponent = () => { return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - {!!env.VITE_IMAGE_LOGO_URL ? <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> : <BallerineLogo />} + {!!env.IMAGE_LOGO_URL ? ( + <img className={`w-40`} src={env.IMAGE_LOGO_URL} /> + ) : ( + <BallerineLogo /> + )} </div> <Card className={`w-full max-w-lg`}> <CardHeader className={`mb-2 text-center text-4xl font-bold`}>Sign In</CardHeader> diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index f786f24511..3486209e02 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,21 @@ # @ballerine/common +## 0.5.1 + +### Patch Changes + +- schema changes + +## 0.5.0 + +### Minor Changes + +- be5c9bc4: added error with name validation + +### Patch Changes + +- Adding scheams + ## 0.4.3 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index 83d234dc22..cbcd190698 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.4", + "version": "0.5.1", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/common/src/countries/index.ts b/packages/common/src/countries/index.ts new file mode 100644 index 0000000000..72a852c6c9 --- /dev/null +++ b/packages/common/src/countries/index.ts @@ -0,0 +1,1249 @@ +const countries = [ + { + name: 'Afghanistan', + 'alpha-2': 'AF', + 'country-code': '004', + }, + { + name: 'Åland Islands', + 'alpha-2': 'AX', + 'country-code': '248', + }, + { + name: 'Albania', + 'alpha-2': 'AL', + 'country-code': '008', + }, + { + name: 'Algeria', + 'alpha-2': 'DZ', + 'country-code': '012', + }, + { + name: 'American Samoa', + 'alpha-2': 'AS', + 'country-code': '016', + }, + { + name: 'Andorra', + 'alpha-2': 'AD', + 'country-code': '020', + }, + { + name: 'Angola', + 'alpha-2': 'AO', + 'country-code': '024', + }, + { + name: 'Anguilla', + 'alpha-2': 'AI', + 'country-code': '660', + }, + { + name: 'Antarctica', + 'alpha-2': 'AQ', + 'country-code': '010', + }, + { + name: 'Antigua and Barbuda', + 'alpha-2': 'AG', + 'country-code': '028', + }, + { + name: 'Argentina', + 'alpha-2': 'AR', + 'country-code': '032', + }, + { + name: 'Armenia', + 'alpha-2': 'AM', + 'country-code': '051', + }, + { + name: 'Aruba', + 'alpha-2': 'AW', + 'country-code': '533', + }, + { + name: 'Australia', + 'alpha-2': 'AU', + 'country-code': '036', + }, + { + name: 'Austria', + 'alpha-2': 'AT', + 'country-code': '040', + }, + { + name: 'Azerbaijan', + 'alpha-2': 'AZ', + 'country-code': '031', + }, + { + name: 'Bahamas', + 'alpha-2': 'BS', + 'country-code': '044', + }, + { + name: 'Bahrain', + 'alpha-2': 'BH', + 'country-code': '048', + }, + { + name: 'Bangladesh', + 'alpha-2': 'BD', + 'country-code': '050', + }, + { + name: 'Barbados', + 'alpha-2': 'BB', + 'country-code': '052', + }, + { + name: 'Belarus', + 'alpha-2': 'BY', + 'country-code': '112', + }, + { + name: 'Belgium', + 'alpha-2': 'BE', + 'country-code': '056', + }, + { + name: 'Belize', + 'alpha-2': 'BZ', + 'country-code': '084', + }, + { + name: 'Benin', + 'alpha-2': 'BJ', + 'country-code': '204', + }, + { + name: 'Bermuda', + 'alpha-2': 'BM', + 'country-code': '060', + }, + { + name: 'Bhutan', + 'alpha-2': 'BT', + 'country-code': '064', + }, + { + name: 'Bolivia (Plurinational State of)', + 'alpha-2': 'BO', + 'country-code': '068', + }, + { + name: 'Bonaire, Sint Eustatius and Saba', + 'alpha-2': 'BQ', + 'country-code': '535', + }, + { + name: 'Bosnia and Herzegovina', + 'alpha-2': 'BA', + 'country-code': '070', + }, + { + name: 'Botswana', + 'alpha-2': 'BW', + 'country-code': '072', + }, + { + name: 'Bouvet Island', + 'alpha-2': 'BV', + 'country-code': '074', + }, + { + name: 'Brazil', + 'alpha-2': 'BR', + 'country-code': '076', + }, + { + name: 'British Indian Ocean Territory', + 'alpha-2': 'IO', + 'country-code': '086', + }, + { + name: 'Brunei Darussalam', + 'alpha-2': 'BN', + 'country-code': '096', + }, + { + name: 'Bulgaria', + 'alpha-2': 'BG', + 'country-code': '100', + }, + { + name: 'Burkina Faso', + 'alpha-2': 'BF', + 'country-code': '854', + }, + { + name: 'Burundi', + 'alpha-2': 'BI', + 'country-code': '108', + }, + { + name: 'Cabo Verde', + 'alpha-2': 'CV', + 'country-code': '132', + }, + { + name: 'Cambodia', + 'alpha-2': 'KH', + 'country-code': '116', + }, + { + name: 'Cameroon', + 'alpha-2': 'CM', + 'country-code': '120', + }, + { + name: 'Canada', + 'alpha-2': 'CA', + 'country-code': '124', + }, + { + name: 'Cayman Islands', + 'alpha-2': 'KY', + 'country-code': '136', + }, + { + name: 'Central African Republic', + 'alpha-2': 'CF', + 'country-code': '140', + }, + { + name: 'Chad', + 'alpha-2': 'TD', + 'country-code': '148', + }, + { + name: 'Chile', + 'alpha-2': 'CL', + 'country-code': '152', + }, + { + name: 'China', + 'alpha-2': 'CN', + 'country-code': '156', + }, + { + name: 'Christmas Island', + 'alpha-2': 'CX', + 'country-code': '162', + }, + { + name: 'Cocos (Keeling) Islands', + 'alpha-2': 'CC', + 'country-code': '166', + }, + { + name: 'Colombia', + 'alpha-2': 'CO', + 'country-code': '170', + }, + { + name: 'Comoros', + 'alpha-2': 'KM', + 'country-code': '174', + }, + { + name: 'Congo', + 'alpha-2': 'CG', + 'country-code': '178', + }, + { + name: 'Congo, Democratic Republic of the', + 'alpha-2': 'CD', + 'country-code': '180', + }, + { + name: 'Cook Islands', + 'alpha-2': 'CK', + 'country-code': '184', + }, + { + name: 'Costa Rica', + 'alpha-2': 'CR', + 'country-code': '188', + }, + { + name: "Côte d'Ivoire", + 'alpha-2': 'CI', + 'country-code': '384', + }, + { + name: 'Croatia', + 'alpha-2': 'HR', + 'country-code': '191', + }, + { + name: 'Cuba', + 'alpha-2': 'CU', + 'country-code': '192', + }, + { + name: 'Curaçao', + 'alpha-2': 'CW', + 'country-code': '531', + }, + { + name: 'Cyprus', + 'alpha-2': 'CY', + 'country-code': '196', + }, + { + name: 'Czechia', + 'alpha-2': 'CZ', + 'country-code': '203', + }, + { + name: 'Denmark', + 'alpha-2': 'DK', + 'country-code': '208', + }, + { + name: 'Djibouti', + 'alpha-2': 'DJ', + 'country-code': '262', + }, + { + name: 'Dominica', + 'alpha-2': 'DM', + 'country-code': '212', + }, + { + name: 'Dominican Republic', + 'alpha-2': 'DO', + 'country-code': '214', + }, + { + name: 'Ecuador', + 'alpha-2': 'EC', + 'country-code': '218', + }, + { + name: 'Egypt', + 'alpha-2': 'EG', + 'country-code': '818', + }, + { + name: 'El Salvador', + 'alpha-2': 'SV', + 'country-code': '222', + }, + { + name: 'Equatorial Guinea', + 'alpha-2': 'GQ', + 'country-code': '226', + }, + { + name: 'Eritrea', + 'alpha-2': 'ER', + 'country-code': '232', + }, + { + name: 'Estonia', + 'alpha-2': 'EE', + 'country-code': '233', + }, + { + name: 'Eswatini', + 'alpha-2': 'SZ', + 'country-code': '748', + }, + { + name: 'Ethiopia', + 'alpha-2': 'ET', + 'country-code': '231', + }, + { + name: 'Falkland Islands (Malvinas)', + 'alpha-2': 'FK', + 'country-code': '238', + }, + { + name: 'Faroe Islands', + 'alpha-2': 'FO', + 'country-code': '234', + }, + { + name: 'Fiji', + 'alpha-2': 'FJ', + 'country-code': '242', + }, + { + name: 'Finland', + 'alpha-2': 'FI', + 'country-code': '246', + }, + { + name: 'France', + 'alpha-2': 'FR', + 'country-code': '250', + }, + { + name: 'French Guiana', + 'alpha-2': 'GF', + 'country-code': '254', + }, + { + name: 'French Polynesia', + 'alpha-2': 'PF', + 'country-code': '258', + }, + { + name: 'French Southern Territories', + 'alpha-2': 'TF', + 'country-code': '260', + }, + { + name: 'Gabon', + 'alpha-2': 'GA', + 'country-code': '266', + }, + { + name: 'Gambia', + 'alpha-2': 'GM', + 'country-code': '270', + }, + { + name: 'Georgia', + 'alpha-2': 'GE', + 'country-code': '268', + }, + { + name: 'Germany', + 'alpha-2': 'DE', + 'country-code': '276', + }, + { + name: 'Ghana', + 'alpha-2': 'GH', + 'country-code': '288', + }, + { + name: 'Gibraltar', + 'alpha-2': 'GI', + 'country-code': '292', + }, + { + name: 'Greece', + 'alpha-2': 'GR', + 'country-code': '300', + }, + { + name: 'Greenland', + 'alpha-2': 'GL', + 'country-code': '304', + }, + { + name: 'Grenada', + 'alpha-2': 'GD', + 'country-code': '308', + }, + { + name: 'Guadeloupe', + 'alpha-2': 'GP', + 'country-code': '312', + }, + { + name: 'Guam', + 'alpha-2': 'GU', + 'country-code': '316', + }, + { + name: 'Guatemala', + 'alpha-2': 'GT', + 'country-code': '320', + }, + { + name: 'Guernsey', + 'alpha-2': 'GG', + 'country-code': '831', + }, + { + name: 'Guinea', + 'alpha-2': 'GN', + 'country-code': '324', + }, + { + name: 'Guinea-Bissau', + 'alpha-2': 'GW', + 'country-code': '624', + }, + { + name: 'Guyana', + 'alpha-2': 'GY', + 'country-code': '328', + }, + { + name: 'Haiti', + 'alpha-2': 'HT', + 'country-code': '332', + }, + { + name: 'Heard Island and McDonald Islands', + 'alpha-2': 'HM', + 'country-code': '334', + }, + { + name: 'Holy See', + 'alpha-2': 'VA', + 'country-code': '336', + }, + { + name: 'Honduras', + 'alpha-2': 'HN', + 'country-code': '340', + }, + { + name: 'Hong Kong', + 'alpha-2': 'HK', + 'country-code': '344', + }, + { + name: 'Hungary', + 'alpha-2': 'HU', + 'country-code': '348', + }, + { + name: 'Iceland', + 'alpha-2': 'IS', + 'country-code': '352', + }, + { + name: 'India', + 'alpha-2': 'IN', + 'country-code': '356', + }, + { + name: 'Indonesia', + 'alpha-2': 'ID', + 'country-code': '360', + }, + { + name: 'Iran (Islamic Republic of)', + 'alpha-2': 'IR', + 'country-code': '364', + }, + { + name: 'Iraq', + 'alpha-2': 'IQ', + 'country-code': '368', + }, + { + name: 'Ireland', + 'alpha-2': 'IE', + 'country-code': '372', + }, + { + name: 'Isle of Man', + 'alpha-2': 'IM', + 'country-code': '833', + }, + { + name: 'Israel', + 'alpha-2': 'IL', + 'country-code': '376', + }, + { + name: 'Italy', + 'alpha-2': 'IT', + 'country-code': '380', + }, + { + name: 'Jamaica', + 'alpha-2': 'JM', + 'country-code': '388', + }, + { + name: 'Japan', + 'alpha-2': 'JP', + 'country-code': '392', + }, + { + name: 'Jersey', + 'alpha-2': 'JE', + 'country-code': '832', + }, + { + name: 'Jordan', + 'alpha-2': 'JO', + 'country-code': '400', + }, + { + name: 'Kazakhstan', + 'alpha-2': 'KZ', + 'country-code': '398', + }, + { + name: 'Kenya', + 'alpha-2': 'KE', + 'country-code': '404', + }, + { + name: 'Kiribati', + 'alpha-2': 'KI', + 'country-code': '296', + }, + { + name: "Korea (Democratic People's Republic of)", + 'alpha-2': 'KP', + 'country-code': '408', + }, + { + name: 'Korea, Republic of', + 'alpha-2': 'KR', + 'country-code': '410', + }, + { + name: 'Kuwait', + 'alpha-2': 'KW', + 'country-code': '414', + }, + { + name: 'Kyrgyzstan', + 'alpha-2': 'KG', + 'country-code': '417', + }, + { + name: "Lao People's Democratic Republic", + 'alpha-2': 'LA', + 'country-code': '418', + }, + { + name: 'Latvia', + 'alpha-2': 'LV', + 'country-code': '428', + }, + { + name: 'Lebanon', + 'alpha-2': 'LB', + 'country-code': '422', + }, + { + name: 'Lesotho', + 'alpha-2': 'LS', + 'country-code': '426', + }, + { + name: 'Liberia', + 'alpha-2': 'LR', + 'country-code': '430', + }, + { + name: 'Libya', + 'alpha-2': 'LY', + 'country-code': '434', + }, + { + name: 'Liechtenstein', + 'alpha-2': 'LI', + 'country-code': '438', + }, + { + name: 'Lithuania', + 'alpha-2': 'LT', + 'country-code': '440', + }, + { + name: 'Luxembourg', + 'alpha-2': 'LU', + 'country-code': '442', + }, + { + name: 'Macao', + 'alpha-2': 'MO', + 'country-code': '446', + }, + { + name: 'Madagascar', + 'alpha-2': 'MG', + 'country-code': '450', + }, + { + name: 'Malawi', + 'alpha-2': 'MW', + 'country-code': '454', + }, + { + name: 'Malaysia', + 'alpha-2': 'MY', + 'country-code': '458', + }, + { + name: 'Maldives', + 'alpha-2': 'MV', + 'country-code': '462', + }, + { + name: 'Mali', + 'alpha-2': 'ML', + 'country-code': '466', + }, + { + name: 'Malta', + 'alpha-2': 'MT', + 'country-code': '470', + }, + { + name: 'Marshall Islands', + 'alpha-2': 'MH', + 'country-code': '584', + }, + { + name: 'Martinique', + 'alpha-2': 'MQ', + 'country-code': '474', + }, + { + name: 'Mauritania', + 'alpha-2': 'MR', + 'country-code': '478', + }, + { + name: 'Mauritius', + 'alpha-2': 'MU', + 'country-code': '480', + }, + { + name: 'Mayotte', + 'alpha-2': 'YT', + 'country-code': '175', + }, + { + name: 'Mexico', + 'alpha-2': 'MX', + 'country-code': '484', + }, + { + name: 'Micronesia (Federated States of)', + 'alpha-2': 'FM', + 'country-code': '583', + }, + { + name: 'Moldova, Republic of', + 'alpha-2': 'MD', + 'country-code': '498', + }, + { + name: 'Monaco', + 'alpha-2': 'MC', + 'country-code': '492', + }, + { + name: 'Mongolia', + 'alpha-2': 'MN', + 'country-code': '496', + }, + { + name: 'Montenegro', + 'alpha-2': 'ME', + 'country-code': '499', + }, + { + name: 'Montserrat', + 'alpha-2': 'MS', + 'country-code': '500', + }, + { + name: 'Morocco', + 'alpha-2': 'MA', + 'country-code': '504', + }, + { + name: 'Mozambique', + 'alpha-2': 'MZ', + 'country-code': '508', + }, + { + name: 'Myanmar', + 'alpha-2': 'MM', + 'country-code': '104', + }, + { + name: 'Namibia', + 'alpha-2': 'NA', + 'country-code': '516', + }, + { + name: 'Nauru', + 'alpha-2': 'NR', + 'country-code': '520', + }, + { + name: 'Nepal', + 'alpha-2': 'NP', + 'country-code': '524', + }, + { + name: 'Netherlands', + 'alpha-2': 'NL', + 'country-code': '528', + }, + { + name: 'New Caledonia', + 'alpha-2': 'NC', + 'country-code': '540', + }, + { + name: 'New Zealand', + 'alpha-2': 'NZ', + 'country-code': '554', + }, + { + name: 'Nicaragua', + 'alpha-2': 'NI', + 'country-code': '558', + }, + { + name: 'Niger', + 'alpha-2': 'NE', + 'country-code': '562', + }, + { + name: 'Nigeria', + 'alpha-2': 'NG', + 'country-code': '566', + }, + { + name: 'Niue', + 'alpha-2': 'NU', + 'country-code': '570', + }, + { + name: 'Norfolk Island', + 'alpha-2': 'NF', + 'country-code': '574', + }, + { + name: 'North Macedonia', + 'alpha-2': 'MK', + 'country-code': '807', + }, + { + name: 'Northern Mariana Islands', + 'alpha-2': 'MP', + 'country-code': '580', + }, + { + name: 'Norway', + 'alpha-2': 'NO', + 'country-code': '578', + }, + { + name: 'Oman', + 'alpha-2': 'OM', + 'country-code': '512', + }, + { + name: 'Pakistan', + 'alpha-2': 'PK', + 'country-code': '586', + }, + { + name: 'Palau', + 'alpha-2': 'PW', + 'country-code': '585', + }, + { + name: 'Palestine, State of', + 'alpha-2': 'PS', + 'country-code': '275', + }, + { + name: 'Panama', + 'alpha-2': 'PA', + 'country-code': '591', + }, + { + name: 'Papua New Guinea', + 'alpha-2': 'PG', + 'country-code': '598', + }, + { + name: 'Paraguay', + 'alpha-2': 'PY', + 'country-code': '600', + }, + { + name: 'Peru', + 'alpha-2': 'PE', + 'country-code': '604', + }, + { + name: 'Philippines', + 'alpha-2': 'PH', + 'country-code': '608', + }, + { + name: 'Pitcairn', + 'alpha-2': 'PN', + 'country-code': '612', + }, + { + name: 'Poland', + 'alpha-2': 'PL', + 'country-code': '616', + }, + { + name: 'Portugal', + 'alpha-2': 'PT', + 'country-code': '620', + }, + { + name: 'Puerto Rico', + 'alpha-2': 'PR', + 'country-code': '630', + }, + { + name: 'Qatar', + 'alpha-2': 'QA', + 'country-code': '634', + }, + { + name: 'Réunion', + 'alpha-2': 'RE', + 'country-code': '638', + }, + { + name: 'Romania', + 'alpha-2': 'RO', + 'country-code': '642', + }, + { + name: 'Russian Federation', + 'alpha-2': 'RU', + 'country-code': '643', + }, + { + name: 'Rwanda', + 'alpha-2': 'RW', + 'country-code': '646', + }, + { + name: 'Saint Barthélemy', + 'alpha-2': 'BL', + 'country-code': '652', + }, + { + name: 'Saint Helena, Ascension and Tristan da Cunha', + 'alpha-2': 'SH', + 'country-code': '654', + }, + { + name: 'Saint Kitts and Nevis', + 'alpha-2': 'KN', + 'country-code': '659', + }, + { + name: 'Saint Lucia', + 'alpha-2': 'LC', + 'country-code': '662', + }, + { + name: 'Saint Martin (French part)', + 'alpha-2': 'MF', + 'country-code': '663', + }, + { + name: 'Saint Pierre and Miquelon', + 'alpha-2': 'PM', + 'country-code': '666', + }, + { + name: 'Saint Vincent and the Grenadines', + 'alpha-2': 'VC', + 'country-code': '670', + }, + { + name: 'Samoa', + 'alpha-2': 'WS', + 'country-code': '882', + }, + { + name: 'San Marino', + 'alpha-2': 'SM', + 'country-code': '674', + }, + { + name: 'Sao Tome and Principe', + 'alpha-2': 'ST', + 'country-code': '678', + }, + { + name: 'Saudi Arabia', + 'alpha-2': 'SA', + 'country-code': '682', + }, + { + name: 'Senegal', + 'alpha-2': 'SN', + 'country-code': '686', + }, + { + name: 'Serbia', + 'alpha-2': 'RS', + 'country-code': '688', + }, + { + name: 'Seychelles', + 'alpha-2': 'SC', + 'country-code': '690', + }, + { + name: 'Sierra Leone', + 'alpha-2': 'SL', + 'country-code': '694', + }, + { + name: 'Singapore', + 'alpha-2': 'SG', + 'country-code': '702', + }, + { + name: 'Sint Maarten (Dutch part)', + 'alpha-2': 'SX', + 'country-code': '534', + }, + { + name: 'Slovakia', + 'alpha-2': 'SK', + 'country-code': '703', + }, + { + name: 'Slovenia', + 'alpha-2': 'SI', + 'country-code': '705', + }, + { + name: 'Solomon Islands', + 'alpha-2': 'SB', + 'country-code': '090', + }, + { + name: 'Somalia', + 'alpha-2': 'SO', + 'country-code': '706', + }, + { + name: 'South Africa', + 'alpha-2': 'ZA', + 'country-code': '710', + }, + { + name: 'South Georgia and the South Sandwich Islands', + 'alpha-2': 'GS', + 'country-code': '239', + }, + { + name: 'South Sudan', + 'alpha-2': 'SS', + 'country-code': '728', + }, + { + name: 'Spain', + 'alpha-2': 'ES', + 'country-code': '724', + }, + { + name: 'Sri Lanka', + 'alpha-2': 'LK', + 'country-code': '144', + }, + { + name: 'Sudan', + 'alpha-2': 'SD', + 'country-code': '729', + }, + { + name: 'Suriname', + 'alpha-2': 'SR', + 'country-code': '740', + }, + { + name: 'Svalbard and Jan Mayen', + 'alpha-2': 'SJ', + 'country-code': '744', + }, + { + name: 'Sweden', + 'alpha-2': 'SE', + 'country-code': '752', + }, + { + name: 'Switzerland', + 'alpha-2': 'CH', + 'country-code': '756', + }, + { + name: 'Syrian Arab Republic', + 'alpha-2': 'SY', + 'country-code': '760', + }, + { + name: 'Taiwan, Province of China', + 'alpha-2': 'TW', + 'country-code': '158', + }, + { + name: 'Tajikistan', + 'alpha-2': 'TJ', + 'country-code': '762', + }, + { + name: 'Tanzania, United Republic of', + 'alpha-2': 'TZ', + 'country-code': '834', + }, + { + name: 'Thailand', + 'alpha-2': 'TH', + 'country-code': '764', + }, + { + name: 'Timor-Leste', + 'alpha-2': 'TL', + 'country-code': '626', + }, + { + name: 'Togo', + 'alpha-2': 'TG', + 'country-code': '768', + }, + { + name: 'Tokelau', + 'alpha-2': 'TK', + 'country-code': '772', + }, + { + name: 'Tonga', + 'alpha-2': 'TO', + 'country-code': '776', + }, + { + name: 'Trinidad and Tobago', + 'alpha-2': 'TT', + 'country-code': '780', + }, + { + name: 'Tunisia', + 'alpha-2': 'TN', + 'country-code': '788', + }, + { + name: 'Turkey', + 'alpha-2': 'TR', + 'country-code': '792', + }, + { + name: 'Turkmenistan', + 'alpha-2': 'TM', + 'country-code': '795', + }, + { + name: 'Turks and Caicos Islands', + 'alpha-2': 'TC', + 'country-code': '796', + }, + { + name: 'Tuvalu', + 'alpha-2': 'TV', + 'country-code': '798', + }, + { + name: 'Uganda', + 'alpha-2': 'UG', + 'country-code': '800', + }, + { + name: 'Ukraine', + 'alpha-2': 'UA', + 'country-code': '804', + }, + { + name: 'United Arab Emirates', + 'alpha-2': 'AE', + 'country-code': '784', + }, + { + name: 'United Kingdom of Great Britain and Northern Ireland', + 'alpha-2': 'GB', + 'country-code': '826', + }, + { + name: 'United States of America', + 'alpha-2': 'US', + 'country-code': '840', + }, + { + name: 'United States Minor Outlying Islands', + 'alpha-2': 'UM', + 'country-code': '581', + }, + { + name: 'Uruguay', + 'alpha-2': 'UY', + 'country-code': '858', + }, + { + name: 'Uzbekistan', + 'alpha-2': 'UZ', + 'country-code': '860', + }, + { + name: 'Vanuatu', + 'alpha-2': 'VU', + 'country-code': '548', + }, + { + name: 'Venezuela (Bolivarian Republic of)', + 'alpha-2': 'VE', + 'country-code': '862', + }, + { + name: 'Viet Nam', + 'alpha-2': 'VN', + 'country-code': '704', + }, + { + name: 'Virgin Islands (British)', + 'alpha-2': 'VG', + 'country-code': '092', + }, + { + name: 'Virgin Islands (U.S.)', + 'alpha-2': 'VI', + 'country-code': '850', + }, + { + name: 'Wallis and Futuna', + 'alpha-2': 'WF', + 'country-code': '876', + }, + { + name: 'Western Sahara', + 'alpha-2': 'EH', + 'country-code': '732', + }, + { + name: 'Yemen', + 'alpha-2': 'YE', + 'country-code': '887', + }, + { + name: 'Zambia', + 'alpha-2': 'ZM', + 'country-code': '894', + }, + { + name: 'Zimbabwe', + 'alpha-2': 'ZW', + 'country-code': '716', + }, +] as const; + +export const countryCodes = countries.map(country => country['alpha-2']); diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index fcdce33f48..3c86d928b7 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -11,3 +11,13 @@ export { sleep, uniqueArray, } from './utils'; + +export { + getDocumentId, + type DefaultContextSchema, + type TDefaultSchemaDocumentPage, + ghanaDocuments, + certificateOfResidenceGH, + getDocumentsByCountry, + type TDocument, +} from './schemas'; diff --git a/services/workflows-service/src/workflow/schemas/context.d.ts b/packages/common/src/schemas/documents/context.ts similarity index 99% rename from services/workflows-service/src/workflow/schemas/context.d.ts rename to packages/common/src/schemas/documents/context.ts index f9294953ee..de0b78cc84 100644 --- a/services/workflows-service/src/workflow/schemas/context.d.ts +++ b/packages/common/src/schemas/documents/context.ts @@ -10,6 +10,7 @@ export interface DefaultContextSchema { [k: string]: unknown; }; documents: { + id?: string; category: string; type: string; issuer: { diff --git a/services/workflows-service/src/workflow/schemas/default-context-page-schema.ts b/packages/common/src/schemas/documents/default-context-page-schema.ts similarity index 60% rename from services/workflows-service/src/workflow/schemas/default-context-page-schema.ts rename to packages/common/src/schemas/documents/default-context-page-schema.ts index 9d9bd606f9..9cb8ff3e87 100644 --- a/services/workflows-service/src/workflow/schemas/default-context-page-schema.ts +++ b/packages/common/src/schemas/documents/default-context-page-schema.ts @@ -1,3 +1,3 @@ -import { DefaultContextSchema } from '@/workflow/schemas/context'; +import { DefaultContextSchema } from '../documents/context'; export type TDefaultSchemaDocumentPage = DefaultContextSchema['documents'][number]['pages'][number]; diff --git a/services/workflows-service/src/workflow/schemas/default-context-schema.json b/packages/common/src/schemas/documents/default-context-schema.json similarity index 75% rename from services/workflows-service/src/workflow/schemas/default-context-schema.json rename to packages/common/src/schemas/documents/default-context-schema.json index 0eb0aa1039..687015b3ed 100644 --- a/services/workflows-service/src/workflow/schemas/default-context-schema.json +++ b/packages/common/src/schemas/documents/default-context-schema.json @@ -6,10 +6,7 @@ "type": "object", "properties": { "type": { - "enum": [ - "individual", - "business" - ] + "enum": ["individual", "business"] }, "data": { "type": "object", @@ -27,19 +24,13 @@ "type": "string" } }, - "required": [ - "type" - ], + "required": ["type"], "anyOf": [ { - "required": [ - "id" - ] + "required": ["id"] }, { - "required": [ - "ballerineEntityId" - ] + "required": ["ballerineEntityId"] } ], "additionalProperties": false @@ -49,19 +40,16 @@ "items": { "type": "object", "properties": { + "id": { + "type": "string" + }, "category": { "type": "string", - "transform": [ - "trim", - "toLowerCase" - ] + "transform": ["trim", "toLowerCase"] }, "type": { "type": "string", - "transform": [ - "trim", - "toLowerCase" - ] + "transform": ["trim", "toLowerCase"] }, "issuer": { "type": "object", @@ -74,21 +62,16 @@ }, "country": { "type": "string", - "transform": [ - "trim", - "toUpperCase" - ] + "transform": ["trim", "toUpperCase"] }, "city": { "type": "string" }, - "additionalDetails": { + "additionalInfo": { "type": "object" } }, - "required": [ - "country" - ], + "required": ["country"], "additionalProperties": false }, "issuingVersion": { @@ -99,13 +82,7 @@ "properties": { "status": { "type": "string", - "enum": [ - "new", - "pending", - "revision", - "approved", - "rejected" - ] + "enum": ["new", "pending", "revision", "approved", "rejected"] }, "rejectionReason": { "anyOf": [ @@ -157,24 +134,14 @@ }, "provider": { "type": "string", - "enum": [ - "gcs", - "http", - "stream", - "base64", - "ftp" - ] + "enum": ["gcs", "http", "stream", "base64", "ftp"] }, "uri": { "type": "string", "format": "uri" }, "type": { - "enum": [ - "pdf", - "png", - "jpg" - ] + "enum": ["pdf", "png", "jpg"] }, "data": { "type": "string" @@ -192,11 +159,7 @@ "additionalProperties": false } }, - "required": [ - "provider", - "uri", - "type" - ], + "required": ["provider", "uri", "type"], "additionalProperties": false } }, @@ -218,19 +181,10 @@ } } }, - "required": [ - "category", - "type", - "issuer", - "pages", - "properties" - ], + "required": ["category", "type", "issuer", "pages", "properties"], "additionalProperties": false } } }, - "required": [ - "entity", - "documents" - ] -} \ No newline at end of file + "required": ["entity", "documents"] +} diff --git a/services/workflows-service/src/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts similarity index 92% rename from services/workflows-service/src/documents/schemas/GH.ts rename to packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 06af061180..eba228f89c 100644 --- a/services/workflows-service/src/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -1,6 +1,7 @@ -import { Document } from '../types'; +import { TDocument } from '../types'; +const ghNationalIdNumber = '^$|^GHA-\\d{9}-\\d{1}$'; -export const certificateOfResidenceGH: Document = { +export const certificateOfResidenceGH: TDocument = { category: 'proof_of_address', type: 'water_bill', issuer: { @@ -16,7 +17,7 @@ export const certificateOfResidenceGH: Document = { properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -38,7 +39,7 @@ export const certificateOfResidenceGH: Document = { }, }; -export const ghanaDocuments: Document[] = [ +export const ghanaDocuments: TDocument[] = [ { category: 'proof_of_address', type: 'water_bill', @@ -53,7 +54,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -90,7 +91,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -125,7 +126,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -160,7 +161,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -195,7 +196,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -227,7 +228,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -259,7 +260,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -291,7 +292,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -323,7 +324,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -359,7 +360,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -391,7 +392,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -426,7 +427,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', @@ -458,7 +459,7 @@ export const ghanaDocuments: Document[] = [ properties: { nationalIdNumber: { type: 'string', - pattern: '^GHA-\\d{9}-\\d{1}$', + pattern: ghNationalIdNumber, }, docNumber: { type: 'number', diff --git a/services/workflows-service/src/documents/schemas/index.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts similarity index 63% rename from services/workflows-service/src/documents/schemas/index.ts rename to packages/common/src/schemas/documents/workflow/documents/schemas/index.ts index 87fd8123f7..bfb163c918 100644 --- a/services/workflows-service/src/documents/schemas/index.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts @@ -1,10 +1,10 @@ -import { getDocumentId } from '@/documents/utils'; import { ghanaDocuments } from './GH'; -import { Document } from '../types'; -import { countryCodes } from '@/common/countries'; +import { TDocument } from '../types'; +import { getDocumentId } from '../../documents/utils'; +import { countryCodes } from '@/countries'; -const createDocumentIdToDocumentMap = (documents: Document[]) => { - const result = {} as Record<string, Document>; +const createDocumentIdToDocumentMap = (documents: TDocument[]) => { + const result = {} as Record<string, TDocument>; for (const document of documents) { const id = getDocumentId(document); result[id] = document; @@ -18,7 +18,7 @@ const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], any>> export const getDocumentsByCountry = ( countryCode: (typeof countryCodes)[number], -): Record<string, Document> => { +): Record<string, TDocument> => { const documents = documentIdsByCountry[countryCode]; if (!documents) return {}; diff --git a/packages/common/src/schemas/documents/workflow/documents/types.ts b/packages/common/src/schemas/documents/workflow/documents/types.ts new file mode 100644 index 0000000000..60189da314 --- /dev/null +++ b/packages/common/src/schemas/documents/workflow/documents/types.ts @@ -0,0 +1,5 @@ +import { DefaultContextSchema } from '../../context'; + +export type TDocument = Omit<DefaultContextSchema['documents'][number], 'pages' | 'properties'> & { + propertiesSchema: any; +}; diff --git a/services/workflows-service/src/documents/utils.ts b/packages/common/src/schemas/documents/workflow/documents/utils.ts similarity index 57% rename from services/workflows-service/src/documents/utils.ts rename to packages/common/src/schemas/documents/workflow/documents/utils.ts index fb54ed3de8..69affb842d 100644 --- a/services/workflows-service/src/documents/utils.ts +++ b/packages/common/src/schemas/documents/workflow/documents/utils.ts @@ -1,8 +1,8 @@ -import { DefaultContextSchema } from '@/workflow/schemas/context'; -import { Document } from './types'; +import { TDocument } from './types'; +import { DefaultContextSchema } from '../../context'; export const getDocumentId = ( - document: Document | DefaultContextSchema['documents'][number], + document: TDocument | DefaultContextSchema['documents'][number], ): string => { let id = `${document?.category}-${document?.type}-${document?.issuer?.country}`; diff --git a/packages/common/src/schemas/index.ts b/packages/common/src/schemas/index.ts index 4da7acb80e..042c8c6d6a 100644 --- a/packages/common/src/schemas/index.ts +++ b/packages/common/src/schemas/index.ts @@ -1,130 +1,9 @@ -const userRolesSchema = { - type: 'array', - items: { - type: 'string', - }, -}; - -const endUserAdditionalInfoSchema = { - type: 'object', - properties: { - // Define your additional info properties here - }, - additionalProperties: false, -}; - -const businessShareholderStructureSchema = { - type: 'array', - items: { - type: 'object', - properties: { - name: { type: 'string' }, - ownershipPercentage: { type: 'number' }, - }, - required: ['name', 'ownershipPercentage'], - additionalProperties: false, - }, -}; - -const businessDocumentsSchema = { - type: 'array', - items: { - type: 'object', - properties: { - documentType: { type: 'string' }, - fileUrl: { type: 'string' }, - }, - required: ['documentType', 'fileUrl'], - additionalProperties: false, - }, -}; - -const workflowDefinitionDefinitionSchema = { - type: 'object', - properties: { - // Define your workflow definition properties here - }, - additionalProperties: false, -}; - -const workflowDefinitionSupportedPlatformsSchema = { - type: 'object', - properties: { - // Define your supported platforms properties here - }, - additionalProperties: false, -}; - -const workflowDefinitionExtensionsSchema = { - type: 'object', - properties: { - // Define your extensions properties here - }, - additionalProperties: false, -}; - -const workflowDefinitionBackendSchema = { - type: 'object', - properties: { - // Define your backend properties here - }, - additionalProperties: false, -}; - -const workflowDefinitionPersistStatesSchema = { - type: 'object', - properties: { - // Define your persist states properties here - }, - additionalProperties: false, -}; - -const workflowDefinitionSubmitStatesSchema = { - type: 'object', - properties: { - // Define your submit states properties here - }, - additionalProperties: false, -}; - -const workflowRuntimeDataContextSchema = { - type: 'object', - properties: { - // Define your workflow runtime data context properties here - }, - additionalProperties: false, -}; - -const policyTasksSchema = { - type: 'array', - items: { - type: 'object', - properties: { - taskName: { type: 'string' }, - // Define other task properties here - }, - required: ['taskName'], - additionalProperties: false, - }, -}; - -const policyRulesSetsSchema = { - type: 'array', - items: { - type: 'object', - properties: { - rules: { type: 'array' }, - result: { - type: 'object', - properties: { - status: { type: 'string' }, - fidoScore: { type: 'string' }, - }, - required: ['status', 'riskScore'], - additionalProperties: false, - }, - }, - required: ['rules', 'result'], - additionalProperties: false, - }, -}; +export { getDocumentId } from './documents/workflow/documents/utils'; +export { type DefaultContextSchema } from './documents/context'; +export { type TDefaultSchemaDocumentPage } from './documents/default-context-page-schema'; +export { + ghanaDocuments, + certificateOfResidenceGH, +} from './documents/workflow/documents/schemas/GH'; +export { getDocumentsByCountry } from './documents/workflow/documents/schemas/index'; +export { type TDocument } from './documents/workflow/documents/types'; diff --git a/packages/common/src/schemas/policy-schema.ts b/packages/common/src/schemas/policy-schema.ts new file mode 100644 index 0000000000..b3b5bc0ae4 --- /dev/null +++ b/packages/common/src/schemas/policy-schema.ts @@ -0,0 +1,130 @@ +const userRolesSchema = { + type: 'array', + items: { + type: 'string', + }, +}; + +const endUserAdditionalInfoSchema = { + type: 'object', + properties: { + // Define your additional info properties here + }, + additionalProperties: false, +}; + +const businessShareholderStructureSchema = { + type: 'array', + items: { + type: 'object', + properties: { + name: { type: 'string' }, + ownershipPercentage: { type: 'number' }, + }, + required: ['name', 'ownershipPercentage'], + additionalProperties: false, + }, +}; + +const businessDocumentsSchema = { + type: 'array', + items: { + type: 'object', + properties: { + documentType: { type: 'string' }, + fileUrl: { type: 'string' }, + }, + required: ['documentType', 'fileUrl'], + additionalProperties: false, + }, +}; + +const workflowDefinitionDefinitionSchema = { + type: 'object', + properties: { + // Define your workflow definition properties here + }, + additionalProperties: false, +}; + +const workflowDefinitionSupportedPlatformsSchema = { + type: 'object', + properties: { + // Define your supported platforms properties here + }, + additionalProperties: false, +}; + +const workflowDefinitionExtensionsSchema = { + type: 'object', + properties: { + // Define your extensions properties here + }, + additionalProperties: false, +}; + +const workflowDefinitionBackendSchema = { + type: 'object', + properties: { + // Define your backend properties here + }, + additionalProperties: false, +}; + +const workflowDefinitionPersistStatesSchema = { + type: 'object', + properties: { + // Define your persist states properties here + }, + additionalProperties: false, +}; + +const workflowDefinitionSubmitStatesSchema = { + type: 'object', + properties: { + // Define your submit states properties here + }, + additionalProperties: false, +}; + +const workflowRuntimeDataContextSchema = { + type: 'object', + properties: { + // Define your workflow runtime data context properties here + }, + additionalProperties: false, +}; + +const policyTasksSchema = { + type: 'array', + items: { + type: 'object', + properties: { + taskName: { type: 'string' }, + // Define other task properties here + }, + required: ['taskName'], + additionalProperties: false, + }, +}; + +const policyRulesSetsSchema = { + type: 'array', + items: { + type: 'object', + properties: { + rules: { type: 'array' }, + result: { + type: 'object', + properties: { + status: { type: 'string' }, + score: { type: 'string' }, + }, + required: ['status', 'riskScore'], + additionalProperties: false, + }, + }, + required: ['rules', 'result'], + additionalProperties: false, + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4c1a44836..851a13ff73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,10 +57,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: ^0.4.3 + specifier: ^0.5.1 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.3 + specifier: ^0.4.4 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -828,7 +828,7 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: ^0.4.3 + specifier: ^0.5.0 version: link:../../packages/common '@ballerine/workflow-core': specifier: ^0.4.9 @@ -1064,7 +1064,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.4.4 + specifier: 0.5.1 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index cda9566adf..0d97af77c1 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.4 + +### Patch Changes + +- Updated dependencies +- Updated dependencies [be5c9bc4] + - @ballerine/common@0.5.0 + ## 0.4.3 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index c751234254..40f725946b 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.3", + "version": "0.4.4", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -29,7 +29,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "^0.4.3", + "@ballerine/common": "^0.5.0", "@ballerine/workflow-core": "^0.4.9", "xstate": "^4.37.0" }, diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index aa223c6713..84f665f059 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,20 @@ # @ballerine/workflows-service +## 0.4.12 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.1 + +## 0.4.11 + +### Patch Changes + +- Updated dependencies +- Updated dependencies [be5c9bc4] + - @ballerine/common@0.5.0 + ## 0.4.10 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 82e6bfc053..ddfaf67383 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.10", + "version": "0.4.12", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -35,7 +35,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.4.4", + "@ballerine/common": "0.5.1", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", @@ -116,4 +116,4 @@ "type-fest": "0.11.0", "typescript": "^4.9.3" } -} \ No newline at end of file +} diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 8ac22d2c7b..b0c7fe9ccd 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -10,7 +10,7 @@ import { generateBusiness, generateEndUser, } from './generate-end-user'; -import defaultContextSchema from '../src/workflow/schemas/default-context-schema.json'; +import defaultContextSchema from '@ballerine/common/src/schemas/documents/default-context-schema.json'; import { Salt } from '../src/auth/password/password.service'; import { env } from '../src/env'; import { generateUserNationalId } from './generate-user-national-id'; @@ -135,8 +135,8 @@ async function seed(bcryptSalt: Salt) { numberOfEmployees: faker.datatype.number(1000), businessPurpose: faker.company.catchPhraseDescriptor(), approvalState: 'NEW', + additionalInfo: { customParam: 'customValue' }, } satisfies Partial<Business>, - additionalDetails: {}, ballerineEntityId: businessId, id: correlationId, }, @@ -149,7 +149,7 @@ async function seed(bcryptSalt: Salt) { name: 'Government', country: 'GH', city: faker.address.city(), - additionalDetails: {}, + additionalInfo: { customParam: 'customValue' }, }, issuingVersion: 1, @@ -195,7 +195,7 @@ async function seed(bcryptSalt: Salt) { name: 'Government', country: 'GH', city: faker.address.city(), - additionalDetails: {}, + additionalInfo: { customParam: 'customValue' }, }, issuingVersion: 1, @@ -252,8 +252,8 @@ async function seed(bcryptSalt: Salt) { stateReason: 'Poor quality of documents', // @ts-expect-error - end user type expects a date and not a string. dateOfBirth: faker.date.past(20).toISOString(), + additionalInfo: { customParam: 'customValue' }, } satisfies Partial<EndUser>, - additionalDetails: {}, ballerineEntityId: endUserId, id: correlationId, }, @@ -266,7 +266,7 @@ async function seed(bcryptSalt: Salt) { name: 'Government', country: faker.address.country(), city: faker.address.city(), - additionalDetails: {}, + additionalInfo: { customParam: 'customValue' }, }, issuingVersion: 1, @@ -312,7 +312,7 @@ async function seed(bcryptSalt: Salt) { name: 'Government', country: faker.address.country(), city: faker.address.city(), - additionalDetails: {}, + additionalInfo: { customParam: 'customValue' }, }, issuingVersion: 1, diff --git a/services/workflows-service/src/documents/types.ts b/services/workflows-service/src/documents/types.ts deleted file mode 100644 index f91de20c32..0000000000 --- a/services/workflows-service/src/documents/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DefaultContextSchema } from '@/workflow/schemas/context'; - -export type Document = Omit<DefaultContextSchema['documents'][number], 'pages' | 'properties'> & { - propertiesSchema: any; -}; diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index 5e52b4a7f1..b1c9d08832 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -26,8 +26,13 @@ export class DocumentChangedWebhookCaller { ) { this.#__axios = this.httpService.axiosRef; - workflowEventEmitter.on('workflow.context.changed', data => { - void this.handleWorkflowEvent(data); + workflowEventEmitter.on('workflow.context.changed', async data => { + try { + await this.handleWorkflowEvent(data); + } catch (error) { + console.error(error); + alertWebhookFailure(error); + } }); } @@ -36,9 +41,12 @@ export class DocumentChangedWebhookCaller { const newDocuments = data.context?.['documents'] || []; const documentIdentifier = (doc: any) => { - return `${doc.category as string}$${doc.type as string}$${ - doc.issuer?.country as string - }`.toLowerCase(); + return ( + doc.id || + `${doc.category as string}$${doc.type as string}$${ + doc.issuer?.country as string + }`.toLowerCase() + ); }; const newDocumentsByIdentifier = newDocuments.reduce((accumulator: any, doc: any) => { diff --git a/services/workflows-service/src/workflow/assign-id-to-documents.ts b/services/workflows-service/src/workflow/assign-id-to-documents.ts new file mode 100644 index 0000000000..532d7d2e41 --- /dev/null +++ b/services/workflows-service/src/workflow/assign-id-to-documents.ts @@ -0,0 +1,12 @@ +import { randomUUID } from 'crypto'; +import { DefaultContextSchema } from '@ballerine/common'; + +type Documents = DefaultContextSchema['documents']; + +export const assignIdToDocuments = (documents: Documents): Documents => + documents.map(document => { + return { + id: randomUUID(), + ...document, + }; + }); diff --git a/services/workflows-service/src/workflow/dtos/workflow-definition-update-input.ts b/services/workflows-service/src/workflow/dtos/workflow-definition-update-input.ts index 3bf03cfe03..20cf3b6c8b 100644 --- a/services/workflows-service/src/workflow/dtos/workflow-definition-update-input.ts +++ b/services/workflows-service/src/workflow/dtos/workflow-definition-update-input.ts @@ -1,8 +1,6 @@ -import { InputJsonValue } from '@/types'; import { ApiProperty } from '@nestjs/swagger'; import { IsString, IsOptional, IsObject } from 'class-validator'; import { WorkflowRuntimeDataStatus } from '@prisma/client'; -import { DefaultContextSchema } from '../schemas/context'; export class WorkflowDefinitionUpdateInput { @ApiProperty({ diff --git a/services/workflows-service/src/workflow/dtos/workflow-run.ts b/services/workflows-service/src/workflow/dtos/workflow-run.ts index 3d37546759..25c54a395e 100644 --- a/services/workflows-service/src/workflow/dtos/workflow-run.ts +++ b/services/workflows-service/src/workflow/dtos/workflow-run.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { DefaultContextSchema } from '../schemas/context'; import { IsNotEmpty, IsObject, IsOptional } from 'class-validator'; +import { DefaultContextSchema } from '@ballerine/common'; export class WorkflowRunDto { @ApiProperty({ diff --git a/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts b/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts index b6df7c7424..904e928249 100644 --- a/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts +++ b/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts @@ -1,19 +1,23 @@ import { WorkflowRuntimeData } from '@prisma/client'; -import { DefaultContextSchema } from './schemas/context'; -import { getDocumentId } from '@/documents/utils'; -import { getDocumentsByCountry } from '@/documents/schemas'; -import { Document } from '@/documents/types'; import { countryCodes } from '@/common/countries'; +import { + DefaultContextSchema, + getDocumentId, + getDocumentsByCountry, + TDocument, +} from '@ballerine/common'; export const enrichWorkflowRuntimeData = (workflowRuntimeData: WorkflowRuntimeData) => { if (workflowRuntimeData?.context?.documents?.length) { const documents = workflowRuntimeData?.context?.documents as DefaultContextSchema['documents']; + // @ts-ignore const result = documents.map(document => { const documents = getDocumentsByCountry( document.issuer.country as (typeof countryCodes)[number], ); - const id = getDocumentId(document as unknown as Document); + const id = getDocumentId(document as unknown as TDocument); const documentSchema = documents[id]; + document.id ||= id; return { ...document, diff --git a/services/workflows-service/src/workflow/update-documents.test.ts b/services/workflows-service/src/workflow/update-documents.test.ts index 2fad0dc519..a150e8322b 100644 --- a/services/workflows-service/src/workflow/update-documents.test.ts +++ b/services/workflows-service/src/workflow/update-documents.test.ts @@ -1,5 +1,5 @@ -import { DefaultContextSchema } from '@/workflow/schemas/context'; import { updateDocuments } from '@/workflow/update-documents'; +import { DefaultContextSchema } from '@ballerine/common'; type Documents = DefaultContextSchema['documents']; diff --git a/services/workflows-service/src/workflow/update-documents.ts b/services/workflows-service/src/workflow/update-documents.ts index 029fe0343a..11888a8228 100644 --- a/services/workflows-service/src/workflow/update-documents.ts +++ b/services/workflows-service/src/workflow/update-documents.ts @@ -1,5 +1,4 @@ -import { DefaultContextSchema } from '@/workflow/schemas/context'; -import { getDocumentId } from '@/documents/utils'; +import { DefaultContextSchema, getDocumentId } from '@ballerine/common'; type Documents = DefaultContextSchema['documents']; type Document = Documents[number]; @@ -10,14 +9,16 @@ export const updateDocuments = ( ): Documents => { const updatedDocumentsMap = new Map<string, Document>(); + // @ts-ignore existingDocuments.forEach(document => { - const documentId = getDocumentId(document); + const documentId = document.id || getDocumentId(document); updatedDocumentsMap.set(documentId, document); }); + // @ts-ignore documentsToUpdate.forEach(document => { - const documentId = getDocumentId(document); + const documentId = document.id || getDocumentId(document); updatedDocumentsMap.set(documentId, document); }); diff --git a/services/workflows-service/src/workflow/workflow-event-emitter.service.ts b/services/workflows-service/src/workflow/workflow-event-emitter.service.ts index a90ae104f5..25b3a832b5 100644 --- a/services/workflows-service/src/workflow/workflow-event-emitter.service.ts +++ b/services/workflows-service/src/workflow/workflow-event-emitter.service.ts @@ -35,11 +35,12 @@ export class WorkflowEventEmitterService { this.eventEmitter.emit(eventName, eventData); } - on(eventName: string, listener: (eventData: WorkflowEventRawData) => void) { + on(eventName: string, listener: (eventData: WorkflowEventRawData) => Promise<void>) { if (!eventName) { throw new Error('Event name is required'); } + // eslint-disable-next-line @typescript-eslint/no-misused-promises this.eventEmitter.on(eventName, listener); } } diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index af55410b20..51083f2acc 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -12,7 +12,6 @@ import { DocumentChangedWebhookCaller } from '@/events/document-changed-webhook- import { BusinessRepository } from '@/business/business.repository'; import { FileService } from '@/providers/file/file.service'; import { StorageService } from '@/storage/storage.service'; -import { StorageModule } from '@/storage/storage.module'; import { FileRepository } from '@/storage/storage.repository'; import { HttpModule, HttpService } from '@nestjs/axios'; diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index e080a6857c..3c22df8609 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -27,7 +27,6 @@ import { BusinessRepository } from '@/business/business.repository'; import Ajv, { Schema } from 'ajv'; import addFormats from 'ajv-formats'; import addKeywords from 'ajv-keywords'; -import { DefaultContextSchema } from './schemas/context'; import * as console from 'console'; import { TRemoteFileConfig, TS3BucketConfig } from '@/providers/file/types/files-types'; import { z } from 'zod'; @@ -38,13 +37,13 @@ import { StorageService } from '@/storage/storage.service'; import { FileService } from '@/providers/file/file.service'; import * as process from 'process'; import * as crypto from 'crypto'; -import { TDefaultSchemaDocumentPage } from '@/workflow/schemas/default-context-page-schema'; import { AwsS3FileConfig } from '@/providers/file/file-provider/aws-s3-file.config'; import { TFileServiceProvider } from '@/providers/file/types'; import { updateDocuments } from '@/workflow/update-documents'; -import { getDocumentId } from '@/documents/utils'; +import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; import { ConfigSchema, WorkflowConfig } from './schemas/zod-schemas'; +import { DefaultContextSchema, getDocumentId, TDefaultSchemaDocumentPage } from '@ballerine/common'; type TEntityId = string; @@ -459,6 +458,7 @@ export class WorkflowService { } catch (error) { throw new BadRequestException(error); } + context.documents = assignIdToDocuments(context.documents); this.__validateWorkflowDefinitionContext(workflowDefinition, context); const entityId = await this.__findOrPersistEntityInformation(context); const entityType = context.entity.type === 'business' ? 'business' : 'endUser'; @@ -547,7 +547,6 @@ export class WorkflowService { return { ...context, documents: documentsWithPersistedImages }; } - private async __persistDocumentPagesFiles( document: DefaultContextSchema['documents'][number], entityId: string, From 98ce0a5d26aed4a5e3867b7502c2115a945ffd07 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Thu, 8 Jun 2023 14:16:35 +0300 Subject: [PATCH 016/123] updated common reference --- .../src/pages/Entity/hooks/useEntity/useEntity.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index d1b179c179..40a945f5fc 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -7,7 +7,7 @@ import { useCaseState } from '../../components/Case/hooks/useCaseState/useCaseSt import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; import { components } from './components'; -import { getDocumentsByCountry } from '@ballerine/common/src/schemas/documents/workflow/documents/schemas/index'; +import { getDocumentsByCountry } from '@ballerine/common'; const convertSnakeCaseToTitleCase = (input: string): string => input From a8abf084e92f653f292c1ec782d669529d9d24ba Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 8 Jun 2023 15:45:11 +0300 Subject: [PATCH 017/123] update common versions --- apps/backoffice-v2/package.json | 2 +- packages/workflow-core/package.json | 2 +- pnpm-lock.yaml | 17 ++++++----------- sdks/web-ui-sdk/package.json | 2 +- sdks/workflow-browser-sdk/package.json | 2 +- 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 8fd60779f0..34e6f1981f 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -47,7 +47,7 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "^0.5.1", + "@ballerine/common": "0.5.1", "@ballerine/workflow-browser-sdk": "^0.4.4", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index f9af9ab65c..3475162416 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -27,7 +27,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.4.3", + "@ballerine/common": "0.5.1", "json-logic-js": "^2.0.2", "xstate": "^4.35.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 851a13ff73..28a5002233 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: ^0.5.1 + specifier: 0.5.1 version: link:../../packages/common '@ballerine/workflow-browser-sdk': specifier: ^0.4.4 @@ -592,8 +592,8 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.4.3 - version: 0.4.3 + specifier: 0.5.1 + version: link:../common json-logic-js: specifier: ^2.0.2 version: 2.0.2 @@ -710,8 +710,8 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.4.3 - version: 0.4.3 + specifier: 0.5.1 + version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 version: 0.8.2 @@ -828,7 +828,7 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: ^0.5.0 + specifier: 0.5.1 version: link:../../packages/common '@ballerine/workflow-core': specifier: ^0.4.9 @@ -4968,11 +4968,6 @@ packages: engines: {node: '>=12'} dev: false - /@ballerine/common@0.4.3: - resolution: {integrity: sha512-MV7i5eYQ4yAg0ZI3p0oel1Erz4W+nZ7mjc8tXyr0XZszckvxkWuTPCnTDggIKOsf7c26I0JMsbHlY9vpBFcSHQ==} - engines: {node: '>=12'} - dev: false - /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 76a5f5a154..5eeeb86712 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -91,7 +91,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.4.3", + "@ballerine/common": "0.5.1", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 40f725946b..077a12cf3d 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -29,7 +29,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "^0.5.0", + "@ballerine/common": "0.5.1", "@ballerine/workflow-core": "^0.4.9", "xstate": "^4.37.0" }, From ca83511e69b8c541d4aa1fa31ccafc352cd68885 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 10 Jun 2023 20:34:33 +0300 Subject: [PATCH 018/123] fix: upgrade @astrojs/mdx from 0.18.4 to 0.19.2 (#518) Snyk has created this PR to upgrade @astrojs/mdx from 0.18.4 to 0.19.2. See this package in npm: https://www.npmjs.com/package/@astrojs/mdx See this project in Snyk: https://app.snyk.io/org/alonp99/project/2e88abf8-2761-42b7-a9df-9579a86ace21?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot <snyk-bot@snyk.io> --- websites/docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/websites/docs/package.json b/websites/docs/package.json index 144c02e96c..ad7f66a356 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@algolia/client-search": "^4.13.1", - "@astrojs/mdx": "^0.18.3", + "@astrojs/mdx": "^0.19.2", "@astrojs/react": "^1.2.2", "@astrojs/solid-js": "^1.2.3", "@ballerine/common": "0.0.1", From 24d560304101cff9af13f9be518e897afd486bad Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 10 Jun 2023 20:34:57 +0300 Subject: [PATCH 019/123] fix: upgrade @ballerine/common from 0.4.3 to 0.4.4 (#519) Snyk has created this PR to upgrade @ballerine/common from 0.4.3 to 0.4.4. See this package in npm: https://www.npmjs.com/package/@ballerine/common See this project in Snyk: https://app.snyk.io/org/alonp99/project/4c2207cc-2b3d-4867-87d2-790f5c70fd2b?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot <snyk-bot@snyk.io> --- packages/workflow-core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index e7945a25f7..53d7320b35 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -27,7 +27,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.4.3", + "@ballerine/common": "0.4.4", "json-logic-js": "^2.0.2", "xstate": "^4.35.2" }, From 07d8021348b67927cf7763b60ad94e8de5ee0e21 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 10 Jun 2023 20:50:41 +0300 Subject: [PATCH 020/123] update pnpm lock file --- pnpm-lock.yaml | 217 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 155 insertions(+), 62 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f706002596..5381897d9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -234,6 +234,9 @@ importers: eslint-plugin-storybook: specifier: ^0.6.6 version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) postcss: specifier: ^8.4.14 version: 8.4.21 @@ -400,6 +403,9 @@ importers: eslint-plugin-import: specifier: ^2.22.0 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -509,6 +515,9 @@ importers: eslint-plugin-import: specifier: ^2.22.0 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -546,8 +555,8 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.4.3 - version: link:../common + specifier: 0.4.4 + version: 0.4.4 json-logic-js: specifier: ^2.0.2 version: 2.0.2 @@ -621,6 +630,9 @@ importers: eslint-plugin-import: specifier: ^2.22.0 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -733,6 +745,9 @@ importers: eslint-plugin-svelte3: specifier: ^4.0.0 version: 4.0.0(eslint@8.22.0)(svelte@3.57.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) jsdom: specifier: ^20.0.2 version: 20.0.3 @@ -857,6 +872,9 @@ importers: eslint-plugin-import: specifier: ^2.22.0 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -975,6 +993,9 @@ importers: eslint-plugin-import: specifier: ^2.22.0 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -1159,6 +1180,9 @@ importers: eslint-plugin-import: specifier: ^2.27.5 version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) jest: specifier: 27.0.6 version: 27.0.6(ts-node@9.1.1) @@ -1190,8 +1214,8 @@ importers: specifier: ^4.13.1 version: 4.16.0 '@astrojs/mdx': - specifier: ^0.18.3 - version: 0.18.3(astro@1.9.2)(rollup@2.70.2) + specifier: ^0.19.2 + version: 0.19.2(astro@1.9.2)(rollup@2.70.2) '@astrojs/react': specifier: ^1.2.2 version: 1.2.2(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) @@ -1247,6 +1271,9 @@ importers: eslint-plugin-astro: specifier: ^0.21.0 version: 0.21.1(eslint@8.36.0) + eslint-plugin-unused-imports: + specifier: ^2.0.0 + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -1486,6 +1513,15 @@ packages: - chokidar dev: true + /@apidevtools/json-schema-ref-parser@9.1.2: + resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.11 + call-me-maybe: 1.0.2 + js-yaml: 4.1.0 + dev: false + /@astrojs/compiler@0.31.4: resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==} @@ -1542,12 +1578,12 @@ packages: - supports-color dev: false - /@astrojs/markdown-remark@2.1.4(astro@1.9.2): - resolution: {integrity: sha512-z5diCcFo2xkBAJ11KySAIKpZZkULZmzUvWsZ2VWIOrR6QrEgEfVl5jTpgPSedx4m+xUPuemlUviOotGB7ItNsQ==} + /@astrojs/markdown-remark@2.2.1(astro@1.9.2): + resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==} peerDependencies: - astro: ^2.3.0 + astro: ^2.5.0 dependencies: - '@astrojs/prism': 2.1.1 + '@astrojs/prism': 2.1.2 astro: 1.9.2(@types/node@18.15.10)(ts-node@10.9.1) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 @@ -1557,7 +1593,7 @@ packages: remark-parse: 10.0.1 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 - shiki: 0.11.1 + shiki: 0.14.1 unified: 10.1.2 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -1565,12 +1601,12 @@ packages: - supports-color dev: false - /@astrojs/mdx@0.18.3(astro@1.9.2)(rollup@2.70.2): - resolution: {integrity: sha512-fFkzYthnFqxmdp6IesvzU6FDHdAGo9bf4dbMOPCREcBfEhATqSpT9gjK/HdJ5s1MfZI8jjYeSC3yzhmNlq62qA==} + /@astrojs/mdx@0.19.2(astro@1.9.2)(rollup@2.70.2): + resolution: {integrity: sha512-xWI2TK2QvCFXhyadjVtidcOj7qHda2Fv3tUilhacFXF28vye/COluMirqgxEESMlUsV+8LI39f8P6ERxXADSmg==} engines: {node: '>=16.12.0'} dependencies: - '@astrojs/markdown-remark': 2.1.4(astro@1.9.2) - '@astrojs/prism': 2.1.1 + '@astrojs/markdown-remark': 2.2.1(astro@1.9.2) + '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 '@mdx-js/rollup': 2.3.0(rollup@2.70.2) acorn: 8.8.2 @@ -1583,7 +1619,8 @@ packages: remark-frontmatter: 4.0.1 remark-gfm: 3.0.1 remark-smartypants: 2.0.0 - shiki: 0.11.1 + shiki: 0.14.1 + source-map: 0.7.4 unist-util-visit: 4.1.2 vfile: 5.3.7 transitivePeerDependencies: @@ -1613,8 +1650,8 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/prism@2.1.1: - resolution: {integrity: sha512-Gnwnlb1lGJzCQEg89r4/WqgfCGPNFC7Kuh2D/k289Cbdi/2PD7Lrdstz86y1itDvcb2ijiRqjqWnJ5rsfu/QOA==} + /@astrojs/prism@2.1.2: + resolution: {integrity: sha512-3antim1gb34689GHRQFJ88JEo93HuZKQBnmxDT5W/nxiNz1p/iRxnCTEhIbJhqMOTRbbo5h2ldm5qSxx+TMFQA==} engines: {node: '>=16.12.0'} dependencies: prismjs: 1.29.0 @@ -3887,6 +3924,14 @@ packages: engines: {node: '>=12'} dev: false + /@ballerine/common@0.4.4: + resolution: {integrity: sha512-lH0+FXKB2cSFSzkHx9NYz6RdPvudPTcjO75gQy99JmLDjx+LdM8NS+aWWn7GDyYdCVXTWYstnFf1bDkVWgdqFA==} + engines: {node: '>=12'} + dependencies: + ajv: 8.12.0 + json-schema-to-zod: 0.6.3 + dev: false + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -5278,6 +5323,10 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jsdevtools/ono@7.1.3: + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + dev: false + /@juggle/resize-observer@3.4.0: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: true @@ -6818,7 +6867,7 @@ packages: dependencies: '@storybook/client-logger': 7.0.0-rc.10 '@storybook/core-events': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.0.0-rc.10 @@ -6977,7 +7026,7 @@ packages: '@storybook/client-logger': 7.0.0-rc.10 '@storybook/components': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/docs-tools': 7.0.0-rc.10 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) @@ -7079,15 +7128,16 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.0.14: - resolution: {integrity: sha512-LYgxjOg6FTuow/H9UfcL825Bf1ScJGnhMjImmI5GIkHSHKMKlYVQhRuN7WU5IUX6O5rOHV9hwkraaTZTWkFIzQ==} + /@storybook/channel-postmessage@7.1.0-alpha.30: + resolution: {integrity: sha512-JET5DQCL7g0a+lcNn7wzDSmuw4S/cko7uC//tVkrPfE4JnNSl7ZJTQsgU+K0invvWgPHmhx+ClkiUQ7C9ZbzTw==} dependencies: - '@storybook/channels': 7.0.14 - '@storybook/client-logger': 7.0.14 - '@storybook/core-events': 7.0.14 + '@storybook/channels': 7.1.0-alpha.30 + '@storybook/client-logger': 7.1.0-alpha.30 + '@storybook/core-events': 7.1.0-alpha.30 '@storybook/global': 5.0.0 qs: 6.11.1 telejson: 7.1.0 + tiny-invariant: 1.3.1 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -7111,8 +7161,8 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.0.14: - resolution: {integrity: sha512-LVoFy2TRJz5lbIFfaQ6Hapn0XmtXV/kkBbD/kQ9E8KTMfbWlZApGVaCnzGKR7/eiwft38smT9mmyWOfg3CfQbg==} + /@storybook/channels@7.1.0-alpha.30: + resolution: {integrity: sha512-X/UKKWsNHn7PKVAmz9gVvdtUbfJzVpeKdz6FjsDAzhO+EAl7t7oxNaoMvYCgQ5fJT4RYPT2nQA4Y84F1rhBZHw==} dev: true /@storybook/cli@7.0.0-rc.10: @@ -7177,8 +7227,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.0.14: - resolution: {integrity: sha512-LRsToB8B3iee2nS4OpCnyFhLD5zW16eIbrVGPC5vRQEoepbNAS1/F9D7gnRMYSYiCY3KMk0x3C58a/JVLyK5VA==} + /@storybook/client-logger@7.1.0-alpha.30: + resolution: {integrity: sha512-z8RgvC2+YD0ofg029e0nWkPGG5Uo/9ctAeRDcxUEUohG8xsdp1mmfyhUTfIHqXFcCpftVGN1paF7TT0xefRMRQ==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -7189,7 +7239,7 @@ packages: '@babel/core': 7.21.3 '@babel/preset-env': 7.20.2(@babel/core@7.21.3) '@babel/types': 7.21.3 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 '@storybook/node-logger': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 @@ -7228,7 +7278,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-rc.10 @@ -7282,8 +7332,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.0.14: - resolution: {integrity: sha512-zHqeRLyL2PasZljLgclDox4cZ/2wN3KZmJJT6VI6VovHe4mr82Jb9PTsuwVwznDyf12em6C9YULgtoCXh5N9Sw==} + /@storybook/core-events@7.1.0-alpha.30: + resolution: {integrity: sha512-Mi2qCrF9af0aG2w2KV8SbfZI7HjMXk0tIBG0AWnm32ZoENKHyeL5V/IA3ejfHvQiVNAivuJJx8CVp2vjAptDAg==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -7294,7 +7344,7 @@ packages: '@storybook/builder-manager': 7.0.0-rc.10 '@storybook/core-common': 7.0.0-rc.10 '@storybook/core-events': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 '@storybook/docs-mdx': 0.0.1-next.7 '@storybook/global': 5.0.0 @@ -7354,7 +7404,7 @@ packages: '@babel/parser': 7.21.3 '@babel/traverse': 7.21.3 '@babel/types': 7.21.3 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/types': 7.0.0-rc.10 fs-extra: 11.1.1 recast: 0.23.1 @@ -7375,14 +7425,14 @@ packages: lodash: 4.17.21 dev: true - /@storybook/csf@0.0.2-next.11: - resolution: {integrity: sha512-xGt0YSVxZb43sKmEf1GIQD8xEbo+c+S6khDEL7Qu/pYA0gh5z3WUuhOlovnelYj/YJod+XRsfVvk23AaRfUJ4Q==} + /@storybook/csf@0.1.0: + resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} dependencies: type-fest: 2.19.0 dev: true - /@storybook/csf@0.1.0: - resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} + /@storybook/csf@0.1.1-next.0: + resolution: {integrity: sha512-2M8E4CZOVW77P9lrgZZc2rcwxhNKVVykpzbcAauc3bots7xvDJMG60EasMRB/Y+cfqnSu6aaSUEVmKHTKsVJ3A==} dependencies: type-fest: 2.19.0 dev: true @@ -7419,14 +7469,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.0.14: - resolution: {integrity: sha512-aVTCUwN69+e11xLt+WiOdl5pxQFtIV5IiDeBp7gmDndLCVXj4Jiu80YJcDyyNiyKQV4G79aejtS8Pz6Bht/LKQ==} + /@storybook/instrumenter@7.1.0-alpha.30: + resolution: {integrity: sha512-8J+WTY8K+qcIwg2RZ/OYcmrsA5MpdFQwE58x296qRNwfAol6bcon4NaBX7ioGWZ6DGhWXXeVpuX5aUeL2o16Fw==} dependencies: - '@storybook/channels': 7.0.14 - '@storybook/client-logger': 7.0.14 - '@storybook/core-events': 7.0.14 + '@storybook/channels': 7.1.0-alpha.30 + '@storybook/client-logger': 7.1.0-alpha.30 + '@storybook/core-events': 7.1.0-alpha.30 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.14 + '@storybook/preview-api': 7.1.0-alpha.30 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -7438,7 +7488,7 @@ packages: '@storybook/channels': 7.0.0-rc.10 '@storybook/client-logger': 7.0.0-rc.10 '@storybook/core-events': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/router': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) @@ -7482,7 +7532,7 @@ packages: '@storybook/channels': 7.0.0-rc.10 '@storybook/client-logger': 7.0.0-rc.10 '@storybook/core-events': 7.0.0-rc.10 - '@storybook/csf': 0.0.2-next.11 + '@storybook/csf': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/types': 7.0.0-rc.10 '@types/qs': 6.9.7 @@ -7495,16 +7545,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.0.14: - resolution: {integrity: sha512-GhBzTGgNtiEjKZxSYYq+IDEOme6QidS2BAcLLSrQ+Ka4j1dGOF0ZtCn/TPOPRFe51j9x6A5kl6PFpZpFuzxQHA==} + /@storybook/preview-api@7.1.0-alpha.30: + resolution: {integrity: sha512-LNDrFq7NFdX5eDGrqvjaHOJxrnCpRI3p4xaStIv+rJnypYlq1yo4r2buRghap++XTm4AoR+5ytcscQAQeBZc6w==} dependencies: - '@storybook/channel-postmessage': 7.0.14 - '@storybook/channels': 7.0.14 - '@storybook/client-logger': 7.0.14 - '@storybook/core-events': 7.0.14 + '@storybook/channel-postmessage': 7.1.0-alpha.30 + '@storybook/channels': 7.1.0-alpha.30 + '@storybook/client-logger': 7.1.0-alpha.30 + '@storybook/core-events': 7.1.0-alpha.30 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.0.14 + '@storybook/types': 7.1.0-alpha.30 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -7652,8 +7702,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.0.14 - '@storybook/instrumenter': 7.0.14 + '@storybook/client-logger': 7.1.0-alpha.30 + '@storybook/instrumenter': 7.1.0-alpha.30 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -7696,10 +7746,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.0.14: - resolution: {integrity: sha512-P9fL9Ha8nQY2uSc/GaCj/N28g8T0soiNWpBzcd61mk58eiCi1jSP7B5hA+jjKhj1eviIBPhwv81ZwnwLWxCtsg==} + /@storybook/types@7.1.0-alpha.30: + resolution: {integrity: sha512-UOoFynivU4An1Yb/DJ6ekF6DoFyqfM1TO+NMOxN7qQRGHOAMTrP+PhNGTKMi9S9Y2PrqFIkSQ2kCYIEH0opDFg==} dependencies: - '@storybook/channels': 7.0.14 + '@storybook/channels': 7.1.0-alpha.30 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -8351,7 +8401,6 @@ packages: /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -9521,7 +9570,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true /ajv@8.9.0: resolution: {integrity: sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==} @@ -9577,7 +9625,6 @@ packages: /ansi-sequence-parser@1.1.0: resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -10447,6 +10494,10 @@ packages: function-bind: 1.1.1 get-intrinsic: 1.2.0 + /call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + dev: false + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -12473,6 +12524,41 @@ packages: tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0): + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) + eslint: 8.22.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0): + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + eslint: 8.36.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -15433,6 +15519,15 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true + /json-schema-to-zod@0.6.3: + resolution: {integrity: sha512-G/B51WWBeY1+ozbE4ZOPHblY8CJ5Frk5f4wUPynWfzkD0ysB2nXsrEnkRlx5UFNOe/WKFErMP/NAUhwK3nd4jg==} + hasBin: true + dependencies: + '@apidevtools/json-schema-ref-parser': 9.1.2 + '@types/json-schema': 7.0.11 + prettier: 2.8.7 + dev: false + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -19020,7 +19115,6 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -21281,7 +21375,6 @@ packages: /vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true /vscode-uri@2.1.2: resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} From 09c9d42e9d6a5b70f3e502ee4642a925c869ebdf Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 10 Jun 2023 23:42:06 +0300 Subject: [PATCH 021/123] backoffice signin logo regression fix --- apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index e9469f72f9..23428b31e9 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -59,8 +59,8 @@ export const SignIn: FunctionComponent = () => { return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - {!!env.IMAGE_LOGO_URL ? ( - <img className={`w-40`} src={env.IMAGE_LOGO_URL} /> + {env.VITE_IMAGE_LOGO_URL ? ( + <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> ) : ( <BallerineLogo /> )} From 2817ec74af4e114301c7d5eb18c9a91225260725 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Mon, 12 Jun 2023 11:28:50 +0300 Subject: [PATCH 022/123] added test env ci --- .github/workflows/publish-images-test.yml | 63 +++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/publish-images-test.yml diff --git a/.github/workflows/publish-images-test.yml b/.github/workflows/publish-images-test.yml new file mode 100644 index 0000000000..624a718a63 --- /dev/null +++ b/.github/workflows/publish-images-test.yml @@ -0,0 +1,63 @@ +name: Publish workflow-service image - test + +on: + push: + branches: + - test + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=test + type=raw,value=commit-${{ github.sha }}-test + type=raw,value=${{ steps.get_version.outputs.version }}-test + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true From 7894109a7d15b6eea5f70b223e401661f27b045e Mon Sep 17 00:00:00 2001 From: Matan Yadaev <matan.yed@gmail.com> Date: Tue, 13 Jun 2023 16:45:29 +0300 Subject: [PATCH 023/123] Cases pagination, sorting, filtering, and search (#516) * Apply filters on workflows instead of entity (#496) * feat(backoffice-v2): added react-router-dom * feat(backoffice-v2): added a react router provider * feat(backoffice-v2): re-added redirect to en locale * feat(backoffice-v2): re-added root error component * feat(backoffice-v2): the root route now uses the Root component * feat(backoffice-v2): added the locale route * feat(backoffice-v2): added the case management route * feat(backoffice-v2): added the sign in route * feat(backoffice-v2): added entities route and replaced imports of tanstack router * feat(backoffice-v2): added the entity by id route and refactored its loader * feat(backoffice-v2): wip work on search query params * refactor(backoffice-v2): removed tanstack router * feat(backoffice-v2): handling null values in search params and default filters * fix(backoffice-v2): it is now possible to remove filters with a catch clause * refactor(backoffice-v2): moved loaders to separate files * fix(backoffice-v2): fixed sign out redirect * refactor(backoffice-v2): moved locale component to the locale directory * fix(backoffice-v2): no longer encoding the url * fix(backoffice-v2): filters no longer revert to defaults when all filters are unselected * feat: implement backend * fix(backoffice-v2): fixes default search query params returning when unchecking filters solved by adding a placeholder for null and empty arrays for qs * fix(backoffice-v2): reduced padding on case list item - solves axis x overflow * refactor(backoffice-v2): refactored routes to pages * docs(backoffice-v2): added comments to the stringify/parse search params functions * feat: refactor completed * fix: pr fixes * fix: pr fixes * fix: tests * fix: pr comments --------- Co-authored-by: Omri Levy <omri.levy0197@gmail.com> * fix(useEntity): make actions disabled when there is a decision status * feat: split workflows endpoint into two * feat: support sorting * fix: pr review * Cases pagination (#509) * fix(useEntity): make actions disabled when there is a decision status * feat: split workflows endpoint into two * feat: support sorting * fix: pr review * feat: pagination * fix: remove filterName * feat: client pagination * feat: backend pagination * feat: search * fix: code review * fix: document id as uuid * fixed test * fix(workflows-service): added optional chaining to properties which previously resolved to null * fix: pagination * add entity to filters * fix --------- Co-authored-by: Omri Levy <omri.levy0197@gmail.com> Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- apps/backoffice-v2/src/Router/Router.tsx | 2 +- .../organisms/Header/Header.Navbar.tsx | 4 +- .../src/common/hooks/useFilter/filter.ts | 41 ---- .../src/common/hooks/useFilter/useFilter.tsx | 47 ----- .../generate-pagination-buttons.ts | 16 -- .../common/hooks/usePagination/pagination.ts | 20 -- .../hooks/usePagination/usePagination.tsx | 55 ------ .../src/common/hooks/useSearch/useSearch.tsx | 3 +- .../useSearchParamsByEntity.tsx | 5 +- .../validation-schemas.ts | 22 +-- .../src/common/hooks/useSort/sort.ts | 25 --- .../src/common/hooks/useSort/useSort.tsx | 57 ------ .../useZodSearchParams/useZodSearchParams.tsx | 4 +- .../utils/default-deserializer.ts | 3 +- .../useAuthenticatedUserQuery.tsx | 6 +- .../src/domains/businesses/fetchers.ts | 30 --- .../src/domains/businesses/query-keys.ts | 17 -- .../src/domains/businesses/types.ts | 2 - .../domains/businesses/validation-schemas.ts | 54 ----- .../useApproveEntityMutation.tsx | 17 +- .../useRejectEntityMutation.tsx | 17 +- .../useEntitiesQuery/useEntitiesQuery.tsx | 22 --- .../useEntitiesWithWorkflowsQuery.tsx | 25 --- .../queries/useEntityQuery/useEntityQuery.tsx | 25 --- .../useEntityWithWorkflowQuery.tsx | 22 --- .../useFirstEntityIdQuery.tsx | 40 ---- .../useNextEntityIdQuery.tsx | 32 --- .../useSelectEntitiesQuery.tsx | 20 -- .../useSelectEntityFilterOnMount.tsx | 8 +- .../useSelectEntityOnMount.tsx | 20 +- .../useSelectNextEntity.tsx | 14 +- .../src/domains/entities/query-keys.ts | 7 - .../src/domains/entities/types.ts | 5 - .../src/domains/filters/fetchers.ts | 2 +- .../useFiltersQuery/useFiltersQuery.tsx | 6 +- .../src/domains/individuals/fetchers.ts | 38 ---- .../src/domains/individuals/query-keys.ts | 13 -- .../src/domains/individuals/types.ts | 4 +- .../domains/individuals/validation-schemas.ts | 30 --- .../useStorageFileQuery.tsx | 10 - .../useStorageFilesQuery.tsx | 2 + .../queries/useUsersQuery/useUsersQuery.tsx | 1 + .../src/domains/workflows/fetchers.ts | 80 ++++++-- .../useUpdateWorkflowByIdMutation.tsx | 6 +- .../useWorkflowQuery/useWorkflowQuery.tsx | 45 +---- .../useWorkflowsQuery/useWorkflowsQuery.tsx | 22 ++- .../src/domains/workflows/query-keys.ts | 40 +++- .../src/pages/Entities/Entities.loader.ts | 24 ++- .../src/pages/Entities/Entities.page.tsx | 42 ++-- .../pages/Entities/components/Cases/Cases.tsx | 6 +- .../Cases/hooks/useCases/useCases.tsx | 6 +- .../Entities/components/Cases/interfaces.ts | 2 +- .../hooks/useEntities/useEntities.tsx | 99 ++++++---- .../src/pages/Entity/Entity.loader.ts | 28 +-- .../src/pages/Entity/Entity.page.tsx | 10 +- .../components/CallToAction/CallToAction.tsx | 14 +- .../Entity/components/Case/Case.Actions.tsx | 2 +- .../Case/hooks/useActions/interfaces.ts | 2 +- .../Case/hooks/useActions/useActions.tsx | 29 ++- .../Case/hooks/useCaseState/useCaseState.ts | 6 +- .../Entity/components/Details/Details.tsx | 10 +- .../Entity/hooks/useEntity/useEntity.tsx | 53 +++-- .../src/pages/Root/Root.page.tsx | 16 +- .../src/routes/Entities/pre-search-filters.ts | 36 ---- packages/common/src/index.ts | 1 - .../workflow/documents/schemas/index.ts | 23 +-- .../documents/workflow/documents/utils.ts | 14 -- packages/common/src/schemas/index.ts | 1 - pnpm-lock.yaml | 78 ++++---- .../scripts/generate-end-user.ts | 17 ++ services/workflows-service/scripts/seed.ts | 185 +++++++++--------- .../business/business.controller.internal.ts | 58 +----- .../business/dtos/business-filter-create.ts | 22 --- .../business/dtos/business-find-many-args.ts | 7 - .../dtos/business-find-unique-args.ts | 11 -- .../workflows-service/src/business/types.ts | 4 - .../src/common/pipes/zod.pipe.ts | 7 +- .../end-user/dtos/end-user-filter-create.ts | 16 -- .../end-user/dtos/end-user-find-many-args.ts | 7 - .../dtos/end-user-find-unique-args.ts | 11 -- .../end-user/end-user.controller.internal.ts | 62 +----- .../workflows-service/src/end-user/types.ts | 4 - .../src/filter/dtos/filter-create.ts | 11 +- .../src/filter/dtos/temp-zod-schemas.ts | 156 +++++++++------ .../src/filter/filter.controller.external.ts | 20 ++ .../src/filter/filter.model.ts | 16 +- .../src/prisma/prisma.service.ts | 6 + .../src/workflow/dtos/find-workflow.dto.ts | 16 ++ .../workflow/dtos/find-workflows-list.dto.ts | 90 +++++++++ .../workflow/enrich-workflow-runtime-data.ts | 32 --- .../src/workflow/types/index.ts | 8 +- .../src/workflow/update-documents.test.ts | 4 + .../src/workflow/update-documents.ts | 10 +- .../src/workflow/utils/toPrismaOrderBy.ts | 43 ++++ .../src/workflow/utils/toPrismaWhere.ts | 31 +++ .../workflow-runtime-data.repository.ts | 12 +- .../workflow.controller.internal.test.ts | 38 +--- .../workflow/workflow.controller.internal.ts | 81 +++++--- .../src/workflow/workflow.module.ts | 4 + .../src/workflow/workflow.service.ts | 163 ++++++++++++++- websites/docs/package.json | 2 +- 101 files changed, 1098 insertions(+), 1544 deletions(-) delete mode 100644 apps/backoffice-v2/src/common/hooks/useFilter/filter.ts delete mode 100644 apps/backoffice-v2/src/common/hooks/useFilter/useFilter.tsx delete mode 100644 apps/backoffice-v2/src/common/hooks/usePagination/generate-pagination-buttons.ts delete mode 100644 apps/backoffice-v2/src/common/hooks/usePagination/pagination.ts delete mode 100644 apps/backoffice-v2/src/common/hooks/usePagination/usePagination.tsx delete mode 100644 apps/backoffice-v2/src/common/hooks/useSort/sort.ts delete mode 100644 apps/backoffice-v2/src/common/hooks/useSort/useSort.tsx delete mode 100644 apps/backoffice-v2/src/domains/businesses/fetchers.ts delete mode 100644 apps/backoffice-v2/src/domains/businesses/query-keys.ts delete mode 100644 apps/backoffice-v2/src/domains/businesses/types.ts delete mode 100644 apps/backoffice-v2/src/domains/businesses/validation-schemas.ts delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesQuery/useEntitiesQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesWithWorkflowsQuery/useEntitiesWithWorkflowsQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityQuery/useEntityQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useFirstEntityIdQuery/useFirstEntityIdQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useNextEntityIdQuery/useNextEntityIdQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/queries/useSelectEntitiesQuery/useSelectEntitiesQuery.tsx delete mode 100644 apps/backoffice-v2/src/domains/entities/query-keys.ts delete mode 100644 apps/backoffice-v2/src/domains/entities/types.ts delete mode 100644 apps/backoffice-v2/src/domains/individuals/fetchers.ts delete mode 100644 apps/backoffice-v2/src/domains/individuals/query-keys.ts delete mode 100644 apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFileQuery/useStorageFileQuery.tsx delete mode 100644 apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts delete mode 100644 packages/common/src/schemas/documents/workflow/documents/utils.ts delete mode 100644 services/workflows-service/src/business/dtos/business-filter-create.ts delete mode 100644 services/workflows-service/src/business/dtos/business-find-unique-args.ts delete mode 100644 services/workflows-service/src/business/types.ts delete mode 100644 services/workflows-service/src/end-user/dtos/end-user-filter-create.ts delete mode 100644 services/workflows-service/src/end-user/dtos/end-user-find-unique-args.ts delete mode 100644 services/workflows-service/src/end-user/types.ts create mode 100644 services/workflows-service/src/workflow/dtos/find-workflow.dto.ts create mode 100644 services/workflows-service/src/workflow/dtos/find-workflows-list.dto.ts delete mode 100644 services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts create mode 100644 services/workflows-service/src/workflow/utils/toPrismaOrderBy.ts create mode 100644 services/workflows-service/src/workflow/utils/toPrismaWhere.ts diff --git a/apps/backoffice-v2/src/Router/Router.tsx b/apps/backoffice-v2/src/Router/Router.tsx index 2ca262874f..7c94fff0d1 100644 --- a/apps/backoffice-v2/src/Router/Router.tsx +++ b/apps/backoffice-v2/src/Router/Router.tsx @@ -9,10 +9,10 @@ import { Entities } from '../pages/Entities/Entities.page'; import { RouteError } from '../common/components/atoms/RouteError/RouteError'; import { CaseManagement } from '../pages/CaseManagement/CaseManagement.page'; import { rootLoader } from '../pages/Root/Root.loader'; -import { entityLoader } from '../pages/Entity/Entity.loader'; import { entitiesLoader } from '../pages/Entities/Entities.loader'; import { localeLoader } from '../pages/Locale/Locale.loader'; import { Locale } from '../pages/Locale/Locale.page'; +import { entityLoader } from '../pages/Entity/Entity.loader'; const router = createBrowserRouter([ { diff --git a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx index bbde4141dd..14da329ab6 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx @@ -53,10 +53,10 @@ export const Navbar: FunctionComponent = () => { <ul className={`menu menu-compact w-full space-y-2`}> {filters?.map(({ id, name, entity }) => ( <NavItem - href={`/en/case-management/entities?entity=${entity}&filterId=${id}&filterName=${name}`} + href={`/en/case-management/entities?entity=${entity}&filterId=${id}`} key={id} className={ctw(`capitalize`, { - 'bg-muted font-bold': name === searchParams?.filterName, + 'bg-muted font-bold': id === searchParams?.filterId, })} > <CheckSquare /> {name} diff --git a/apps/backoffice-v2/src/common/hooks/useFilter/filter.ts b/apps/backoffice-v2/src/common/hooks/useFilter/filter.ts deleted file mode 100644 index 529d4ec9fd..0000000000 --- a/apps/backoffice-v2/src/common/hooks/useFilter/filter.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { AnyArray } from '../../types'; - -export const filter = <TArray extends AnyArray>({ - data, - filter, -}: { - data: TArray; - filter: string; -}) => { - // Avoid errors stemming from calling array methods on non-arrays. - if (!Array.isArray(data)) { - return []; - } - - // Don't filter when not needed. - if (!filter || !data?.length) { - return data; - } - - // Get filters - const terms = Object.keys(filter); - - if (!terms?.length) { - return data; - } - - // Filter - return data?.filter(item => { - return terms?.every(term => { - if (!filter?.[term]?.length) return true; - - return filter?.[term]?.some(termValue => { - if (typeof item?.[term]?.includes === 'function') { - return item?.[term]?.includes(termValue); - } - - return item?.[term] === termValue; - }); - }); - }); -}; diff --git a/apps/backoffice-v2/src/common/hooks/useFilter/useFilter.tsx b/apps/backoffice-v2/src/common/hooks/useFilter/useFilter.tsx deleted file mode 100644 index 9d5885ae13..0000000000 --- a/apps/backoffice-v2/src/common/hooks/useFilter/useFilter.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { AnyArray, TKeyofArrayElement } from '../../types'; -import { filter as onFilter } from './filter'; -import { useSearchParamsByEntity } from '../useSearchParamsByEntity/useSearchParamsByEntity'; - -/** - * @description A hook to easily filter an array of objects by key using fuzzy search. - * @param props - * @param props.data - The data to filter. - * @param props.filter - The initial filter - defaults to empty string. - */ -export const useFilter = <TArray extends AnyArray>({ - data, - initialFilter, -}: { - data: TArray; - initialFilter?: Record<TKeyofArrayElement<TArray>, Array<string>>; -}) => { - const [{ filter = initialFilter }, setSearchParams] = useSearchParamsByEntity(); - const filtered = useMemo( - () => - onFilter({ - data, - filter, - }), - [data, filter], - ); - const onFilterChange = useCallback( - (value: { - [key in TKeyofArrayElement<TArray>]?: Array<string>; - }) => { - setSearchParams({ - filter: { - ...filter, - ...value, - }, - }); - }, - [filter, setSearchParams], - ); - - return { - filtered, - filter, - onFilter: onFilterChange, - }; -}; diff --git a/apps/backoffice-v2/src/common/hooks/usePagination/generate-pagination-buttons.ts b/apps/backoffice-v2/src/common/hooks/usePagination/generate-pagination-buttons.ts deleted file mode 100644 index aa1dcb5be4..0000000000 --- a/apps/backoffice-v2/src/common/hooks/usePagination/generate-pagination-buttons.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const generatePaginationButtons = ({ page, siblings, totalPages }) => { - let min = Math.max(page - siblings, 1); - let max = Math.min(page + siblings, totalPages); - - if (min === 1) { - max = Math.min(siblings * 2 + 1, totalPages); - } - - if (max === totalPages) { - min = Math.max(totalPages - siblings * 2, 1); - } - - const length = Math.max(max - min + 1, 1); - - return Array.from({ length }, (_, i) => min + i); -}; diff --git a/apps/backoffice-v2/src/common/hooks/usePagination/pagination.ts b/apps/backoffice-v2/src/common/hooks/usePagination/pagination.ts deleted file mode 100644 index ead2ec3937..0000000000 --- a/apps/backoffice-v2/src/common/hooks/usePagination/pagination.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { AnyArray } from '../../types'; -import { generatePaginationButtons } from './generate-pagination-buttons'; - -export const pagination = <TArray extends AnyArray>({ data, pageSize, page, siblings }) => { - const totalItems = data?.length ?? 0; - const totalPages = Math.ceil(totalItems / pageSize); - const paginated = data?.slice((page - 1) * pageSize, page * pageSize); - const pages = generatePaginationButtons({ - page, - siblings, - totalPages, - }); - - return { - totalItems, - totalPages, - paginated, - pages, - }; -}; diff --git a/apps/backoffice-v2/src/common/hooks/usePagination/usePagination.tsx b/apps/backoffice-v2/src/common/hooks/usePagination/usePagination.tsx deleted file mode 100644 index abacd17dbb..0000000000 --- a/apps/backoffice-v2/src/common/hooks/usePagination/usePagination.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { AnyArray } from '../../types'; -import { pagination } from './pagination'; -import { useSearchParamsByEntity } from '../useSearchParamsByEntity/useSearchParamsByEntity'; - -/** - * @description A hook to manage pagination state to be consumed by Mantine's Pagination component. Not using Mantine's usePagination hook since it doesn't support changing the number of items per page. - * @param props - * @param props.data - The data to paginate. - * @param props.initialPage - Defaults to 1. - * @param props.initialPageSize - The number of items per page. - */ -export const usePagination = <TArray extends AnyArray>({ - data, - initialPage = 1, - initialPageSize = 10, - siblings = 2, -}: { - data: TArray; - initialPage?: number; - initialPageSize?: number; - siblings?: number; -}) => { - const [{ page = initialPage, pageSize = initialPageSize }, setSearchParams] = - useSearchParamsByEntity(); - const { totalItems, totalPages, pages, paginated } = useMemo( - () => - pagination({ - data, - pageSize, - page, - siblings, - }), - [data, pageSize, page, siblings], - ); - const onPaginate = useCallback( - (page: number) => () => { - setSearchParams({ - page, - pageSize, - }); - }, - [pageSize, setSearchParams], - ); - - return { - paginated, - onPaginate, - totalItems, - totalPages, - pages, - page, - pageSize, - }; -}; diff --git a/apps/backoffice-v2/src/common/hooks/useSearch/useSearch.tsx b/apps/backoffice-v2/src/common/hooks/useSearch/useSearch.tsx index bd1c5a92d2..e35eb6ebb2 100644 --- a/apps/backoffice-v2/src/common/hooks/useSearch/useSearch.tsx +++ b/apps/backoffice-v2/src/common/hooks/useSearch/useSearch.tsx @@ -32,8 +32,9 @@ export const useSearch = <TArray extends AnyArray>({ useEffect(() => { setSearchParams({ search: debouncedSearch, + page: 1, }); - }, [debouncedSearch, setSearchParams]); + }, [debouncedSearch]); return { searched, diff --git a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx index 24fd83e163..b32f2416c1 100644 --- a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx +++ b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx @@ -1,4 +1,4 @@ -import { ZodSchema } from 'zod'; +import { AnyZodObject } from 'zod'; import { useSearchParams } from 'react-router-dom'; import { useZodSearchParams } from '../useZodSearchParams/useZodSearchParams'; import { IUseZodSearchParams } from '../useZodSearchParams/interfaces'; @@ -6,7 +6,7 @@ import { BusinessesSearchSchema, IndividualsSearchSchema } from './validation-sc import { useAuthenticatedUserQuery } from '../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { useMemo } from 'react'; -export const useSearchParamsByEntity = <TSchema extends ZodSchema>( +export const useSearchParamsByEntity = <TSchema extends AnyZodObject>( schema?: TSchema, options: IUseZodSearchParams = {}, ) => { @@ -22,7 +22,6 @@ export const useSearchParamsByEntity = <TSchema extends ZodSchema>( ); return useZodSearchParams( - // @ts-ignore schema ? EntitySearchSchema.merge(schema) : EntitySearchSchema, options, ); diff --git a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/validation-schemas.ts b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/validation-schemas.ts index c8b43134d9..64a4c4457d 100644 --- a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/validation-schemas.ts +++ b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/validation-schemas.ts @@ -1,42 +1,38 @@ import { z } from 'zod'; -import { CaseStatus, CaseStatuses, States } from '../../enums'; +import { CaseStatus, CaseStatuses } from '../../enums'; export const SearchSchema = z.object({ sortDir: z.enum(['asc', 'desc']).catch('desc'), - pageSize: z.coerce.number().int().positive().catch(10), + pageSize: z.coerce.number().int().positive().catch(50), page: z.coerce.number().int().positive().catch(1), search: z.string().catch(''), filterId: z.string().catch(''), - filterName: z.string().catch(''), entity: z.string().catch(''), }); + export const IndividualsSearchSchema = (authenticatedUserId: string) => SearchSchema.extend({ - sortBy: z - .enum(['firstName', 'lastName', 'email', 'phone', 'caseCreatedAt', 'approvalState']) - .catch('caseCreatedAt'), + sortBy: z.enum(['firstName', 'lastName', 'email', 'createdAt']).catch('createdAt'), filter: z .object({ - approvalState: z.array(z.enum(States)).catch([]), assigneeId: z.array(z.string().nullable()).catch([authenticatedUserId, null]), - caseStatus: z.array(z.enum(CaseStatuses)).catch([CaseStatus.ACTIVE]), + status: z.array(z.enum(CaseStatuses)).catch([CaseStatus.ACTIVE]), }) .catch({ - approvalState: [], assigneeId: [authenticatedUserId, null], - caseStatus: [CaseStatus.ACTIVE], + status: [CaseStatus.ACTIVE], }), }); export const BusinessesSearchSchema = (authenticatedUserId: string) => SearchSchema.extend({ - sortBy: z.enum(['caseCreatedAt', 'companyName']).catch('caseCreatedAt'), + sortBy: z.enum(['createdAt', 'companyName']).catch('createdAt'), filter: z .object({ assigneeId: z.array(z.string().nullable()).catch([authenticatedUserId, null]), - caseStatus: z.array(z.enum(CaseStatuses)).catch([CaseStatus.ACTIVE]), + status: z.array(z.enum(CaseStatuses)).catch([CaseStatus.ACTIVE]), }) .catch({ assigneeId: [authenticatedUserId, null], - caseStatus: [CaseStatus.ACTIVE], + status: [CaseStatus.ACTIVE], }), }); diff --git a/apps/backoffice-v2/src/common/hooks/useSort/sort.ts b/apps/backoffice-v2/src/common/hooks/useSort/sort.ts deleted file mode 100644 index 2c2b494c5e..0000000000 --- a/apps/backoffice-v2/src/common/hooks/useSort/sort.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AnyArray, TKeyofArrayElement } from '../../types'; - -export const sort = <TArray extends AnyArray>( - { - data, - sortBy, - sortDir, - }: { - data: TArray; - sortBy: TKeyofArrayElement<TArray>; - sortDir: 'asc' | 'desc'; - }, // Avoid errors stemming from calling array methods on non-arrays or empty arrays. -) => - !Array.isArray(data) || !data?.length - ? [] - : data?.slice().sort((a, b) => { - const aValue = String(a[sortBy]); - const bValue = String(b[sortBy]); - - if (sortDir === 'asc') { - return aValue.localeCompare(bValue); - } - - return bValue.localeCompare(aValue); - }); diff --git a/apps/backoffice-v2/src/common/hooks/useSort/useSort.tsx b/apps/backoffice-v2/src/common/hooks/useSort/useSort.tsx deleted file mode 100644 index f66db9b7a3..0000000000 --- a/apps/backoffice-v2/src/common/hooks/useSort/useSort.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { AnyArray, TKeyofArrayElement } from '../../types'; -import { sort } from './sort'; -import { useSearchParamsByEntity } from '../useSearchParamsByEntity/useSearchParamsByEntity'; - -/** - * @description A hook to easily sort an array of objects by key, and change sort direction or the sort by key. - * @param props - * @param props.data - The data to sort. - * @param props.initialState - An object of the initial sorting direction and sort by state. - */ -export const useSort = <TArray extends AnyArray>({ - data, - initialState, -}: { - data: TArray; - initialState: { - sortDir?: 'asc' | 'desc'; - sortBy: TKeyofArrayElement<TArray>; - }; -}) => { - const [ - { sortBy = initialState?.sortBy, sortDir = initialState?.sortDir ?? 'asc' }, - setSearchParams, - ] = useSearchParamsByEntity(); - // Sort - const sorted = useMemo( - () => - sort({ - data, - sortBy, - sortDir, - }), - [data, sortDir, sortBy], - ); - const onSortDir = useCallback(() => { - setSearchParams({ - sortDir: sortDir === 'asc' ? 'desc' : 'asc', - }); - }, [setSearchParams, sortDir]); - const onSortBy = useCallback( - (sortBy: string) => { - setSearchParams({ - sortBy, - }); - }, - [setSearchParams], - ); - - return { - sortBy, - sortDir, - sorted, - onSortDir, - onSortBy, - }; -}; diff --git a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx index b652ad2f23..5617e4423f 100644 --- a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx +++ b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx @@ -1,11 +1,11 @@ -import { z, ZodSchema } from 'zod'; +import { AnyZodObject, z } from 'zod'; import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; import { useCallback, useEffect, useMemo } from 'react'; import { IUseZodSearchParams } from './interfaces'; import { defaultDeserializer } from './utils/default-deserializer'; import { defaultSerializer } from './utils/default-serializer'; -export const useZodSearchParams = <TSchema extends ZodSchema>( +export const useZodSearchParams = <TSchema extends AnyZodObject>( schema: TSchema, options: IUseZodSearchParams = {}, ) => { diff --git a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/utils/default-deserializer.ts b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/utils/default-deserializer.ts index 7a65ae3545..ca96c8e67c 100644 --- a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/utils/default-deserializer.ts +++ b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/utils/default-deserializer.ts @@ -1,7 +1,8 @@ import qs from 'qs'; import { parseNullAndEmptyArrayDeep } from './parse-null-and-empty-array-deep'; +import { IUseZodSearchParams } from '../interfaces'; -export const defaultDeserializer = (searchParams: string) => { +export const defaultDeserializer: IUseZodSearchParams['deserializer'] = (searchParams: string) => { const parsedSearchParams = qs.parse(searchParams, { ignoreQueryPrefix: true, strictNullHandling: true, diff --git a/apps/backoffice-v2/src/domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery.tsx b/apps/backoffice-v2/src/domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery.tsx index 53fcf71c0b..b7b676b253 100644 --- a/apps/backoffice-v2/src/domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery.tsx +++ b/apps/backoffice-v2/src/domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery.tsx @@ -2,5 +2,9 @@ import { useQuery } from '@tanstack/react-query'; import { authQueryKeys } from '../../../query-keys'; export const useAuthenticatedUserQuery = () => { - return useQuery(authQueryKeys.authenticatedUser()); + return useQuery({ + ...authQueryKeys.authenticatedUser(), + staleTime: 100_000, + refetchInterval: 100_000, + }); }; diff --git a/apps/backoffice-v2/src/domains/businesses/fetchers.ts b/apps/backoffice-v2/src/domains/businesses/fetchers.ts deleted file mode 100644 index 7f15ba4f21..0000000000 --- a/apps/backoffice-v2/src/domains/businesses/fetchers.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { apiClient } from '../../common/api-client/api-client'; -import { handleZodError } from '../../common/utils/handle-zod-error/handle-zod-error'; -import { Method } from '../../common/enums'; -import { BusinessByIdSchema, BusinessesListSchema } from './validation-schemas'; - -export const fetchBusinesses = async (filterId: string) => { - const [businesses, error] = await apiClient({ - endpoint: `businesses?filterId=${filterId ?? ''}`, - method: Method.GET, - schema: BusinessesListSchema, - }); - - return handleZodError(error, businesses); -}; - -export const fetchBusinessById = async ({ - businessId, - filterId, -}: { - businessId: string; - filterId: string; -}) => { - const [business, error] = await apiClient({ - endpoint: `businesses/${businessId}?filterId=${filterId ?? ''}`, - method: Method.GET, - schema: BusinessByIdSchema, - }); - - return handleZodError(error, business); -}; diff --git a/apps/backoffice-v2/src/domains/businesses/query-keys.ts b/apps/backoffice-v2/src/domains/businesses/query-keys.ts deleted file mode 100644 index 6a59098270..0000000000 --- a/apps/backoffice-v2/src/domains/businesses/query-keys.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createQueryKeys } from '@lukemorales/query-key-factory'; -import { fetchBusinessById, fetchBusinesses } from './fetchers'; - -export const businessesQueryKeys = createQueryKeys('businesses', { - list: (filterId: string) => ({ - queryKey: [{ filterId }], - queryFn: () => fetchBusinesses(filterId), - }), - byId: (businessId: string, filterId: string) => ({ - queryKey: [{ businessId, filterId }], - queryFn: () => - fetchBusinessById({ - businessId, - filterId, - }), - }), -}); diff --git a/apps/backoffice-v2/src/domains/businesses/types.ts b/apps/backoffice-v2/src/domains/businesses/types.ts deleted file mode 100644 index ca97b7eff5..0000000000 --- a/apps/backoffice-v2/src/domains/businesses/types.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type TBusiness = any; -export type TBusinesses = any; diff --git a/apps/backoffice-v2/src/domains/businesses/validation-schemas.ts b/apps/backoffice-v2/src/domains/businesses/validation-schemas.ts deleted file mode 100644 index 9928008b70..0000000000 --- a/apps/backoffice-v2/src/domains/businesses/validation-schemas.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { z } from 'zod'; -import { CaseStatuses, State, States } from '../../common/enums'; -import { ObjectWithIdSchema } from '../../lib/zod/utils/object-with-id/object-with-id'; - -export const BusinessesListSchema = z - .array( - ObjectWithIdSchema.extend({ - companyName: z.string().default(''), - registrationNumber: z.string().nullable().default(''), - legalForm: z.string().nullable().default(''), - countryOfIncorporation: z.string().nullable().default(''), - createdAt: z.string().default(''), - approvalState: z.enum(States).default(State.PROCESSING), - workflowRuntimeData: z.preprocess( - workflows => workflows?.[0], - ObjectWithIdSchema.extend({ - assigneeId: z.string().nullable().optional(), - createdAt: z.string().datetime(), - status: z.enum(CaseStatuses), - }).optional(), - ), - }), - ) - .default([]); - -export const BusinessByIdSchema = ObjectWithIdSchema.extend({ - companyName: z.string().default(''), - registrationNumber: z.string().nullable().default(''), - legalForm: z.string().nullable().default(''), - countryOfIncorporation: z.string().nullable().default(''), - dateOfIncorporation: z.string().nullable().default(''), - address: z.string().nullable().default(''), - phoneNumber: z.string().nullable().default(''), - email: z.string().nullable().default(''), - website: z.string().nullable().default(''), - industry: z.string().nullable().default(''), - taxIdentificationNumber: z.string().nullable().default(''), - vatNumber: z.string().nullable().default(''), - shareholderStructure: z.string().nullable().default(''), - numberOfEmployees: z.number().nullable().default(0), - businessPurpose: z.string().nullable().default(''), - // documents: z - // .array( - // z.object({ - // url: z.string(), - // doctype: z.string(), - // }), - // ) - // .default([]), - documents: z.any(), - approvalState: z.enum(States).default(State.PROCESSING), - createdAt: z.string().default(''), - updatedAt: z.string().default(''), -}).default({}); diff --git a/apps/backoffice-v2/src/domains/entities/hooks/mutations/useApproveEntityMutation/useApproveEntityMutation.tsx b/apps/backoffice-v2/src/domains/entities/hooks/mutations/useApproveEntityMutation/useApproveEntityMutation.tsx index 915a62b832..567152a07a 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/mutations/useApproveEntityMutation/useApproveEntityMutation.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/mutations/useApproveEntityMutation/useApproveEntityMutation.tsx @@ -1,23 +1,18 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; import toast from 'react-hot-toast'; import { t } from 'i18next'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; -import { queryKeys } from '../../../query-keys'; import { fetchWorkflowEvent } from '../../../../workflows/fetchers'; +import { workflowsQueryKeys } from '../../../../workflows/query-keys'; +// @TODO: Refactor to be under cases/workflows domain export const useApproveEntityMutation = ({ - endUserId, workflowId, onSelectNextEntity, }: { - endUserId: string; workflowId: string; onSelectNextEntity: VoidFunction; }) => { const queryClient = useQueryClient(); - const filterId = useFilterId(); - const entity = useFilterEntity(); return useMutation({ mutationFn: () => @@ -28,12 +23,8 @@ export const useApproveEntityMutation = ({ }, }), onSuccess: () => { - void queryClient.invalidateQueries({ - queryKey: queryKeys[entity as keyof typeof queryKeys]?.list?.(filterId).queryKey, - }); - void queryClient.invalidateQueries({ - queryKey: queryKeys[entity as keyof typeof queryKeys]?.byId?.(endUserId, filterId).queryKey, - }); + // workflowsQueryKeys._def is the base key for all workflows queries + void queryClient.invalidateQueries(workflowsQueryKeys._def); toast.success(t('toast:approve_case.success')); diff --git a/apps/backoffice-v2/src/domains/entities/hooks/mutations/useRejectEntityMutation/useRejectEntityMutation.tsx b/apps/backoffice-v2/src/domains/entities/hooks/mutations/useRejectEntityMutation/useRejectEntityMutation.tsx index 6e91fa80b2..beb94f0ef3 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/mutations/useRejectEntityMutation/useRejectEntityMutation.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/mutations/useRejectEntityMutation/useRejectEntityMutation.tsx @@ -1,24 +1,19 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Action } from '../../../../../common/enums'; -import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; import toast from 'react-hot-toast'; import { t } from 'i18next'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; import { fetchWorkflowEvent } from '../../../../workflows/fetchers'; -import { queryKeys } from '../../../query-keys'; +import { workflowsQueryKeys } from '../../../../workflows/query-keys'; +// @TODO: Refactor to be under cases/workflows domain export const useRejectEntityMutation = ({ workflowId, - entityId, onSelectNextEntity, }: { workflowId: string; - entityId: string; onSelectNextEntity: VoidFunction; }) => { const queryClient = useQueryClient(); - const filterId = useFilterId(); - const entity = useFilterEntity(); return useMutation({ mutationFn: ( @@ -45,12 +40,8 @@ export const useRejectEntityMutation = ({ }, }), onSuccess: (data, payload) => { - void queryClient.invalidateQueries({ - queryKey: queryKeys[entity]?.list?.(filterId).queryKey, - }); - void queryClient.invalidateQueries({ - queryKey: queryKeys[entity].byId(entityId, filterId).queryKey, - }); + // workflowsQueryKeys._def is the base key for all workflows queries + void queryClient.invalidateQueries(workflowsQueryKeys._def); const action = payload.action === Action.REJECT ? 'reject_case' : 'ask_resubmit_case'; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesQuery/useEntitiesQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesQuery/useEntitiesQuery.tsx deleted file mode 100644 index 26e23544c4..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesQuery/useEntitiesQuery.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useQuery, UseQueryOptions } from '@tanstack/react-query'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; -import { queryKeys } from '../../../query-keys'; -import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; -import { TEntities } from '../../../types'; -import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; - -export const useEntitiesQuery = <TQueryFnData = TEntities,>( - options: UseQueryOptions<TQueryFnData> & { - select?: (entities: TEntities) => TQueryFnData; - }, -) => { - const entity = useFilterEntity(); - const filterId = useFilterId(); - const isAuthenticated = useIsAuthenticated(); - - return useQuery({ - ...queryKeys[entity as keyof typeof queryKeys]?.list?.(filterId), - enabled: !!filterId && isAuthenticated, - ...options, - }); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesWithWorkflowsQuery/useEntitiesWithWorkflowsQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesWithWorkflowsQuery/useEntitiesWithWorkflowsQuery.tsx deleted file mode 100644 index 28f37908c3..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntitiesWithWorkflowsQuery/useEntitiesWithWorkflowsQuery.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useEntitiesQuery } from '../useEntitiesQuery/useEntitiesQuery'; -import { TUsers } from '../../../../users/types'; -import { env } from '../../../../../common/env/env'; -import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; - -export const useEntitiesWithWorkflowsQuery = (users: TUsers) => { - const isAuthenticated = useIsAuthenticated(); - - return useEntitiesQuery({ - select: entities => - entities.map(entity => { - const assigneeId = entity?.workflowRuntimeData?.assigneeId; - - return { - ...entity, - assigneeId, - assigneeFullName: users?.find(user => user?.id === assigneeId)?.fullName, - caseCreatedAt: entity?.workflowRuntimeData?.createdAt, - caseStatus: entity?.workflowRuntimeData?.status, - }; - }), - enabled: isAuthenticated, - refetchInterval: env.VITE_ASSIGNMENT_POLLING_INTERVAL, - }); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityQuery/useEntityQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityQuery/useEntityQuery.tsx deleted file mode 100644 index 95956448e5..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityQuery/useEntityQuery.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { isString } from '../../../../../common/utils/is-string/is-string'; -import { queryKeys } from '../../../query-keys'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; -import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; -import { TEntity } from '../../../types'; -import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; - -export const useEntityQuery = <TQueryFnData = TEntity,>({ - entityId, - select, -}: { - entityId: string; - select?: (data: TEntity) => TQueryFnData; -}) => { - const entity = useFilterEntity(); - const filterId = useFilterId(); - const isAuthenticated = useIsAuthenticated(); - - return useQuery({ - ...queryKeys[entity as keyof typeof queryKeys]?.byId?.(entityId, filterId), - enabled: isString(entityId) && !!entityId?.length && !!filterId && isAuthenticated, - select, - }); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery.tsx deleted file mode 100644 index 465d6795dc..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useEntityQuery } from '../useEntityQuery/useEntityQuery'; -import { useWorkflowQuery } from '../../../../workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; -import { useWorkflowsQuery } from '../../../../workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; - -export const useEntityWithWorkflowQuery = (entityId: string) => { - const entity = useFilterEntity(); - const workflowId = useWorkflowsQuery()?.data?.find( - workflow => - (entity === 'individuals' && workflow.endUserId === entityId) || - (entity === 'businesses' && workflow.businessId === entityId), - )?.id; - const { data: workflow } = useWorkflowQuery({ workflowId }); - - return useEntityQuery({ - entityId, - select: entity => ({ - ...entity, - workflow, - }), - }); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useFirstEntityIdQuery/useFirstEntityIdQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useFirstEntityIdQuery/useFirstEntityIdQuery.tsx deleted file mode 100644 index b009edae4d..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useFirstEntityIdQuery/useFirstEntityIdQuery.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useCallback } from 'react'; -import { sort } from '../../../../../common/hooks/useSort/sort'; -import { useSelectEntitiesQuery } from '../useSelectEntitiesQuery/useSelectEntitiesQuery'; -import { TEntities } from '../../../types'; -import { useUsersQuery } from '../../../../users/hooks/queries/useUsersQuery/useUsersQuery'; -import { useSearchParamsByEntity } from '../../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; - -export const useFirstEntityIdQuery = ({ - initialState, -}: { - initialState: { - sortDir?: 'asc' | 'desc'; - sortBy: keyof TEntities[number]; - }; -}) => { - const [{ sortBy = initialState?.sortBy, sortDir = initialState?.sortDir ?? 'asc' }] = - useSearchParamsByEntity(); - const { data: users } = useUsersQuery(); - const selectFirstEntityId = useCallback( - (entities: TEntities) => { - return sort({ - data: entities.map(entity => { - const assigneeId = entity?.workflowRuntimeData?.assigneeId; - - return { - ...entity, - assigneeId, - assigneeFullName: users?.find(user => user?.id === assigneeId)?.fullName, - caseCreatedAt: entity?.workflowRuntimeData?.createdAt, - }; - }), - sortBy, - sortDir, - })?.[0]?.id; - }, - [sortDir, sortBy, users], - ); - - return useSelectEntitiesQuery(selectFirstEntityId); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useNextEntityIdQuery/useNextEntityIdQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useNextEntityIdQuery/useNextEntityIdQuery.tsx deleted file mode 100644 index c64abaa0e1..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useNextEntityIdQuery/useNextEntityIdQuery.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { useParams } from 'react-router-dom'; -import { useCallback } from 'react'; -import { sort } from '../../../../../common/hooks/useSort/sort'; -import { useSelectEntitiesQuery } from '../useSelectEntitiesQuery/useSelectEntitiesQuery'; -import { TEntities } from '../../../types'; -import { useSearchParamsByEntity } from '../../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; - -export const useNextEntityIdQuery = ({ - initialState, -}: { - initialState: { - sortDir?: 'asc' | 'desc'; - sortBy: keyof TEntities[number]; - }; -}) => { - const { entityId } = useParams(); - const [{ sortBy = initialState?.sortBy, sortDir = initialState?.sortDir ?? 'asc' }] = - useSearchParamsByEntity(); - const selectNextEntityId = useCallback( - (data: TEntities) => { - if (!entityId) return; - - const sorted = sort({ data, sortBy, sortDir }); - const nextEntityIndex = sorted?.findIndex(entity => entity.id === entityId) + 1; - - return sorted?.[nextEntityIndex]?.id; - }, - [entityId, sortBy, sortDir], - ); - - return useSelectEntitiesQuery(selectNextEntityId); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/queries/useSelectEntitiesQuery/useSelectEntitiesQuery.tsx b/apps/backoffice-v2/src/domains/entities/hooks/queries/useSelectEntitiesQuery/useSelectEntitiesQuery.tsx deleted file mode 100644 index 3ae52f9ad1..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/queries/useSelectEntitiesQuery/useSelectEntitiesQuery.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { queryKeys } from '../../../query-keys'; -import { useFilterEntity } from '../../useFilterEntity/useFilterEntity'; -import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; -import { TEntities } from '../../../types'; -import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; - -export const useSelectEntitiesQuery = <TQueryFnData = TEntities,>( - select: (data: TEntities) => TQueryFnData, -) => { - const entity = useFilterEntity(); - const filterId = useFilterId(); - const isAuthenticated = useIsAuthenticated(); - - return useQuery({ - ...queryKeys[entity as keyof typeof queryKeys]?.list?.(filterId), - enabled: !!filterId && isAuthenticated, - select, - }); -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx index b0d1417340..880244bacc 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx @@ -6,15 +6,15 @@ import { useNavigate, useParams } from 'react-router-dom'; export const useSelectEntityFilterOnMount = () => { const { data: filters } = useFiltersQuery(); const { locale } = useParams(); - const [{ entity, filterId, filterName }, setSearchParams] = useSearchParamsByEntity(); + const [{ entity, filterId }, setSearchParams] = useSearchParamsByEntity(); const navigate = useNavigate(); const [firstFilter] = filters ?? []; useEffect(() => { - if ((entity && filterId && filterName) || !firstFilter) return; + if ((entity && filterId) || !firstFilter) return; navigate( - `/${locale}/case-management/entities?entity=${firstFilter?.entity}&filterId=${firstFilter?.id}&filterName=${firstFilter?.name}`, + `/${locale}/case-management/entities?entity=${firstFilter?.entity}&filterId=${firstFilter?.id}`, ); - }, [entity, filterId, filterName, firstFilter, setSearchParams]); + }, [entity, filterId, firstFilter, setSearchParams]); }; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx index 6152e13d72..f2590ce606 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx @@ -1,25 +1,27 @@ import { useEffect } from 'react'; -import { useFirstEntityIdQuery } from '../queries/useFirstEntityIdQuery/useFirstEntityIdQuery'; import { useParams } from 'react-router-dom'; import { useSelectEntity } from '../useSelectEntity/useSelectEntity'; import { useFilterEntity } from '../useFilterEntity/useFilterEntity'; +import { useWorkflowsQuery } from '../../../workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; +import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; /** * @description Sets the selected end user to the first end user in the array on mount if no user is currently selected. Returns the select end user handler. */ export const useSelectEntityOnMount = () => { const { entityId } = useParams(); - const { data: firstEntityId } = useFirstEntityIdQuery({ - initialState: { - sortBy: 'caseCreatedAt', - }, - }); + const [{ filterId, filter, sortBy, sortDir, page, pageSize }] = useSearchParamsByEntity(); + const { data } = useWorkflowsQuery({ filterId, filter, sortBy, sortDir, page, pageSize }); + const { data: workflows } = data || { data: [] }; const onSelectEntity = useSelectEntity(); const entity = useFilterEntity(); + const firstCaseId = workflows?.[0]?.id; useEffect(() => { - if (!firstEntityId || entityId) return; + if (entityId) return; - onSelectEntity(firstEntityId)(); - }, [entity, firstEntityId, entityId, onSelectEntity]); + if (!firstCaseId) return; + + onSelectEntity(firstCaseId)(); + }, [entity, firstCaseId, entityId, onSelectEntity]); }; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectNextEntity/useSelectNextEntity.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectNextEntity/useSelectNextEntity.tsx index 62fe0966ac..a13c1d537d 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectNextEntity/useSelectNextEntity.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectNextEntity/useSelectNextEntity.tsx @@ -1,14 +1,8 @@ -import { useSelectEntity } from '../useSelectEntity/useSelectEntity'; -import { useNextEntityIdQuery } from '../queries/useNextEntityIdQuery/useNextEntityIdQuery'; import { useCallback } from 'react'; export const useSelectNextEntity = () => { - const { data: nextId } = useNextEntityIdQuery({ - initialState: { - sortBy: 'caseCreatedAt', - }, - }); - const onSelectNextEntity = useSelectEntity(); - - return useCallback(() => onSelectNextEntity(nextId)(), [onSelectNextEntity, nextId]); + return useCallback(() => { + // @TODO: Implement + throw new Error('Not implemented'); + }, []); }; diff --git a/apps/backoffice-v2/src/domains/entities/query-keys.ts b/apps/backoffice-v2/src/domains/entities/query-keys.ts deleted file mode 100644 index 7dc8ac30e0..0000000000 --- a/apps/backoffice-v2/src/domains/entities/query-keys.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { individualsQueryKeys } from '../individuals/query-keys'; -import { businessesQueryKeys } from '../businesses/query-keys'; - -export const queryKeys = { - individuals: individualsQueryKeys, - businesses: businessesQueryKeys, -} as const; diff --git a/apps/backoffice-v2/src/domains/entities/types.ts b/apps/backoffice-v2/src/domains/entities/types.ts deleted file mode 100644 index ae37633730..0000000000 --- a/apps/backoffice-v2/src/domains/entities/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TBusiness, TBusinesses } from '../businesses/types'; -import { TIndividual, TIndividuals } from '../individuals/types'; - -export type TEntity = TIndividual | TBusiness; -export type TEntities = TIndividuals | TBusinesses; diff --git a/apps/backoffice-v2/src/domains/filters/fetchers.ts b/apps/backoffice-v2/src/domains/filters/fetchers.ts index 136fcec82a..79c9409b1d 100644 --- a/apps/backoffice-v2/src/domains/filters/fetchers.ts +++ b/apps/backoffice-v2/src/domains/filters/fetchers.ts @@ -20,7 +20,7 @@ export const fetchFilters = async () => { method: Method.GET, schema: z.array( ObjectWithIdSchema.extend({ - entity: z.string(), + entity: z.enum(['individuals', 'businesses']), name: z.string(), }), ), diff --git a/apps/backoffice-v2/src/domains/filters/hooks/queries/useFiltersQuery/useFiltersQuery.tsx b/apps/backoffice-v2/src/domains/filters/hooks/queries/useFiltersQuery/useFiltersQuery.tsx index c9e7cc4ade..a7af38e13b 100644 --- a/apps/backoffice-v2/src/domains/filters/hooks/queries/useFiltersQuery/useFiltersQuery.tsx +++ b/apps/backoffice-v2/src/domains/filters/hooks/queries/useFiltersQuery/useFiltersQuery.tsx @@ -2,5 +2,9 @@ import { useQuery } from '@tanstack/react-query'; import { filtersQueryKeys } from '../../../query-keys'; export const useFiltersQuery = () => { - return useQuery(filtersQueryKeys.list()); + return useQuery({ + ...filtersQueryKeys.list(), + staleTime: 1_000_000, + refetchInterval: 1_000_000, + }); }; diff --git a/apps/backoffice-v2/src/domains/individuals/fetchers.ts b/apps/backoffice-v2/src/domains/individuals/fetchers.ts deleted file mode 100644 index 18f1578ce2..0000000000 --- a/apps/backoffice-v2/src/domains/individuals/fetchers.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { apiClient } from '../../common/api-client/api-client'; -import { IndividualByIdSchema, IndividualsListSchema } from './validation-schemas'; -import { handleZodError } from '../../common/utils/handle-zod-error/handle-zod-error'; -import { Method } from '../../common/enums'; - -export const fetchIndividuals = async (filterId: string) => { - const [individuals, error] = await apiClient({ - endpoint: `end-users?filterId=${filterId ?? ''}`, - method: Method.GET, - schema: IndividualsListSchema, - }); - - return handleZodError(error, individuals); -}; - -export const fetchIndividualById = async (individualId: string, filterId: string) => { - const [individual, error] = await apiClient({ - endpoint: `end-users/${individualId}?filterId=${filterId ?? ''}`, - method: Method.GET, - schema: IndividualByIdSchema, - }); - - return handleZodError(error, individual); -}; - -export const fetchUpdateIndividualById = async ( - individualId: string, - body: Record<PropertyKey, unknown>, -) => { - const [individual, error] = await apiClient({ - endpoint: `end-users/${individualId}`, - method: Method.PATCH, - body, - schema: IndividualByIdSchema, - }); - - return handleZodError(error, individual); -}; diff --git a/apps/backoffice-v2/src/domains/individuals/query-keys.ts b/apps/backoffice-v2/src/domains/individuals/query-keys.ts deleted file mode 100644 index 083bd4ddbe..0000000000 --- a/apps/backoffice-v2/src/domains/individuals/query-keys.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createQueryKeys } from '@lukemorales/query-key-factory'; -import { fetchIndividualById, fetchIndividuals } from './fetchers'; - -export const individualsQueryKeys = createQueryKeys('individuals', { - list: (filterId: string) => ({ - queryKey: [{ filterId }], - queryFn: () => fetchIndividuals(filterId), - }), - byId: (individualId: string, filterId: string) => ({ - queryKey: [{ individualId, filterId }], - queryFn: () => fetchIndividualById(individualId, filterId), - }), -}); diff --git a/apps/backoffice-v2/src/domains/individuals/types.ts b/apps/backoffice-v2/src/domains/individuals/types.ts index 58147727b2..d555fd7328 100644 --- a/apps/backoffice-v2/src/domains/individuals/types.ts +++ b/apps/backoffice-v2/src/domains/individuals/types.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { IndividualByIdSchema, IndividualsListSchema } from './validation-schemas'; +import { IndividualByIdSchema } from './validation-schemas'; +// @TODO: Remove export type TIndividual = z.infer<typeof IndividualByIdSchema>; -export type TIndividuals = z.infer<typeof IndividualsListSchema>; diff --git a/apps/backoffice-v2/src/domains/individuals/validation-schemas.ts b/apps/backoffice-v2/src/domains/individuals/validation-schemas.ts index 89d1cd8b9d..c0b3d23236 100644 --- a/apps/backoffice-v2/src/domains/individuals/validation-schemas.ts +++ b/apps/backoffice-v2/src/domains/individuals/validation-schemas.ts @@ -2,36 +2,6 @@ import { z } from 'zod'; import { ObjectWithIdSchema } from '../../lib/zod/utils/object-with-id/object-with-id'; import { CaseStatuses, State, States } from '../../common/enums'; -export const IndividualsListSchema = z - .array( - ObjectWithIdSchema.extend({ - avatarUrl: z.string().nullable().default(''), - createdAt: z.string().default(''), - firstName: z.string().nullable().default(''), - middleName: z.string().default(''), - lastName: z.string().nullable().default(''), - fullName: z.string().default(''), - email: z.string().nullable().default(''), - phone: z.string().nullable().default(''), - approvalState: z.enum(States).default(State.PROCESSING), - endUserType: z.string().nullable().default(''), - workflowRuntimeData: z.preprocess( - workflows => workflows?.[0], - ObjectWithIdSchema.extend({ - assigneeId: z.string().nullable().optional(), - createdAt: z.string().datetime(), - status: z.enum(CaseStatuses), - }).optional(), - ), - }).transform(({ firstName, lastName, ...rest }) => ({ - ...rest, - firstName, - lastName, - fullName: `${firstName} ${lastName}`, - })), - ) - .default([]); - export const IndividualByIdSchema = ObjectWithIdSchema.extend({ avatarUrl: z.string().nullable().default(''), createdAt: z.string().default(''), diff --git a/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFileQuery/useStorageFileQuery.tsx b/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFileQuery/useStorageFileQuery.tsx deleted file mode 100644 index e2f1fe3dd4..0000000000 --- a/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFileQuery/useStorageFileQuery.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; -import { isString } from '../../../../../common/utils/is-string/is-string'; - -import { storageQueryKeys } from '../../../query-keys'; - -export const useStorageFileQuery = (fileId: string) => - useQuery({ - ...storageQueryKeys.fileById(fileId), - enabled: isString(fileId) && !!fileId.length, - }); diff --git a/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery.tsx b/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery.tsx index 314f329db4..1dea9ae5ca 100644 --- a/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery.tsx +++ b/apps/backoffice-v2/src/domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery.tsx @@ -11,6 +11,8 @@ export const useStorageFilesQuery = (fileIds: Array<string>) => { fileIds?.map(fileId => ({ ...storageQueryKeys.fileById(fileId), enabled: isString(fileId) && !!fileId?.length && isAuthenticated, + staleTime: 100_000, + refetchInterval: 100_000, })) ?? [], }); }; diff --git a/apps/backoffice-v2/src/domains/users/hooks/queries/useUsersQuery/useUsersQuery.tsx b/apps/backoffice-v2/src/domains/users/hooks/queries/useUsersQuery/useUsersQuery.tsx index b2a6943298..d6ec28a490 100644 --- a/apps/backoffice-v2/src/domains/users/hooks/queries/useUsersQuery/useUsersQuery.tsx +++ b/apps/backoffice-v2/src/domains/users/hooks/queries/useUsersQuery/useUsersQuery.tsx @@ -10,5 +10,6 @@ export const useUsersQuery = () => { ...usersQueryKeys.list(), enabled: isAuthenticated, refetchInterval: env.VITE_ASSIGNMENT_POLLING_INTERVAL, + staleTime: 1_000_000, }); }; diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index 06657452f9..0de3dfe28f 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -2,31 +2,85 @@ import { apiClient } from '../../common/api-client/api-client'; import { z } from 'zod'; import { handleZodError } from '../../common/utils/handle-zod-error/handle-zod-error'; import { ObjectWithIdSchema } from '../../lib/zod/utils/object-with-id/object-with-id'; -import { Method } from '../../common/enums'; +import { Method, States } from '../../common/enums'; import { IWorkflowId } from './interfaces'; +import qs from 'qs'; + +export const fetchWorkflows = async (params: { + filterId: string; + orderBy: string; + page: { + number: number; + size: number; + }; + filter: Record<string, unknown>; +}) => { + const queryParams = qs.stringify(params, { encode: false }); -export const fetchWorkflows = async () => { const [workflows, error] = await apiClient({ - endpoint: `workflows/active-states`, + endpoint: `workflows?${queryParams}`, method: Method.GET, - schema: z.array( - ObjectWithIdSchema.extend({ - state: z.string().nullable(), - endUserId: z.string().nullable(), - businessId: z.string().nullable(), - assigneeId: z.string().nullable(), + schema: z.object({ + data: z.array( + z.object({ + id: z.string(), + status: z.string(), + createdAt: z.string().datetime(), + entity: ObjectWithIdSchema.extend({ + name: z.string(), + avatarUrl: z.string().nullable(), + approvalState: z.enum(States), + }), + assignee: ObjectWithIdSchema.extend({ + firstName: z.string(), + lastName: z.string(), + }).nullable(), + }), + ), + meta: z.object({ + totalItems: z.number().nonnegative(), + totalPages: z.number().nonnegative(), }), - ), + }), }); return handleZodError(error, workflows); }; -export const fetchWorkflowById = async ({ workflowId }: IWorkflowId) => { +export const fetchWorkflowById = async ({ + workflowId, + filterId, +}: { + workflowId: string; + filterId: string; +}) => { const [workflow, error] = await apiClient({ - endpoint: `workflows/${workflowId}`, + endpoint: `workflows/${workflowId}?filterId=${filterId}`, method: Method.GET, - schema: z.any(), + schema: z.object({ + id: z.string(), + status: z.string(), + nextEvents: z.array(z.any()), + workflowDefinition: ObjectWithIdSchema.extend({ + name: z.string(), + contextSchema: z.record(z.any(), z.any()).nullable(), + config: z.record(z.any(), z.any()).nullable(), + }), + createdAt: z.string().datetime(), + context: z.object({ + documents: z.array(z.any()), + entity: z.record(z.any(), z.any()), + }), + entity: ObjectWithIdSchema.extend({ + name: z.string(), + avatarUrl: z.string().nullable(), + approvalState: z.enum(States), + }), + assignee: ObjectWithIdSchema.extend({ + firstName: z.string(), + lastName: z.string(), + }).nullable(), + }), }); return handleZodError(error, workflow); diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx index 9b3b5e8975..07d4f11b71 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx @@ -1,12 +1,14 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import toast from 'react-hot-toast'; import { t } from 'i18next'; -import { workflowsQueryKeys } from '../../../query-keys'; import { fetchUpdateWorkflowById } from '../../../fetchers'; +import { useWorkflowQuery } from '../../queries/useWorkflowQuery/useWorkflowQuery'; +import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; export const useUpdateWorkflowByIdMutation = ({ workflowId }: { workflowId: string }) => { const queryClient = useQueryClient(); - const workflowById = workflowsQueryKeys.byId({ workflowId }); + const filterId = useFilterId(); + const { data: workflowById } = useWorkflowQuery({ workflowId, filterId }); return useMutation({ mutationFn: ({ diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx index 5eb8402169..6f54598d0e 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery.tsx @@ -1,41 +1,16 @@ import { useQuery } from '@tanstack/react-query'; -import { createWorkflow } from '@ballerine/workflow-browser-sdk'; -import { isString } from '../../../../../common/utils/is-string/is-string'; import { workflowsQueryKeys } from '../../../query-keys'; -import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; - -export const useWorkflowQuery = ({ workflowId }: { workflowId: string }) => { - const isAuthenticated = useIsAuthenticated(); +export const useWorkflowQuery = ({ + workflowId, + filterId, +}: { + workflowId: string; + filterId: string; +}) => { return useQuery({ - ...workflowsQueryKeys.byId({ workflowId }), - enabled: isString(workflowId) && !!workflowId.length && isAuthenticated, - select: ({ workflowDefinition, workflowRuntimeData }) => { - const { definition, definitionType, ...rest } = workflowDefinition; - const workflow = { - ...rest, - definitionType, - definition: { - ...definition, - initial: workflowRuntimeData?.state ?? definition?.initial, - context: workflowRuntimeData?.context, - }, - workflowContext: { - machineContext: { - ...workflowRuntimeData?.context, - }, - state: workflowRuntimeData?.state ?? definition?.initial, - }, - }; - const workflowService = createWorkflow(workflow); - const snapshot = workflowService.getSnapshot(); - - return { - ...workflow, - runtimeDataId: workflowRuntimeData?.id, - assigneeId: workflowRuntimeData?.assigneeId, - nextEvents: snapshot.nextEvents, - }; - }, + ...workflowsQueryKeys.byId({ workflowId, filterId }), + enabled: !!filterId && !!workflowId, + staleTime: 10_000, }); }; diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery.tsx index 6069d3c0d5..5066cea712 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery.tsx @@ -3,8 +3,26 @@ import { useQuery } from '@tanstack/react-query'; import { workflowsQueryKeys } from '../../../query-keys'; import { useIsAuthenticated } from '../../../../auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; -export const useWorkflowsQuery = () => { +export const useWorkflowsQuery = ({ + filterId, + sortBy, + sortDir, + page, + pageSize, + filter, +}: { + filterId: string; + sortBy: string; + sortDir: string; + page: number; + pageSize: number; + filter: Record<string, unknown>; +}) => { const isAuthenticated = useIsAuthenticated(); - return useQuery({ ...workflowsQueryKeys.list(), enabled: isAuthenticated }); + return useQuery({ + ...workflowsQueryKeys.list({ filterId, filter, sortBy, sortDir, page, pageSize }), + enabled: !!filterId && isAuthenticated && !!sortBy && !!sortDir && !!page && !!pageSize, + staleTime: 100_000, + }); }; diff --git a/apps/backoffice-v2/src/domains/workflows/query-keys.ts b/apps/backoffice-v2/src/domains/workflows/query-keys.ts index 10dba81a7b..5a9aa29885 100644 --- a/apps/backoffice-v2/src/domains/workflows/query-keys.ts +++ b/apps/backoffice-v2/src/domains/workflows/query-keys.ts @@ -1,15 +1,37 @@ import { createQueryKeys } from '@lukemorales/query-key-factory'; import { fetchWorkflowById, fetchWorkflows } from './fetchers'; -import { IWorkflowId } from './interfaces'; - export const workflowsQueryKeys = createQueryKeys('workflows', { - list: () => ({ - queryKey: [{}], - queryFn: () => fetchWorkflows(), - }), - byId: ({ workflowId }: IWorkflowId) => ({ - queryKey: [{ workflowId }], - queryFn: () => fetchWorkflowById({ workflowId }), + list: ({ + sortBy, + sortDir, + page, + pageSize, + ...params + }: { + filterId: string; + sortBy: string; + sortDir: string; + page: number; + pageSize: number; + filter: Record<string, unknown>; + }) => { + const data = { + ...params, + orderBy: `${sortBy}:${sortDir}`, + page: { + number: Number(page), + size: Number(pageSize), + }, + }; + + return { + queryKey: [data], + queryFn: () => fetchWorkflows(data), + }; + }, + byId: ({ workflowId, filterId }: { workflowId: string; filterId: string }) => ({ + queryKey: [{ workflowId, filterId }], + queryFn: () => fetchWorkflowById({ workflowId, filterId }), }), }); diff --git a/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts b/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts index 3f1ec90a5a..e95b2488ed 100644 --- a/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts +++ b/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts @@ -1,25 +1,35 @@ -import { searchParamsToObject } from '../../common/hooks/useZodSearchParams/utils/search-params-to-object'; import { authQueryKeys } from '../../domains/auth/query-keys'; import { queryClient } from '../../lib/react-query/query-client'; -import { queryKeys } from '../../domains/entities/query-keys'; import { usersQueryKeys } from '../../domains/users/query-keys'; import { LoaderFunction } from 'react-router-dom'; +import { workflowsQueryKeys } from '../../domains/workflows/query-keys'; +import { defaultDeserializer } from '../../common/hooks/useZodSearchParams/utils/default-deserializer'; export const entitiesLoader: LoaderFunction = async ({ request }) => { - const url = new URL(request.url); - const { entity, filterId } = searchParamsToObject(url.searchParams); + const { entity, filterId, filter, sortBy, sortDir, page, pageSize } = defaultDeserializer( + request.url.split('?')[1], + ); const authenticatedUser = authQueryKeys.authenticatedUser(); const session = await queryClient.ensureQueryData( authenticatedUser.queryKey, authenticatedUser.queryFn, ); - if (!entity || !filterId || !session?.user) return null; + if (!entity || !filterId || !session?.user || !sortBy || !sortDir || !page || !pageSize) { + return null; + } - const entityList = queryKeys[entity].list?.(filterId); const usersList = usersQueryKeys.list(); - await queryClient.ensureQueryData(entityList.queryKey, entityList.queryFn); await queryClient.ensureQueryData(usersList.queryKey, usersList.queryFn); + const workflowList = workflowsQueryKeys.list({ + filterId, + filter, + sortBy, + sortDir, + page, + pageSize, + }); + await queryClient.ensureQueryData(workflowList.queryKey, workflowList.queryFn); return null; }; diff --git a/apps/backoffice-v2/src/pages/Entities/Entities.page.tsx b/apps/backoffice-v2/src/pages/Entities/Entities.page.tsx index 582dac0877..a41e5db43b 100644 --- a/apps/backoffice-v2/src/pages/Entities/Entities.page.tsx +++ b/apps/backoffice-v2/src/pages/Entities/Entities.page.tsx @@ -12,7 +12,7 @@ export const Entities: FunctionComponent = () => { onSearch, onFilter, onSortBy, - onSortDir, + onSortDirToggle, search, cases, isLoading, @@ -28,7 +28,7 @@ export const Entities: FunctionComponent = () => { onSearch={onSearch} onFilter={onFilter} onSortBy={onSortBy} - onSortDir={onSortDir} + onSortDirToggle={onSortDirToggle} search={search} > <MotionScrollArea className={`h-[calc(100vh-210px)]`}> @@ -37,30 +37,18 @@ export const Entities: FunctionComponent = () => { ? skeletonEntities.map(index => ( <Cases.SkeletonItem key={`cases-list-skeleton-${index}`} /> )) - : cases?.map( - ({ - id, - firstName, - lastName, - caseCreatedAt, - companyName, - assigneeId, - assigneeFullName, - avatarUrl, - approvalState, - }) => ( - <Cases.Item - key={id} - id={id} - fullName={entity !== 'businesses' ? `${firstName} ${lastName}` : companyName} - avatarUrl={avatarUrl} - createdAt={caseCreatedAt} - assigneeId={assigneeId} - assigneeFullName={assigneeFullName} - status={approvalState} - /> - ), - )} + : cases?.map(case_ => ( + <Cases.Item + key={case_.id} + id={case_.id} + fullName={case_.entity.name} + avatarUrl={case_.entity.avatarUrl} + createdAt={case_.createdAt} + assigneeId={case_.assignee?.id} + assigneeFullName={`${case_.assignee?.firstName} ${case_.assignee?.lastName}`} + status={case_.entity.approvalState} + /> + ))} </Cases.List> </MotionScrollArea> <div className={`divider my-0 px-4`}></div> @@ -81,7 +69,7 @@ export const Entities: FunctionComponent = () => { </Case.Content> </Case> )} - {!cases?.length && !isLoading ? ( + {Array.isArray(cases) && !cases.length && !isLoading ? ( <div className={`p-2`}> <h2 className={`mt-4 text-6xl`}>No cases were found</h2> </div> diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 5f33851798..63c041bbb7 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -23,7 +23,7 @@ import { TIndividual } from '../../../../domains/individuals/types'; * @param onSearch * @param onFilter * @param onSortBy - * @param onSortDir + * @param onSortDirToggle * @param props * @constructor */ @@ -32,7 +32,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ onSearch, onFilter, onSortBy, - onSortDir, + onSortDirToggle, search, ...props }) => { @@ -116,7 +116,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ <div className={`input-group flex items-center`}> <button className={`btn-ghost btn-square btn-sm btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} - onClick={onSortDir} + onClick={onSortDirToggle} ref={sortRef} > <SortSvg /> diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx index 2e22eb74f2..9265b1e684 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx @@ -10,7 +10,7 @@ export const useCases = () => { const sharedSortByOptions = [ { label: 'Created At', - value: 'caseCreatedAt', + value: 'createdAt', }, ]; const individualsSortByOptions = [ @@ -40,8 +40,8 @@ export const useCases = () => { entity === 'individuals' ? individualsSortByOptions : businessesSortByOptions; const filterByOptions = [ { - label: 'Case Status', - value: 'caseStatus', + label: 'Status', + value: 'status', options: [ { label: 'Active', diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/interfaces.ts b/apps/backoffice-v2/src/pages/Entities/components/Cases/interfaces.ts index c85341a436..468f765a6b 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/interfaces.ts @@ -15,6 +15,6 @@ export interface ICasesProps extends DivComponent { onSearch: ChangeEventHandler<HTMLInputElement>; onFilter: (filterBy: keyof TIndividual) => (filters: Array<string>) => void; onSortBy: ChangeEventHandler<HTMLSelectElement>; - onSortDir: () => void; + onSortDirToggle: () => void; search: string; } diff --git a/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx b/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx index d0fb72774a..e999b563db 100644 --- a/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx +++ b/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx @@ -1,44 +1,74 @@ import { useSearch } from '../../../../common/hooks/useSearch/useSearch'; -import { useFilter } from '../../../../common/hooks/useFilter/useFilter'; -import { usePagination } from '../../../../common/hooks/usePagination/usePagination'; import { ChangeEventHandler, useCallback } from 'react'; import { createArrayOfNumbers } from '../../../../common/utils/create-array-of-numbers/create-array-of-numbers'; -import { useUsersQuery } from '../../../../domains/users/hooks/queries/useUsersQuery/useUsersQuery'; -import { useSort } from '../../../../common/hooks/useSort/useSort'; -import { useEntitiesWithWorkflowsQuery } from '../../../../domains/entities/hooks/queries/useEntitiesWithWorkflowsQuery/useEntitiesWithWorkflowsQuery'; -import { TIndividual } from '../../../../domains/individuals/types'; import { useFilterEntity } from '../../../../domains/entities/hooks/useFilterEntity/useFilterEntity'; import { useSelectEntityOnMount } from '../../../../domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount'; +import { useWorkflowsQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; +import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; export const useEntities = () => { - const { data: users } = useUsersQuery(); - const { data: cases, isLoading } = useEntitiesWithWorkflowsQuery(users); + const [{ filterId, filter, sortBy, sortDir, page, pageSize }, setSearchParams] = + useSearchParamsByEntity(); + const { data, isLoading } = useWorkflowsQuery({ + filterId, + filter, + sortBy, + sortDir, + page, + pageSize, + }); + const { + meta: { totalPages }, + data: cases, + } = data || { meta: { totalPages: 0 }, data: [] }; const entity = useFilterEntity(); - const individualsSearchOptions = ['firstName', 'lastName', 'email', 'phone']; - const businessesSearchOptions = [ - 'companyName', - 'registrationNumber', - 'legalForm', - 'countryOfIncorporation', - ]; + const individualsSearchOptions = ['entity.name', 'entity.email']; + const businessesSearchOptions = ['entity.name']; const { searched, onSearch, search } = useSearch({ data: cases, searchBy: entity === 'individuals' ? individualsSearchOptions : businessesSearchOptions, }); - const { sorted, onSortBy, onSortDir } = useSort({ - data: searched, - initialState: { - sortBy: 'caseCreatedAt', + + const onSortDirToggle = useCallback(() => { + setSearchParams({ + sortDir: sortDir === 'asc' ? 'desc' : 'asc', + }); + }, [setSearchParams, sortDir]); + + const onSortBy = useCallback( + (sortBy: string) => { + setSearchParams({ + sortBy, + }); }, - }); - const { filtered, onFilter } = useFilter({ - data: sorted, - }); - const { paginated, page, pages, totalPages, onPaginate } = usePagination({ - data: filtered, - initialPageSize: 10, - initialPage: 1, - }); + [setSearchParams], + ); + + const onFilterChange = useCallback( + (key: string) => { + return (values: string[]) => { + setSearchParams({ + filter: { + ...filter, + [key]: values, + }, + page: 1, + }); + }; + }, + [filter, setSearchParams], + ); + + const onPaginate = useCallback( + (page: number) => () => { + setSearchParams({ + page, + pageSize, + }); + }, + [pageSize, setSearchParams], + ); + const onSearchChange: ChangeEventHandler<HTMLInputElement> = useCallback( event => { onSearch(event.target.value); @@ -51,14 +81,6 @@ export const useEntities = () => { }, [onSortBy], ); - const onFilterChange = useCallback( - (key: keyof TIndividual) => (values: Array<string>) => { - onFilter({ - [key]: values, - }); - }, - [onFilter], - ); const skeletonEntities = createArrayOfNumbers(3); useSelectEntityOnMount(); @@ -68,12 +90,11 @@ export const useEntities = () => { onSearch: onSearchChange, onFilter: onFilterChange, onSortBy: onSortByChange, - onSortDir, + onSortDirToggle, search, - cases: paginated, + cases: searched, isLoading, page, - pages, totalPages, skeletonEntities, entity, diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts b/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts index f38a4569ad..6f6348c78f 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts +++ b/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts @@ -1,28 +1,18 @@ -import { authQueryKeys } from '../../domains/auth/query-keys'; +import { searchParamsToObject } from '../../common/hooks/useZodSearchParams/utils/search-params-to-object'; import { queryClient } from '../../lib/react-query/query-client'; -import { queryKeys } from '../../domains/entities/query-keys'; import { LoaderFunction } from 'react-router-dom'; +import { workflowsQueryKeys } from '../../domains/workflows/query-keys'; -export const entityLoader: LoaderFunction = async ({ params, request }) => { +export const entityLoader: LoaderFunction = async ({ request, params }) => { const url = new URL(request.url); - const { entityId } = params; - const entity = url?.searchParams?.get('entity'); - const filterId = url?.searchParams?.get('filterId'); - const authenticatedUser = authQueryKeys.authenticatedUser(); - const session = await queryClient.ensureQueryData( - authenticatedUser.queryKey, - authenticatedUser.queryFn, - ); + const { filterId } = searchParamsToObject(url.searchParams); - if (entity || !filterId || !session?.user) return null; + if (!filterId) { + return null; + } - const entityById = queryKeys[entity].byId(entityId, filterId); - // TODO: Add workflowId to params/searchParams - // const workflowById = workflows.byId({ workflowId }); - - await queryClient.ensureQueryData(entityById.queryKey, entityById.queryFn); - - // await queryClient.ensureQueryData(workflowById.queryKey, workflowById.queryFn); + const workflowById = workflowsQueryKeys.byId({ workflowId: params.entityId, filterId }); + await queryClient.ensureQueryData(workflowById.queryKey, workflowById.queryFn); return null; }; diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx index 78f60510b4..c691a25564 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx +++ b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx @@ -5,17 +5,17 @@ import { Card } from '../../common/components/atoms/Card/Card'; import { CardContent } from '../../common/components/atoms/Card/Card.Content'; export const Entity = () => { - const { selectedEntity, tasks, components, isLoading } = useEntity(); + const { workflow, selectedEntity, tasks, components, isLoading } = useEntity(); // Selected entity return ( <Case> {/* Reject and approve header */} <Case.Actions - id={selectedEntity?.id} - fullName={selectedEntity?.fullName} - avatarUrl={selectedEntity?.avatarUrl} - showResolutionButtons={selectedEntity.workflow?.config?.workflowLevelResolution} + id={workflow.id} + fullName={selectedEntity.name} + avatarUrl={selectedEntity.avatarUrl} + showResolutionButtons={workflow.workflowDefinition.config?.workflowLevelResolution} /> <Case.Content key={selectedEntity?.id}> {Array.isArray(tasks) && diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx index 2575f18670..042b1fe2b6 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx @@ -19,7 +19,6 @@ import { DialogFooter } from '../../../../common/components/organisms/Dialog/Dia import { DialogClose } from '@radix-ui/react-dialog'; import { useParams } from 'react-router-dom'; import { ICallToActionProps } from './interfaces'; -import { useEntityWithWorkflowQuery } from '../../../../domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery'; import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { useCaseState } from '../Case/hooks/useCaseState/useCaseState'; import { useUpdateWorkflowByIdMutation } from '../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; @@ -28,24 +27,27 @@ import { SelectItem } from '../../../../common/components/atoms/Select/Select.It import { SelectContent } from '../../../../common/components/atoms/Select/Select.Content'; import { SelectTrigger } from '../../../../common/components/atoms/Select/Select.Trigger'; import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; +import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; +import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, data }) => { const { entityId } = useParams(); - const { data: entity } = useEntityWithWorkflowQuery(entityId); const [revisionReason, setRevisionReason] = useState(''); + const filterId = useFilterId(); + const { data: workflow } = useWorkflowQuery({ workflowId: entityId, filterId }); const onRevisionReasonChange = useCallback( (value: string) => setRevisionReason(value), [setRevisionReason], ); const { data: session } = useAuthenticatedUserQuery(); - const caseState = useCaseState(session?.user, entity?.workflow); + const caseState = useCaseState(session?.user, workflow); const revisionReasons = - entity?.workflow?.contextSchema?.schema?.properties?.documents?.items?.properties?.decision?.properties?.revisionReason?.anyOf?.find( + workflow.workflowDefinition.contextSchema?.schema?.properties?.documents?.items?.properties?.decision?.properties?.revisionReason?.anyOf?.find( ({ enum: enum_ }) => !!enum_, )?.enum; const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ - workflowId: entity?.workflow?.runtimeDataId, + workflowId: workflow.id, }); const onMutateUpdateWorkflowById = ( @@ -76,7 +78,7 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat )[payload.approvalStatus]; const context = { - documents: entity?.workflow?.workflowContext?.machineContext?.documents?.map(document => { + documents: workflow.context.documents?.map(document => { if (document?.id !== payload?.id) return document; switch (payload?.approvalStatus) { diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 29ec29c7c5..129ce91af5 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -71,7 +71,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ isActionButtonDisabled, onTriggerAssignToMe, isAssignedToMe, - } = useActions({ entityId: id, fullName }); + } = useActions({ workflowId: id, fullName }); return ( <div className={`sticky top-0 z-50 col-span-2 bg-base-100 px-4 pt-4`}> diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/interfaces.ts index 81598e7236..a443090367 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/interfaces.ts @@ -1,4 +1,4 @@ export interface IUseActions { - entityId: string; + workflowId: string; fullName: string; } diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx index 87824e9939..ebee6c2af1 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx @@ -3,7 +3,6 @@ import { useApproveEntityMutation } from '../../../../../../domains/entities/hoo import { useDebounce } from '../../../../../../common/hooks/useDebounce/useDebounce'; import { createInitials } from '../../../../../../common/utils/create-initials/create-initials'; import { Action } from '../../../../../../common/enums'; -import { useEntityWithWorkflowQuery } from '../../../../../../domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery'; import { IUseActions } from './interfaces'; import { useAuthenticatedUserQuery } from '../../../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { useCaseState } from '../useCaseState/useCaseState'; @@ -11,6 +10,8 @@ import { useUsersQuery } from '../../../../../../domains/users/hooks/queries/use import { useAssignWorkflowMutation } from '../../../../../../domains/workflows/hooks/mutations/useAssignWorkflowMutation/useAssignWorkflowMutation'; import { useRejectEntityMutation } from '../../../../../../domains/entities/hooks/mutations/useRejectEntityMutation/useRejectEntityMutation'; import { useSelectNextEntity } from '../../../../../../domains/entities/hooks/useSelectNextEntity/useSelectNextEntity'; +import { useWorkflowQuery } from '../../../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; +import { useFilterId } from '../../../../../../common/hooks/useFilterId/useFilterId'; export const ResubmissionReason = { BLURRY_IMAGE: 'BLURRY_IMAGE', @@ -23,27 +24,24 @@ export const ResubmissionReason = { FACE_IS_NOT_MATCHING: 'FACE_IS_NOT_MATCHING', } as const; -export const useActions = ({ entityId, fullName }: IUseActions) => { +export const useActions = ({ workflowId, fullName }: IUseActions) => { const onSelectNextEntity = useSelectNextEntity(); - const { isLoading: isLoadingEntity, data: entity } = useEntityWithWorkflowQuery(entityId); - const { workflow } = entity ?? {}; + const filterId = useFilterId(); + const { data: workflow } = useWorkflowQuery({ workflowId, filterId }); const { mutate: mutateApproveEntity, isLoading: isLoadingApproveEntity } = useApproveEntityMutation({ - entityId, - workflowId: workflow?.runtimeDataId, + workflowId: workflowId, onSelectNextEntity, }); const { mutate: mutateRejectEntity, isLoading: isLoadingRejectEntity } = useRejectEntityMutation({ - entityId, - workflowId: workflow?.runtimeDataId, + workflowId: workflowId, onSelectNextEntity, }); const { mutate: mutateAssignWorkflow, isLoading: isLoadingAssignWorkflow } = - useAssignWorkflowMutation({ workflowRuntimeId: workflow?.runtimeDataId }); + useAssignWorkflowMutation({ workflowRuntimeId: workflowId }); - const isLoading = - isLoadingApproveEntity || isLoadingRejectEntity || isLoadingEntity || isLoadingAssignWorkflow; + const isLoading = isLoadingApproveEntity || isLoadingRejectEntity || isLoadingAssignWorkflow; // Create initials from the first character of the first name, middle name, and last name. const initials = createInitials(fullName); @@ -55,12 +53,8 @@ export const useActions = ({ entityId, fullName }: IUseActions) => { const assignees = users?.filter(assignee => assignee?.id !== authenticatedUser?.id); // Disable the reject/approve buttons if the end user is not ready to be rejected/approved. // Based on `workflowDefinition` - ['APPROVE', 'REJECT', 'RECOLLECT']. - const canReject = - (workflow?.nextEvents.includes(Action.REJECT.toLowerCase()) as boolean) && - caseState.actionButtonsEnabled; - const canApprove = - (workflow?.nextEvents.includes(Action.APPROVE.toLowerCase()) as boolean) && - caseState.actionButtonsEnabled; + const canReject = caseState.actionButtonsEnabled; + const canApprove = caseState.actionButtonsEnabled; // Only display the button spinners if the request is longer than 300ms const debouncedIsLoadingRejectEntity = useDebounce(isLoadingRejectEntity, 300); @@ -128,7 +122,6 @@ export const useActions = ({ entityId, fullName }: IUseActions) => { debouncedIsLoadingApproveEntity, debouncedIsLoadingAssignEntity, isLoading, - isLoadingEntity, initials, canReject, canApprove, diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useCaseState/useCaseState.ts b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useCaseState/useCaseState.ts index 875aad7d91..8b1cfcf413 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useCaseState/useCaseState.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useCaseState/useCaseState.ts @@ -2,9 +2,11 @@ import { CaseState } from '../../../../../../common/enums'; import { TAuthenticatedUser } from '../../../../../../domains/auth/types'; export const useCaseState = (authenticatedUser: TAuthenticatedUser, workflow) => { + const assigneeId = workflow?.assigneeId || workflow?.assignee?.id; + if (!workflow) return CaseState.UNKNOWN; - if (workflow?.assigneeId === authenticatedUser?.id) return CaseState.ASSIGNED_TO_ME; - if (!workflow?.assigneeId) return CaseState.UNASSIGNED; + if (assigneeId === authenticatedUser?.id) return CaseState.ASSIGNED_TO_ME; + if (!assigneeId) return CaseState.UNASSIGNED; return CaseState.ASSIGNED_TO_OTHER; }; diff --git a/apps/backoffice-v2/src/pages/Entity/components/Details/Details.tsx b/apps/backoffice-v2/src/pages/Entity/components/Details/Details.tsx index 20101dec8c..54e280ccfc 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Details/Details.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Details/Details.tsx @@ -4,11 +4,13 @@ import { Separator } from '../../../../common/components/atoms/Separator/Separat import React, { FunctionComponent } from 'react'; import { useParams } from 'react-router-dom'; import { IDetailsProps } from './interfaces'; -import { useEntityWithWorkflowQuery } from '../../../../domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery'; +import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; +import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; export const Details: FunctionComponent<IDetailsProps> = ({ id, value }) => { const { entityId } = useParams(); - const { data: entity } = useEntityWithWorkflowQuery(entityId); + const filterId = useFilterId(); + const { data: workflow } = useWorkflowQuery({ workflowId: entityId, filterId }); if (!value.data?.length) return; @@ -19,10 +21,10 @@ export const Details: FunctionComponent<IDetailsProps> = ({ id, value }) => { })} > <EditableDetails - workflowId={entity?.workflow?.runtimeDataId} + workflowId={workflow.id} id={id} valueId={value?.id} - documents={entity?.workflow?.workflowContext?.machineContext?.documents} + documents={workflow.context.documents} title={value?.title} data={value?.data} /> diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 40a945f5fc..e40357f625 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -1,5 +1,4 @@ import { useParams } from 'react-router-dom'; -import { useEntityWithWorkflowQuery } from '../../../../domains/entities/hooks/queries/useEntityWithWorkflowQuery/useEntityWithWorkflowQuery'; import { useStorageFilesQuery } from '../../../../domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery'; import { useFilterEntity } from '../../../../domains/entities/hooks/useFilterEntity/useFilterEntity'; import { useUpdateWorkflowByIdMutation } from '../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; @@ -7,7 +6,9 @@ import { useCaseState } from '../../components/Case/hooks/useCaseState/useCaseSt import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; import { components } from './components'; -import { getDocumentsByCountry } from '@ballerine/common'; +import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; +import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; +import { getDocumentsByCountry, TDocument } from '@ballerine/common'; const convertSnakeCaseToTitleCase = (input: string): string => input @@ -15,12 +16,10 @@ const convertSnakeCaseToTitleCase = (input: string): string => .map(word => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); -const extractCountryCodeFromEntity = entity => { - const issuerCountryCode = entity?.workflow?.definition?.context?.documents?.find(document => { +const extractCountryCodeFromWorkflow = workflow => { + return workflow?.context?.documents?.find(document => { return document?.issuer?.country; })?.issuer?.country; - - return issuerCountryCode; }; const uniqueArrayByKey = (array, key) => { @@ -29,23 +28,23 @@ const uniqueArrayByKey = (array, key) => { const composePickableCategoryType = ( categoryValue: string, typeValue: string, - documentsSchema: any, + documentsSchema: TDocument[], ) => { const documentTypesDropdownOptions: Array<{ value: string; label: string }> = []; const documentCategoryDropdownOptions: Array<{ value: string; label: string }> = []; - Object.values(documentsSchema).forEach(document => { + documentsSchema.forEach(document => { const category = document.category; if (category) { documentCategoryDropdownOptions.push({ - value: category as string, + value: category, label: convertSnakeCaseToTitleCase(category), }); } const type = document.type; if (type) { documentTypesDropdownOptions.push({ - value: type as string, + value: type, label: convertSnakeCaseToTitleCase(type), }); } @@ -64,8 +63,8 @@ const composePickableCategoryType = ( }; }; -const isExistingSchemaForDocument = documentsSchema => { - return Object.entries(documentsSchema).length > 0; +const isExistingSchemaForDocument = (documentsSchema: TDocument[]) => { + return documentsSchema.length > 0; }; function omit(obj, ...props) { @@ -77,15 +76,17 @@ function omit(obj, ...props) { } export const useEntity = () => { const { entityId } = useParams(); - const { data: entity, isLoading } = useEntityWithWorkflowQuery(entityId); + const filterId = useFilterId(); + + const { data: workflow, isLoading } = useWorkflowQuery({ workflowId: entityId, filterId }); const docsData = useStorageFilesQuery( - entity?.workflow?.workflowContext?.machineContext?.documents?.flatMap(({ pages }) => + workflow.context.documents?.flatMap(({ pages }) => pages?.map(({ ballerineFileId }) => ballerineFileId), ), ); const results = []; - entity?.workflow?.workflowContext?.machineContext?.documents?.forEach((document, docIndex) => { + workflow.context.documents?.forEach((document, docIndex) => { document?.pages.forEach((page, pageIndex) => { if (!results[docIndex]) { results[docIndex] = []; @@ -94,26 +95,21 @@ export const useEntity = () => { }); }); const filterEntity = useFilterEntity(); - const selectedEntity = { - id: entityId, - fullName: filterEntity === 'individuals' ? entity?.fullName : entity?.companyName, - avatarUrl: entity?.avatarUrl, - workflow: entity?.workflow, - }; + const selectedEntity = workflow.entity; - const issuerCountryCode = extractCountryCodeFromEntity(entity); + const issuerCountryCode = extractCountryCodeFromWorkflow(workflow); const documentsSchema = issuerCountryCode && getDocumentsByCountry(issuerCountryCode); const octetToFileType = (base64: string, fileType: string) => base64?.replace(/application\/octet-stream/gi, fileType); const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ - workflowId: entity?.workflow?.runtimeDataId, + workflowId: workflow.id, }); const { data: session } = useAuthenticatedUserQuery(); - const caseState = useCaseState(session?.user, entity?.workflow); - const contextEntity = entity?.workflow?.workflowContext?.machineContext?.entity; - const contextDocuments = entity?.workflow?.workflowContext?.machineContext?.documents; + const caseState = useCaseState(session?.user, workflow); + const contextEntity = workflow.context.entity; + const contextDocuments = workflow.context.documents; const tasks = contextEntity ? [ ...(contextDocuments?.map( @@ -145,7 +141,7 @@ export const useEntity = () => { value: 'Reject', data: { id, - disabled: Boolean(decision), + disabled: Boolean(decision?.status), approvalStatus: 'rejected', }, }, @@ -154,7 +150,7 @@ export const useEntity = () => { value: 'Approve', data: { id, - disabled: Boolean(decision), + disabled: Boolean(decision?.status), approvalStatus: 'approved', }, }, @@ -256,6 +252,7 @@ export const useEntity = () => { selectedEntity, components, tasks, + workflow, isLoading, }; }; diff --git a/apps/backoffice-v2/src/pages/Root/Root.page.tsx b/apps/backoffice-v2/src/pages/Root/Root.page.tsx index 360cb3ff35..e9b6935f76 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.page.tsx +++ b/apps/backoffice-v2/src/pages/Root/Root.page.tsx @@ -2,8 +2,15 @@ import { Outlet } from 'react-router-dom'; import { Providers } from '../../common/components/templates/Providers/Providers'; import { Toaster } from 'react-hot-toast'; import { Layout } from '../../common/components/templates/Layout/Layout'; -import { FunctionComponent } from 'react'; -// import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { FunctionComponent, lazy, Suspense } from 'react'; + +const ReactQueryDevtools = lazy(() => + process.env.NODE_ENV !== 'production' + ? import('@tanstack/react-query-devtools').then(module => ({ + default: module.ReactQueryDevtools, + })) + : Promise.resolve({ default: () => null }), +); export const Root: FunctionComponent = () => { return ( @@ -18,8 +25,9 @@ export const Root: FunctionComponent = () => { <Layout> <Outlet /> </Layout> - {/** Excluded in production by default */} - {/* <ReactQueryDevtools /> */} + <Suspense> + <ReactQueryDevtools /> + </Suspense> </Providers> ); }; diff --git a/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts b/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts deleted file mode 100644 index b4f0712123..0000000000 --- a/apps/backoffice-v2/src/routes/Entities/pre-search-filters.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { CaseStatus, State } from '../../common/enums'; -import { TAuthenticatedUser } from '../../domains/auth/types'; - -const sharedPreSearchFilters = { - sortDir: 'desc' as const, - pageSize: 10, - page: 1, - search: '', -} as const; - -export const generatePreSearchFiltersByEntity = async ( - entityType: string, - authenticatedUser: TAuthenticatedUser, -) => { - return { - businesses: { - sortBy: 'caseCreatedAt' as const, - entity: 'businesses' as const, - filter: { - assigneeId: [null, authenticatedUser!.id], - caseStatus: [CaseStatus.ACTIVE], - }, - ...sharedPreSearchFilters, - }, - individuals: { - sortBy: 'caseCreatedAt' as const, - entity: 'individuals' as const, - filter: { - approvalState: [], - assigneeId: [null, authenticatedUser.id], - caseStatus: [CaseStatus.ACTIVE], - }, - ...sharedPreSearchFilters, - }, - }; -}; diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 3c86d928b7..6cd28c576b 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -13,7 +13,6 @@ export { } from './utils'; export { - getDocumentId, type DefaultContextSchema, type TDefaultSchemaDocumentPage, ghanaDocuments, diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts index bfb163c918..cd8bf407b3 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts @@ -1,26 +1,11 @@ import { ghanaDocuments } from './GH'; import { TDocument } from '../types'; -import { getDocumentId } from '../../documents/utils'; import { countryCodes } from '@/countries'; -const createDocumentIdToDocumentMap = (documents: TDocument[]) => { - const result = {} as Record<string, TDocument>; - for (const document of documents) { - const id = getDocumentId(document); - result[id] = document; - } - return result; +const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], TDocument[]>> = { + GH: ghanaDocuments, }; -const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], any>> = { - GH: createDocumentIdToDocumentMap(ghanaDocuments), -}; - -export const getDocumentsByCountry = ( - countryCode: (typeof countryCodes)[number], -): Record<string, TDocument> => { - const documents = documentIdsByCountry[countryCode]; - if (!documents) return {}; - - return documents; +export const getDocumentsByCountry = (countryCode: (typeof countryCodes)[number]): TDocument[] => { + return documentIdsByCountry[countryCode] || []; }; diff --git a/packages/common/src/schemas/documents/workflow/documents/utils.ts b/packages/common/src/schemas/documents/workflow/documents/utils.ts deleted file mode 100644 index 69affb842d..0000000000 --- a/packages/common/src/schemas/documents/workflow/documents/utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TDocument } from './types'; -import { DefaultContextSchema } from '../../context'; - -export const getDocumentId = ( - document: TDocument | DefaultContextSchema['documents'][number], -): string => { - let id = `${document?.category}-${document?.type}-${document?.issuer?.country}`; - - if (document.version) { - id = `${id}-v${document.version}`; - } - - return id.toLowerCase(); -}; diff --git a/packages/common/src/schemas/index.ts b/packages/common/src/schemas/index.ts index 042c8c6d6a..3ff4c9dc82 100644 --- a/packages/common/src/schemas/index.ts +++ b/packages/common/src/schemas/index.ts @@ -1,4 +1,3 @@ -export { getDocumentId } from './documents/workflow/documents/utils'; export { type DefaultContextSchema } from './documents/context'; export { type TDefaultSchemaDocumentPage } from './documents/default-context-page-schema'; export { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28a5002233..fd316ea6d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1314,8 +1314,8 @@ importers: specifier: ^1.2.3 version: 1.2.3(@babel/core@7.21.4)(solid-js@1.7.3)(vite@3.2.5) '@ballerine/common': - specifier: 0.0.1 - version: 0.0.1 + specifier: 0.5.1 + version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 version: 3.3.3 @@ -4963,11 +4963,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@ballerine/common@0.0.1: - resolution: {integrity: sha512-j4mZ3rWjT0y7HVCnuXZbSp06ML7wP7XRC8Eiga29UCXgKoAxys95zB5nuDjE0t20nAgEoC90G5TN/jkd20on6w==} - engines: {node: '>=12'} - dev: false - /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -8369,12 +8364,13 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.29: - resolution: {integrity: sha512-+idcuszAPD3yavbQJ359Ufz/usXgydCif7aXmOfeZNGf/sukTbLcAAYpwlks6VbIdCn9TbJgubzCRPGQbukLGA==} + /@storybook/channel-postmessage@7.1.0-alpha.32: + resolution: {integrity: sha512-Z3w69/MCB6tdaeuN8Htb5NyxnyrupeGgOjIRCCLDQL8CkYYYNWZuQakfhnUUXduc49bSXBh+2yF2LAbvKlLs2g==} dependencies: - '@storybook/channels': 7.1.0-alpha.29 - '@storybook/client-logger': 7.1.0-alpha.29 - '@storybook/core-events': 7.1.0-alpha.29 + '@storybook/channel-websocket': 7.1.0-alpha.32 + '@storybook/channels': 7.1.0-alpha.32 + '@storybook/client-logger': 7.1.0-alpha.32 + '@storybook/core-events': 7.1.0-alpha.32 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -8390,6 +8386,16 @@ packages: telejson: 7.1.0 dev: true + /@storybook/channel-websocket@7.1.0-alpha.32: + resolution: {integrity: sha512-nuEOf3yveZJg/wXIYU/JscRy+Drhu3WcukMjG4+/7fjw2vI+eLTt4SxI8ekEKhXLmIybA1Ri/XYgj3D4xrtQNA==} + dependencies: + '@storybook/channels': 7.1.0-alpha.32 + '@storybook/client-logger': 7.1.0-alpha.32 + '@storybook/global': 5.0.0 + telejson: 7.1.0 + tiny-invariant: 1.3.1 + dev: true + /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: @@ -8402,8 +8408,8 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.29: - resolution: {integrity: sha512-CK6A1DElBM+6lUr18izKQwUFFA9s6kibeWEAgZm/3dhKQm5vpz7ZxbaqxTcT2qAwuJYaNIA8ZGteZJNJ5puzog==} + /@storybook/channels@7.1.0-alpha.32: + resolution: {integrity: sha512-b0BhSdZ9s+vgHuVckKXI1xUKgdBs8oak0kvHPSWvHf57SQisRkX98yr0DCUim5/DEODpFLqo05m431G7YVOwPQ==} dev: true /@storybook/cli@7.0.0-rc.10: @@ -8468,8 +8474,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.29: - resolution: {integrity: sha512-Apn48tKfcRYGBsXqFUjjY9zeOgxKmAC82AQQ0vNUC4z3dBSSU15rAnrH+V8cnbisWmtnWAlFNKLP0bJzP2b3cw==} + /@storybook/client-logger@7.1.0-alpha.32: + resolution: {integrity: sha512-Y2IxwDdoOEoFdoDi5NjVENxJZG3Ldb2IpAAplGtrSOasS5aQ0PskY8WW5EeFPpOK7DeNnZvxAytuhVQaivimDg==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -8573,8 +8579,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.29: - resolution: {integrity: sha512-e5gsuYezn97Y01RHf7Tz2L4upZfXm+CehcaU5FHB4exW4Rf+h93eV22Ic6vOxgu+0c2P9h+pQKDInyz9yoTBXQ==} + /@storybook/core-events@7.1.0-alpha.32: + resolution: {integrity: sha512-od8gE0q9fuLAIeqGNDAy9atG4m9CC5RQu8j0na/Ccj1henughyCxaPss6DaYr9c1RxsYGog0P/+28MuqWVduog==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -8710,14 +8716,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.29: - resolution: {integrity: sha512-KGLGsb82OJnBIonTbVttMx1G/e/ZwKlI4fYZUKZngi6mS3L5fE7fDmSl+e6SKhVi3svX40MOuqzyu5XXvoIr6w==} + /@storybook/instrumenter@7.1.0-alpha.32: + resolution: {integrity: sha512-feBjhCB4MEEJED0S4JDzNyaW+h9BBgxcx1cVAOYLgxZJ0Gp8tr0Lym2tIqbLfGQNCt7wH3v7WRIxNImlUM0cTw==} dependencies: - '@storybook/channels': 7.1.0-alpha.29 - '@storybook/client-logger': 7.1.0-alpha.29 - '@storybook/core-events': 7.1.0-alpha.29 + '@storybook/channels': 7.1.0-alpha.32 + '@storybook/client-logger': 7.1.0-alpha.32 + '@storybook/core-events': 7.1.0-alpha.32 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.29 + '@storybook/preview-api': 7.1.0-alpha.32 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -8786,16 +8792,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.29: - resolution: {integrity: sha512-rapTmuN2hRpdx13l0PTaAYVyLDk6H91VHTRsfoXdmq1lwsGPEdXXEA1t/KkeNbG/P4kx9z7t4TLX6fF3lZY43w==} + /@storybook/preview-api@7.1.0-alpha.32: + resolution: {integrity: sha512-yveSPB4AlLWsIznHyEUQ1LhPDxU+DWya6spxGf26CGazT/66KnnKEwrYV3EBNRMdCx7EJIo/Q2qXupkiDSfZCw==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.29 - '@storybook/channels': 7.1.0-alpha.29 - '@storybook/client-logger': 7.1.0-alpha.29 - '@storybook/core-events': 7.1.0-alpha.29 + '@storybook/channel-postmessage': 7.1.0-alpha.32 + '@storybook/channels': 7.1.0-alpha.32 + '@storybook/client-logger': 7.1.0-alpha.32 + '@storybook/core-events': 7.1.0-alpha.32 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.29 + '@storybook/types': 7.1.0-alpha.32 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -8943,8 +8949,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.29 - '@storybook/instrumenter': 7.1.0-alpha.29 + '@storybook/client-logger': 7.1.0-alpha.32 + '@storybook/instrumenter': 7.1.0-alpha.32 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -8987,10 +8993,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.29: - resolution: {integrity: sha512-cS+zCWqcE/F5O7efIfzz2VcWaWtqrnIz27YbCdoVPpEjQrQRQsOjTdBQNXIxFVuQUrs5C6imnOMrR/fw1oCXag==} + /@storybook/types@7.1.0-alpha.32: + resolution: {integrity: sha512-KoBwJ8biXl6LNSqgS/fWlESU/S0SdvnxGxOgRElDhWGUdO8iSX29udM0F9OJ5FNZlzClqKgBJ/CUk7HFddnXzQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.29 + '@storybook/channels': 7.1.0-alpha.32 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 diff --git a/services/workflows-service/scripts/generate-end-user.ts b/services/workflows-service/scripts/generate-end-user.ts index fd8bb5b127..75d81f939c 100644 --- a/services/workflows-service/scripts/generate-end-user.ts +++ b/services/workflows-service/scripts/generate-end-user.ts @@ -13,12 +13,29 @@ export const endUserIds = [ 'ckkt3st0r0008qxtt5rxj0wgg', 'ckkt3swf20009qxttgx0p6x60', 'ckkt3t2bw000aqxtt0hj4pw4c', + 'ckkt3t2bw000aqxtt0hj4pw4d', + 'ckkt3t2bw000aqxtt0hj4pw4e', + 'ckkt3t2bw000aqxtt0hj4pw4f', + 'ckkt3t2bw000aqxtt0hj4pw4g', + 'ckkt3t2bw000aqxtt0hj4pw4h', + 'ckkt3t2bw000aqxtt0hj4pw4i', ]; export const businessRiskIds = [ 'ckkt3qnv41001qxtt7nmj9r26', 'ckkt3r0v42002qxtt8sxk7fv9', 'ckkt3rhxr3003qxtt5x6h5j18', + 'ckkt3rv4z4004qxtte4vz9e19', + 'ckkt3s3ha5005qxttdz5yxg20', + 'ckkt3sc1n6006qxtt9e9u7y21', + 'ckkt3sjz70007qxtt3nqj80j22', + 'ckkt3st0r8008qxtt5rxj0wg23', + 'ckkt3swf90009qxttgx0p6x24', + 'ckkt3t2bw000aqxtt0hj4pw25', + 'ckkt3t2bw000aqxtt0hj4pw26', + 'ckkt3t2bw000aqxtt0hj4pw27', + 'ckkt3t2bw000aqxtt0hj4pw28', + 'ckkt3t2bw000aqxtt0hj4pw29', ]; export const businessIds = [ 'ckkt3rv4z4004qxtte4vz9e97', diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index b0c7fe9ccd..c5ee80fab7 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -1,6 +1,6 @@ import * as dotenv from 'dotenv'; import { faker } from '@faker-js/faker'; -import { Business, EndUser, PrismaClient } from '@prisma/client'; +import { Business, EndUser, Prisma, PrismaClient } from '@prisma/client'; import { hash } from 'bcrypt'; import { customSeed } from './custom-seed'; import { @@ -142,6 +142,7 @@ async function seed(bcryptSalt: Salt) { }, documents: [ { + id: faker.datatype.uuid(), category: 'proof_of_employment', type: 'payslip', issuer: { @@ -188,6 +189,7 @@ async function seed(bcryptSalt: Salt) { }, }, { + id: faker.datatype.uuid(), category: 'proof_of_address', type: 'mortgage_statement', issuer: { @@ -259,6 +261,7 @@ async function seed(bcryptSalt: Salt) { }, documents: [ { + id: faker.datatype.uuid(), category: 'ID', type: 'photo', issuer: { @@ -305,6 +308,7 @@ async function seed(bcryptSalt: Salt) { }, }, { + id: faker.datatype.uuid(), category: 'selfie', type: 'certificate', issuer: { @@ -342,6 +346,20 @@ async function seed(bcryptSalt: Salt) { return mockData; } + function createFilter( + name: string, + entity: 'individuals' | 'businesses', + query: Prisma.WorkflowRuntimeDataFindManyArgs, + ) { + return client.filter.create({ + data: { + entity, + name, + query: query as any, + }, + }); + } + // Risk score improvement await client.workflowDefinition.create({ data: { @@ -596,11 +614,22 @@ async function seed(bcryptSalt: Salt) { }, }); - await client.filter.create({ - data: { - entity: 'individuals', - name: 'Onboarding - Individuals', - query: { + await createFilter('Onboarding - Individuals', 'individuals', { + select: { + id: true, + status: true, + assigneeId: true, + context: true, + createdAt: true, + workflowDefinition: { + select: { + id: true, + name: true, + contextSchema: true, + config: true, + }, + }, + endUser: { select: { id: true, correlationId: true, @@ -616,41 +645,38 @@ async function seed(bcryptSalt: Salt) { additionalInfo: true, createdAt: true, updatedAt: true, - workflowRuntimeData: { - select: { - id: true, - status: true, - assigneeId: true, - createdAt: true, - workflowDefinition: { - select: { - id: true, - name: true, - }, - }, - }, - }, }, - where: { - workflowRuntimeData: { - some: { - workflowDefinition: { - is: { - id: 'manualMachineId', - }, - }, - }, - }, + }, + assignee: { + select: { + id: true, + firstName: true, + lastName: true, }, }, }, + where: { + workflowDefinitionId: manualMachineId, + endUserId: { not: null }, + }, }); - await client.filter.create({ - data: { - entity: 'individuals', - name: 'Risk Score Improvement - Individuals', - query: { + await createFilter('Risk Score Improvement - Individuals', 'individuals', { + select: { + id: true, + status: true, + assigneeId: true, + createdAt: true, + context: true, + workflowDefinition: { + select: { + id: true, + name: true, + contextSchema: true, + config: true, + }, + }, + endUser: { select: { id: true, correlationId: true, @@ -666,41 +692,38 @@ async function seed(bcryptSalt: Salt) { additionalInfo: true, createdAt: true, updatedAt: true, - workflowRuntimeData: { - select: { - id: true, - status: true, - assigneeId: true, - createdAt: true, - workflowDefinition: { - select: { - id: true, - name: true, - }, - }, - }, - }, }, - where: { - workflowRuntimeData: { - some: { - workflowDefinition: { - is: { - id: 'risk-score-improvement-dev', - }, - }, - }, - }, + }, + assignee: { + select: { + id: true, + firstName: true, + lastName: true, }, }, }, + where: { + workflowDefinitionId: manualMachineId, + endUserId: { not: null }, + }, }); - await client.filter.create({ - data: { - entity: 'businesses', - name: 'Risk Score Improvement - Businesses', - query: { + await createFilter('Risk Score Improvement - Businesses', 'businesses', { + select: { + id: true, + status: true, + assigneeId: true, + createdAt: true, + context: true, + workflowDefinition: { + select: { + id: true, + name: true, + contextSchema: true, + config: true, + }, + }, + business: { select: { id: true, companyName: true, @@ -720,36 +743,22 @@ async function seed(bcryptSalt: Salt) { businessPurpose: true, documents: true, approvalState: true, - workflowRuntimeData: { - select: { - id: true, - status: true, - assigneeId: true, - createdAt: true, - workflowDefinition: { - select: { - id: true, - name: true, - }, - }, - }, - }, createdAt: true, updatedAt: true, }, - where: { - workflowRuntimeData: { - some: { - workflowDefinition: { - is: { - id: riskScoreMachineKybId, - }, - }, - }, - }, + }, + assignee: { + select: { + id: true, + firstName: true, + lastName: true, }, }, }, + where: { + workflowDefinitionId: riskScoreMachineKybId, + businessId: { not: null }, + }, }); await client.$transaction(async () => diff --git a/services/workflows-service/src/business/business.controller.internal.ts b/services/workflows-service/src/business/business.controller.internal.ts index ed67c4866e..203d15ff1f 100644 --- a/services/workflows-service/src/business/business.controller.internal.ts +++ b/services/workflows-service/src/business/business.controller.internal.ts @@ -1,6 +1,5 @@ import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import * as common from '@nestjs/common'; -import { UsePipes } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import * as errors from '../errors'; import { BusinessWhereUniqueInput } from './dtos/business-where-unique-input'; @@ -11,22 +10,14 @@ import { Request } from 'express'; import * as nestAccessControl from 'nest-access-control'; import { BusinessService } from './business.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; -import { ZodValidationPipe } from '@/common/pipes/zod.pipe'; -import { BusinessFilterCreateSchema } from '@/filter/dtos/temp-zod-schemas'; import { InputJsonValue } from '@/types'; -import { FilterService } from '@/filter/filter.service'; -import { BusinessFilterModel } from '@/business/dtos/business-filter.model'; -import { BusinessFilterCreateDto } from '@/business/dtos/business-filter-create'; import { JsonValue } from 'type-fest'; -import { BusinessFindUniqueArgs } from '@/business/dtos/business-find-unique-args'; -import { TBusinessFilter } from '@/business/types'; @swagger.ApiTags('internal/businesses') @common.Controller('internal/businesses') export class BusinessControllerInternal { constructor( protected readonly service: BusinessService, - protected readonly filterService: FilterService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -36,13 +27,8 @@ export class BusinessControllerInternal { @swagger.ApiForbiddenResponse() @ApiNestedQuery(BusinessFindManyArgs) async list(@common.Req() request: Request): Promise<BusinessModel[]> { - const { filterId, ...args } = plainToClass(BusinessFindManyArgs, request.query); - let query: JsonValue = {}; - - if (filterId) { - const filter = await this.filterService.getById(filterId); - query = filter.query; - } + const args = plainToClass(BusinessFindManyArgs, request.query); + const query: JsonValue = {}; return this.service.list({ ...args, @@ -54,29 +40,9 @@ export class BusinessControllerInternal { @swagger.ApiOkResponse({ type: BusinessModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse() - @ApiNestedQuery(BusinessFindUniqueArgs) - async getById( - @common.Param() params: BusinessWhereUniqueInput, - @common.Req() request: Request, - ): Promise<BusinessModel | null> { + async getById(@common.Param() params: BusinessWhereUniqueInput): Promise<BusinessModel | null> { try { - const { filterId, ...args } = plainToClass(BusinessFindUniqueArgs, request.query); - let query: TBusinessFilter['query'] = {}; - - if (filterId) { - const filter = await this.filterService.getById(filterId); - // findUnique does not support `where`. - const { where: _where, ...restQuery } = filter?.query as TBusinessFilter['query']; - - query = restQuery; - } - - const business = await this.service.getById(params?.id, { - ...args, - ...(query as InputJsonValue), - }); - - return business; + return await this.service.getById(params?.id); } catch (err) { if (isRecordNotFoundError(err)) { throw new errors.NotFoundException(`No resource was found for ${JSON.stringify(params)}`); @@ -85,20 +51,4 @@ export class BusinessControllerInternal { throw err; } } - - @common.Post('filters') - @swagger.ApiCreatedResponse({ type: BusinessFilterModel }) - @swagger.ApiForbiddenResponse() - @UsePipes(new ZodValidationPipe(BusinessFilterCreateSchema)) - async createFilter(@common.Body() data: BusinessFilterCreateDto): Promise<BusinessFilterModel> { - const filter = await this.filterService.create({ - data: { - ...data, - entity: 'businesses', - query: data?.query as InputJsonValue, - }, - }); - - return filter as BusinessFilterModel; - } } diff --git a/services/workflows-service/src/business/dtos/business-filter-create.ts b/services/workflows-service/src/business/dtos/business-filter-create.ts deleted file mode 100644 index a0d947218b..0000000000 --- a/services/workflows-service/src/business/dtos/business-filter-create.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { BusinessQueryDto } from '@/business/dtos/business-filter-query'; - -export class BusinessFilterCreateDto { - @ApiProperty({ - required: true, - type: String, - }) - name!: string; - - @ApiProperty({ - required: true, - type: String, - }) - entity!: string; - - @ApiProperty({ - required: true, - type: () => BusinessQueryDto, - }) - query!: BusinessQueryDto; -} diff --git a/services/workflows-service/src/business/dtos/business-find-many-args.ts b/services/workflows-service/src/business/dtos/business-find-many-args.ts index 0c7f0e557d..2b2af1391c 100644 --- a/services/workflows-service/src/business/dtos/business-find-many-args.ts +++ b/services/workflows-service/src/business/dtos/business-find-many-args.ts @@ -31,11 +31,4 @@ export class BusinessFindManyArgs { }) @Type(() => Number) take?: number; - - @ApiProperty({ - required: false, - type: String, - }) - @Type(() => String) - filterId?: string; } diff --git a/services/workflows-service/src/business/dtos/business-find-unique-args.ts b/services/workflows-service/src/business/dtos/business-find-unique-args.ts deleted file mode 100644 index 44f9104932..0000000000 --- a/services/workflows-service/src/business/dtos/business-find-unique-args.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Type } from 'class-transformer'; - -export class BusinessFindUniqueArgs { - @ApiProperty({ - required: false, - type: String, - }) - @Type(() => String) - filterId?: string; -} diff --git a/services/workflows-service/src/business/types.ts b/services/workflows-service/src/business/types.ts deleted file mode 100644 index 799f1e25af..0000000000 --- a/services/workflows-service/src/business/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { z } from 'zod'; -import { BusinessFilterSchema } from '@/filter/dtos/temp-zod-schemas'; - -export type TBusinessFilter = z.output<typeof BusinessFilterSchema>; diff --git a/services/workflows-service/src/common/pipes/zod.pipe.ts b/services/workflows-service/src/common/pipes/zod.pipe.ts index f8ed8dbf34..e9c61c4e5a 100644 --- a/services/workflows-service/src/common/pipes/zod.pipe.ts +++ b/services/workflows-service/src/common/pipes/zod.pipe.ts @@ -1,11 +1,16 @@ import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common'; import { ZodSchema } from 'zod'; +import { Paramtype } from '@nestjs/common/interfaces/features/paramtype.interface'; @Injectable() export class ZodValidationPipe implements PipeTransform { - constructor(private schema: ZodSchema) {} + constructor(private readonly schema: ZodSchema, private readonly type: Paramtype) {} transform(value: unknown, metadata: ArgumentMetadata) { + if (this.type !== metadata.type) { + return value; + } + const result = this.schema.safeParse(value); if (!result.success) { diff --git a/services/workflows-service/src/end-user/dtos/end-user-filter-create.ts b/services/workflows-service/src/end-user/dtos/end-user-filter-create.ts deleted file mode 100644 index a19eecf164..0000000000 --- a/services/workflows-service/src/end-user/dtos/end-user-filter-create.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { EndUserQueryDto } from '@/end-user/dtos/end-user-filter-query'; - -export class EndUserFilterCreateDto { - @ApiProperty({ - required: true, - type: String, - }) - name!: string; - - @ApiProperty({ - required: true, - type: () => EndUserQueryDto, - }) - query!: EndUserQueryDto; -} diff --git a/services/workflows-service/src/end-user/dtos/end-user-find-many-args.ts b/services/workflows-service/src/end-user/dtos/end-user-find-many-args.ts index 54a8c7a88f..a483a258fe 100644 --- a/services/workflows-service/src/end-user/dtos/end-user-find-many-args.ts +++ b/services/workflows-service/src/end-user/dtos/end-user-find-many-args.ts @@ -31,11 +31,4 @@ export class EndUserFindManyArgs { }) @Type(() => Number) take?: number; - - @ApiProperty({ - required: false, - type: String, - }) - @Type(() => String) - filterId?: string; } diff --git a/services/workflows-service/src/end-user/dtos/end-user-find-unique-args.ts b/services/workflows-service/src/end-user/dtos/end-user-find-unique-args.ts deleted file mode 100644 index ec8855385f..0000000000 --- a/services/workflows-service/src/end-user/dtos/end-user-find-unique-args.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Type } from 'class-transformer'; - -export class EndUserFindUniqueArgs { - @ApiProperty({ - required: false, - type: String, - }) - @Type(() => String) - filterId?: string; -} diff --git a/services/workflows-service/src/end-user/end-user.controller.internal.ts b/services/workflows-service/src/end-user/end-user.controller.internal.ts index c05067362f..bdc964329f 100644 --- a/services/workflows-service/src/end-user/end-user.controller.internal.ts +++ b/services/workflows-service/src/end-user/end-user.controller.internal.ts @@ -1,6 +1,5 @@ import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import * as common from '@nestjs/common'; -import { Logger, UsePipes } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import * as errors from '../errors'; import { EndUserWhereUniqueInput } from './dtos/end-user-where-unique-input'; @@ -11,25 +10,14 @@ import { Request } from 'express'; import * as nestAccessControl from 'nest-access-control'; import { EndUserService } from './end-user.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; -import { EndUserFilterModel } from '@/end-user/dtos/end-user-filter.model'; -import { FilterService } from '@/filter/filter.service'; import { InputJsonValue } from '@/types'; -import { EndUserFilterCreateDto } from '@/end-user/dtos/end-user-filter-create'; -import { ZodValidationPipe } from '@/common/pipes/zod.pipe'; -import { EndUserFilterCreateSchema } from '@/filter/dtos/temp-zod-schemas'; import { JsonValue } from 'type-fest'; -import { EndUserFindUniqueArgs } from '@/end-user/dtos/end-user-find-unique-args'; -import { TEndUserFilter } from '@/end-user/types'; -import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; @swagger.ApiTags('internal/end-users') @common.Controller('internal/end-users') export class EndUserControllerInternal { - private readonly logger = new Logger(EndUserControllerInternal.name); - constructor( protected readonly service: EndUserService, - protected readonly filterService: FilterService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -39,13 +27,8 @@ export class EndUserControllerInternal { @swagger.ApiForbiddenResponse() @ApiNestedQuery(EndUserFindManyArgs) async list(@common.Req() request: Request): Promise<EndUserModel[]> { - const { filterId, ...args } = plainToClass(EndUserFindManyArgs, request.query); - let query: JsonValue = {}; - - if (filterId) { - const filter = await this.filterService.getById(filterId); - query = filter.query; - } + const args = plainToClass(EndUserFindManyArgs, request.query); + const query: JsonValue = {}; return this.service.list({ ...args, @@ -57,29 +40,9 @@ export class EndUserControllerInternal { @swagger.ApiOkResponse({ type: EndUserModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse() - @ApiNestedQuery(EndUserFindUniqueArgs) - async getById( - @common.Param() params: EndUserWhereUniqueInput, - @common.Req() request: Request, - ): Promise<EndUserModel | null> { + async getById(@common.Param() params: EndUserWhereUniqueInput): Promise<EndUserModel | null> { try { - const { filterId, ...args } = plainToClass(EndUserFindUniqueArgs, request.query); - let query: TEndUserFilter['query'] = {}; - - if (filterId) { - const filter = await this.filterService.getById(filterId); - // findUnique does not support `where`. - const { where: _where, ...restQuery } = filter?.query as TEndUserFilter['query']; - - query = restQuery; - } - - const endUser = await this.service.getById(params?.id, { - ...args, - ...(query as InputJsonValue), - }); - - return endUser; + return await this.service.getById(params?.id); } catch (err) { if (isRecordNotFoundError(err)) { throw new errors.NotFoundException(`No resource was found for ${JSON.stringify(params)}`); @@ -88,21 +51,4 @@ export class EndUserControllerInternal { throw err; } } - - @common.Post('filters') - @UseKeyAuthGuard() - @swagger.ApiCreatedResponse({ type: EndUserFilterModel }) - @swagger.ApiForbiddenResponse() - @UsePipes(new ZodValidationPipe(EndUserFilterCreateSchema)) - async createFilter(@common.Body() data: EndUserFilterCreateDto): Promise<EndUserFilterModel> { - const filter = await this.filterService.create({ - data: { - ...data, - entity: 'individuals', - query: data?.query as InputJsonValue, - }, - }); - - return filter as EndUserFilterModel; - } } diff --git a/services/workflows-service/src/end-user/types.ts b/services/workflows-service/src/end-user/types.ts deleted file mode 100644 index 1f43af57c2..0000000000 --- a/services/workflows-service/src/end-user/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { z } from 'zod'; -import { EndUserFilterSchema } from '@/filter/dtos/temp-zod-schemas'; - -export type TEndUserFilter = z.output<typeof EndUserFilterSchema>; diff --git a/services/workflows-service/src/filter/dtos/filter-create.ts b/services/workflows-service/src/filter/dtos/filter-create.ts index 30b67f606a..90b4f68593 100644 --- a/services/workflows-service/src/filter/dtos/filter-create.ts +++ b/services/workflows-service/src/filter/dtos/filter-create.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsString } from 'class-validator'; +import { IsEnum, IsString } from 'class-validator'; export class FilterCreateDto { @ApiProperty({ @@ -11,8 +11,13 @@ export class FilterCreateDto { @ApiProperty({ required: true, - type: String, + enum: ['individuals', 'businesses'], }) - @IsString() + @IsEnum(['individuals', 'businesses']) entity!: string; + + @ApiProperty({ + required: true, + }) + query!: Record<string, any>; } diff --git a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts index 70d78fd3d3..90fef5837a 100644 --- a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts +++ b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts @@ -185,27 +185,31 @@ export const BusinessRelationFilterSchema = z.object({ // @ts-expect-error - It is expected for z.lazy to be any. export const WorkflowRuntimeDataWhereInputSchema = z.lazy(() => - z.object({ - id: zStringFilterStringUnion.optional(), - endUserId: zStringNullableFilterStringNullUnion.optional(), - businessId: zStringNullableFilterStringNullUnion.optional(), - workflowDefinitionId: zStringFilterStringUnion.optional(), - workflowDefinitionVersion: zStringFilterStringUnion.optional(), - context: z.unknown().optional(), - config: z.unknown().optional(), - state: zStringNullableFilterStringNullUnion.optional(), - status: zStringFilterStringUnion.optional(), - createdAt: zDateTimeFilterDateStringUnion.optional(), - updatedAt: zDateTimeFilterDateStringUnion.optional(), - createdBy: zStringFilterStringUnion.optional(), - endUser: z.union([EndUserRelationFilterSchema, EndUserWhereInputSchema, z.null()]).optional(), - business: z - .union([BusinessRelationFilterSchema, BusinessWhereInputSchema, z.null()]) - .optional(), - workflowDefinition: WorkflowDefinitionRelationFilterSchema.or( - WorkflowDefinitionWhereInputSchema, - ).optional(), - }), + z + .object({ + id: zStringFilterStringUnion.optional(), + endUserId: zStringNullableFilterStringNullUnion.optional(), + businessId: zStringNullableFilterStringNullUnion.optional(), + workflowDefinitionId: zStringFilterStringUnion.optional(), + workflowDefinitionVersion: zStringFilterStringUnion.optional(), + context: z.unknown().optional(), + assigneeId: zStringNullableFilterStringNullUnion.optional(), + config: z.unknown().optional(), + state: zStringNullableFilterStringNullUnion.optional(), + status: zStringFilterStringUnion.optional(), + createdAt: zDateTimeFilterDateStringUnion.optional(), + updatedAt: zDateTimeFilterDateStringUnion.optional(), + createdBy: zStringFilterStringUnion.optional(), + endUser: z.union([EndUserRelationFilterSchema, EndUserWhereInputSchema, z.null()]).optional(), + business: z + .union([BusinessRelationFilterSchema, BusinessWhereInputSchema, z.null()]) + .optional(), + workflowDefinition: WorkflowDefinitionRelationFilterSchema.or( + WorkflowDefinitionWhereInputSchema, + ).optional(), + assignee: UserWhereInputSchema.or(UserRelationFilterSchema).optional(), + }) + .strict(), ); // @ts-ignore @@ -289,6 +293,8 @@ export const WorkflowDefinitionSelectSchema = z.object({ id: z.boolean().optional(), reviewMachineId: z.boolean().optional(), name: z.boolean().optional(), + config: z.boolean().optional(), + contextSchema: z.boolean().optional(), version: z.boolean().optional(), definitionType: z.boolean().optional(), definition: z.boolean().optional(), @@ -313,11 +319,51 @@ export const WorkflowDefinitionSelectSchema = z.object({ .optional(), }); +export const UserSelectSchema = z.object({ + id: z.boolean().optional(), + firstName: z.boolean().optional(), + lastName: z.boolean().optional(), + email: z.boolean().optional(), + phone: z.boolean().optional(), + roles: z.boolean().optional(), + createdAt: z.boolean().optional(), + updatedAt: z.boolean().optional(), + workflowRuntimeData: z + .union([ + z.boolean(), + z.object({ + select: z + .lazy(() => WorkflowRuntimeDataSelectSchema) + .nullable() + .optional(), + }), + ]) + .optional(), +}); + +export const UserWhereInputSchema = z.object({ + id: zStringFilterStringUnion.optional(), + firstName: zStringFilterStringUnion.optional(), + lastName: zStringFilterStringUnion.optional(), + email: zStringFilterStringUnion.optional(), + phone: zStringFilterStringUnion.optional(), + roles: zStringFilterStringUnion.optional(), + createdAt: zDateTimeFilterDateStringUnion.optional(), + updatedAt: zDateTimeFilterDateStringUnion.optional(), + workflowRuntimeData: WorkflowRuntimeDataListRelationFilterSchema.optional(), +}); + +export const UserRelationFilterSchema = z.object({ + is: UserWhereInputSchema.optional(), + isNot: UserWhereInputSchema.optional(), +}); + // @ts-ignore export const WorkflowRuntimeDataSelectSchema = z.object({ id: z.boolean().optional(), endUserId: z.boolean().optional(), businessId: z.boolean().optional(), + assigneeId: z.boolean().optional(), workflowDefinitionId: z.boolean().optional(), workflowDefinitionVersion: z.boolean().optional(), context: z.boolean().optional(), @@ -360,6 +406,17 @@ export const WorkflowRuntimeDataSelectSchema = z.object({ }), ]) .optional(), + assignee: z + .union([ + z.boolean(), + z.object({ + select: z + .lazy(() => UserSelectSchema.strict()) + .nullable() + .optional(), + }), + ]) + .optional(), }); // @ts-ignore @@ -395,27 +452,6 @@ export const EndUserSelectSchema = z.object({ endUsersOnBusinesses: z.boolean().optional(), }); -export const EndUserFilterSchema = FilterSchema.extend({ - query: z - .object({ - select: EndUserSelectSchema.strict() - .refine( - (v: Record<PropertyKey, unknown>) => Object.keys(v).length > 0, - 'At least one `select` field must be provided', - ) - .optional(), - where: EndUserWhereInputSchema.strict().optional(), - }) - .refine(v => v.select || v.where, 'At least `query.select` or `query.where` must be provided'), -}); - -export const EndUserFilterCreateSchema = EndUserFilterSchema.omit({ - id: true, - entity: true, - createdAt: true, - updatedAt: true, -}); - /* Businesses */ // @ts-ignore export const BusinessSelectSchema = z.object({ @@ -476,26 +512,20 @@ export const BusinessWhereInputSchema = z.object({ updatedAt: zDateTimeFilterDateStringUnion.optional(), }); -export const BusinessFilterSchema = FilterSchema.extend({ - query: z - .object({ - select: BusinessSelectSchema.strict() - .refine( - (value: any) => Object.keys(value).length > 0, - 'At least one `select` field must be provided', - ) - .optional(), - where: BusinessWhereInputSchema.strict().optional(), - }) - .refine( - value => value.select || value.where, - 'At least `query.select` or `query.where` must be provided', - ), -}); +const WorkflowRuntimeDataFilterQuerySchema = z + .object({ + select: WorkflowRuntimeDataSelectSchema.strict() + .refine( + (v: Record<PropertyKey, unknown>) => Object.keys(v).length > 0, + 'At least one `select` field must be provided', + ) + .optional(), + where: WorkflowRuntimeDataWhereInputSchema.optional(), + }) + .refine(v => v.select || v.where, 'At least `query.select` or `query.where` must be provided'); -export const BusinessFilterCreateSchema = BusinessFilterSchema.omit({ - id: true, - entity: true, - createdAt: true, - updatedAt: true, +export const FilterCreateSchema = z.object({ + name: z.string(), + entity: z.enum(['individuals', 'businesses']), + query: WorkflowRuntimeDataFilterQuerySchema, }); diff --git a/services/workflows-service/src/filter/filter.controller.external.ts b/services/workflows-service/src/filter/filter.controller.external.ts index c4b7b2d2c0..8f724a630d 100644 --- a/services/workflows-service/src/filter/filter.controller.external.ts +++ b/services/workflows-service/src/filter/filter.controller.external.ts @@ -10,6 +10,12 @@ import { FilterFindManyArgs } from '@/filter/dtos/filter-find-many-args'; import { FilterModel } from '@/filter/filter.model'; import { FilterWhereUniqueInput } from '@/filter/dtos/filter-where-unique-input'; import { FilterService } from '@/filter/filter.service'; +import { UsePipes } from '@nestjs/common'; +import { ZodValidationPipe } from '@/common/pipes/zod.pipe'; +import { FilterCreateDto } from '@/filter/dtos/filter-create'; +import { FilterCreateSchema } from '@/filter/dtos/temp-zod-schemas'; +import { InputJsonValue } from '@/types'; +import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; @swagger.ApiTags('external/filters') @common.Controller('external/filters') @@ -46,4 +52,18 @@ export class FilterControllerExternal { throw err; } } + + @common.Post() + @UseKeyAuthGuard() + @swagger.ApiCreatedResponse({ type: FilterModel }) + @swagger.ApiForbiddenResponse() + @UsePipes(new ZodValidationPipe(FilterCreateSchema, 'body')) + async createFilter(@common.Body() data: FilterCreateDto) { + return await this.service.create({ + data: { + ...data, + query: data?.query as InputJsonValue, + }, + }); + } } diff --git a/services/workflows-service/src/filter/filter.model.ts b/services/workflows-service/src/filter/filter.model.ts index 88e9adac54..0b5cef573d 100644 --- a/services/workflows-service/src/filter/filter.model.ts +++ b/services/workflows-service/src/filter/filter.model.ts @@ -1,31 +1,29 @@ -import { StringFilter } from '@/common/query-filters/string-filter'; import { ApiProperty } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { IsObject, IsString } from 'class-validator'; +import { IsEnum, IsObject, IsString } from 'class-validator'; import { JsonValue } from 'type-fest'; export class FilterModel { @ApiProperty({ required: true, - type: StringFilter, + type: String, }) - @Type(() => StringFilter) + @Type(() => String) id!: string; @ApiProperty({ required: true, - type: StringFilter, + type: String, }) - @Type(() => StringFilter) + @Type(() => String) @IsString() name!: string; @ApiProperty({ required: true, - type: StringFilter, + enum: ['individuals', 'businesses'], }) - @Type(() => StringFilter) - @IsString() + @IsEnum(['individuals', 'businesses']) entity!: string; @ApiProperty({ diff --git a/services/workflows-service/src/prisma/prisma.service.ts b/services/workflows-service/src/prisma/prisma.service.ts index 3882b9a57f..30ee0efdb9 100644 --- a/services/workflows-service/src/prisma/prisma.service.ts +++ b/services/workflows-service/src/prisma/prisma.service.ts @@ -3,6 +3,12 @@ import { PrismaClient } from '@prisma/client'; @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit { + constructor() { + super({ + errorFormat: 'pretty', + }); + } + async onModuleInit() { await this.$connect(); } diff --git a/services/workflows-service/src/workflow/dtos/find-workflow.dto.ts b/services/workflows-service/src/workflow/dtos/find-workflow.dto.ts new file mode 100644 index 0000000000..b9b791aead --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/find-workflow.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { z } from 'zod'; + +export class FindWorkflowParamsDto { + @ApiProperty() + id!: string; +} + +export class FindWorkflowQueryDto { + @ApiProperty() + filterId!: string; +} + +export const FindWorkflowQuerySchema = z.object({ + filterId: z.string(), +}); diff --git a/services/workflows-service/src/workflow/dtos/find-workflows-list.dto.ts b/services/workflows-service/src/workflow/dtos/find-workflows-list.dto.ts new file mode 100644 index 0000000000..8bb6a31e0e --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/find-workflows-list.dto.ts @@ -0,0 +1,90 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { WorkflowRuntimeDataStatus } from '@prisma/client'; +import { z } from 'zod'; + +class PageDto { + @ApiProperty() + number!: number; + + @ApiProperty() + size!: number; +} + +class FilterDto { + @ApiProperty() + assigneeId?: (string | null)[]; + + @ApiProperty() + status?: WorkflowRuntimeDataStatus[]; +} + +export class FindWorkflowsListDto { + @ApiProperty() + filterId!: string; + + @ApiProperty() + orderBy!: string; + + @ApiProperty() + page!: PageDto; + + @ApiProperty() + limit!: number; + + @ApiProperty() + filter?: FilterDto; +} + +const validateOrderBy = (value: unknown, validColumns: readonly string[]) => { + if (typeof value !== 'string') { + throw new Error('Invalid orderBy'); + } + + const [column = '', direction = ''] = value.split(':'); + + if (!validColumns.includes(column)) { + throw new Error(`Invalid column: ${column}`); + } + + // @ts-expect-error + if (!sortDirections.includes(direction)) { + throw new Error(`Invalid direction: ${direction}`); + } + + return value; +}; +export const FindWorkflowsListSchema = z.object({ + filterId: z.string(), + orderBy: z.string(), + page: z.object({ + number: z.coerce.number().int().positive(), + size: z.coerce.number().int().positive(), + }), + filter: z + .object({ + assigneeId: z + .array(z.union([z.literal('').transform(() => null), z.string().nonempty()])) + .optional(), + status: z.array(z.nativeEnum(WorkflowRuntimeDataStatus)).optional(), + }) + .optional(), +}); + +const sortDirections = ['asc', 'desc'] as const; +const sortableColumnsIndividuals = ['createdAt', 'firstName', 'lastName', 'email'] as const; +const sortableColumnsBusinesses = ['createdAt', 'companyName'] as const; + +export const FindWorkflowsListLogicSchema = { + individuals: z.object({ + orderBy: + z.custom<`${(typeof sortableColumnsIndividuals)[number]}:${(typeof sortDirections)[number]}`>( + value => validateOrderBy(value, sortableColumnsIndividuals), + ), + }), + businesses: z.object({ + orderBy: + z.custom<`${(typeof sortableColumnsBusinesses)[number]}:${(typeof sortDirections)[number]}`>( + value => validateOrderBy(value, sortableColumnsBusinesses), + ), + }), +} as const; diff --git a/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts b/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts deleted file mode 100644 index 904e928249..0000000000 --- a/services/workflows-service/src/workflow/enrich-workflow-runtime-data.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { WorkflowRuntimeData } from '@prisma/client'; -import { countryCodes } from '@/common/countries'; -import { - DefaultContextSchema, - getDocumentId, - getDocumentsByCountry, - TDocument, -} from '@ballerine/common'; - -export const enrichWorkflowRuntimeData = (workflowRuntimeData: WorkflowRuntimeData) => { - if (workflowRuntimeData?.context?.documents?.length) { - const documents = workflowRuntimeData?.context?.documents as DefaultContextSchema['documents']; - // @ts-ignore - const result = documents.map(document => { - const documents = getDocumentsByCountry( - document.issuer.country as (typeof countryCodes)[number], - ); - const id = getDocumentId(document as unknown as TDocument); - const documentSchema = documents[id]; - document.id ||= id; - - return { - ...document, - propertiesSchema: documentSchema ? documentSchema.propertiesSchema : {}, - }; - }); - - workflowRuntimeData.context.documents = result; - } - - return workflowRuntimeData; -}; diff --git a/services/workflows-service/src/workflow/types/index.ts b/services/workflows-service/src/workflow/types/index.ts index 7d55ffc9c3..afa14ca82d 100644 --- a/services/workflows-service/src/workflow/types/index.ts +++ b/services/workflows-service/src/workflow/types/index.ts @@ -1,4 +1,5 @@ -import { WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; +import { Business, EndUser, WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; +import { User } from '@sentry/node'; export interface RunnableWorkflowData { workflowDefinition: WorkflowDefinition; @@ -11,3 +12,8 @@ export type CompleteWorkflowData = WorkflowRuntimeData & { }; export type TEntityType = 'endUser' | 'business'; + +export type TWorkflowWithRelations = WorkflowRuntimeData & { + workflowDefinition: WorkflowDefinition; + assignee: User; +} & ({ endUser: EndUser } | { business: Business }); diff --git a/services/workflows-service/src/workflow/update-documents.test.ts b/services/workflows-service/src/workflow/update-documents.test.ts index a150e8322b..152fac9c2e 100644 --- a/services/workflows-service/src/workflow/update-documents.test.ts +++ b/services/workflows-service/src/workflow/update-documents.test.ts @@ -56,6 +56,7 @@ describe('updateDocuments', () => { const documents = getMockDocuments(); const documentsToUpdate: Documents = [ { + id: 'id-1', version: 1, decision: { revisionReason: '', @@ -112,6 +113,7 @@ describe('updateDocuments', () => { function getMockDocuments(): Documents { return [ { + id: 'id-1', version: 1, decision: { revisionReason: 'Blurry image', @@ -167,6 +169,7 @@ function getMockDocuments(): Documents { }, }, { + id: 'id-2', version: 1, decision: { revisionReason: 'Blurry image', @@ -214,6 +217,7 @@ function getMockDocuments(): Documents { }, }, { + id: 'id-3', version: 1, decision: { revisionReason: 'Blurry image', diff --git a/services/workflows-service/src/workflow/update-documents.ts b/services/workflows-service/src/workflow/update-documents.ts index 11888a8228..f4422a1c10 100644 --- a/services/workflows-service/src/workflow/update-documents.ts +++ b/services/workflows-service/src/workflow/update-documents.ts @@ -1,4 +1,4 @@ -import { DefaultContextSchema, getDocumentId } from '@ballerine/common'; +import { DefaultContextSchema } from '@ballerine/common'; type Documents = DefaultContextSchema['documents']; type Document = Documents[number]; @@ -11,16 +11,12 @@ export const updateDocuments = ( // @ts-ignore existingDocuments.forEach(document => { - const documentId = document.id || getDocumentId(document); - - updatedDocumentsMap.set(documentId, document); + updatedDocumentsMap.set(document.id!, document); }); // @ts-ignore documentsToUpdate.forEach(document => { - const documentId = document.id || getDocumentId(document); - - updatedDocumentsMap.set(documentId, document); + updatedDocumentsMap.set(document.id!, document); }); return Array.from(updatedDocumentsMap.values()); diff --git a/services/workflows-service/src/workflow/utils/toPrismaOrderBy.ts b/services/workflows-service/src/workflow/utils/toPrismaOrderBy.ts new file mode 100644 index 0000000000..a7f7044eb5 --- /dev/null +++ b/services/workflows-service/src/workflow/utils/toPrismaOrderBy.ts @@ -0,0 +1,43 @@ +import { Prisma } from '@prisma/client'; + +type Direction = 'asc' | 'desc'; +type IndividualsColumns = 'firstName' | 'lastName' | 'email'; +type BusinessesColumns = 'companyName'; +type WorkflowColumns = 'createdAt'; + +type AvailableColumns<T extends 'individuals' | 'businesses'> = T extends 'individuals' + ? IndividualsColumns | WorkflowColumns + : BusinessesColumns | WorkflowColumns; + +type EntityType = 'individuals' | 'businesses'; + +export const toPrismaOrderBy = < + TEntityType extends EntityType, + TColumn extends AvailableColumns<TEntityType>, + TDirection extends Direction, +>( + orderBy: `${TColumn}:${TDirection}`, + entityType: TEntityType, +): Prisma.WorkflowRuntimeDataOrderByWithRelationInput => { + const [column, direction] = orderBy.split(':') as [TColumn, TDirection]; + + if (column === 'createdAt') { + return { + [column]: direction, + }; + } + + if (entityType === 'individuals') { + return { + endUser: { + [column]: direction, + }, + }; + } + + return { + business: { + [column]: direction, + }, + }; +}; diff --git a/services/workflows-service/src/workflow/utils/toPrismaWhere.ts b/services/workflows-service/src/workflow/utils/toPrismaWhere.ts new file mode 100644 index 0000000000..1732bd5dfc --- /dev/null +++ b/services/workflows-service/src/workflow/utils/toPrismaWhere.ts @@ -0,0 +1,31 @@ +import { Prisma, WorkflowRuntimeDataStatus } from '@prisma/client'; + +type Filters = { + assigneeId?: (string | null)[]; + status?: WorkflowRuntimeDataStatus[]; +}; + +export const toPrismaWhere = (filters: Filters): Prisma.WorkflowRuntimeDataWhereInput => { + const where: Prisma.WorkflowRuntimeDataWhereInput = {}; + + if (filters.assigneeId) { + where.OR = [ + { + assigneeId: { + in: filters.assigneeId.filter((id): id is string => id !== null), + }, + }, + { + assigneeId: filters.assigneeId.includes(null) ? null : undefined, + }, + ]; + } + + if (filters.status) { + where.status = { + in: filters.status, + }; + } + + return where; +}; diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index c39c3f4010..74e51cdb19 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -2,6 +2,7 @@ import { PrismaService } from '@/prisma/prisma.service'; import { Injectable } from '@nestjs/common'; import { Prisma, WorkflowRuntimeData, WorkflowRuntimeDataStatus } from '@prisma/client'; import { TEntityType } from '@/workflow/types'; +import { merge } from 'lodash'; @Injectable() export class WorkflowRuntimeDataRepository { @@ -29,10 +30,7 @@ export class WorkflowRuntimeDataRepository { id: string, args?: Prisma.SelectSubset<T, Omit<Prisma.WorkflowRuntimeDataFindUniqueOrThrowArgs, 'where'>>, ): Promise<WorkflowRuntimeData> { - return await this.prisma.workflowRuntimeData.findUniqueOrThrow({ - where: { id }, - ...args, - }); + return await this.prisma.workflowRuntimeData.findFirstOrThrow(merge(args, { where: { id } })); } async updateById<T extends Omit<Prisma.WorkflowRuntimeDataUpdateArgs, 'where'>>( @@ -99,4 +97,10 @@ export class WorkflowRuntimeDataRepository { }) )?.context; } + + async count<T extends Prisma.WorkflowRuntimeDataFindManyArgs>( + args?: Prisma.SelectSubset<T, Prisma.WorkflowRuntimeDataFindManyArgs>, + ): Promise<number> { + return await this.prisma.workflowRuntimeData.count(args); + } } diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.test.ts b/services/workflows-service/src/workflow/workflow.controller.internal.test.ts index 04ca02b2b7..218e5b2eae 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.test.ts @@ -94,42 +94,10 @@ describe('WorkflowControllerInternal', () => { {} as any, eventEmitterSpy, ); + const filterService = {} as any; + const rolesBuilder = {} as any; - controller = new WorkflowControllerInternal(service, {} as any); - }); - - describe('.listWorkflowDefinitions', () => { - it('returns workflows by query', async () => { - await controller.createWorkflowDefinition(numbUserInfo, buildWorkflowDeifintion(2)); - await controller.createWorkflowDefinition(numbUserInfo, buildWorkflowDeifintion(3)); - await controller.createWorkflowDefinition(numbUserInfo, buildWorkflowDeifintion(4)); - - const definitions = await controller.listWorkflowDefinitions(numbUserInfo, { - query: { - where: { - name: 'name 3', - }, - }, - }); - - expect(definitions).toHaveLength(1); - expect(definitions[0]).toMatchObject({ id: '3', name: 'name 3' }); - expect(definitions[0]).not.toHaveProperty('updatedAt'); - }); - - it('filters out certain fields', async () => { - await controller.createWorkflowDefinition(numbUserInfo, buildWorkflowDeifintion(3)); - - const definitions = await controller.listWorkflowDefinitions(numbUserInfo, { - query: { - where: { - name: 'name 3', - }, - }, - }); - - expect(definitions[0]).not.toHaveProperty('updatedAt'); - }); + controller = new WorkflowControllerInternal(service, filterService, rolesBuilder); }); describe('.event', () => { diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.ts b/services/workflows-service/src/workflow/workflow.controller.internal.ts index 3eba69456b..1696f401db 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.ts @@ -14,14 +14,21 @@ import { WorkflowEventInput } from './dtos/workflow-event-input'; import { UserData } from '@/user/user-data.decorator'; import { UserInfo } from '@/user/user-info'; import { WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; -import { RunnableWorkflowData } from './types'; import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; -import { plainToClass } from 'class-transformer'; -import { Request } from 'express'; -import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find-many-args'; import { WorkflowDefinitionUpdateInput } from '@/workflow/dtos/workflow-definition-update-input'; -import { enrichWorkflowRuntimeData } from './enrich-workflow-runtime-data'; -import { UseGuards } from '@nestjs/common'; +import { + FindWorkflowsListDto, + FindWorkflowsListLogicSchema, + FindWorkflowsListSchema, +} from '@/workflow/dtos/find-workflows-list.dto'; +import { ZodValidationPipe } from '@/common/pipes/zod.pipe'; +import { UsePipes, UseGuards } from '@nestjs/common'; +import { FilterService } from '@/filter/filter.service'; +import { + FindWorkflowParamsDto, + FindWorkflowQueryDto, + FindWorkflowQuerySchema, +} from '@/workflow/dtos/find-workflow.dto'; import { WorkflowAssigneeGuard } from '@/auth/assignee-asigned-guard.service'; import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; @@ -30,6 +37,7 @@ import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; export class WorkflowControllerInternal { constructor( protected readonly service: WorkflowService, + protected readonly filterService: FilterService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -45,16 +53,42 @@ export class WorkflowControllerInternal { } @common.Get() - @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) - @swagger.ApiForbiddenResponse() - @ApiNestedQuery(WorkflowDefinitionFindManyArgs) - async listWorkflowDefinitions( - @UserData() userInfo: UserInfo, - @common.Req() request: Request, - ): Promise<WorkflowDefinition[]> { - const args = plainToClass(WorkflowDefinitionFindManyArgs, request.query); + @swagger.ApiOkResponse() + @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @ApiNestedQuery(FindWorkflowsListDto) + @UsePipes(new ZodValidationPipe(FindWorkflowsListSchema, 'query')) + async listWorkflowRuntimeData( + @common.Query() { filterId, page, filter: filters, ...queryParams }: FindWorkflowsListDto, + ) { + const filter = await this.filterService.getById(filterId); + + const entityType = filter.entity as 'individuals' | 'businesses'; + + const { orderBy } = FindWorkflowsListLogicSchema[entityType].parse(queryParams); - return await this.service.listWorkflowDefinitions(args); + return await this.service.listWorkflowRuntimeDataWithRelations({ + args: filter.query as any, + entityType, + orderBy, + page, + filters, + }); + } + + @common.Get('/:id') + @swagger.ApiOkResponse() + @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @ApiNestedQuery(FindWorkflowQueryDto) + @UsePipes(new ZodValidationPipe(FindWorkflowQuerySchema, 'query')) + async getRunnableWorkflowDataById( + @common.Param() { id }: FindWorkflowParamsDto, + @common.Query() { filterId }: FindWorkflowQueryDto, + ) { + const filter = await this.filterService.getById(filterId); + + return await this.service.getWorkflowByIdWithRelations(id, filter.query as any); } @common.Get('/active-states') @@ -86,23 +120,6 @@ export class WorkflowControllerInternal { }); } - @common.Get('/:id') - @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) - @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) - @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) - async getRunnableWorkflowDataById( - @common.Param() params: WorkflowDefinitionWhereUniqueInput, - ): Promise<RunnableWorkflowData | null> { - const workflowRuntimeData = await this.service.getWorkflowRuntimeDataById(params.id); - const workflowDefinition = await this.service.getWorkflowDefinitionById( - workflowRuntimeData.workflowDefinitionId, - ); - return { - workflowDefinition, - workflowRuntimeData: enrichWorkflowRuntimeData(workflowRuntimeData), - }; - } - // PATCH /workflows/:id @common.Patch('/:id') @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index 51083f2acc..56607c85d1 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -14,6 +14,8 @@ import { FileService } from '@/providers/file/file.service'; import { StorageService } from '@/storage/storage.service'; import { FileRepository } from '@/storage/storage.repository'; import { HttpModule, HttpService } from '@nestjs/axios'; +import { FilterRepository } from '@/filter/filter.repository'; +import { FilterService } from '@/filter/filter.service'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule), HttpModule], @@ -29,6 +31,8 @@ import { HttpModule, HttpService } from '@nestjs/axios'; FileService, WorkflowEventEmitterService, DocumentChangedWebhookCaller, + FilterRepository, + FilterService, ], exports: [WorkflowService, ACLModule, AuthModule, StorageService, FileRepository], }) diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 3c22df8609..964cb5a204 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -11,11 +11,11 @@ import { WorkflowRuntimeDataStatus, } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; -import { CompleteWorkflowData, RunnableWorkflowData } from './types'; +import { CompleteWorkflowData, RunnableWorkflowData, TWorkflowWithRelations } from './types'; import { createWorkflow } from '@ballerine/workflow-node-sdk'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { isEqual, merge } from 'lodash'; -import { BadRequestException, Injectable, Logger } from '@nestjs/common'; +import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common'; import { WorkflowDefinitionRepository } from './workflow-definition.repository'; import { WorkflowDefinitionCreateDto } from './dtos/workflow-definition-create'; import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find-many-args'; @@ -43,7 +43,13 @@ import { updateDocuments } from '@/workflow/update-documents'; import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; import { ConfigSchema, WorkflowConfig } from './schemas/zod-schemas'; -import { DefaultContextSchema, getDocumentId, TDefaultSchemaDocumentPage } from '@ballerine/common'; +import { toPrismaOrderBy } from '@/workflow/utils/toPrismaOrderBy'; +import { toPrismaWhere } from '@/workflow/utils/toPrismaWhere'; +import { + certificateOfResidenceGH, + DefaultContextSchema, + TDefaultSchemaDocumentPage, +} from '@ballerine/common'; type TEntityId = string; @@ -122,6 +128,57 @@ export class WorkflowService { return await this.workflowRuntimeDataRepository.findById(id, args); } + async getWorkflowByIdWithRelations( + id: string, + args?: Parameters<WorkflowRuntimeDataRepository['findById']>[1], + ) { + const workflow = (await this.workflowRuntimeDataRepository.findById( + id, + args, + )) as TWorkflowWithRelations; + + return this.formatWorkflow(workflow); + } + + private formatWorkflow(workflow: TWorkflowWithRelations) { + const isIndividual = 'endUser' in workflow; + + const service = createWorkflow({ + definition: workflow.workflowDefinition as any, + definitionType: workflow.workflowDefinition.definitionType, + workflowContext: { + machineContext: workflow.context, + state: workflow.state, + }, + }); + + return { + ...workflow, + context: { + ...workflow.context, + documents: workflow.context?.documents?.map( + (document: DefaultContextSchema['documents'][number]) => ({ + ...document, + propertiesSchema: certificateOfResidenceGH.propertiesSchema, + }), + ), + }, + entity: { + id: isIndividual ? workflow.endUser.id : workflow.business.id, + name: isIndividual + ? `${String(workflow.endUser.firstName)} ${String(workflow.endUser.lastName)}` + : workflow.business.companyName, + avatarUrl: isIndividual ? workflow.endUser.avatarUrl : null, + approvalState: isIndividual + ? workflow.endUser.approvalState + : workflow.business.approvalState, + }, + endUser: undefined, + business: undefined, + nextEvents: service.getSnapshot().nextEvents, + }; + } + async getWorkflowRuntimeDataByCorrelationId( id: string, args?: Parameters<WorkflowRuntimeDataRepository['findById']>[1], @@ -149,6 +206,97 @@ export class WorkflowService { }); } + async listWorkflowRuntimeDataWithRelations({ + args, + entityType, + orderBy, + page, + filters, + }: { + args: Parameters<WorkflowRuntimeDataRepository['findMany']>[0]; + entityType: 'individuals' | 'businesses'; + orderBy: Parameters<typeof toPrismaOrderBy>[0]; + page: { + number: number; + size: number; + }; + filters?: { + assigneeId?: (string | null)[]; + status?: WorkflowRuntimeDataStatus[]; + }; + }) { + const query = merge( + args, + { + orderBy: toPrismaOrderBy(orderBy, entityType), + where: filters ? toPrismaWhere(filters) : {}, + skip: (page.number - 1) * page.size, + take: page.size, + }, + { + where: + entityType === 'individuals' + ? { + endUserId: { not: null }, + } + : { + businessId: { not: null }, + }, + }, + ); + + const totalWorkflowsCount = await this.workflowRuntimeDataRepository.count({ + where: query.where, + }); + + if (page.number > 1 && totalWorkflowsCount < (page.number - 1) * page.size + 1) { + throw new NotFoundException('Page not found'); + } + + const workflows = (await this.workflowRuntimeDataRepository.findMany( + query, + )) as TWorkflowWithRelations[]; + + return { + data: this.formatWorkflowsRuntimeData(workflows), + meta: { + totalItems: totalWorkflowsCount, + totalPages: Math.max(Math.ceil(totalWorkflowsCount / page.size), 1), + }, + }; + } + + private formatWorkflowsRuntimeData(workflows: TWorkflowWithRelations[]) { + return workflows.map(workflow => { + const isIndividual = 'endUser' in workflow; + + console.log('workflow', workflow); + + return { + id: workflow?.id, + status: workflow?.status, + createdAt: workflow?.createdAt, + entity: { + id: isIndividual ? workflow?.endUser?.id : workflow?.business?.id, + name: isIndividual + ? `${String(workflow?.endUser?.firstName)} ${String(workflow?.endUser?.lastName)}` + : workflow?.business?.companyName, + avatarUrl: isIndividual ? workflow?.endUser?.avatarUrl : null, + approvalState: isIndividual + ? workflow?.endUser?.approvalState + : workflow?.business?.approvalState, + }, + assignee: workflow?.assigneeId + ? { + id: workflow?.assigneeId, + firstName: workflow?.assignee?.firstName, + lastName: workflow?.assignee?.lastName, + } + : null, + }; + }); + } + async listWorkflowRuntimeDataByUserId(userId: string) { return await this.workflowRuntimeDataRepository.findMany({ where: { endUserId: userId }, @@ -567,8 +715,7 @@ export class WorkflowService { entityId: string, documentPage: TDefaultSchemaDocumentPage, ) { - const documentContext = getDocumentId(document).toLowerCase(); - const remoteFileName = `${documentContext}_${crypto.randomUUID()}.${documentPage.type}`; + const remoteFileName = `${document.id!}_${crypto.randomUUID()}.${documentPage.type}`; const { fromServiceProvider, fromRemoteFileConfig } = this.__fetchFromServiceProviders(documentPage); @@ -659,7 +806,7 @@ export class WorkflowService { context: DefaultContextSchema, ) { if (workflowDefinition.contextSchema && Object.keys(workflowDefinition.contextSchema).length) { - const validate = ajv.compile((workflowDefinition.contextSchema as any).schema); // TODO: fix type + const validate = ajv.compile(workflowDefinition.contextSchema.schema); // TODO: fix type const validationResult = validate(context); if (!validationResult) { @@ -683,9 +830,9 @@ export class WorkflowService { const service = createWorkflow({ // eslint-disable-next-line @typescript-eslint/no-explicit-any - definition: workflow.definition as any, + definition: workflow.definition, // eslint-disable-next-line @typescript-eslint/no-explicit-any - definitionType: workflow.definitionType as any, + definitionType: workflow.definitionType, workflowContext: { machineContext: runtimeData.context, state: runtimeData.state, diff --git a/websites/docs/package.json b/websites/docs/package.json index 890c07d9f7..a385e91820 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -22,7 +22,7 @@ "@astrojs/mdx": "^0.18.3", "@astrojs/react": "^1.2.2", "@astrojs/solid-js": "^1.2.3", - "@ballerine/common": "0.0.1", + "@ballerine/common": "0.5.1", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From 78fa77ad1546df0258bf15a93d37d958041250b9 Mon Sep 17 00:00:00 2001 From: TzlilSwimmer123 <51244810+TzlilSwimmer123@users.noreply.github.com> Date: Tue, 13 Jun 2023 17:08:30 +0300 Subject: [PATCH 024/123] feat: create workflows websocket service (#499) * feat(workflows-websocket-service): create workflows websocket service create a new service for supporting websockets in workflows service and reduce the usage of polling in backoffice ui BREAKING CHANGE: Create a brand new service feat #328 --------- Co-authored-by: teselil <tzlil@datree.com> --- package.json | 3 +- pnpm-lock.yaml | 1047 +++++++++++++++-- scripts/init.js | 2 + .../workflows-websocket-service/.env.example | 3 + .../workflows-websocket-service/.eslintignore | 3 + .../workflows-websocket-service/.eslintrc.cjs | 38 + .../workflows-websocket-service/.gitignore | 9 + .../.prettierignore | 4 + .../.prettierrc.cjs | 1 + .../workflows-websocket-service/README.md | 73 ++ .../jest.config.cjs | 14 + .../workflows-websocket-service/package.json | 57 + .../src/app.controller.test.ts | 22 + .../src/app.controller.ts | 12 + .../src/app.gateway.ts | 33 + .../src/app.module.ts | 12 + .../src/app.service.ts | 8 + .../workflows-websocket-service/src/env.ts | 23 + .../workflows-websocket-service/src/main.ts | 16 + .../src/notifications/notify.controller.ts | 13 + .../test/app.e2e-spec.ts | 21 + .../test/jest-e2e.json | 9 + .../tsconfig.build.json | 4 + .../workflows-websocket-service/tsconfig.json | 32 + .../tsconfig.test.json | 6 + 25 files changed, 1339 insertions(+), 126 deletions(-) create mode 100644 services/workflows-websocket-service/.env.example create mode 100644 services/workflows-websocket-service/.eslintignore create mode 100644 services/workflows-websocket-service/.eslintrc.cjs create mode 100644 services/workflows-websocket-service/.gitignore create mode 100644 services/workflows-websocket-service/.prettierignore create mode 100644 services/workflows-websocket-service/.prettierrc.cjs create mode 100644 services/workflows-websocket-service/README.md create mode 100644 services/workflows-websocket-service/jest.config.cjs create mode 100644 services/workflows-websocket-service/package.json create mode 100644 services/workflows-websocket-service/src/app.controller.test.ts create mode 100644 services/workflows-websocket-service/src/app.controller.ts create mode 100644 services/workflows-websocket-service/src/app.gateway.ts create mode 100644 services/workflows-websocket-service/src/app.module.ts create mode 100644 services/workflows-websocket-service/src/app.service.ts create mode 100644 services/workflows-websocket-service/src/env.ts create mode 100644 services/workflows-websocket-service/src/main.ts create mode 100644 services/workflows-websocket-service/src/notifications/notify.controller.ts create mode 100644 services/workflows-websocket-service/test/app.e2e-spec.ts create mode 100644 services/workflows-websocket-service/test/jest-e2e.json create mode 100644 services/workflows-websocket-service/tsconfig.build.json create mode 100644 services/workflows-websocket-service/tsconfig.json create mode 100644 services/workflows-websocket-service/tsconfig.test.json diff --git a/package.json b/package.json index d69525d1a7..f72b828277 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,11 @@ "playwright:install": "nx run-many --target=playwright:install", "dev": "nx run-many --target=dev --projects=@ballerine/workflows-service,@ballerine/backoffice-v2", "start": "nx run-many --target=start --projects=@ballerine/web-ui-sdk", - "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service", + "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/workflows-websocket-service", "web-ui-sdk:dev": "nx run @ballerine/web-ui-sdk:dev", "web-ui-sdk:start": "nx run @ballerine/web-ui-sdk:start", "workflows-service:start": "nx run @ballerine/workflows-service:start", + "workflows-websocket-service:start": "nx run @ballerine/workflows-websocket-service:start", "workflow-browser-sdk:build": "nx run @ballerine/workflow-browser-sdk:build", "workflow-browser-sdk:dev": "nx run @ballerine/workflow-browser-sdk:dev", "workflow-browser-sdk:watch": "nx run @ballerine/workflow-browser-sdk:watch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd316ea6d3..140cdd1aeb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1083,7 +1083,7 @@ importers: version: 2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/devtools-integration': specifier: ^0.1.4 version: 0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) @@ -1299,6 +1299,106 @@ importers: specifier: ^4.9.3 version: 4.9.5 + services/workflows-websocket-service: + dependencies: + '@nestjs/common': + specifier: ^9.3.12 + version: 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': + specifier: ^9.3.12 + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': + specifier: ^9.3.12 + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + '@nestjs/platform-ws': + specifier: ^9.4.2 + version: 9.4.2(@nestjs/common@9.4.0)(@nestjs/websockets@9.4.2)(rxjs@7.8.0) + '@nestjs/websockets': + specifier: ^9.4.2 + version: 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@t3-oss/env-core': + specifier: ^0.3.1 + version: 0.3.1(typescript@4.9.5)(zod@3.21.4) + '@types/ws': + specifier: ^8.5.4 + version: 8.5.4 + reflect-metadata: + specifier: ^0.1.13 + version: 0.1.13 + rxjs: + specifier: ^7.8.0 + version: 7.8.0 + ws: + specifier: ^8.13.0 + version: 8.13.0 + zod: + specifier: ^3.21.4 + version: 3.21.4 + devDependencies: + '@nestjs/cli': + specifier: ^9.3.0 + version: 9.3.0 + '@nestjs/schematics': + specifier: ^9.0.0 + version: 9.1.0(chokidar@3.5.3)(typescript@4.9.5) + '@nestjs/testing': + specifier: ^9.3.12 + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0) + '@types/express': + specifier: 4.17.9 + version: 4.17.9 + '@types/jest': + specifier: ^26.0.19 + version: 26.0.24 + '@types/node': + specifier: ^18.14.6 + version: 18.15.11 + '@types/supertest': + specifier: 2.0.11 + version: 2.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^5.54.1 + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.54.1 + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + eslint: + specifier: ^8.35.0 + version: 8.38.0 + eslint-config-prettier: + specifier: ^8.7.0 + version: 8.8.0(eslint@8.38.0) + eslint-import-resolver-typescript: + specifier: ^3.5.3 + version: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + eslint-plugin-import: + specifier: ^2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + jest: + specifier: 29.5.0 + version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + prettier: + specifier: ^2.8.4 + version: 2.8.8 + supertest: + specifier: ^6.1.3 + version: 6.1.3 + ts-jest: + specifier: 29.1.0 + version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@4.9.5) + ts-loader: + specifier: ^9.2.3 + version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + tsconfig-paths: + specifier: 4.2.0 + version: 4.2.0 + typescript: + specifier: ^4.9.3 + version: 4.9.5 + websites/docs: dependencies: '@algolia/client-search': @@ -1843,20 +1943,20 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/abort-controller@3.329.0: resolution: {integrity: sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.329.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@aws-sdk/chunked-blob-reader@3.310.0: resolution: {integrity: sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/client-s3@3.325.0: resolution: {integrity: sha512-S88q84bJ1Wba3jnpIrWxMD4AbDsG7l45Ey4ZDdyriEceEgIWvBCA90ZOgSdaObhFNa5pNFZG9C6UbiaCz3F3bA==} @@ -1955,7 +2055,7 @@ packages: '@aws-sdk/util-user-agent-browser': 3.310.0 '@aws-sdk/util-user-agent-node': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -1994,7 +2094,7 @@ packages: '@aws-sdk/util-user-agent-browser': 3.310.0 '@aws-sdk/util-user-agent-node': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2037,7 +2137,7 @@ packages: '@aws-sdk/util-user-agent-node': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 fast-xml-parser: 4.1.2 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2048,7 +2148,7 @@ packages: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-config-provider': 3.310.0 '@aws-sdk/util-middleware': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/credential-provider-env@3.310.0: resolution: {integrity: sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==} @@ -2056,7 +2156,7 @@ packages: dependencies: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/credential-provider-imds@3.310.0: resolution: {integrity: sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==} @@ -2066,7 +2166,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/url-parser': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/credential-provider-ini@3.325.0: resolution: {integrity: sha512-jvNEHU4zEBbtvf2JqiC2ENb0Y55BurA5X6KVBP1vA3mvn7+zIGH9qD1nAkpvrRelzuorbC5Ey7AmZshR+AugTg==} @@ -2080,7 +2180,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2097,7 +2197,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2108,7 +2208,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/credential-provider-sso@3.325.0: resolution: {integrity: sha512-Te7jxJwjVGJAPWN3jCq2xcYrX8d4WkZFIqSIWSmrHqGKgWPc8+QgUkpRQkHaM+4NeNBJadRG1XbJNfu22gjDWA==} @@ -2119,7 +2219,7 @@ packages: '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/token-providers': 3.325.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2129,7 +2229,7 @@ packages: dependencies: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/eventstream-codec@3.310.0: resolution: {integrity: sha512-clIeSgWbZbxwtsxZ/yoedNM0/kJFSIjjHPikuDGhxhqc+vP6TN3oYyVMFrYwFaTFhk2+S5wZcWYMw8Op1pWo+A==} @@ -2137,7 +2237,7 @@ packages: '@aws-crypto/crc32': 3.0.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-hex-encoding': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/eventstream-serde-browser@3.310.0: resolution: {integrity: sha512-3S6ziuQVALgEyz0TANGtYDVeG8ArK4Y05mcgrs8qUTmsvlDIXX37cR/DvmVbNB76M4IrsZeSAIajL9644CywkA==} @@ -2145,14 +2245,14 @@ packages: dependencies: '@aws-sdk/eventstream-serde-universal': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/eventstream-serde-config-resolver@3.310.0: resolution: {integrity: sha512-8s1Qdn9STj+sV75nUp9yt0W6fHS4BZ2jTm4Z/1Pcbvh2Gqs0WjH5n2StS+pDW5Y9J/HSGBl0ogmUr5lC5bXFHg==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/eventstream-serde-node@3.310.0: resolution: {integrity: sha512-kSnRomCgW43K9TmQYuwN9+AoYPnhyOKroanUMyZEzJk7rpCPMj4OzaUpXfDYOvznFNYn7NLaH6nHLJAr0VPlJA==} @@ -2160,7 +2260,7 @@ packages: dependencies: '@aws-sdk/eventstream-serde-universal': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/eventstream-serde-universal@3.310.0: resolution: {integrity: sha512-Qyjt5k/waV5cDukpgT824ISZAz5U0pwzLz5ztR409u85AGNkF/9n7MS+LSyBUBSb0WJ5pUeSD47WBk+nLq9Nhw==} @@ -2168,7 +2268,7 @@ packages: dependencies: '@aws-sdk/eventstream-codec': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/fetch-http-handler@3.310.0: resolution: {integrity: sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==} @@ -2177,14 +2277,14 @@ packages: '@aws-sdk/querystring-builder': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-base64': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/hash-blob-browser@3.310.0: resolution: {integrity: sha512-OoR8p0cbypToysLT0v3o2oyjy6+DKrY7GNCAzHOHJK9xmqXCt+DsjKoPeiY7o1sWX2aN6Plmvubj/zWxMKEn/A==} dependencies: '@aws-sdk/chunked-blob-reader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/hash-node@3.310.0: resolution: {integrity: sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==} @@ -2193,7 +2293,7 @@ packages: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-buffer-from': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/hash-stream-node@3.310.0: resolution: {integrity: sha512-ZoXdybNgvMz1Hl6k/e32xVL3jmG5p2IEk5mTtLfFEuskTJ74Z+VMYKkkF1whyy7KQfH83H+TQGnsGtlRCchQKw==} @@ -2201,19 +2301,19 @@ packages: dependencies: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/invalid-dependency@3.310.0: resolution: {integrity: sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/is-array-buffer@3.310.0: resolution: {integrity: sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-QobsFsDDoOs26nLmxo8nTTCwjJmO4jmElqU4R2r2mlf4g3ClSm5+W79jbqbfDKlEGbN4TtDr+FzWYiULOl/TIg==} @@ -2237,7 +2337,7 @@ packages: dependencies: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-bucket-endpoint@3.310.0: resolution: {integrity: sha512-uJJfHI7v4AgbJZRLtyI8ap2QRWkBokGc3iyUoQ+dVNT3/CE2ZCu694A6W+H0dRqg79dIE+f9CRNdtLGa/Ehhvg==} @@ -2247,7 +2347,7 @@ packages: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-arn-parser': 3.310.0 '@aws-sdk/util-config-provider': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-content-length@3.325.0: resolution: {integrity: sha512-t38VBKCpNqSKqSu0OfWMJs7cwaRHFGQxIF9lV8JMCM/2lyUpN4JcfuzSTK+MFN2eDZEHp5DiNg8w07GXXusRYg==} @@ -2255,7 +2355,7 @@ packages: dependencies: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-endpoint@3.325.0: resolution: {integrity: sha512-3CavuOHCKiWUnCtzrUFbhbEP26qIgzzRs5C3vpOJhDUhugBubIWgPGGRLpbnIro+P4XJPwM3pMziNzhKVuSDlQ==} @@ -2265,7 +2365,7 @@ packages: '@aws-sdk/types': 3.310.0 '@aws-sdk/url-parser': 3.310.0 '@aws-sdk/util-middleware': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-expect-continue@3.325.0: resolution: {integrity: sha512-Hj4D+zeet4gdUpSiMeHZfIzcnXkZI2krGyUw4U1psPzCqOp7WP5307g+1NWXOlVu3H3tF5r3rEgthQOQj2zNfA==} @@ -2273,7 +2373,7 @@ packages: dependencies: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-flexible-checksums@3.325.0: resolution: {integrity: sha512-kNcm5psgNT/aSCG+OcRHWYD6HGqaqDhlwhcwPBr03qg4UDBLlNG8qCT5NbXUh/CnrBhPRs7LIwWp85qy2eK7Hw==} @@ -2285,7 +2385,7 @@ packages: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-host-header@3.325.0: resolution: {integrity: sha512-IN28gsxcRy4J+FxxCHvzb2NORBx8uMA+h9QYS4BBZfpKVYIZh+mudHgYcdNHWlKXmlTGjhWBNWTeByhzuSKAiA==} @@ -2293,21 +2393,21 @@ packages: dependencies: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-location-constraint@3.325.0: resolution: {integrity: sha512-T2OrpXXY9I1nHvIGSlQD6qj1FDG3WDFSu65+Bh4pMl+zVh0IqIEajiK++TfrdQl+sJxRGQd/euoeXXL4JYw9JA==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-logger@3.325.0: resolution: {integrity: sha512-S8rWgTpN2b/+UDDm+yZMFM6rw1zwO8KT0GAIQbAhB96shyD5eKen/UfihCTB7YMvbD2piebymwJTvxv6bn1VqQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-recursion-detection@3.325.0: resolution: {integrity: sha512-2l1ABF7KePsoKz8KaNvD2uxo1zHqkFHK4PL/wW/FbcwOcE08f0R7qX++st/bPpVjXX/j/5vWTnNNgJOIOrZhyw==} @@ -2315,7 +2415,7 @@ packages: dependencies: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-retry@3.325.0: resolution: {integrity: sha512-oQM5AI3vkNQuCakBMgdohOcvRnVYcBBlv+KzCCj07ue9gk0x2dHOZY2pqTQ2CYilRqS/X1PtLogJXoyHP5Wvwg==} @@ -2326,7 +2426,7 @@ packages: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-middleware': 3.310.0 '@aws-sdk/util-retry': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 uuid: 8.3.2 /@aws-sdk/middleware-sdk-s3@3.325.0: @@ -2336,7 +2436,7 @@ packages: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-arn-parser': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-sdk-sts@3.325.0: resolution: {integrity: sha512-deRK1ZuNueQ6OOTEhBZ9bLmjPema/N3cwbtO+tDVwpi7MipjE4EZDXX8WL0xza5YLRnz9kxcHuyfL47vvKgO3A==} @@ -2344,14 +2444,14 @@ packages: dependencies: '@aws-sdk/middleware-signing': 3.325.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-serde@3.325.0: resolution: {integrity: sha512-QAZYaFfAw1a06Vg39JiYIq0kSJ6EuUPOiKfK/Goj0cBv78lrXWuKdf04UF3U8Rqk/4mamnsTqUSwf4NoKkF0hw==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-signing@3.325.0: resolution: {integrity: sha512-SOwPwaCE3vSCGwFzkIlnOUSkeCUzKTyIQnFVjlQkqGuMxMX/iDaQQGaX+HUbuGIuULCEQqjZH4dLKZcor8eVZw==} @@ -2362,20 +2462,20 @@ packages: '@aws-sdk/signature-v4': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-middleware': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-ssec@3.325.0: resolution: {integrity: sha512-hxmvvWVfVrbfUw8pDEPlsR6Sb+IUdhq0cOJc7SL5XO9ddRXJ5DjT2Z2ao9FB424hJgAcOrqIO5ECjdIRs+O4FQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-stack@3.325.0: resolution: {integrity: sha512-cZWehA4grGvX1IKlY9atJgD0bq3ew7YRJgY7GA6DSgsU7GrZ61Qvi+H7IuGx5AdeAwaTnbnTGN4qCaA2EfxNhA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/middleware-user-agent@3.325.0: resolution: {integrity: sha512-2aIdGId4o8eIStm1J1aWZwNDf6nvrwg5Nx7BomLAxKZ4lkH8knzXDtxaZR4ElcTsBlBcYxz2gbsrScMyKRDTGA==} @@ -2384,7 +2484,7 @@ packages: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-endpoints': 3.319.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/node-config-provider@3.310.0: resolution: {integrity: sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==} @@ -2393,7 +2493,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/node-http-handler@3.321.1: resolution: {integrity: sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==} @@ -2403,21 +2503,21 @@ packages: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/querystring-builder': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/property-provider@3.310.0: resolution: {integrity: sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/protocol-http@3.310.0: resolution: {integrity: sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/querystring-builder@3.310.0: resolution: {integrity: sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==} @@ -2425,14 +2525,14 @@ packages: dependencies: '@aws-sdk/types': 3.310.0 '@aws-sdk/util-uri-escape': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/querystring-parser@3.310.0: resolution: {integrity: sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/service-error-classification@3.310.0: resolution: {integrity: sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==} @@ -2443,7 +2543,7 @@ packages: engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/signature-v4-multi-region@3.310.0: resolution: {integrity: sha512-q8W+RIomTS/q85Ntgks/CoDElwqkC9+4OCicee5YznNHjQ4gtNWhUkYIyIRWRmXa/qx/AUreW9DM8FAecCOdng==} @@ -2457,7 +2557,7 @@ packages: '@aws-sdk/protocol-http': 3.310.0 '@aws-sdk/signature-v4': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/signature-v4@3.310.0: resolution: {integrity: sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==} @@ -2469,7 +2569,7 @@ packages: '@aws-sdk/util-middleware': 3.310.0 '@aws-sdk/util-uri-escape': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/smithy-client@3.325.0: resolution: {integrity: sha512-sqDFuhjxd8+Q9qI8MmXe/g1/FgoViwetv14K+bpHK7pGlOIvDyT7TboDNClfgqSLdgTDCEaoC3JRSi9Y5RgbmA==} @@ -2477,7 +2577,7 @@ packages: dependencies: '@aws-sdk/middleware-stack': 3.325.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/token-providers@3.325.0: resolution: {integrity: sha512-h/ecgqXaMwEkUWo+SZJNcOMWJkAknjonWWpK/vQ4uz+qE9rBqRugsIeIiey+Ij7zCtwh6WhtpfCpt5RbxRHe6g==} @@ -2487,7 +2587,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/shared-ini-file-loader': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - aws-crt @@ -2495,13 +2595,13 @@ packages: resolution: {integrity: sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/types@3.329.0: resolution: {integrity: sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@aws-sdk/url-parser@3.310.0: @@ -2509,44 +2609,44 @@ packages: dependencies: '@aws-sdk/querystring-parser': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-arn-parser@3.310.0: resolution: {integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-base64@3.310.0: resolution: {integrity: sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/util-buffer-from': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-body-length-browser@3.310.0: resolution: {integrity: sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-body-length-node@3.310.0: resolution: {integrity: sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-buffer-from@3.310.0: resolution: {integrity: sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/is-array-buffer': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-config-provider@3.310.0: resolution: {integrity: sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-defaults-mode-browser@3.325.0: resolution: {integrity: sha512-gcowpXTo8E8N3jxD2KW+csiicJ7HPkhWnpL925xgwe0oq091OpATsKFrBOL18h72VfRWf4FAsR9lVwxSQ78zSA==} @@ -2555,7 +2655,7 @@ packages: '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/types': 3.310.0 bowser: 2.11.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-defaults-mode-node@3.325.0: resolution: {integrity: sha512-/5uoOrgNxoUxv3AwsdXjMA3f6KJA6fi69otA0RiINjilCdcbOxq5GI11AFEyRio/+e+imriX4+UYjsguUR+f4g==} @@ -2566,39 +2666,39 @@ packages: '@aws-sdk/node-config-provider': 3.310.0 '@aws-sdk/property-provider': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-endpoints@3.319.0: resolution: {integrity: sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-hex-encoding@3.310.0: resolution: {integrity: sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-locate-window@3.310.0: resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-middleware@3.310.0: resolution: {integrity: sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-retry@3.310.0: resolution: {integrity: sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==} engines: {node: '>= 14.0.0'} dependencies: '@aws-sdk/service-error-classification': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-stream-browser@3.310.0: resolution: {integrity: sha512-bysXZHwFwvbqOTCScCdCnoLk1K3GCo0HRIYEZuL7O7MHrQmfaYRXcaft/p22+GUv9VeFXS/eJJZ5r4u32az94w==} @@ -2608,7 +2708,7 @@ packages: '@aws-sdk/util-base64': 3.310.0 '@aws-sdk/util-hex-encoding': 3.310.0 '@aws-sdk/util-utf8': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-stream-node@3.321.1: resolution: {integrity: sha512-jvfff1zeA8q16hQWSC0BGwcHJPCwoh+bwiuAjihfl9q1tFLYuqaTzJzzkL1bntUsbW+y/ac5DO7fWcYPq0jWkw==} @@ -2617,20 +2717,20 @@ packages: '@aws-sdk/node-http-handler': 3.321.1 '@aws-sdk/types': 3.310.0 '@aws-sdk/util-buffer-from': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-uri-escape@3.310.0: resolution: {integrity: sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-user-agent-browser@3.310.0: resolution: {integrity: sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==} dependencies: '@aws-sdk/types': 3.310.0 bowser: 2.11.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-user-agent-node@3.310.0: resolution: {integrity: sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==} @@ -2643,19 +2743,19 @@ packages: dependencies: '@aws-sdk/node-config-provider': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-utf8-browser@3.259.0: resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-utf8@3.310.0: resolution: {integrity: sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==} engines: {node: '>=14.0.0'} dependencies: '@aws-sdk/util-buffer-from': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/util-waiter@3.310.0: resolution: {integrity: sha512-AV5j3guH/Y4REu+Qh3eXQU9igljHuU4XjX2sADAgf54C0kkhcCCkkiuzk3IsX089nyJCqIcj5idbjdvpnH88Vw==} @@ -2663,13 +2763,13 @@ packages: dependencies: '@aws-sdk/abort-controller': 3.310.0 '@aws-sdk/types': 3.310.0 - tslib: 2.5.0 + tslib: 2.5.2 /@aws-sdk/xml-builder@3.310.0: resolution: {integrity: sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==} engines: {node: '>=14.0.0'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@babel/code-frame@7.21.4: resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} @@ -5982,7 +6082,7 @@ packages: dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@graphql-tools/schema@8.3.1(graphql@16.6.0): @@ -6013,7 +6113,7 @@ packages: dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@graphql-typed-document-node/core@3.2.0(graphql@16.6.0): @@ -6102,6 +6202,18 @@ packages: slash: 3.0.0 dev: true + /@jest/console@29.5.0: + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + chalk: 4.1.2 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + slash: 3.0.0 + dev: true + /@jest/core@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6147,6 +6259,48 @@ packages: - utf-8-validate dev: true + /@jest/core@29.5.0(ts-node@10.9.1): + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 + micromatch: 4.0.5 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /@jest/environment@27.5.1: resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6157,6 +6311,16 @@ packages: jest-mock: 27.5.1 dev: true + /@jest/environment@29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-mock: 29.5.0 + dev: true + /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6164,6 +6328,16 @@ packages: jest-get-type: 29.4.3 dev: true + /@jest/expect@29.5.0: + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.5.0 + jest-snapshot: 29.5.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/fake-timers@27.5.1: resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6176,6 +6350,18 @@ packages: jest-util: 27.5.1 dev: true + /@jest/fake-timers@29.5.0: + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + '@sinonjs/fake-timers': 10.2.0 + '@types/node': 18.15.11 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-util: 29.5.0 + dev: true + /@jest/globals@27.5.1: resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6185,6 +6371,18 @@ packages: expect: 27.5.1 dev: true + /@jest/globals@29.5.0: + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/types': 29.5.0 + jest-mock: 29.5.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/reporters@27.5.1: resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6223,6 +6421,43 @@ packages: - supports-color dev: true + /@jest/reporters@29.5.0: + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 18.15.11 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.5 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + jest-worker: 29.5.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6239,6 +6474,15 @@ packages: source-map: 0.6.1 dev: true + /@jest/source-map@29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + /@jest/test-result@27.5.1: resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6249,6 +6493,16 @@ packages: collect-v8-coverage: 1.0.1 dev: true + /@jest/test-result@29.5.0: + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.5.0 + '@jest/types': 29.5.0 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + dev: true + /@jest/test-sequencer@27.5.1: resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6261,6 +6515,16 @@ packages: - supports-color dev: true + /@jest/test-sequencer@29.5.0: + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.5.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + slash: 3.0.0 + dev: true + /@jest/transform@27.5.1: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6560,7 +6824,7 @@ packages: '@motionone/easing': 10.15.1 '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@motionone/dom@10.15.5: @@ -6571,14 +6835,14 @@ packages: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@motionone/easing@10.15.1: resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} dependencies: '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@motionone/generators@10.15.1: @@ -6586,7 +6850,7 @@ packages: dependencies: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@motionone/types@10.15.1: @@ -6598,7 +6862,7 @@ packages: dependencies: '@motionone/types': 10.15.1 hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@mswjs/cookies@0.2.2: @@ -6719,7 +6983,7 @@ packages: uuid: 9.0.0 dev: false - /@nestjs/core@9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/core@9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-yTLryCgFD0462wPe4HIzhyTcDgibt8Stfwb5YzcX7Ma0NM4m8uBIpcPG109KBubp8ZmV85e5mw4rl20qLQQVsQ==} requiresBuild: true peerDependencies: @@ -6739,6 +7003,7 @@ packages: dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + '@nestjs/websockets': 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 iterare: 1.2.1 @@ -6758,7 +7023,7 @@ packages: reflect-metadata: ^0.1.12 dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) chalk: 4.1.2 node-fetch: 2.6.9 reflect-metadata: 0.1.13 @@ -6774,7 +7039,7 @@ packages: reflect-metadata: ^0.1.12 dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) eventemitter2: 6.4.9 reflect-metadata: 0.1.13 dev: false @@ -6798,7 +7063,7 @@ packages: '@graphql-tools/schema': 8.3.1(graphql@16.6.0) '@graphql-tools/utils': 8.6.1(graphql@16.6.0) '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) chokidar: 3.5.3 fast-glob: 3.2.11 @@ -6885,7 +7150,7 @@ packages: '@nestjs/core': ^9.0.0 dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) body-parser: 1.20.2 cors: 2.8.5 express: 4.18.2 @@ -6894,6 +7159,23 @@ packages: transitivePeerDependencies: - supports-color + /@nestjs/platform-ws@9.4.2(@nestjs/common@9.4.0)(@nestjs/websockets@9.4.2)(rxjs@7.8.0): + resolution: {integrity: sha512-JURYiQ/0yoDD/Z14szKDMts6xUP7hI/z5CSBOSAEJk+GdhKB4VW6noTgZQu8KRSZxtLj5tm73JIaOMX9P97Buw==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/websockets': ^9.0.0 + rxjs: ^7.1.0 + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/websockets': 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + rxjs: 7.8.0 + tslib: 2.5.2 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@nestjs/schematics@9.1.0(chokidar@3.5.3)(typescript@4.9.5): resolution: {integrity: sha512-/7CyMTnPJSK9/xD9CkCqwuHPOlHVlLC2RDnbdCJ7mIO07SdbBbY14msTqtYW9VRQtsjZPLh1GTChf7ryJUImwA==} peerDependencies: @@ -6925,7 +7207,7 @@ packages: optional: true dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) express: 4.18.2 path-to-regexp: 0.2.5 dev: false @@ -6948,7 +7230,7 @@ packages: optional: true dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) class-transformer: 0.5.1 class-validator: 0.14.0 @@ -6973,10 +7255,29 @@ packages: optional: true dependencies: '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) tslib: 2.5.0 - dev: false + + /@nestjs/websockets@9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-u1Txsb+rHWOG0mHxTfNt/64eyYSCGg6t/k736P2bdYP1fP4ETo/Z/F4Othau8q0MsWvKi3ZgYRQbhcefaudQww==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + '@nestjs/platform-socket.io': ^9.0.0 + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/platform-socket.io': + optional: true + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + iterare: 1.2.1 + object-hash: 3.0.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + tslib: 2.5.2 /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -7053,7 +7354,7 @@ packages: open: 8.4.2 picocolors: 1.0.0 tiny-glob: 0.2.9 - tslib: 2.5.0 + tslib: 2.5.2 /@playwright/test@1.32.3: resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} @@ -7867,6 +8168,18 @@ packages: type-detect: 4.0.8 dev: true + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.2.0: + resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} + dependencies: + '@sinonjs/commons': 3.0.0 + dev: true + /@sinonjs/fake-timers@8.1.0: resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} dependencies: @@ -9872,6 +10185,12 @@ packages: resolution: {integrity: sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==} dev: true + /@types/ws@8.5.4: + resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + dependencies: + '@types/node': 18.15.11 + dev: false + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} @@ -10455,7 +10774,7 @@ packages: esbuild: '>=0.10.0' dependencies: esbuild: 0.17.16 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /@yarnpkg/lockfile@1.1.0: @@ -10467,7 +10786,7 @@ packages: engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /@zerodevx/svelte-toast@0.8.2: @@ -10774,7 +11093,7 @@ packages: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} engines: {node: '>=10'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: false /aria-query@5.1.3: @@ -10879,20 +11198,20 @@ packages: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: true /ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: true /astral-regex@2.0.0: @@ -11122,6 +11441,24 @@ packages: - supports-color dev: true + /babel-jest@29.5.0(@babel/core@7.21.4): + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.21.4 + '@jest/transform': 29.5.0 + '@types/babel__core': 7.20.0 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.5.0(@babel/core@7.21.4) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} @@ -11145,6 +11482,16 @@ packages: '@types/babel__traverse': 7.18.3 dev: true + /babel-plugin-jest-hoist@29.5.0: + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 + dev: true + /babel-plugin-jsx-dom-expressions@0.36.9(@babel/core@7.21.4): resolution: {integrity: sha512-4ACO10PoUvqRcBEErbhVGv5vAHXgkz7epvULHfqJXw5TPtDYwjhmhGxGNGSK6220ec/b85ElLrGHlqQiJxI0WQ==} peerDependencies: @@ -11261,6 +11608,17 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) dev: true + /babel-preset-jest@29.5.0(@babel/core@7.21.4): + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + babel-plugin-jest-hoist: 29.5.0 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + dev: true + /babel-preset-solid@1.7.3(@babel/core@7.21.4): resolution: {integrity: sha512-HOdyrij99zo+CBrmtDxSexBAl54vCBCfBoyueLBvcfVniaEXNd4ftKqSN6XQcLvFfCY28UFO+DHaigXzWKOfzg==} peerDependencies: @@ -11623,7 +11981,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /camelcase-css@2.0.1: @@ -12816,7 +13174,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /dot-prop@5.3.0: @@ -12906,6 +13264,11 @@ packages: batch-processor: 1.0.0 dev: true + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + /emittery@0.8.1: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} @@ -14991,7 +15354,7 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 16.6.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /graphql-ws@5.5.5(graphql@16.6.0): @@ -16073,6 +16436,14 @@ packages: throat: 6.0.2 dev: true + /jest-changed-files@29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + p-limit: 3.1.0 + dev: true + /jest-circus@27.5.1: resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16100,6 +16471,34 @@ packages: - supports-color dev: true + /jest-circus@29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + is-generator-fn: 2.1.0 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + p-limit: 3.1.0 + pretty-format: 29.5.0 + pure-rand: 6.0.2 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - supports-color + dev: true + /jest-cli@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16130,6 +16529,34 @@ packages: - utf-8-validate dev: true + /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-util: 29.5.0 + jest-validate: 29.5.0 + prompts: 2.4.2 + yargs: 17.7.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jest-config@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16171,6 +16598,46 @@ packages: - utf-8-validate dev: true + /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.21.4 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + babel-jest: 29.5.0(@babel/core@7.21.4) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + transitivePeerDependencies: + - supports-color + dev: true + /jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -16201,9 +16668,16 @@ packages: pretty-format: 29.5.0 dev: true - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-docblock@27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-docblock@29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true @@ -16219,6 +16693,17 @@ packages: pretty-format: 27.5.1 dev: true + /jest-each@29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + chalk: 4.1.2 + jest-get-type: 29.4.3 + jest-util: 29.5.0 + pretty-format: 29.5.0 + dev: true + /jest-environment-jsdom@27.5.1: resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16249,6 +16734,18 @@ packages: jest-util: 27.5.1 dev: true + /jest-environment-node@29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-mock: 29.5.0 + jest-util: 29.5.0 + dev: true + /jest-get-type@26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} @@ -16336,6 +16833,14 @@ packages: pretty-format: 27.5.1 dev: true + /jest-leak-detector@29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.4.3 + pretty-format: 29.5.0 + dev: true + /jest-matcher-utils@27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16405,6 +16910,15 @@ packages: '@types/node': 18.15.11 dev: true + /jest-mock@29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + jest-util: 29.5.0 + dev: true + /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -16417,6 +16931,18 @@ packages: jest-resolve: 27.5.1 dev: true + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.5.0 + dev: true + /jest-regex-util@27.5.1: resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16438,6 +16964,16 @@ packages: - supports-color dev: true + /jest-resolve-dependencies@29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.4.3 + jest-snapshot: 29.5.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-resolve@27.5.1: resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16454,6 +16990,21 @@ packages: slash: 3.0.0 dev: true + /jest-resolve@29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) + jest-util: 29.5.0 + jest-validate: 29.5.0 + resolve: 1.22.2 + resolve.exports: 2.0.2 + slash: 3.0.0 + dev: true + /jest-runner@27.5.1: resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16486,6 +17037,35 @@ packages: - utf-8-validate dev: true + /jest-runner@29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.5.0 + '@jest/environment': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.4.3 + jest-environment-node: 29.5.0 + jest-haste-map: 29.5.0 + jest-leak-detector: 29.5.0 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 + jest-worker: 29.5.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + /jest-runtime@27.5.1: resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16516,6 +17096,36 @@ packages: - supports-color dev: true + /jest-runtime@29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/globals': 29.5.0 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-serializer@27.5.1: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16554,6 +17164,37 @@ packages: - supports-color dev: true + /jest-snapshot@29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + '@jest/expect-utils': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + chalk: 4.1.2 + expect: 29.5.0 + graceful-fs: 4.2.11 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + natural-compare: 1.4.0 + pretty-format: 29.5.0 + semver: 7.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-util@27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16590,6 +17231,18 @@ packages: pretty-format: 27.5.1 dev: true + /jest-validate@29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.4.3 + leven: 3.1.0 + pretty-format: 29.5.0 + dev: true + /jest-watcher@27.5.1: resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -16603,6 +17256,20 @@ packages: string-length: 4.0.2 dev: true + /jest-watcher@29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.11 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.5.0 + string-length: 4.0.2 + dev: true + /jest-worker@26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} @@ -16652,6 +17319,26 @@ packages: - utf-8-validate dev: true + /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/types': 29.5.0 + import-local: 3.1.0 + jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} hasBin: true @@ -17161,6 +17848,10 @@ packages: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -17236,7 +17927,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: true /lru-cache@4.1.5: @@ -18362,7 +19053,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /node-abort-controller@3.1.1: @@ -18851,7 +19542,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /parent-module@1.0.1: @@ -18913,7 +19604,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /passport-http@0.3.0: @@ -19434,6 +20125,10 @@ packages: - utf-8-validate dev: true + /pure-rand@6.0.2: + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + dev: true + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -19667,7 +20362,7 @@ packages: '@types/react': 18.0.35 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) - tslib: 2.5.0 + tslib: 2.5.2 dev: false /react-remove-scroll@2.5.5(@types/react@18.0.35)(react@18.2.0): @@ -19684,7 +20379,7 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.0.35)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) - tslib: 2.5.0 + tslib: 2.5.2 use-callback-ref: 1.3.0(@types/react@18.0.35)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.0.35)(react@18.2.0) dev: false @@ -19735,7 +20430,7 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /react@18.2.0: @@ -19810,7 +20505,7 @@ packages: ast-types: 0.14.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /recast@0.21.5: @@ -19820,7 +20515,7 @@ packages: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /recast@0.23.1: @@ -19831,7 +20526,7 @@ packages: ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /rechoir@0.6.2: @@ -20107,6 +20802,11 @@ packages: engines: {node: '>=10'} dev: true + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true + /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: @@ -20350,7 +21050,7 @@ packages: /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} @@ -20797,6 +21497,13 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -21180,6 +21887,26 @@ packages: - supports-color dev: true + /superagent@6.1.0: + resolution: {integrity: sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==} + engines: {node: '>= 7.0.0'} + deprecated: Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.3.4(supports-color@8.1.1) + fast-safe-stringify: 2.1.1 + form-data: 3.0.1 + formidable: 1.2.6 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + readable-stream: 3.6.2 + semver: 7.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /superjson@1.12.2: resolution: {integrity: sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==} engines: {node: '>=10'} @@ -21197,6 +21924,16 @@ packages: - supports-color dev: true + /supertest@6.1.3: + resolution: {integrity: sha512-v2NVRyP73XDewKb65adz+yug1XMtmvij63qIWHZzSX8tp6wiq6xBLUy4SUAd2NII6wIipOmHT/FD9eicpJwdgQ==} + engines: {node: '>=6.0.0'} + dependencies: + methods: 1.1.2 + superagent: 6.1.0 + transitivePeerDependencies: + - supports-color + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -21368,7 +22105,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.3.1 - tslib: 2.5.0 + tslib: 2.5.2 /tailwind-merge@1.12.0: resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==} @@ -21779,6 +22516,55 @@ packages: yargs-parser: 20.2.9 dev: true + /ts-jest@29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@4.9.5): + resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.21.4 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-util: 29.5.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.4.0 + typescript: 4.9.5 + yargs-parser: 21.1.1 + dev: true + + /ts-loader@9.2.3(typescript@4.9.5)(webpack@5.76.2): + resolution: {integrity: sha512-sEyWiU3JMHBL55CIeC4iqJQadI0U70A5af0kvgbNLHVNz2ACztQg0j/9x10bjjIht8WfFYLKfn4L6tkZ+pu+8Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.12.0 + micromatch: 4.0.5 + semver: 7.4.0 + typescript: 4.9.5 + webpack: 5.76.2 + dev: true + /ts-morph@17.0.1: resolution: {integrity: sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g==} dependencies: @@ -21835,7 +22621,7 @@ packages: dependencies: chalk: 4.1.2 enhanced-resolve: 5.12.0 - tsconfig-paths: 4.1.2 + tsconfig-paths: 4.2.0 dev: true /tsconfig-paths@3.14.2: @@ -21856,6 +22642,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tsconfig-resolver@3.0.1: resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==} dependencies: @@ -21877,6 +22672,9 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + /tsm@2.3.0: resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==} engines: {node: '>=12'} @@ -22265,7 +23063,7 @@ packages: dependencies: '@types/react': 18.0.35 react: 18.2.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.35)(react@18.2.0): @@ -22305,7 +23103,7 @@ packages: '@types/react': 18.0.35 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -23292,7 +24090,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} diff --git a/scripts/init.js b/scripts/init.js index e7d0ec5c8d..830c1dd885 100755 --- a/scripts/init.js +++ b/scripts/init.js @@ -5,6 +5,7 @@ const fs = require('fs'); const rootDir = path.join(__dirname, '..'); const workflowServiceRoot = path.join(rootDir, 'services/workflows-service'); +const workflowWebsocketServiceRoot = path.join(rootDir, 'services/workflows-websocket-service'); const backofficeRoot = path.join(rootDir, 'apps/backoffice-v2'); const ensureEnvFileIsPresent = projectPath => { @@ -27,5 +28,6 @@ run('pnpm run build'); console.log('🍎 preparing environment'); ensureEnvFileIsPresent(backofficeRoot); ensureEnvFileIsPresent(workflowServiceRoot); +ensureEnvFileIsPresent(workflowWebsocketServiceRoot); console.log('✅ All done!'); diff --git a/services/workflows-websocket-service/.env.example b/services/workflows-websocket-service/.env.example new file mode 100644 index 0000000000..0f26f3b587 --- /dev/null +++ b/services/workflows-websocket-service/.env.example @@ -0,0 +1,3 @@ +PORT=3500 +NODE_ENV=development +COMPOSE_PROJECT_NAME=ballerine-x diff --git a/services/workflows-websocket-service/.eslintignore b/services/workflows-websocket-service/.eslintignore new file mode 100644 index 0000000000..320c107b3e --- /dev/null +++ b/services/workflows-websocket-service/.eslintignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +package-lock.json diff --git a/services/workflows-websocket-service/.eslintrc.cjs b/services/workflows-websocket-service/.eslintrc.cjs new file mode 100644 index 0000000000..e729fd568c --- /dev/null +++ b/services/workflows-websocket-service/.eslintrc.cjs @@ -0,0 +1,38 @@ +const config = require('../../packages/config/eslintrc.base.cjs'); + +module.exports = { + ...config, + extends: ['plugin:import/recommended', 'plugin:import/typescript', ...config.extends], + parserOptions: { + ...config.parserOptions, + tsconfigRootDir: __dirname, + project: './tsconfig.json', + }, + env: { + ...config.env, + node: true, + }, + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['.ts'], + }, + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + project: './tsconfig.json', + }, + node: true, + }, + }, + rules: { + 'import/no-cycle': 'error', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + }, + ignorePatterns: ['.eslintrc.cjs'], +}; diff --git a/services/workflows-websocket-service/.gitignore b/services/workflows-websocket-service/.gitignore new file mode 100644 index 0000000000..398d03bf47 --- /dev/null +++ b/services/workflows-websocket-service/.gitignore @@ -0,0 +1,9 @@ +upload/* +.vscode +.idea +.env* +!.env.example +node_modules +dist +*.tgz +*.log diff --git a/services/workflows-websocket-service/.prettierignore b/services/workflows-websocket-service/.prettierignore new file mode 100644 index 0000000000..6f4d8b5826 --- /dev/null +++ b/services/workflows-websocket-service/.prettierignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +package-lock.json +coverage/ diff --git a/services/workflows-websocket-service/.prettierrc.cjs b/services/workflows-websocket-service/.prettierrc.cjs new file mode 100644 index 0000000000..25f61d0363 --- /dev/null +++ b/services/workflows-websocket-service/.prettierrc.cjs @@ -0,0 +1 @@ +module.exports = require('../../packages/config/prettierrc.base.cjs'); diff --git a/services/workflows-websocket-service/README.md b/services/workflows-websocket-service/README.md new file mode 100644 index 0000000000..f5aa86c5dc --- /dev/null +++ b/services/workflows-websocket-service/README.md @@ -0,0 +1,73 @@ +<p align="center"> + <a href="http://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="200" alt="Nest Logo" /></a> +</p> + +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + + <p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p> + <p align="center"> +<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a> +<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a> +<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg" alt="NPM Downloads" /></a> +<a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI" /></a> +<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a> +<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a> +<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a> +<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a> + <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg"/></a> + <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg" alt="Support us"></a> + <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a> +</p> + <!--[](https://opencollective.com/nest#backer) + [](https://opencollective.com/nest#sponsor)--> + +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Installation + +```bash +$ pnpm install +``` + +## Running the app + +```bash +# development +$ pnpm run start + +# watch mode +$ pnpm run start:dev + +# production mode +$ pnpm run start:prod +``` + +## Test + +```bash +# unit tests +$ pnpm run test + +# e2e tests +$ pnpm run test:e2e + +# test coverage +$ pnpm run test:cov +``` + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](LICENSE). diff --git a/services/workflows-websocket-service/jest.config.cjs b/services/workflows-websocket-service/jest.config.cjs new file mode 100644 index 0000000000..d86a46fe11 --- /dev/null +++ b/services/workflows-websocket-service/jest.config.cjs @@ -0,0 +1,14 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + modulePathIgnorePatterns: ['<rootDir>/dist/'], + moduleNameMapper: { + '^@/(.*)$': '<rootDir>/src/$1', + axios: 'axios/dist/node/axios.cjs', + }, + globals: { + 'ts-jest': { + tsconfig: './tsconfig.test.json', + }, + }, +}; diff --git a/services/workflows-websocket-service/package.json b/services/workflows-websocket-service/package.json new file mode 100644 index 0000000000..3a98c85e08 --- /dev/null +++ b/services/workflows-websocket-service/package.json @@ -0,0 +1,57 @@ +{ + "name": "@ballerine/workflows-websocket-service", + "version": "0.0.1", + "description": "workflows-websocket-service", + "private": false, + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "dev": "npm run start:watch", + "start:watch": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/common": "^9.3.12", + "@nestjs/core": "^9.3.12", + "@nestjs/platform-express": "^9.3.12", + "@nestjs/platform-ws": "^9.4.2", + "@nestjs/websockets": "^9.4.2", + "@t3-oss/env-core": "^0.3.1", + "@types/ws": "^8.5.4", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.0", + "ws": "^8.13.0", + "zod": "^3.21.4" + }, + "devDependencies": { + "@nestjs/cli": "^9.3.0", + "@nestjs/schematics": "^9.0.0", + "@nestjs/testing": "^9.3.12", + "@types/express": "4.17.9", + "@types/jest": "^26.0.19", + "@types/node": "^18.14.6", + "@types/supertest": "2.0.11", + "@typescript-eslint/eslint-plugin": "^5.54.1", + "@typescript-eslint/parser": "^5.54.1", + "eslint": "^8.35.0", + "eslint-config-prettier": "^8.7.0", + "eslint-import-resolver-typescript": "^3.5.3", + "eslint-plugin-import": "^2.27.5", + "jest": "29.5.0", + "prettier": "^2.8.4", + "supertest": "^6.1.3", + "ts-jest": "29.1.0", + "ts-loader": "^9.2.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "4.2.0", + "typescript": "^4.9.3" + } +} diff --git a/services/workflows-websocket-service/src/app.controller.test.ts b/services/workflows-websocket-service/src/app.controller.test.ts new file mode 100644 index 0000000000..d22f3890a3 --- /dev/null +++ b/services/workflows-websocket-service/src/app.controller.test.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get<AppController>(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/services/workflows-websocket-service/src/app.controller.ts b/services/workflows-websocket-service/src/app.controller.ts new file mode 100644 index 0000000000..cce879ee62 --- /dev/null +++ b/services/workflows-websocket-service/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/services/workflows-websocket-service/src/app.gateway.ts b/services/workflows-websocket-service/src/app.gateway.ts new file mode 100644 index 0000000000..f599ac2789 --- /dev/null +++ b/services/workflows-websocket-service/src/app.gateway.ts @@ -0,0 +1,33 @@ +import { Logger } from '@nestjs/common'; +import { + WebSocketGateway, + WebSocketServer, + OnGatewayConnection, + OnGatewayDisconnect, +} from '@nestjs/websockets'; +import { Server } from 'ws'; + +@WebSocketGateway({ transport: ['websocket'] }) +export class AppGateway implements OnGatewayConnection, OnGatewayDisconnect { + @WebSocketServer() + server: Server | undefined; + + private logger = new Logger('AppGateway'); + + handleConnection() { + this.logger.log('New client connected'); + } + + handleDisconnect() { + this.logger.log('Client disconnected'); + } + + broadcast(event: string, message: string) { + const broadCastMessage = JSON.stringify(message); + if (this.server) { + for (const client of this.server.clients) { + client.send(event + broadCastMessage); + } + } + } +} diff --git a/services/workflows-websocket-service/src/app.module.ts b/services/workflows-websocket-service/src/app.module.ts new file mode 100644 index 0000000000..97de660e2c --- /dev/null +++ b/services/workflows-websocket-service/src/app.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; +import { AppGateway } from './app.gateway'; +import { NotifyController } from '@/notifications/notify.controller'; + +@Module({ + imports: [], + controllers: [AppController, NotifyController], + providers: [AppService, AppGateway], +}) +export class AppModule {} diff --git a/services/workflows-websocket-service/src/app.service.ts b/services/workflows-websocket-service/src/app.service.ts new file mode 100644 index 0000000000..927d7cca0b --- /dev/null +++ b/services/workflows-websocket-service/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/services/workflows-websocket-service/src/env.ts b/services/workflows-websocket-service/src/env.ts new file mode 100644 index 0000000000..977013b5a6 --- /dev/null +++ b/services/workflows-websocket-service/src/env.ts @@ -0,0 +1,23 @@ +import 'dotenv/config'; +import { createEnv } from '@t3-oss/env-core'; +import { z } from 'zod'; + +export const env = createEnv({ + /* + * clientPrefix is required. + */ + clientPrefix: 'PUBLIC_', + server: { + NODE_ENV: z.enum(['development', 'production', 'test']), + ENV_FILE_NAME: z.string().optional(), + COMPOSE_PROJECT_NAME: z.string(), + PORT: z.coerce.number(), + }, + client: {}, + /** + * What object holds the environment variables at runtime. + * Often `process.env` or `import.meta.env` + */ + runtimeEnv: process.env, + skipValidation: !!process.env.CI, +}); diff --git a/services/workflows-websocket-service/src/main.ts b/services/workflows-websocket-service/src/main.ts new file mode 100644 index 0000000000..8995cf40e6 --- /dev/null +++ b/services/workflows-websocket-service/src/main.ts @@ -0,0 +1,16 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; +import { WsAdapter } from '@nestjs/platform-ws'; +import { env } from '@/env'; + +async function main() { + const app = await NestFactory.create(AppModule); + app.useWebSocketAdapter(new WsAdapter(app)); + + void app.listen(env.PORT); + console.log(`Listening on port ${env.PORT}`); + + return app; +} + +module.exports = main(); diff --git a/services/workflows-websocket-service/src/notifications/notify.controller.ts b/services/workflows-websocket-service/src/notifications/notify.controller.ts new file mode 100644 index 0000000000..5bb5185ec3 --- /dev/null +++ b/services/workflows-websocket-service/src/notifications/notify.controller.ts @@ -0,0 +1,13 @@ +import { Controller, Post } from '@nestjs/common'; +import { AppGateway } from '@/app.gateway'; + +@Controller('notify') +export class NotifyController { + constructor(private readonly appGateway: AppGateway) {} + + @Post() + notifyAllConnectedWebsockets(): string { + this.appGateway.broadcast('notify', 'Hello World!'); + return '200'; + } +} diff --git a/services/workflows-websocket-service/test/app.e2e-spec.ts b/services/workflows-websocket-service/test/app.e2e-spec.ts new file mode 100644 index 0000000000..1a013bef82 --- /dev/null +++ b/services/workflows-websocket-service/test/app.e2e-spec.ts @@ -0,0 +1,21 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()).get('/').expect(200).expect('Hello World!'); + }); +}); diff --git a/services/workflows-websocket-service/test/jest-e2e.json b/services/workflows-websocket-service/test/jest-e2e.json new file mode 100644 index 0000000000..e9d912f3e3 --- /dev/null +++ b/services/workflows-websocket-service/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/services/workflows-websocket-service/tsconfig.build.json b/services/workflows-websocket-service/tsconfig.build.json new file mode 100644 index 0000000000..edb35ed3a1 --- /dev/null +++ b/services/workflows-websocket-service/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts", "**/*.test.ts"] +} diff --git a/services/workflows-websocket-service/tsconfig.json b/services/workflows-websocket-service/tsconfig.json new file mode 100644 index 0000000000..f2b403d7aa --- /dev/null +++ b/services/workflows-websocket-service/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": false, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es2017", + "lib": ["ES2020"], + "sourceMap": true, + "inlineSources": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false, + "strict": true, + "noUncheckedIndexedAccess": true, + "checkJs": false, + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src"] +} diff --git a/services/workflows-websocket-service/tsconfig.test.json b/services/workflows-websocket-service/tsconfig.test.json new file mode 100644 index 0000000000..483e75cd0f --- /dev/null +++ b/services/workflows-websocket-service/tsconfig.test.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noImplicitAny": false + } +} From f366cf4a454f07823d885a5b811e9cf83fadc979 Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Tue, 13 Jun 2023 19:07:56 +0300 Subject: [PATCH 025/123] feat(vite.config.ts): added sourcemaps --- apps/backoffice-v2/vite.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/backoffice-v2/vite.config.ts b/apps/backoffice-v2/vite.config.ts index a67a09369c..f1c6b037f9 100644 --- a/apps/backoffice-v2/vite.config.ts +++ b/apps/backoffice-v2/vite.config.ts @@ -36,5 +36,8 @@ export default defineConfig(configEnv => { environment: 'jsdom', setupFiles: ['./src/tests-setup.ts'], }, + build: { + sourcemap: true, + }, }; }); From 9ef1158a74dcdc2e8f97addf2741d1ffde20168b Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 13 Jun 2023 19:28:34 +0300 Subject: [PATCH 026/123] update common --- apps/backoffice-v2/package.json | 4 ++-- packages/common/CHANGELOG.md | 6 ++++++ packages/common/package.json | 2 +- packages/workflow-core/CHANGELOG.md | 7 +++++++ packages/workflow-core/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- sdks/web-ui-sdk/CHANGELOG.md | 7 +++++++ sdks/web-ui-sdk/package.json | 4 ++-- sdks/workflow-browser-sdk/CHANGELOG.md | 8 ++++++++ sdks/workflow-browser-sdk/package.json | 6 +++--- services/workflows-service/CHANGELOG.md | 7 +++++++ services/workflows-service/package.json | 4 ++-- websites/docs/package.json | 2 +- 13 files changed, 56 insertions(+), 21 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 34e6f1981f..a80b2e5a2e 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -47,8 +47,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "0.5.1", - "@ballerine/workflow-browser-sdk": "^0.4.4", + "@ballerine/common": "0.5.2", + "@ballerine/workflow-browser-sdk": "^0.4.5", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 3486209e02..3f343fb31f 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.5.2 + +### Patch Changes + +- New version + ## 0.5.1 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index cbcd190698..98872368cc 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.5.1", + "version": "0.5.2", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index 35f3858c44..fbf301e3fa 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-core +## 0.4.12 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.2 + ## 0.4.11 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 3475162416..46fea79200 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.11", + "version": "0.4.12", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -27,7 +27,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.1", + "@ballerine/common": "0.5.2", "json-logic-js": "^2.0.2", "xstate": "^4.35.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 140cdd1aeb..3b83c3dfaf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,10 +57,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.4 + specifier: ^0.4.5 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -592,7 +592,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../common json-logic-js: specifier: ^2.0.2 @@ -710,7 +710,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -828,10 +828,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../../packages/common '@ballerine/workflow-core': - specifier: ^0.4.9 + specifier: ^0.4.12 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -1064,7 +1064,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 @@ -1414,7 +1414,7 @@ importers: specifier: ^1.2.3 version: 1.2.3(@babel/core@7.21.4)(solid-js@1.7.3)(vite@3.2.5) '@ballerine/common': - specifier: 0.5.1 + specifier: 0.5.2 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index d19d4353a0..cee9b8a633 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.3.3 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.2 + ## 1.3.2 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 5eeeb86712..256e5648ff 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.3.2", + "version": "1.3.3", "type": "module", "files": [ "dist" @@ -91,7 +91,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.5.1", + "@ballerine/common": "0.5.2", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index 0d97af77c1..a99dfe7598 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.5 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.2 + - @ballerine/workflow-core@0.4.12 + ## 0.4.4 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 077a12cf3d..b7b0c5ae21 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.4", + "version": "0.4.5", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -29,8 +29,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.1", - "@ballerine/workflow-core": "^0.4.9", + "@ballerine/common": "0.5.2", + "@ballerine/workflow-core": "^0.4.12", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index 84f665f059..9935ece556 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflows-service +## 0.4.13 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.2 + ## 0.4.12 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index ddfaf67383..32547abe81 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.12", + "version": "0.4.13", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -35,7 +35,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.5.1", + "@ballerine/common": "0.5.2", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", diff --git a/websites/docs/package.json b/websites/docs/package.json index a385e91820..a9eca87d66 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -22,7 +22,7 @@ "@astrojs/mdx": "^0.18.3", "@astrojs/react": "^1.2.2", "@astrojs/solid-js": "^1.2.3", - "@ballerine/common": "0.5.1", + "@ballerine/common": "0.5.2", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From d2598bfc2a20aad2a6d587a4d1fa515ed6646afe Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Wed, 14 Jun 2023 18:09:33 +0300 Subject: [PATCH 027/123] Blokh/fix/refactor update category (#517) * added watch for form * feat: finalized update form of category type * removed log * feat(added usewatchdropdown logic for category to type logic): added usewatchdropdown added usewatchdropdown logic for category to type logic * updated compose to edit naming * feat(merged with dev): merged with dev merged with dev + fixed conflicts + updated code after format changes * updated use initial category set * added types to uniqueArrayByKey * fixed entries to document * minor refactoring * updated common version * added find value --- .../Entity/components/Details/interfaces.ts | 2 + .../EditableDetails/EditableDetails.tsx | 28 ++++-- .../EditableDetails/hooks/useWatchDropdown.ts | 33 +++++++ .../components/EditableDetails/interfaces.ts | 4 +- .../components/EditableDetails/types.ts | 6 ++ .../Entity/hooks/useEntity/useEntity.tsx | 94 +++---------------- .../src/pages/Entity/hooks/useEntity/utils.ts | 86 +++++++++++++++++ 7 files changed, 164 insertions(+), 89 deletions(-) create mode 100644 apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts create mode 100644 apps/backoffice-v2/src/pages/Entity/components/EditableDetails/types.ts create mode 100644 apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts diff --git a/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts index 5a03daaeae..2d1d29f8a0 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/Details/interfaces.ts @@ -11,6 +11,8 @@ export interface IDetailsProps { pattern?: string; value: unknown; dropdownOptions?: Array<{ label: string; value: string }>; + dependantOn?: string; + dependantValue?: string; }>; }; } diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index dfa507baae..7c72ac42a3 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -1,11 +1,11 @@ -import { SubmitHandler, useForm } from 'react-hook-form'; +import { FieldValues, SubmitHandler, useForm, UseFormWatch } from 'react-hook-form'; import { Form } from '../../../../common/components/organisms/Form/Form'; import { ctw } from '../../../../common/utils/ctw/ctw'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; import { camelCaseToSpace } from '../../../../common/utils/camel-case-to-space/camel-case-to-space'; import { Input } from '../../../../common/components/atoms/Input/Input'; import { Button } from '../../../../common/components/atoms/Button/Button'; -import React, { FunctionComponent } from 'react'; +import React, { FunctionComponent, useEffect, useState } from 'react'; import { AnyRecord } from '../../../../common/types'; import { IEditableDetails } from './interfaces'; import { useUpdateWorkflowByIdMutation } from '../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; @@ -19,6 +19,7 @@ import { SelectContent } from '../../../../common/components/atoms/Select/Select import { SelectTrigger } from '../../../../common/components/atoms/Select/Select.Trigger'; import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; import { Select } from '../../../../common/components/atoms/Select/Select'; +import { useWatchDropdownOptions } from './hooks/useWatchDropdown'; export const EditableDetails: FunctionComponent<IEditableDetails> = ({ data, @@ -28,9 +29,16 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ title, workflowId, }) => { + const [formData, setFormData] = useState(data); const { mutate: mutateUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ workflowId, }); + const useInitialCategorySetValue = () => { + useEffect(() => { + const categoryValue = form.getValues('category'); + form.setValue('category', categoryValue); + }, [form, data, setFormData]); + }; const POSITIVE_VALUE_INDICATOR = ['approved']; const NEGATIVE_VALUE_INDICATOR = ['revision', 'rejected']; const isDecisionPositive = (isDecisionComponent: boolean, value) => { @@ -62,14 +70,15 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ const form = useForm({ defaultValues, }); - const onSubmit: SubmitHandler<Record<PropertyKey, unknown>> = data => { + const onSubmit: SubmitHandler<Record<PropertyKey, unknown>> = formData => { const context = { documents: documents?.map(document => { if (document?.id !== valueId) return document; + const properties = Object.keys(document?.propertiesSchema?.properties ?? {}).reduce( (acc, curr) => { - if (!data?.[curr]) return acc; - acc[curr] = data?.[curr]; + if (!formData?.[curr]) return acc; + acc[curr] = formData?.[curr]; return acc; }, @@ -78,8 +87,8 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ return { ...document, - type: data.type, - category: data.category, + type: formData.type, + category: formData.category, properties: properties, }; }), @@ -92,6 +101,9 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ }; const isDecisionComponent = title === 'Decision'; + useWatchDropdownOptions({ form, data, setFormData }); + useInitialCategorySetValue(); + return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className={`flex h-full flex-col`}> @@ -101,7 +113,7 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ 'grid-cols-3': id === 'entity-details', })} > - {data?.map(({ title, isEditable, type, format, pattern, value, dropdownOptions }) => + {formData?.map(({ title, isEditable, type, format, pattern, value, dropdownOptions }) => isDecisionComponent && !value ? null : ( <FormField key={title} diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts new file mode 100644 index 0000000000..f31e137abf --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts @@ -0,0 +1,33 @@ +import { useEffect } from 'react'; +import { TDropdownOption } from '../types'; +export const useWatchDropdownOptions = ({ form, data, setFormData }) => { + const watch = form.watch; + + useEffect(() => { + const subscription = watch((value, { name }) => { + if (!['category'].includes(name)) return subscription.unsubscribe(); + const newData = structuredClone(data); + + newData + .filter(item => !!item.dropdownOptions) + .filter(item => + item.dropdownOptions.find(dropdownOption => dropdownOption.dependantOn === name), + ) + .forEach(item => { + item.dropdownOptions = item.dropdownOptions.filter( + (dropdownOption: TDropdownOption) => dropdownOption.dependantValue === value[name], + ); + item.value = item.dropdownOptions.find( + dropDownOption => dropDownOption.value == value, + )?.value; + + form.setValue(item.title, `${item.value}`); + return (newData[newData.indexOf(item)] = item); + }); + + setFormData(newData); + }); + + return () => subscription.unsubscribe(); + }, [watch, data, setFormData]); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts index ecae64495c..fcf501020c 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/interfaces.ts @@ -1,3 +1,5 @@ +import { TDropdownOption } from './types'; + export interface IEditableDetails { data: Array<{ title: string; @@ -6,7 +8,7 @@ export interface IEditableDetails { type: string; format?: string; pattern?: string; - dropdownOptions?: Array<{ label: string; value: string }>; + dropdownOptions?: Array<TDropdownOption>; }>; valueId: string; id: string; diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/types.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/types.ts new file mode 100644 index 0000000000..0b918bdfa1 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/types.ts @@ -0,0 +1,6 @@ +export type TDropdownOption = { + value: string; + label: string; + dependantValue?: string; + dependantOn?: string; +}; diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index e40357f625..a22ce803e4 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -1,79 +1,20 @@ import { useParams } from 'react-router-dom'; import { useStorageFilesQuery } from '../../../../domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery'; -import { useFilterEntity } from '../../../../domains/entities/hooks/useFilterEntity/useFilterEntity'; -import { useUpdateWorkflowByIdMutation } from '../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; import { useCaseState } from '../../components/Case/hooks/useCaseState/useCaseState'; import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; import { components } from './components'; import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; -import { getDocumentsByCountry, TDocument } from '@ballerine/common'; - -const convertSnakeCaseToTitleCase = (input: string): string => - input - .split('_') - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); - -const extractCountryCodeFromWorkflow = workflow => { - return workflow?.context?.documents?.find(document => { - return document?.issuer?.country; - })?.issuer?.country; -}; - -const uniqueArrayByKey = (array, key) => { - return [...new Map(array.map(item => [item[key], item])).values()]; -}; -const composePickableCategoryType = ( - categoryValue: string, - typeValue: string, - documentsSchema: TDocument[], -) => { - const documentTypesDropdownOptions: Array<{ value: string; label: string }> = []; - const documentCategoryDropdownOptions: Array<{ value: string; label: string }> = []; - - documentsSchema.forEach(document => { - const category = document.category; - if (category) { - documentCategoryDropdownOptions.push({ - value: category, - label: convertSnakeCaseToTitleCase(category), - }); - } - const type = document.type; - if (type) { - documentTypesDropdownOptions.push({ - value: type, - label: convertSnakeCaseToTitleCase(type), - }); - } - }); - - const typeDropdownOptions = uniqueArrayByKey(documentTypesDropdownOptions, 'value'); - const categoryDropdownOptions = uniqueArrayByKey(documentCategoryDropdownOptions, 'value'); - return { - type: { title: 'type', type: 'string', dropdownOptions: typeDropdownOptions, value: typeValue }, - category: { - title: 'category', - type: 'string', - dropdownOptions: categoryDropdownOptions, - value: categoryValue, - }, - }; -}; - -const isExistingSchemaForDocument = (documentsSchema: TDocument[]) => { - return documentsSchema.length > 0; -}; - -function omit(obj, ...props) { - const result = { ...obj }; - props.forEach(function (prop) { - delete result[prop]; - }); - return result; -} +import { + composePickableCategoryType, + convertSnakeCaseToTitleCase, + isExistingSchemaForDocument, + extractCountryCodeFromWorkflow, + omitPropsFromObject, + getIsEditable, +} from './utils'; +import { getDocumentsByCountry } from '@ballerine/common'; export const useEntity = () => { const { entityId } = useParams(); const filterId = useFilterId(); @@ -94,18 +35,12 @@ export const useEntity = () => { results[docIndex][pageIndex] = docsData.shift().data; }); }); - const filterEntity = useFilterEntity(); const selectedEntity = workflow.entity; - const issuerCountryCode = extractCountryCodeFromWorkflow(workflow); - const documentsSchema = issuerCountryCode && getDocumentsByCountry(issuerCountryCode); + const documentsSchemas = !!issuerCountryCode && getDocumentsByCountry(issuerCountryCode); const octetToFileType = (base64: string, fileType: string) => base64?.replace(/application\/octet-stream/gi, fileType); - const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = - useUpdateWorkflowByIdMutation({ - workflowId: workflow.id, - }); const { data: session } = useAuthenticatedUserQuery(); const caseState = useCaseState(session?.user, workflow); const contextEntity = workflow.context.entity; @@ -118,8 +53,8 @@ export const useEntity = () => { docIndex, ) => { const additionProperties = - isExistingSchemaForDocument(documentsSchema) && - composePickableCategoryType(category, docType, documentsSchema); + isExistingSchemaForDocument(documentsSchemas) && + composePickableCategoryType(category, docType, documentsSchemas); return [ { @@ -178,14 +113,13 @@ export const useEntity = () => { { type, format, pattern, isEditable = true, dropdownOptions, value }, ]) => { const fieldValue = value || (properties?.[title] ?? ''); - return { title, value: fieldValue, type, format, pattern, - isEditable: caseState.writeEnabled && isEditable, + isEditable: caseState.writeEnabled && getIsEditable(isEditable, title), dropdownOptions, }; }, @@ -234,7 +168,7 @@ export const useEntity = () => { value: { title: `${toStartCase(contextEntity?.type)} Information`, data: [ - ...Object.entries(omit(contextEntity?.data, 'additionalInfo') ?? {}), + ...Object.entries(omitPropsFromObject(contextEntity?.data, 'additionalInfo') ?? {}), ...Object.entries(contextEntity?.data?.additionalInfo ?? {}), ]?.map(([title, value]) => ({ title, diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts new file mode 100644 index 0000000000..b4063f7d82 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts @@ -0,0 +1,86 @@ +import { TDropdownOption } from '../../components/EditableDetails/types'; +import {AnyArray} from "../../../../common/types"; +import {TDocument} from "@ballerine/common"; + +export const convertSnakeCaseToTitleCase = (input: string): string => + input + .split('_') + .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); +const composeDataFormCell = ( + cellName: string, + categoryDropdownOptions: TDropdownOption[], + value: string, +) => { + return { + [cellName]: { + title: cellName, + type: 'string', + dropdownOptions: categoryDropdownOptions, + value: value, + }, + }; +}; +const uniqueArrayByKey = (array: AnyArray, key: PropertyKey) => { + return [...new Map(array.map(item => [item[key], item])).values()] as TDropdownOption[]; +}; + +const NONE_EDITABLE_FIELDS = ['category'] as const; +export const getIsEditable = (isEditable: boolean, title: string) => { + if (NONE_EDITABLE_FIELDS.includes(title)) return false; + + return isEditable; +}; + +export const composePickableCategoryType = ( + categoryValue: string, + typeValue: string, + documentsSchemas: TDocument[], +) => { + const documentCategoryDropdownOptions: Array<TDropdownOption> = []; + const documentTypesDropdownOptions: Array<TDropdownOption> = []; + + documentsSchemas.forEach(document => { + const category = document.category; + if (category) { + documentCategoryDropdownOptions.push({ + value: category as string, + label: convertSnakeCaseToTitleCase(category), + }); + } + const type = document.type; + if (type) { + documentTypesDropdownOptions.push({ + dependantOn: 'category', + dependantValue: category as string, + value: type as string, + label: convertSnakeCaseToTitleCase(type), + }); + } + }); + + const categoryDropdownOptions = uniqueArrayByKey(documentCategoryDropdownOptions, 'value'); + const typeDropdownOptions = uniqueArrayByKey(documentTypesDropdownOptions, 'value'); + + return { + ...composeDataFormCell('category', categoryDropdownOptions, categoryValue), + ...composeDataFormCell('type', typeDropdownOptions, typeValue), + }; +}; +export const isExistingSchemaForDocument = documentsSchemas => { + return documentsSchemas && documentsSchemas.length > 0; +}; + +export const extractCountryCodeFromWorkflow = workflow => { + return workflow?.context?.documents?.find(document => { + return !!document?.issuer?.country; + })?.issuer?.country; +}; + +export const omitPropsFromObject = (obj, ...props) => { + const result = { ...obj }; + props.forEach(function (prop) { + delete result[prop]; + }); + return result; +}; From 4b6b32a5662c29c0f9c08bf1eacad5e844c3e2dc Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Wed, 14 Jun 2023 18:20:17 +0300 Subject: [PATCH 028/123] Blokh/feat/test infra (#500) * feat(database-infra): generated infra for test creations ( test & nest ) generate database infra for test creations, generated test for end-user in order to test the test-infra * feat: generated global setup and teardown * updated DATABASE_SCHEMA_NAME using zod * fixed comments * removed unnecessary actions and docker compose * updated lock * feat: running foramt * updated DB_CONTAINER type * feat(added testglobal): added TestGlobal * updated pnpm lock * feat: added TESTCONTAINERS_RYUK_DISABLED true * ran commitlint * removed unnecessary wawait * removed test using windows * updated test runnign strategy * removed windows test as it does not support db request * feat(added support for unit test ing test and e2e test): added support for unit test added support for unit test, integration test and e2e test * added different ci for ubuntu and windows * updated commons * removed unit test from browser sdk * removed unit test from workflow * fixed package json * removed unit test from node-sdk * added crossenv * merged with dev * fixed enduser test * reverted removal of unittest * ran format * updated nx json * added unit test for workflow core * fixed nx json * fixed duplicated tests configuration on nx * reverted remoival of lint * merged with dev --- .../integration-test-action/action.yml | 39 ++ .github/actions/unit-test-action/action.yml | 39 ++ .github/workflows/ci.yml | 27 +- apps/backoffice-v2/package.json | 1 + .../pages/Entities/components/Cases/Cases.tsx | 2 +- .../src/pages/SignIn/SignIn.page.tsx | 2 +- nx.json | 11 +- package.json | 2 + packages/common/package.json | 1 + packages/rules-engine/package.json | 3 +- packages/workflow-core/package.json | 3 +- pnpm-lock.yaml | 360 +++++++++++++++--- sdks/web-ui-sdk/package.json | 1 + sdks/workflow-browser-sdk/package.json | 1 + sdks/workflow-node-sdk/package.json | 3 +- services/workflows-service/jest.config.cjs | 3 + services/workflows-service/package.json | 4 + ...vice.test.ts => auth.service.unit.test.ts} | 0 ...gy.test.ts => basic.strategy.unit.test.ts} | 0 ...gy.test.ts => local.strategy.unit.test.ts} | 0 ....test.ts => password.service.unit.test.ts} | 0 ...ice.test.ts => token.service.unit.test.ts} | 0 .../end-user.controller.external.intg.test.ts | 59 +++ ...ce.test.ts => health.service.unit.test.ts} | 0 ....util.test.ts => prisma.util.unit.test.ts} | 0 .../workflows-service/src/test/db-setup.ts | 28 ++ .../workflows-service/src/test/db-teardown.ts | 11 + .../src/test/helpers/database-helper.ts | 33 ++ .../src/test/helpers/nest-app-helper.ts | 67 ++++ .../workflows-service/src/test/test-global.ts | 5 + ....test.ts => webhooks.service.unit.test.ts} | 0 ....test.ts => update-documents.unit.test.ts} | 0 ...workflow.controller.external.unit.test.ts} | 0 ...workflow.controller.internal.unit.test.ts} | 0 ....test.ts => workflow.service.unit.test.ts} | 0 35 files changed, 645 insertions(+), 60 deletions(-) create mode 100644 .github/actions/integration-test-action/action.yml create mode 100644 .github/actions/unit-test-action/action.yml rename services/workflows-service/src/auth/{auth.service.test.ts => auth.service.unit.test.ts} (100%) rename services/workflows-service/src/auth/basic/{basic.strategy.test.ts => basic.strategy.unit.test.ts} (100%) rename services/workflows-service/src/auth/local/{local.strategy.test.ts => local.strategy.unit.test.ts} (100%) rename services/workflows-service/src/auth/password/{password.service.test.ts => password.service.unit.test.ts} (100%) rename services/workflows-service/src/auth/token/{token.service.test.ts => token.service.unit.test.ts} (100%) create mode 100644 services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts rename services/workflows-service/src/health/{health.service.test.ts => health.service.unit.test.ts} (100%) rename services/workflows-service/src/prisma/{prisma.util.test.ts => prisma.util.unit.test.ts} (100%) create mode 100644 services/workflows-service/src/test/db-setup.ts create mode 100644 services/workflows-service/src/test/db-teardown.ts create mode 100644 services/workflows-service/src/test/helpers/database-helper.ts create mode 100644 services/workflows-service/src/test/helpers/nest-app-helper.ts create mode 100644 services/workflows-service/src/test/test-global.ts rename services/workflows-service/src/webhooks/{webhooks.service.test.ts => webhooks.service.unit.test.ts} (100%) rename services/workflows-service/src/workflow/{update-documents.test.ts => update-documents.unit.test.ts} (100%) rename services/workflows-service/src/workflow/{workflow.controller.external.test.ts => workflow.controller.external.unit.test.ts} (100%) rename services/workflows-service/src/workflow/{workflow.controller.internal.test.ts => workflow.controller.internal.unit.test.ts} (100%) rename services/workflows-service/src/workflow/{workflow.service.test.ts => workflow.service.unit.test.ts} (100%) diff --git a/.github/actions/integration-test-action/action.yml b/.github/actions/integration-test-action/action.yml new file mode 100644 index 0000000000..15804e9a59 --- /dev/null +++ b/.github/actions/integration-test-action/action.yml @@ -0,0 +1,39 @@ +name: Test +description: Test the project + +runs: + using: composite + steps: + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.12.1 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + shell: bash + run: pnpm install + + - name: Test + shell: bash + run: pnpm test:integration diff --git a/.github/actions/unit-test-action/action.yml b/.github/actions/unit-test-action/action.yml new file mode 100644 index 0000000000..389d139a08 --- /dev/null +++ b/.github/actions/unit-test-action/action.yml @@ -0,0 +1,39 @@ +name: Test +description: Test the project + +runs: + using: composite + steps: + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 18.12.1 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + shell: bash + run: pnpm install + + - name: Test + shell: bash + run: pnpm test:unit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21db13b0c6..264801ef7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,29 +26,36 @@ jobs: - name: Format uses: ./.github/actions/format-action - - test: + build: strategy: matrix: os: [ubuntu-latest, windows-latest] - timeout-minutes: 60 runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Build + uses: ./.github/actions/build-action + + test_linux: + runs-on: ubuntu-latest + timeout-minutes: 60 steps: - name: Checkout uses: actions/checkout@v3 - name: Test uses: ./.github/actions/test-action - build: - strategy: - matrix: - os: [ubuntu-latest, windows-latest] - runs-on: ${{ matrix.os }} + + test_windows: + runs-on: windows-latest + timeout-minutes: 60 steps: - name: Checkout uses: actions/checkout@v3 - - name: Build - uses: ./.github/actions/build-action + - name: Test + uses: ./.github/actions/unit-test-action diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index a80b2e5a2e..ca3b7b0003 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -41,6 +41,7 @@ "dev": "vite", "build": "vite build", "test": "vitest run --passWithNoTests", + "test:unit": "vitest run --passWithNoTests", "test:e2e": "playwright test", "typecheck": "tsc --noEmit", "storybook": "storybook dev -p 6006", diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 63c041bbb7..9f7aa0400e 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> + <div className="dropdown dropdown-bottom dropdown-hover z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 23428b31e9..0a77a7a600 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -59,7 +59,7 @@ export const SignIn: FunctionComponent = () => { return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - {env.VITE_IMAGE_LOGO_URL ? ( + {!!env.VITE_IMAGE_LOGO_URL ? ( <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> ) : ( <BallerineLogo /> diff --git a/nx.json b/nx.json index 942433093a..815af8b334 100644 --- a/nx.json +++ b/nx.json @@ -3,7 +3,7 @@ "default": { "runner": "nx/tasks-runners/default", "options": { - "cacheableOperations": ["build", "test"] + "cacheableOperations": ["build", "test", "test:unit", "test:integration", "test:e2e"] } } }, @@ -20,6 +20,15 @@ "test": { "dependsOn": [{ "projects": "self", "target": "build" }] }, + "test:unit": { + "dependsOn": [{ "projects": "self", "target": "build" }] + }, + "test:integration": { + "dependsOn": [{ "projects": "self", "target": "build" }] + }, + "test:e2e": { + "dependsOn": [{ "projects": "self", "target": "build" }] + }, "lint": { "dependsOn": [{ "projects": "self", "target": "build" }] } diff --git a/package.json b/package.json index f72b828277..8110c837c2 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "format:check": "nx run-many --target=format:check --exclude=@ballerine/backoffice-v2", "lint": "nx run-many --target=lint --projects=@ballerine/web-ui-sdk,@ballerine/workflows-service,@ballerine/workflow-browser-sdk", "test": "nx run-many --target=test --exclude=@ballerine/common", + "test:unit": "nx run-many --target=test:unit --exclude=@ballerine/common", + "test:integration": "nx run-many --target=test:integration --exclude=@ballerine/common", "test:e2e": "nx run-many --target=test:e2e", "playwright:install": "nx run-many --target=playwright:install", "dev": "nx run-many --target=dev --projects=@ballerine/workflows-service,@ballerine/backoffice-v2", diff --git a/packages/common/package.json b/packages/common/package.json index 98872368cc..f7968c096a 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -21,6 +21,7 @@ "build": "rollup --config rollup.config.js", "watch": "concurrently --kill-others \"rollup --config rollup.config.js -w\" \"tsc -b --watch\"", "test": "vitest", + "test:unit": "vitest", "format": "prettier --write .", "format:check": "prettier --check .", "lint": "eslint . --fix", diff --git a/packages/rules-engine/package.json b/packages/rules-engine/package.json index 89ebf5e430..4f723c80c9 100644 --- a/packages/rules-engine/package.json +++ b/packages/rules-engine/package.json @@ -16,7 +16,8 @@ "scripts": { "build": "rollup --config rollup.config.js", "watch": "concurrently --kill-others \"rollup --config rollup.config.js -w\" \"tsc -b --watch\"", - "test": "vitest run" + "test": "vitest run", + "test:unit": "vitest run" }, "engines": { "node": ">=12" diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 46fea79200..f3fa82716c 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -21,7 +21,8 @@ "build": "pnpm clean && rollup --config rollup.config.js", "watch": "tsc -w", "dev": "concurrently --kill-others \"pnpm build -w\" \"pnpm watch\"", - "test": "vitest run" + "test": "vitest run", + "test:unit": "vitest run" }, "engines": { "node": ">=12" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b83c3dfaf..0128bbb975 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1286,6 +1286,9 @@ importers: supertest: specifier: 4.0.2 version: 4.0.2 + testcontainers: + specifier: ^9.8.0 + version: 9.8.0 ts-jest: specifier: 27.0.3 version: 27.0.3(jest@27.0.6)(typescript@4.9.5) @@ -5063,6 +5066,10 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@balena/dockerignore@1.0.2: + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + dev: true + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -8677,17 +8684,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.32: - resolution: {integrity: sha512-Z3w69/MCB6tdaeuN8Htb5NyxnyrupeGgOjIRCCLDQL8CkYYYNWZuQakfhnUUXduc49bSXBh+2yF2LAbvKlLs2g==} + /@storybook/channel-postmessage@7.1.0-alpha.34: + resolution: {integrity: sha512-5H2XCeEeKUTkG/4bbMD+xM3DWbIC+4DXwnd0aLN8BxHqjlWxD83m95i05eCZAZ+VlM40UocDvLeZYr1menrvZQ==} dependencies: - '@storybook/channel-websocket': 7.1.0-alpha.32 - '@storybook/channels': 7.1.0-alpha.32 - '@storybook/client-logger': 7.1.0-alpha.32 - '@storybook/core-events': 7.1.0-alpha.32 - '@storybook/global': 5.0.0 - qs: 6.11.2 - telejson: 7.1.0 - tiny-invariant: 1.3.1 + '@storybook/channels': 7.1.0-alpha.34 + '@storybook/client-logger': 7.1.0-alpha.34 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -8699,16 +8700,6 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-websocket@7.1.0-alpha.32: - resolution: {integrity: sha512-nuEOf3yveZJg/wXIYU/JscRy+Drhu3WcukMjG4+/7fjw2vI+eLTt4SxI8ekEKhXLmIybA1Ri/XYgj3D4xrtQNA==} - dependencies: - '@storybook/channels': 7.1.0-alpha.32 - '@storybook/client-logger': 7.1.0-alpha.32 - '@storybook/global': 5.0.0 - telejson: 7.1.0 - tiny-invariant: 1.3.1 - dev: true - /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: @@ -8721,8 +8712,15 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.32: - resolution: {integrity: sha512-b0BhSdZ9s+vgHuVckKXI1xUKgdBs8oak0kvHPSWvHf57SQisRkX98yr0DCUim5/DEODpFLqo05m431G7YVOwPQ==} + /@storybook/channels@7.1.0-alpha.34: + resolution: {integrity: sha512-lC8EwBYacTFEQ+tG0tyPfW/05XrsSt0+glAIBgAaDKggRLvdYUP6oukvsz0Zw6vDxSIJol6kF1WB0BTXb07Tig==} + dependencies: + '@storybook/client-logger': 7.1.0-alpha.34 + '@storybook/core-events': 7.1.0-alpha.34 + '@storybook/global': 5.0.0 + qs: 6.11.2 + telejson: 7.1.0 + tiny-invariant: 1.3.1 dev: true /@storybook/cli@7.0.0-rc.10: @@ -8787,8 +8785,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.32: - resolution: {integrity: sha512-Y2IxwDdoOEoFdoDi5NjVENxJZG3Ldb2IpAAplGtrSOasS5aQ0PskY8WW5EeFPpOK7DeNnZvxAytuhVQaivimDg==} + /@storybook/client-logger@7.1.0-alpha.34: + resolution: {integrity: sha512-bb740Ex080V7/SgcxTVohO+aPFE0pHA4lkRAJEEKZkfluzBZrNTJzgT+THIdxHPux/EyKGHL2wS1wdREdcgfhw==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -8892,8 +8890,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.32: - resolution: {integrity: sha512-od8gE0q9fuLAIeqGNDAy9atG4m9CC5RQu8j0na/Ccj1henughyCxaPss6DaYr9c1RxsYGog0P/+28MuqWVduog==} + /@storybook/core-events@7.1.0-alpha.34: + resolution: {integrity: sha512-b9+2dm8kz7d1DzyhCjhgWAwbOSvKakI/Jcnp/ml4CEZhOTx77fHgfRxEPwxMc1g+xHM8YZGSLgAb857ShJwfEw==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -9029,14 +9027,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.32: - resolution: {integrity: sha512-feBjhCB4MEEJED0S4JDzNyaW+h9BBgxcx1cVAOYLgxZJ0Gp8tr0Lym2tIqbLfGQNCt7wH3v7WRIxNImlUM0cTw==} + /@storybook/instrumenter@7.1.0-alpha.34: + resolution: {integrity: sha512-F4mZ0QOL/0p1EBhhRi8fRIiwl6ZJKnwc4sleQaut4tNukXwJArdiKMaa7dzBBPbrG446BTefnU72puqgMwjCAw==} dependencies: - '@storybook/channels': 7.1.0-alpha.32 - '@storybook/client-logger': 7.1.0-alpha.32 - '@storybook/core-events': 7.1.0-alpha.32 + '@storybook/channels': 7.1.0-alpha.34 + '@storybook/client-logger': 7.1.0-alpha.34 + '@storybook/core-events': 7.1.0-alpha.34 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.32 + '@storybook/preview-api': 7.1.0-alpha.34 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -9105,16 +9103,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.32: - resolution: {integrity: sha512-yveSPB4AlLWsIznHyEUQ1LhPDxU+DWya6spxGf26CGazT/66KnnKEwrYV3EBNRMdCx7EJIo/Q2qXupkiDSfZCw==} + /@storybook/preview-api@7.1.0-alpha.34: + resolution: {integrity: sha512-oJeM+TM4Ma/2BtvPonvy6sxZwheLAFHbVhY+jO/L6SGuIJGVmCbxBh7k+LV4LbZR2RuXMMAFFOb7EjMrLcX+0A==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.32 - '@storybook/channels': 7.1.0-alpha.32 - '@storybook/client-logger': 7.1.0-alpha.32 - '@storybook/core-events': 7.1.0-alpha.32 + '@storybook/channel-postmessage': 7.1.0-alpha.34 + '@storybook/channels': 7.1.0-alpha.34 + '@storybook/client-logger': 7.1.0-alpha.34 + '@storybook/core-events': 7.1.0-alpha.34 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.32 + '@storybook/types': 7.1.0-alpha.34 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -9262,8 +9260,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.32 - '@storybook/instrumenter': 7.1.0-alpha.32 + '@storybook/client-logger': 7.1.0-alpha.34 + '@storybook/instrumenter': 7.1.0-alpha.34 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -9306,10 +9304,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.32: - resolution: {integrity: sha512-KoBwJ8biXl6LNSqgS/fWlESU/S0SdvnxGxOgRElDhWGUdO8iSX29udM0F9OJ5FNZlzClqKgBJ/CUk7HFddnXzQ==} + /@storybook/types@7.1.0-alpha.34: + resolution: {integrity: sha512-edgqqXNsk3DXknZt0oq8NlCxJK7vY4bpRSAevxUp35dvL/t9WodebyjUKeDBhh8wf9kZAOvtFZBou8NlA5flcg==} dependencies: - '@storybook/channels': 7.1.0-alpha.32 + '@storybook/channels': 7.1.0-alpha.34 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -9650,6 +9648,12 @@ packages: '@types/estree': 1.0.0 dev: false + /@types/archiver@5.3.2: + resolution: {integrity: sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==} + dependencies: + '@types/readdir-glob': 1.1.1 + dev: true + /@types/argparse@1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} dev: true @@ -9735,6 +9739,20 @@ packages: resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==} dev: true + /@types/docker-modem@3.0.2: + resolution: {integrity: sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==} + dependencies: + '@types/node': 18.15.11 + '@types/ssh2': 1.11.11 + dev: true + + /@types/dockerode@3.3.19: + resolution: {integrity: sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==} + dependencies: + '@types/docker-modem': 3.0.2 + '@types/node': 18.15.11 + dev: true + /@types/doctrine@0.0.3: resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} dev: true @@ -10096,6 +10114,12 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.2 + /@types/readdir-glob@1.1.1: + resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: @@ -10140,6 +10164,25 @@ packages: dependencies: '@types/node': 18.15.11 + /@types/ssh2-streams@0.1.9: + resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} + dependencies: + '@types/node': 18.15.11 + dev: true + + /@types/ssh2@0.5.52: + resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} + dependencies: + '@types/node': 18.15.11 + '@types/ssh2-streams': 0.1.9 + dev: true + + /@types/ssh2@1.11.11: + resolution: {integrity: sha512-LdnE7UBpvHCgUznvn2fwLt2hkaENcKPFqOyXGkvyTLfxCXBN6roc1RmECNYuzzbHePzD3PaAov5rri9hehzx9Q==} + dependencies: + '@types/node': 18.15.11 + dev: true + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true @@ -11068,6 +11111,35 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + /archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + dev: true + + /archiver@5.3.1: + resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + async: 3.2.4 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.0 + dev: true + /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} @@ -11181,6 +11253,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: true + /assert@2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} dependencies: @@ -11332,6 +11410,10 @@ packages: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true + /async-lock@1.4.0: + resolution: {integrity: sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==} + dev: true + /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true @@ -11645,6 +11727,12 @@ packages: resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==} dev: true + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: true + /bcrypt@5.1.0: resolution: {integrity: sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==} engines: {node: '>= 10.0.0'} @@ -11904,6 +11992,12 @@ packages: ieee754: 1.2.1 dev: false + /buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + dev: true + optional: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -11921,6 +12015,11 @@ packages: dependencies: streamsearch: 1.1.0 + /byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + dev: true + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -12429,6 +12528,16 @@ packages: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true + /compress-commons@4.1.1: + resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==} + engines: {node: '>= 10'} + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.2 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -12653,6 +12762,30 @@ packages: path-type: 4.0.0 dev: true + /cpu-features@0.0.8: + resolution: {integrity: sha512-BbHBvtYhUhksqTjr6bhNOjGgMnhwhGTQmOoZGD+K7BCaQDCuZl/Ve1ZxUSMRwVC4D/rkCPQ2MAIeYzrWyK7eEg==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + buildcheck: 0.0.6 + nan: 2.17.0 + dev: true + optional: true + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /crc32-stream@4.0.2: + resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==} + engines: {node: '>= 10'} + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -13108,6 +13241,36 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + /docker-compose@0.23.19: + resolution: {integrity: sha512-v5vNLIdUqwj4my80wxFDkNH+4S85zsRuH29SO7dCWVWPCMt/ohZBsGN6g6KXWifT0pzQ7uOxqEKCYCDPJ8Vz4g==} + engines: {node: '>= 6.0.0'} + dependencies: + yaml: 1.10.2 + dev: true + + /docker-modem@3.0.8: + resolution: {integrity: sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==} + engines: {node: '>= 8.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.13.0 + transitivePeerDependencies: + - supports-color + dev: true + + /dockerode@3.3.5: + resolution: {integrity: sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==} + engines: {node: '>= 8.0'} + dependencies: + '@balena/dockerignore': 1.0.2 + docker-modem: 3.0.8 + tar-fs: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -17695,6 +17858,13 @@ packages: dotenv-expand: 10.0.0 dev: true + /lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.8 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -17824,6 +17994,18 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: true + + /lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + dev: true + + /lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: true + /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true @@ -17867,6 +18049,10 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + dev: true + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true @@ -18990,6 +19176,11 @@ packages: object-assign: 4.1.1 thenify-all: 1.6.0 + /nan@2.17.0: + resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + dev: true + optional: true + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -20057,6 +20248,13 @@ packages: react-is: 16.13.1 dev: true + /properties-reader@2.2.0: + resolution: {integrity: sha512-CgVcr8MwGoBKK24r9TwHfZkLLaNFHQ6y4wgT9w/XzdpacOOi5ciH4hcuLechSDAwXsfrGQtI2JTutY2djOx2Ow==} + engines: {node: '>=10'} + dependencies: + mkdirp: 1.0.4 + dev: true + /property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false @@ -20492,6 +20690,12 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + dependencies: + minimatch: 5.1.6 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -21567,6 +21771,10 @@ packages: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true + /split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + dev: true + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: @@ -21580,6 +21788,25 @@ packages: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} dev: false + /ssh-remote-port-forward@1.0.4: + resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} + dependencies: + '@types/ssh2': 0.5.52 + ssh2: 1.13.0 + dev: true + + /ssh2@1.13.0: + resolution: {integrity: sha512-CIZBFRRY1y9mAZSqBGFE4EB4dNJad2ysT2PqO8OpkiI3UTB/gUZwE5EaN16qVyQ6s/M7EgC/iaV/MnjdlvnuzA==} + engines: {node: '>=10.16.0'} + requiresBuild: true + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.8 + nan: 2.17.0 + dev: true + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -22158,6 +22385,15 @@ packages: engines: {node: '>=6'} dev: true + /tar-fs@2.0.1: + resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: @@ -22315,6 +22551,29 @@ packages: minimatch: 3.1.2 dev: true + /testcontainers@9.8.0: + resolution: {integrity: sha512-61IlJeVrUbS5JlAgM/N0koFnRxsID+vDap7CUmgaHXSGxmFofCiokB7kD96c1BtDWGOznrd7lTAPGSkd3RVkPA==} + engines: {node: '>= 10.16'} + dependencies: + '@balena/dockerignore': 1.0.2 + '@types/archiver': 5.3.2 + '@types/dockerode': 3.3.19 + archiver: 5.3.1 + async-lock: 1.4.0 + byline: 5.0.0 + debug: 4.3.4(supports-color@8.1.1) + docker-compose: 0.23.19 + dockerode: 3.3.5 + get-port: 5.1.1 + node-fetch: 2.6.9 + properties-reader: 2.2.0 + ssh-remote-port-forward: 1.0.4 + tar-fs: 2.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -22712,6 +22971,10 @@ packages: yargs: 17.7.1 dev: true + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -24242,6 +24505,15 @@ packages: commander: 9.5.0 dev: true + /zip-stream@4.1.0: + resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + compress-commons: 4.1.1 + readable-stream: 3.6.2 + dev: true + /zlibjs@0.3.1: resolution: {integrity: sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==} dev: false diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 256e5648ff..9c229f24c6 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -40,6 +40,7 @@ "deprecated:build:sdk": "rollup --config", "start": "vite preview", "test": "vitest run", + "test:unit": "vitest run", "test:watch": "vitest", "test:e2e": "playwright test", "playwright:install": "playwright install --with-deps", diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index b7b0c5ae21..2fa62c1156 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -23,6 +23,7 @@ "lint": "eslint . --ext .ts", "dev": "concurrently --kill-others \"pnpm build -w\" \"pnpm watch\"", "test": "vitest run", + "test:unit": "vitest run", "test:watch": "vitest" }, "engines": { diff --git a/sdks/workflow-node-sdk/package.json b/sdks/workflow-node-sdk/package.json index d30f34ccdd..0efcb728f6 100644 --- a/sdks/workflow-node-sdk/package.json +++ b/sdks/workflow-node-sdk/package.json @@ -16,7 +16,8 @@ "scripts": { "build": "rollup --config rollup.config.js", "watch": "concurrently --kill-others \"rollup --config rollup.config.js -w\" \"tsc -b --watch\"", - "test": "vitest run" + "test": "vitest run", + "test:unit": "vitest run" }, "engines": { "node": ">=12" diff --git a/services/workflows-service/jest.config.cjs b/services/workflows-service/jest.config.cjs index d86a46fe11..891161efb1 100644 --- a/services/workflows-service/jest.config.cjs +++ b/services/workflows-service/jest.config.cjs @@ -2,6 +2,7 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', modulePathIgnorePatterns: ['<rootDir>/dist/'], + testRegex: '(/__tests__/.*|(\\.|/)(unit|e2e|intg)\\.test)\\.ts$', moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1', axios: 'axios/dist/node/axios.cjs', @@ -11,4 +12,6 @@ module.exports = { tsconfig: './tsconfig.test.json', }, }, + globalSetup: '<rootDir>/src/test/db-setup.ts', + globalTeardown: '<rootDir>/src/test/db-teardown.ts', }; diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 32547abe81..5d4526a4e3 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -15,6 +15,9 @@ "start:debug": "nest start --debug --watch", "build": "nest build --path=tsconfig.build.json", "test": "jest --verbose", + "test:unit": "cross-env SKIP_DB_SETUP_TEARDOWN=true jest --testRegex '.*\\.unit\\.test\\.ts$'", + "test:integration": "jest --testRegex '.*\\.intg\\.test\\.ts$'", + "test:e2e": "jest --testRegex '.*\\.e2e\\.test\\.ts$'", "test:watch": "jest --verbose --watch", "seed": "ts-node scripts/seed.ts", "db:migrate-save": "prisma migrate dev", @@ -111,6 +114,7 @@ "prettier": "^2.8.4", "prisma": "4.13.0", "supertest": "4.0.2", + "testcontainers": "^9.8.0", "ts-jest": "27.0.3", "ts-node": "^10.9.1", "type-fest": "0.11.0", diff --git a/services/workflows-service/src/auth/auth.service.test.ts b/services/workflows-service/src/auth/auth.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/auth/auth.service.test.ts rename to services/workflows-service/src/auth/auth.service.unit.test.ts diff --git a/services/workflows-service/src/auth/basic/basic.strategy.test.ts b/services/workflows-service/src/auth/basic/basic.strategy.unit.test.ts similarity index 100% rename from services/workflows-service/src/auth/basic/basic.strategy.test.ts rename to services/workflows-service/src/auth/basic/basic.strategy.unit.test.ts diff --git a/services/workflows-service/src/auth/local/local.strategy.test.ts b/services/workflows-service/src/auth/local/local.strategy.unit.test.ts similarity index 100% rename from services/workflows-service/src/auth/local/local.strategy.test.ts rename to services/workflows-service/src/auth/local/local.strategy.unit.test.ts diff --git a/services/workflows-service/src/auth/password/password.service.test.ts b/services/workflows-service/src/auth/password/password.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/auth/password/password.service.test.ts rename to services/workflows-service/src/auth/password/password.service.unit.test.ts diff --git a/services/workflows-service/src/auth/token/token.service.test.ts b/services/workflows-service/src/auth/token/token.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/auth/token/token.service.test.ts rename to services/workflows-service/src/auth/token/token.service.unit.test.ts diff --git a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts new file mode 100644 index 0000000000..612a375e9d --- /dev/null +++ b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts @@ -0,0 +1,59 @@ +import request from 'supertest'; +import { cleanupDatabase, tearDownDatabase } from '@/test/helpers/database-helper'; +import { INestApplication } from '@nestjs/common'; +import { fetchServiceFromModule, initiateNestApp } from '@/test/helpers/nest-app-helper'; +import { EndUserControllerExternal } from '@/end-user/end-user.controller.external'; +import { faker } from '@faker-js/faker'; +import { EndUserService } from '@/end-user/end-user.service'; +import { PrismaModule } from 'nestjs-prisma'; +import { EndUserRepository } from '@/end-user/end-user.repository'; +import { PrismaService } from '@/prisma/prisma.service'; +import { FilterService } from '@/filter/filter.service'; +import { FilterRepository } from '@/filter/filter.repository'; + +describe('#EndUserControllerExternal', () => { + let app: INestApplication; + let endUserService: EndUserService; + beforeEach(cleanupDatabase); + afterEach(tearDownDatabase); + + beforeAll(async () => { + const servicesProviders = [EndUserRepository, PrismaService, FilterService, FilterRepository]; + endUserService = (await fetchServiceFromModule(EndUserService, servicesProviders, [ + PrismaModule, + ])) as unknown as EndUserService; + app = await initiateNestApp( + app, + [ + { + provide: EndUserService, + useValue: endUserService, + }, + ...servicesProviders, + ], + [EndUserControllerExternal], + [PrismaModule], + ); + }); + + describe('POST /end-user', () => { + it('it creates an end-user', async () => { + expect(await endUserService.list({})).toHaveLength(0); + + const response = await request(app.getHttpServer()).post('/external/end-users').send({ + correlationId: faker.datatype.uuid(), + endUserType: faker.random.word(), + approvalState: 'APPROVED', + firstName: 'test', + lastName: 'lastName', + }); + + expect(response.status).toBe(201); + const allEndUsers = await endUserService.list({}); + expect(allEndUsers[0]).toMatchObject({ + firstName: 'test', + lastName: 'lastName', + }); + }); + }); +}); diff --git a/services/workflows-service/src/health/health.service.test.ts b/services/workflows-service/src/health/health.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/health/health.service.test.ts rename to services/workflows-service/src/health/health.service.unit.test.ts diff --git a/services/workflows-service/src/prisma/prisma.util.test.ts b/services/workflows-service/src/prisma/prisma.util.unit.test.ts similarity index 100% rename from services/workflows-service/src/prisma/prisma.util.test.ts rename to services/workflows-service/src/prisma/prisma.util.unit.test.ts diff --git a/services/workflows-service/src/test/db-setup.ts b/services/workflows-service/src/test/db-setup.ts new file mode 100644 index 0000000000..27e202e7ac --- /dev/null +++ b/services/workflows-service/src/test/db-setup.ts @@ -0,0 +1,28 @@ +import { PostgreSqlContainer } from 'testcontainers'; +import console from 'console'; +import { TestGlobal } from '@/test/test-global'; +import { execSync } from 'child_process'; + +module.exports = async () => { + if (process.env.SKIP_DB_SETUP_TEARDOWN) return; + + const container = await new PostgreSqlContainer().withDatabase('test').start(); + process.env.TEST_DATABASE_SCHEMA_NAME = container.getDatabase(); + process.env.DB_URL = container.getConnectionUri(); + console.log('\nStarting database container on: ' + container.getConnectionUri()); + + runPrismaMigrations(); + + (globalThis as TestGlobal).__DB_CONTAINER__ = container; +}; + +const runPrismaMigrations = () => { + if (process.env.SKIP_DB_SETUP_TEARDOWN) return; + + try { + execSync('npx prisma migrate dev --preview-feature', { stdio: 'inherit' }); + } catch (error) { + console.error('Prisma migration failed:'); + console.error(error); + } +}; diff --git a/services/workflows-service/src/test/db-teardown.ts b/services/workflows-service/src/test/db-teardown.ts new file mode 100644 index 0000000000..3007ac3ef1 --- /dev/null +++ b/services/workflows-service/src/test/db-teardown.ts @@ -0,0 +1,11 @@ +import { TestGlobal } from '@/test/test-global'; + +export async function teardown() { + let globalThisTest = globalThis as TestGlobal; + + if (!globalThisTest.__DB_CONTAINER__) return; + + await globalThisTest.__DB_CONTAINER__.stop(); +} + +module.exports = teardown; diff --git a/services/workflows-service/src/test/helpers/database-helper.ts b/services/workflows-service/src/test/helpers/database-helper.ts new file mode 100644 index 0000000000..be72ccd624 --- /dev/null +++ b/services/workflows-service/src/test/helpers/database-helper.ts @@ -0,0 +1,33 @@ +import { PrismaClient } from '@prisma/client'; +import { z } from 'zod'; +const databaseHelper = new PrismaClient(); +// should never be unset - default test in order not to delete default db +const TEST_DATABASE_SCHEMA_NAME = z + .string() + .default('test') + .parse(process.env.DATABASE_SCHEMA_NAME); + +//should be implemented in BeforeEach hook +export const cleanupDatabase = async () => { + let tableNames = await __getTables(databaseHelper); + await __removeAllTableContent(databaseHelper, tableNames); +}; + +//should be implemented in AfterEach hook +export const tearDownDatabase = async () => { + await databaseHelper.$disconnect(); +}; + +async function __getTables(prisma: PrismaClient): Promise<string[]> { + const results: Array<{ + tablename: string; + }> = + await prisma.$queryRaw`SELECT tablename from pg_tables where schemaname = '${TEST_DATABASE_SCHEMA_NAME}';`; + return results.map(result => result.tablename); +} + +const __removeAllTableContent = async (prisma: PrismaClient, tableNames: Array<string>) => { + for (const table of tableNames) { + await prisma.$executeRawUnsafe(`DELETE FROM ${TEST_DATABASE_SCHEMA_NAME}."${table}" CASCADE;`); + } +}; diff --git a/services/workflows-service/src/test/helpers/nest-app-helper.ts b/services/workflows-service/src/test/helpers/nest-app-helper.ts new file mode 100644 index 0000000000..8a38ad60fc --- /dev/null +++ b/services/workflows-service/src/test/helpers/nest-app-helper.ts @@ -0,0 +1,67 @@ +import { Test } from '@nestjs/testing'; +import { ACLModule } from '@/common/access-control/acl.module'; +import { ACGuard } from 'nest-access-control'; +import { AclFilterResponseInterceptor } from '@/common/access-control/interceptors/acl-filter-response.interceptor'; +import { AclValidateRequestInterceptor } from '@/common/access-control/interceptors/acl-validate-request.interceptor'; +import { CallHandler, ExecutionContext, INestApplication, Provider, Type } from '@nestjs/common'; +import { EndUserModule } from '@/end-user/end-user.module'; +import { EndUserService } from '@/end-user/end-user.service'; +import { InstanceLink } from '@nestjs/core/injector/instance-links-host'; +import console from 'console'; + +const acGuard = { + canActivate: () => { + return true; + }, +}; + +const aclValidateRequestInterceptor = { + intercept: (_context: ExecutionContext, next: CallHandler) => { + return next.handle(); + }, +}; + +const aclFilterResponseInterceptor = { + intercept: (_context: ExecutionContext, next: CallHandler) => { + return next.handle(); + }, +}; + +export const fetchServiceFromModule = async <T>( + service: Type<T>, + dependencies: Provider[] = [], + modules: Type<any>[] = [], +) => { + const moduleRef = await Test.createTestingModule({ + providers: [service, ...dependencies], + imports: [...modules], + }).compile(); + + return moduleRef.get<typeof service>(service); +}; + +export const initiateNestApp = async ( + app: INestApplication, + providers: Provider[] = [], + controllers: Array<Type>, + modules: Array<Type>, +) => { + console.log(JSON.stringify(modules)); + const moduleRef = await Test.createTestingModule({ + providers: providers, + controllers: controllers, + imports: [ACLModule, ...modules], + }) + .overrideGuard(ACGuard) + .useValue(acGuard) + .overrideInterceptor(AclFilterResponseInterceptor) + .useValue(aclFilterResponseInterceptor) + .overrideInterceptor(AclValidateRequestInterceptor) + .useValue(aclValidateRequestInterceptor) + .compile(); + + app = moduleRef.createNestApplication(); + await app.init(); + + return app; +}; diff --git a/services/workflows-service/src/test/test-global.ts b/services/workflows-service/src/test/test-global.ts new file mode 100644 index 0000000000..22602639d5 --- /dev/null +++ b/services/workflows-service/src/test/test-global.ts @@ -0,0 +1,5 @@ +import { StartedPostgreSqlContainer } from 'testcontainers'; + +export type TestGlobal = typeof globalThis & { + __DB_CONTAINER__?: StartedPostgreSqlContainer; +}; diff --git a/services/workflows-service/src/webhooks/webhooks.service.test.ts b/services/workflows-service/src/webhooks/webhooks.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/webhooks/webhooks.service.test.ts rename to services/workflows-service/src/webhooks/webhooks.service.unit.test.ts diff --git a/services/workflows-service/src/workflow/update-documents.test.ts b/services/workflows-service/src/workflow/update-documents.unit.test.ts similarity index 100% rename from services/workflows-service/src/workflow/update-documents.test.ts rename to services/workflows-service/src/workflow/update-documents.unit.test.ts diff --git a/services/workflows-service/src/workflow/workflow.controller.external.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts similarity index 100% rename from services/workflows-service/src/workflow/workflow.controller.external.test.ts rename to services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.test.ts b/services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts similarity index 100% rename from services/workflows-service/src/workflow/workflow.controller.internal.test.ts rename to services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts diff --git a/services/workflows-service/src/workflow/workflow.service.test.ts b/services/workflows-service/src/workflow/workflow.service.unit.test.ts similarity index 100% rename from services/workflows-service/src/workflow/workflow.service.test.ts rename to services/workflows-service/src/workflow/workflow.service.unit.test.ts From 06ae2d4d0a330d4c3b7860f25d57edcc83bb8b06 Mon Sep 17 00:00:00 2001 From: Ilya Rudnev <cheskmr@gmail.com> Date: Thu, 15 Jun 2023 00:26:06 +0300 Subject: [PATCH 029/123] feat: added handling of prisma validation errors to workflow controller (#511) * feat: added handling of prisma validation errors to workflow /run controller * feat: moved prisma validation filter to global level * feat: implemented prisma validation errors parser & added parse output to filter * feat: added handling of unknown arguments exceptions from prisma * feat: added ansi codes removal from exception * use clean ansi fn --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../PrismaClientValidation.filter.ts | 39 +++++++++ .../utils/PrismaValidationExceptionParser.ts | 38 +++++++++ .../invalid-argument.parser.ts | 26 ++++++ .../invalid-arguments.parser.unit.test.ts | 51 ++++++++++++ .../utils/parsers/parser/IParser.ts | 22 +++++ .../unknown-argument-parser.ts | 27 ++++++ .../unknown-argument.parser.unit.test.ts | 82 +++++++++++++++++++ .../utils/remove-ansi-escape-codes.ts | 3 + .../remove-ansi-escape-codes.unit.test.ts | 21 +++++ .../utils/types.ts | 4 + services/workflows-service/src/main.ts | 2 + .../workflow/workflow.controller.external.ts | 2 +- 12 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-arguments.parser.unit.test.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument.parser.unit.test.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.unit.test.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/types.ts diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts new file mode 100644 index 0000000000..10111bdc04 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts @@ -0,0 +1,39 @@ +import { PrismaValidationExceptionParser } from './utils/PrismaValidationExceptionParser'; +import { ArgumentsHost, Catch, HttpStatus, Logger } from '@nestjs/common'; +import { BaseExceptionFilter } from '@nestjs/core'; +import { Prisma } from '@prisma/client'; +import { PrismaClientValidationError } from '@prisma/client/runtime'; +import { PrismaValidationExceptionParseResult } from '@/common/filters/prisma-client-validation-filter/utils/types'; +import { InvalidArgumentParser } from '@/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser'; +import { UnknownArgumentParser } from '@/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser'; + +@Catch(Prisma.PrismaClientValidationError) +export class PrismaClientValidationFilter extends BaseExceptionFilter { + private readonly logger = new Logger(PrismaClientValidationFilter.name); + + catch(exception: PrismaClientValidationError, host: ArgumentsHost) { + const context = host.switchToHttp(); + const response = context.getResponse(); + + this.logger.error(`Prisma validation failed.\n ${exception.message}`); + + response.status(HttpStatus.BAD_REQUEST); + + response.json({ + statusCode: HttpStatus.BAD_REQUEST, + message: 'Validation failed.', + result: this.parseException(exception), + }); + } + + private parseException( + exception: PrismaClientValidationError, + ): PrismaValidationExceptionParseResult { + const parser = new PrismaValidationExceptionParser( + [InvalidArgumentParser, UnknownArgumentParser], + exception, + ); + + return parser.parse(); + } +} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts new file mode 100644 index 0000000000..f77591680b --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts @@ -0,0 +1,38 @@ +import { PrismaValidationExceptionParseResult } from './types'; +import { Prisma } from '@prisma/client'; +import { IParser } from '@/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser'; +import { removeAnsiEscapeCodes } from './remove-ansi-escape-codes'; + +/** + * PrismaValidationExceptionParser + * @constructor + * @param {Prisma.PrismaClientValidationError} exception - Prisma validation exception + * @description Parsing exception for errors and convert them to JSON format + * Excluding referernces to prisma and application internals + * @method parse @returns {PrismaValidationExceptionParseResult} record of entries where key is paramName and its value errorReason + */ + +export class PrismaValidationExceptionParser { + constructor( + private readonly parsers: (new (message: string) => IParser)[], + private readonly exception: Prisma.PrismaClientValidationError, + ) {} + + parse(): PrismaValidationExceptionParseResult { + const { message } = this.exception; + const parseResult: PrismaValidationExceptionParseResult = this.parsers.reduce( + (parseResult, Parser) => { + const parser = new Parser(removeAnsiEscapeCodes(message)); + + return { + ...parseResult, + ...parser.parse(), + }; + }, + {}, + ); + + return parseResult; + } +} + diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser.ts new file mode 100644 index 0000000000..99b1595840 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser.ts @@ -0,0 +1,26 @@ +import { + IParser, + IParserResult, +} from '@/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser'; + +export class InvalidArgumentParser extends IParser { + // Looking for matches in following string format: Argument {{paramName}}: Got {{errorReason}} on prisma + // private pattern = new RegExp(/Argument ([^:]+):[^]+?Got ([^]+?) on prisma/, 'g'); + + pattern = new RegExp(/Argument ([^:]+):[^]+?Got ([^]+?) on prisma/, 'g'); + + parse(): IParserResult { + const { message } = this; + if (!message) return {}; + + return this.execPattern(this.pattern, (result, match) => { + const [_, paramName, errorReason] = match; + + if (paramName && errorReason) { + result[paramName] = errorReason; + } + + return result; + }); + } +} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-arguments.parser.unit.test.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-arguments.parser.unit.test.ts new file mode 100644 index 0000000000..ff48705653 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-arguments.parser.unit.test.ts @@ -0,0 +1,51 @@ +import { InvalidArgumentParser } from './invalid-argument.parser'; + +describe('InvalidArgumentParser', () => { + let parser: InvalidArgumentParser; + + describe('when exception message is empty', () => { + beforeEach(() => { + parser = new InvalidArgumentParser(''); + }); + + it('will return empty object', () => { + expect(parser.parse()).toEqual({}); + }); + }); + + describe('when provided message matches format', () => { + it('will parse string with single error', () => { + const errorReason = `some-error`; + const signleExceptionMessage = `Argument paramName: Got ${errorReason} on prisma`; + parser = new InvalidArgumentParser(signleExceptionMessage); + + expect(parser.parse()).toEqual({ paramName: errorReason }); + }); + + it('will parse string with multiple errors', () => { + const reasonOne = 'reasonOne'; + const reasonTwo = 'reasonTwo'; + + const message = `Argument paramOne: Got ${reasonOne} on prisma.Argument paramTwo: Got ${reasonTwo} on prisma`; + parser = new InvalidArgumentParser(message); + + expect(parser.parse()).toEqual({ paramOne: reasonOne, paramTwo: reasonTwo }); + }); + + it('will parse rich string with multiple errors between lines', () => { + const reasonOne = 'reasonOne'; + const reasonTwo = 'reasonTwo'; + + const message = `Lorem Ipsum is simply dummy text of the printing and typesetting industry. + Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, + Argument paramOne: Got ${reasonOne} on prisma. + when an unknown printer took a galley of type and scrambled + Argument paramTwo: Got ${reasonTwo} on prisma + it to make a type specimen book. It has survived not only five centuries,`; + + parser = new InvalidArgumentParser(message); + + expect(parser.parse()).toEqual({ paramOne: reasonOne, paramTwo: reasonTwo }); + }); + }); +}); diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser.ts new file mode 100644 index 0000000000..b766758854 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser.ts @@ -0,0 +1,22 @@ +export type IParserResult = Record<string, string>; +export type IParserResolver = (result: IParserResult, execResult: RegExpExecArray) => IParserResult; +export abstract class IParser { + constructor(readonly message: string) {} + + abstract parse(): IParserResult; + + execPattern(pattern: RegExp, resolver: IParserResolver) { + const { message } = this; + let parseResult: IParserResult = {}; + + let match: RegExpExecArray | null = null; + + if (!message) return {}; + + while ((match = pattern.exec(message))) { + parseResult = resolver(parseResult, match); + } + + return parseResult; + } +} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser.ts new file mode 100644 index 0000000000..dea3c84731 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser.ts @@ -0,0 +1,27 @@ +import { + IParser, + IParserResult, +} from '@/common/filters/prisma-client-validation-filter/utils/parsers/parser/IParser'; + +export class UnknownArgumentParser extends IParser { + // Looking for matches in following string format: Unknown arg {{paramName}} in {{failedOnPath}} for type {{EntityType}}. + pattern = new RegExp(/Unknown arg `(.+?)` in (.+?) for type (.+?)\./, 'gi'); + + parse(): IParserResult { + if (!this.message) return {}; + + return this.execPattern(this.pattern, (result, match) => { + const [_, fieldName, failedOnPath, type] = match; + + if (fieldName && failedOnPath && type) { + result[fieldName] = this.buildMessage(fieldName, failedOnPath, type); + } + + return result; + }); + } + + buildMessage = (paramName: string, path: string, type: string) => { + return `Provided parameter: ${paramName} on ${path} is not supported in type: ${type}`; + }; +} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument.parser.unit.test.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument.parser.unit.test.ts new file mode 100644 index 0000000000..6f8e41779d --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument.parser.unit.test.ts @@ -0,0 +1,82 @@ +import { UnknownArgumentParser } from './unknown-argument-parser'; + +describe('UnknownArgumentParser', () => { + let parser: UnknownArgumentParser; + + describe('when exception message is empty', () => { + beforeEach(() => { + parser = new UnknownArgumentParser(''); + }); + + it('will return empty object', () => { + expect(parser.parse()).toEqual({}); + }); + }); + + describe('when provided message matches format', () => { + it('will parse string with single error', () => { + const argumentName = 'someParam'; + const failedAtPath = `data.${argumentName}`; + const type = 'SomeEntityDefinition'; + const signleExceptionMessage = `Unknown arg \`${argumentName}\` in ${failedAtPath} for type ${type}.`; + parser = new UnknownArgumentParser(signleExceptionMessage); + + expect(parser.parse()).toEqual({ + [argumentName]: parser.buildMessage(argumentName, failedAtPath, type), + }); + }); + + describe('when working with multiple errors in message', () => { + let errorParams: { argumentName: string; failedAtPath: string; type: string }[]; + let expectResult: Record<string, string>; + + beforeAll(() => { + errorParams = [ + { argumentName: 'arg1', failedAtPath: 'some.where1', type: 'Entity1' }, + { argumentName: 'arg2', failedAtPath: 'some.where2', type: 'Entity2' }, + ]; + expectResult = errorParams.reduce((result, params) => { + result[params.argumentName] = parser.buildMessage( + params.argumentName, + params.failedAtPath, + params.type, + ); + return result; + }, {} as Record<string, string>); + }); + + it('will parse string with multiple errors', () => { + const message = errorParams + .map( + params => + `Unknown arg \`${params.argumentName}\` in ${params.failedAtPath} for type ${params.type}.`, + ) + .join('.'); + + parser = new UnknownArgumentParser(message); + + expect(parser.parse()).toEqual(expectResult); + }); + + it('will parse rich string with multiple errors between lines', () => { + const error1Params = errorParams[0]; + const error2Params = errorParams[1]; + + const message = `Lorem Ipsum is simply dummy text of the printing and typesetting industry. + Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, + Unknown arg \`${error1Params!.argumentName}\` in ${error1Params!.failedAtPath} for type ${ + error1Params!.type + }. + when an unknown printer took a galley of type and scrambled + Unknown arg \`${error2Params!.argumentName}\` in ${error2Params!.failedAtPath} for type ${ + error2Params!.type + }. + it to make a type specimen book. It has survived not only five centuries,`; + + parser = new UnknownArgumentParser(message); + + expect(parser.parse()).toEqual(expectResult); + }); + }); + }); +}); diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts new file mode 100644 index 0000000000..814c95b69e --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts @@ -0,0 +1,3 @@ +export function removeAnsiEscapeCodes(string: string): string { + return string.replace(/\x1B\[[0-9;]*[A-Za-z]/g, ''); +} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.unit.test.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.unit.test.ts new file mode 100644 index 0000000000..925873ea79 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.unit.test.ts @@ -0,0 +1,21 @@ +import { removeAnsiEscapeCodes } from './remove-ansi-escape-codes'; + +describe('removeAnsiEscapeCodes', () => { + describe("when string does't include ansi codes", () => { + it('will keep it untouched', () => { + expect(removeAnsiEscapeCodes('Lorem ipsum dolor sit amet.')).toBe( + 'Lorem ipsum dolor sit amet.', + ); + }); + }); + + describe('when string includes ANSI', () => { + it('will remove ANSI escape codes from string', () => { + const ansiEncodedString = `Lorem \x1B[35mipsum\x1B[0m dolor sit amet, \x1B[33mconsectetur\x1B[0m adipiscing elit. Lorem \x1B[36mipsum\x1B[0m dolor sit amet, \x1B[31mconsectetur\x1B[0m adipiscing elit. Lorem \x1B[34mipsum\x1B[0m dolor sit amet, \x1B[32mconsectetur\x1B[0m adipiscing elit. Lorem \x1B[35mipsum\x1B[0m dolor sit amet, consectetur adipiscing elit.`; + + expect(removeAnsiEscapeCodes(ansiEncodedString)).toBe( + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.', + ); + }); + }); +}); diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/types.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/types.ts new file mode 100644 index 0000000000..6656773062 --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/types.ts @@ -0,0 +1,4 @@ +type FieldName = string; +type ErrorReason = string; + +export type PrismaValidationExceptionParseResult = Record<FieldName, ErrorReason>; diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 7cd079ccc7..58bfc6899b 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -13,6 +13,7 @@ import helmet from 'helmet'; import { env } from '@/env'; import { AllExceptionsFilter } from '@/common/filters/AllExceptions.filter'; import { NextFunction, Request, Response } from 'express'; +import { PrismaClientValidationFilter } from '@/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter'; // This line is used to improve Sentry's stack traces // https://docs.sentry.io/platforms/node/typescript/#changing-events-frames @@ -101,6 +102,7 @@ async function main() { const { httpAdapter } = app.get(HttpAdapterHost); app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); app.useGlobalFilters(new HttpExceptionFilter(httpAdapter)); + app.useGlobalFilters(new PrismaClientValidationFilter()); app.enableShutdownHooks(); diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index a0caeb02d6..0d64684dca 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -5,7 +5,7 @@ import { UserInfo } from '@/user/user-info'; import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import * as common from '@nestjs/common'; -import { Headers, NotFoundException, Res } from '@nestjs/common'; +import { Headers, NotFoundException, Res, UseFilters } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { WorkflowRuntimeData } from '@prisma/client'; import * as nestAccessControl from 'nest-access-control'; From 0dacb3a6b61466f01c2daad03f844ba9c71ca5c5 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 17 Jun 2023 09:02:11 +0300 Subject: [PATCH 030/123] add kyb w/ external request (#541) * feat(examples-kyb): kyb example w/ external request * feat(examples-kyb): kyb example w/ external request --- .../pages/Entities/components/Cases/Cases.tsx | 2 +- .../src/pages/Entity/hooks/useEntity/utils.ts | 4 +- .../scripts/workflows/index.ts | 163 ++++++++++++++++++ .../utils/PrismaValidationExceptionParser.ts | 1 - 4 files changed, 166 insertions(+), 4 deletions(-) create mode 100644 services/workflows-service/scripts/workflows/index.ts diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 9f7aa0400e..63c041bbb7 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown dropdown-bottom dropdown-hover z-[60]"> + <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts index b4063f7d82..cfb981113c 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts @@ -1,6 +1,6 @@ import { TDropdownOption } from '../../components/EditableDetails/types'; -import {AnyArray} from "../../../../common/types"; -import {TDocument} from "@ballerine/common"; +import { AnyArray } from '../../../../common/types'; +import { TDocument } from '@ballerine/common'; export const convertSnakeCaseToTitleCase = (input: string): string => input diff --git a/services/workflows-service/scripts/workflows/index.ts b/services/workflows-service/scripts/workflows/index.ts new file mode 100644 index 0000000000..2566a306f9 --- /dev/null +++ b/services/workflows-service/scripts/workflows/index.ts @@ -0,0 +1,163 @@ +export const kybWithExternalRequestWorkflowExample = { + id: 'external_request_example', + name: 'external_request_example', + version: 1, + definitionType: 'statechart-json', + definition: { + id: 'kyb_example_v1', + predictableActionArguments: true, + initial: 'idle', + context: { + documents: [], + }, + states: { + idle: { + on: { + start: 'check_business_details', + }, + }, + check_business_details: { + on: { + API_CALL_SUCCESS: [ + { + target: 'auto_approve', + cond: { + type: 'json-logic', + rule: { + '==': [ + { var: 'context.entity.companyName' }, + { var: 'response.data.registered_name' }, + ], + }, + }, + }, + { + // company dosent match but similar + target: 'manual_review', + cond: { + type: 'json-logic', + options: { + rule: { + '>': [ + { var: 'context.external_request_example.data.name_fuzziness_score' }, + 0.5, + ], + }, + onFailed: { manualReviewReason: 'name not matching ... ' }, + }, + }, + }, + { + // company dosent match but similar + target: 'auto_reject', + cond: { + type: 'json-logic', + rule: { + '<': [{ var: 'context.external_request_example.data.name_fuzziness_score' }, 0.5], + }, + }, + }, + ], + API_CALL_ERROR: [ + { + target: 'manual_review', + cond: { + type: 'json-logic', + rule: { + '>=': [{ var: 'context.external_request_example.httpStatus' }, 400], + }, + }, + }, + ], + }, + }, + manual_review: { + on: { + approve: 'approve', + reject: 'reject', + revision: 'revision', + }, + }, + auto_approve: { + type: 'final', + }, + auto_reject: { + type: 'final', + }, + approve: { + type: 'final', + }, + revision: { + on: { + data_updated: 'check_business_details', + }, + }, + }, + }, + externalRequests: [ + { + name: 'external_request_example', + strategy: 'direct-api', + successCallback: 'API_CALL_SUCCESS', + errorCallback: 'API_CALL_FAILURE', + url: 'https://mocks.ballerine.dev/api/businesses/risk/{context.entity.regestrationNumber}', + when: 'pre', + method: 'POST', + request: { + transform: { + transformer: 'jq', + mapping: + '{ business_name: .context .entity .companyName, regestration_number: .context .entity .registrationNumber}', + }, // JQ + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + business_name: { + type: 'string', + }, + registration_number: { + type: 'string', + }, + }, + required: ['business_name', 'registration_number'], + }, // Schema is OPTIONAL, but if provided, it will be used to validate the request body + }, + response: { + transform: {}, // JQ + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + business_details: { + type: 'object', + properties: { + registered_name: { + type: 'string', + }, + registration_number: { + type: 'string', + }, + address: { + type: 'string', + }, + contact_number: { + type: 'string', + }, + }, + }, + name_fuzziness_score: { + type: 'number', + minimum: 0, + maximum: 1, + }, + }, + }, // OPTIONAL + }, + headers: { + authorization: 'Bearer {secrets.BUSINESS_DATA__VENDOR_API_KEY}', + }, + states: ['check_company_data'], + }, + ], +}; diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts index f77591680b..cae4f9517c 100644 --- a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/PrismaValidationExceptionParser.ts @@ -35,4 +35,3 @@ export class PrismaValidationExceptionParser { return parseResult; } } - From e41846cf894780717ce3f9f2e670d85239140c80 Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Sun, 18 Jun 2023 15:12:00 +0300 Subject: [PATCH 031/123] fix(backoffice-v2): fixed document type resetting to "undefined" --- .../components/EditableDetails/hooks/useWatchDropdown.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts index f31e137abf..1c093c1e7f 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts @@ -21,7 +21,10 @@ export const useWatchDropdownOptions = ({ form, data, setFormData }) => { dropDownOption => dropDownOption.value == value, )?.value; - form.setValue(item.title, `${item.value}`); + if (item.value) { + form.setValue(item.title, `${item.value}`); + } + return (newData[newData.indexOf(item)] = item); }); From a02b88648bf472865d85fee14802e5de53937dc2 Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Sun, 18 Jun 2023 15:43:13 +0300 Subject: [PATCH 032/123] fix(*): no longer using hardcoded propertiesSchema --- .../EditableDetails/EditableDetails.tsx | 2 +- .../EditableDetails/hooks/useWatchDropdown.ts | 1 + packages/common/src/index.ts | 1 + .../workflow/documents/schemas/index.ts | 16 ++++++++++++++++ packages/common/src/schemas/index.ts | 2 +- .../src/workflow/workflow.service.ts | 19 +++++++++++++------ 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 7c72ac42a3..4d481ef453 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -1,4 +1,4 @@ -import { FieldValues, SubmitHandler, useForm, UseFormWatch } from 'react-hook-form'; +import { SubmitHandler, useForm } from 'react-hook-form'; import { Form } from '../../../../common/components/organisms/Form/Form'; import { ctw } from '../../../../common/utils/ctw/ctw'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts index 1c093c1e7f..e89a636b5e 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/hooks/useWatchDropdown.ts @@ -1,5 +1,6 @@ import { useEffect } from 'react'; import { TDropdownOption } from '../types'; + export const useWatchDropdownOptions = ({ form, data, setFormData }) => { const watch = form.watch; diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 6cd28c576b..d3a7893280 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -18,5 +18,6 @@ export { ghanaDocuments, certificateOfResidenceGH, getDocumentsByCountry, + getDocumentId, type TDocument, } from './schemas'; diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts index cd8bf407b3..22bb2ee587 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts @@ -1,6 +1,7 @@ import { ghanaDocuments } from './GH'; import { TDocument } from '../types'; import { countryCodes } from '@/countries'; +import { DefaultContextSchema } from '@/schemas'; const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], TDocument[]>> = { GH: ghanaDocuments, @@ -9,3 +10,18 @@ const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], TDocum export const getDocumentsByCountry = (countryCode: (typeof countryCodes)[number]): TDocument[] => { return documentIdsByCountry[countryCode] || []; }; + +export const getDocumentId = ( + document: TDocument | DefaultContextSchema['documents'][number], + useUuid = true, +) => { + if (useUuid && document?.id) return document.id; + + let id = `${document?.category}-${document?.type}-${document?.issuer?.country}`; + + if (document.version) { + id = `${id}-v${document.version}`; + } + + return id.toLowerCase(); +}; diff --git a/packages/common/src/schemas/index.ts b/packages/common/src/schemas/index.ts index 3ff4c9dc82..ba9dd26521 100644 --- a/packages/common/src/schemas/index.ts +++ b/packages/common/src/schemas/index.ts @@ -4,5 +4,5 @@ export { ghanaDocuments, certificateOfResidenceGH, } from './documents/workflow/documents/schemas/GH'; -export { getDocumentsByCountry } from './documents/workflow/documents/schemas/index'; +export { getDocumentsByCountry, getDocumentId } from './documents/workflow/documents/schemas/index'; export { type TDocument } from './documents/workflow/documents/types'; diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 964cb5a204..c6f3132a43 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -46,8 +46,9 @@ import { ConfigSchema, WorkflowConfig } from './schemas/zod-schemas'; import { toPrismaOrderBy } from '@/workflow/utils/toPrismaOrderBy'; import { toPrismaWhere } from '@/workflow/utils/toPrismaWhere'; import { - certificateOfResidenceGH, DefaultContextSchema, + getDocumentId, + getDocumentsByCountry, TDefaultSchemaDocumentPage, } from '@ballerine/common'; @@ -142,7 +143,6 @@ export class WorkflowService { private formatWorkflow(workflow: TWorkflowWithRelations) { const isIndividual = 'endUser' in workflow; - const service = createWorkflow({ definition: workflow.workflowDefinition as any, definitionType: workflow.workflowDefinition.definitionType, @@ -157,10 +157,17 @@ export class WorkflowService { context: { ...workflow.context, documents: workflow.context?.documents?.map( - (document: DefaultContextSchema['documents'][number]) => ({ - ...document, - propertiesSchema: certificateOfResidenceGH.propertiesSchema, - }), + (document: DefaultContextSchema['documents'][number]) => { + const documentsByCountry = getDocumentsByCountry(document?.issuer?.country); + const documentByCountry = documentsByCountry?.find( + doc => getDocumentId(doc, false) === getDocumentId(document, false), + ); + + return { + ...document, + propertiesSchema: documentByCountry?.propertiesSchema ?? {}, + }; + }, ), }, entity: { From d1b9296dd0980b812e19fe550f58ccaefc923cc9 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 18 Jun 2023 15:46:50 +0300 Subject: [PATCH 033/123] update common lib --- apps/backoffice-v2/package.json | 4 ++-- packages/common/CHANGELOG.md | 6 ++++++ packages/common/package.json | 2 +- packages/workflow-core/CHANGELOG.md | 7 +++++++ packages/workflow-core/package.json | 4 ++-- sdks/web-ui-sdk/CHANGELOG.md | 7 +++++++ sdks/web-ui-sdk/package.json | 4 ++-- sdks/workflow-browser-sdk/CHANGELOG.md | 8 ++++++++ sdks/workflow-browser-sdk/package.json | 6 +++--- services/workflows-service/CHANGELOG.md | 7 +++++++ services/workflows-service/package.json | 4 ++-- websites/docs/package.json | 2 +- 12 files changed, 48 insertions(+), 13 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index ca3b7b0003..d290f0d229 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -48,8 +48,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "0.5.2", - "@ballerine/workflow-browser-sdk": "^0.4.5", + "@ballerine/common": "0.5.3", + "@ballerine/workflow-browser-sdk": "^0.4.6", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 3f343fb31f..18135885c4 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.5.3 + +### Patch Changes + +- Update Common + ## 0.5.2 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index f7968c096a..7df043fd0c 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.5.2", + "version": "0.5.3", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index fbf301e3fa..8d8c432bc1 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-core +## 0.4.13 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.3 + ## 0.4.12 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index f3fa82716c..48b25edff1 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.12", + "version": "0.4.13", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -28,7 +28,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.2", + "@ballerine/common": "0.5.3", "json-logic-js": "^2.0.2", "xstate": "^4.35.2" }, diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index cee9b8a633..6548279b56 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.3.4 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.3 + ## 1.3.3 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 9c229f24c6..4bac630641 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.3.3", + "version": "1.3.4", "type": "module", "files": [ "dist" @@ -92,7 +92,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.5.2", + "@ballerine/common": "0.5.3", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index a99dfe7598..1853aecc28 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.6 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.3 + - @ballerine/workflow-core@0.4.13 + ## 0.4.5 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 2fa62c1156..83dcbb2da5 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.5", + "version": "0.4.6", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -30,8 +30,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.2", - "@ballerine/workflow-core": "^0.4.12", + "@ballerine/common": "0.5.3", + "@ballerine/workflow-core": "^0.4.13", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index 9935ece556..590898f479 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflows-service +## 0.4.14 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.3 + ## 0.4.13 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 5d4526a4e3..00f2af4b5e 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.13", + "version": "0.4.14", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -38,7 +38,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.5.2", + "@ballerine/common": "0.5.3", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", diff --git a/websites/docs/package.json b/websites/docs/package.json index a9eca87d66..ed2b1de5b6 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -22,7 +22,7 @@ "@astrojs/mdx": "^0.18.3", "@astrojs/react": "^1.2.2", "@astrojs/solid-js": "^1.2.3", - "@ballerine/common": "0.5.2", + "@ballerine/common": "0.5.3", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From 9810ab0b115f705443a9a2d052b910c85457187c Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 18 Jun 2023 16:07:01 +0300 Subject: [PATCH 034/123] feat(workflow-def): enable mulitple active workflows --- services/workflows-service/scripts/seed.ts | 1 + .../src/workflow/schemas/zod-schemas.ts | 1 + .../src/workflow/workflow.service.ts | 25 +++++++++++-------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index c5ee80fab7..68d51cec81 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -370,6 +370,7 @@ async function seed(bcryptSalt: Salt) { config: { completedWhenTasksResolved: true, workflowLevelResolution: false, + allowMultipleWorkflows: true, }, contextSchema: { type: 'json-schema', diff --git a/services/workflows-service/src/workflow/schemas/zod-schemas.ts b/services/workflows-service/src/workflow/schemas/zod-schemas.ts index ffc4c5de31..c0a88bc9c8 100644 --- a/services/workflows-service/src/workflow/schemas/zod-schemas.ts +++ b/services/workflows-service/src/workflow/schemas/zod-schemas.ts @@ -13,6 +13,7 @@ export const ConfigSchema = z subscriptions: z.array(SubscriptionSchema).optional(), completedWhenTasksResolved: z.boolean().optional(), workflowLevelResolution: z.boolean().optional(), + allowMultipleActiveWorkflows: z.boolean().optional(), }) .strict(); diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index c6f3132a43..941d51ecdd 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -607,6 +607,7 @@ export class WorkflowService { const workflowDefinition = await this.workflowDefinitionRepository.findById( workflowDefinitionId, ); + config = merge(workflowDefinition.config, config); let validatedConfig: WorkflowConfig; try { validatedConfig = ConfigSchema.parse(config); @@ -627,24 +628,16 @@ export class WorkflowService { let contextToInsert = structuredClone(context); - if (existingWorkflowRuntimeData) { - contextToInsert.documents = updateDocuments( - existingWorkflowRuntimeData.context.documents, - context.documents, - ); - } - - contextToInsert = await this.__copyFileAndCreate(contextToInsert, entityId); - const entityConnect = { [entityType]: { connect: { id: entityId }, }, }; - let workflowRuntimeData: WorkflowRuntimeData; + let workflowRuntimeData: WorkflowRuntimeData, newWorkflowCreated: boolean; - if (!existingWorkflowRuntimeData) { + if (!existingWorkflowRuntimeData || config?.allowMultipleActiveWorkflows) { + contextToInsert = await this.__copyFileAndCreate(contextToInsert, entityId); workflowRuntimeData = await this.workflowRuntimeDataRepository.create({ data: { ...entityConnect, @@ -659,7 +652,14 @@ export class WorkflowService { }, }, }); + newWorkflowCreated = true; } else { + contextToInsert.documents = updateDocuments( + existingWorkflowRuntimeData.context.documents, + context.documents, + ); + + contextToInsert = await this.__copyFileAndCreate(contextToInsert, entityId); workflowRuntimeData = await this.workflowRuntimeDataRepository.updateById( existingWorkflowRuntimeData.id, { @@ -673,12 +673,14 @@ export class WorkflowService { }, }, ); + newWorkflowCreated = false; } this.logger.log(existingWorkflowRuntimeData ? 'Workflow updated' : 'Workflow created', { workflowRuntimeDataId: workflowRuntimeData.id, entityId, entityType, + newWorkflowCreated, }); return [ @@ -689,6 +691,7 @@ export class WorkflowService { }, ]; } + private async __copyFileAndCreate( context: DefaultContextSchema, entityId: TEntityId, From 8899fcdab79519467473d4d7c5a6b681bc3a9f0d Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 18 Jun 2023 16:10:04 +0300 Subject: [PATCH 035/123] update pnpm lock --- pnpm-lock.yaml | 76 +++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0128bbb975..67adb8b653 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,10 +57,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.5 + specifier: ^0.4.6 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -592,7 +592,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../common json-logic-js: specifier: ^2.0.2 @@ -710,7 +710,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -828,10 +828,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../../packages/common '@ballerine/workflow-core': - specifier: ^0.4.12 + specifier: ^0.4.13 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -1064,7 +1064,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 @@ -1417,7 +1417,7 @@ importers: specifier: ^1.2.3 version: 1.2.3(@babel/core@7.21.4)(solid-js@1.7.3)(vite@3.2.5) '@ballerine/common': - specifier: 0.5.2 + specifier: 0.5.3 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 @@ -8684,11 +8684,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.34: - resolution: {integrity: sha512-5H2XCeEeKUTkG/4bbMD+xM3DWbIC+4DXwnd0aLN8BxHqjlWxD83m95i05eCZAZ+VlM40UocDvLeZYr1menrvZQ==} + /@storybook/channel-postmessage@7.1.0-alpha.36: + resolution: {integrity: sha512-KMMxBvufpHDySLnN7D72J6xxnKUlmVsUTVqcHpVBLMTWmZMaBRKaOHXIUnacr2cj0YTZ0mwldyhzDWNfOPdcnw==} dependencies: - '@storybook/channels': 7.1.0-alpha.34 - '@storybook/client-logger': 7.1.0-alpha.34 + '@storybook/channels': 7.1.0-alpha.36 + '@storybook/client-logger': 7.1.0-alpha.36 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -8712,11 +8712,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.34: - resolution: {integrity: sha512-lC8EwBYacTFEQ+tG0tyPfW/05XrsSt0+glAIBgAaDKggRLvdYUP6oukvsz0Zw6vDxSIJol6kF1WB0BTXb07Tig==} + /@storybook/channels@7.1.0-alpha.36: + resolution: {integrity: sha512-uP7HliEcfF3po/IDDPOWZ4xWc8v6TQZLnMLuZOlJLJNEQpaJJIw2YUuP85OLb6IZaPNUlvsq47d9d2/vOq4txQ==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.34 - '@storybook/core-events': 7.1.0-alpha.34 + '@storybook/client-logger': 7.1.0-alpha.36 + '@storybook/core-events': 7.1.0-alpha.36 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -8785,8 +8785,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.34: - resolution: {integrity: sha512-bb740Ex080V7/SgcxTVohO+aPFE0pHA4lkRAJEEKZkfluzBZrNTJzgT+THIdxHPux/EyKGHL2wS1wdREdcgfhw==} + /@storybook/client-logger@7.1.0-alpha.36: + resolution: {integrity: sha512-yzDNyiNroygmC4j1eL9MdApAo6SIvv0876eGVw/3o2H2IwQp1s3QP8AHTflz5db5s5HtTU6JpfYlzk3Ag95ARQ==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -8890,8 +8890,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.34: - resolution: {integrity: sha512-b9+2dm8kz7d1DzyhCjhgWAwbOSvKakI/Jcnp/ml4CEZhOTx77fHgfRxEPwxMc1g+xHM8YZGSLgAb857ShJwfEw==} + /@storybook/core-events@7.1.0-alpha.36: + resolution: {integrity: sha512-PPjJjMt5hqvRLxYa+KQRyzx1N3kiVVVacX36vXFrTBsvdH5Pdxx/hN/C9yVHX17wNO3Z4s9b9rfDyPkN5ZgrVA==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -9027,14 +9027,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.34: - resolution: {integrity: sha512-F4mZ0QOL/0p1EBhhRi8fRIiwl6ZJKnwc4sleQaut4tNukXwJArdiKMaa7dzBBPbrG446BTefnU72puqgMwjCAw==} + /@storybook/instrumenter@7.1.0-alpha.36: + resolution: {integrity: sha512-tNCcbL4AiKJXC/D65fpzQrBj6N+11ZrSNSCxeyWZ2+cC/ZMpAJBbJf2cdBzmsuXUTxsW4g9kRkQUrPC1p92DQQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.34 - '@storybook/client-logger': 7.1.0-alpha.34 - '@storybook/core-events': 7.1.0-alpha.34 + '@storybook/channels': 7.1.0-alpha.36 + '@storybook/client-logger': 7.1.0-alpha.36 + '@storybook/core-events': 7.1.0-alpha.36 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.34 + '@storybook/preview-api': 7.1.0-alpha.36 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -9103,16 +9103,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.34: - resolution: {integrity: sha512-oJeM+TM4Ma/2BtvPonvy6sxZwheLAFHbVhY+jO/L6SGuIJGVmCbxBh7k+LV4LbZR2RuXMMAFFOb7EjMrLcX+0A==} + /@storybook/preview-api@7.1.0-alpha.36: + resolution: {integrity: sha512-MnfoDUSkuIMcNw5K9YJYXqBSbPqwQw9gwz35/KTpotqP+2bG9UNiGh+6WoPr7soGpMAoPfdnXA6wD+n1BadibQ==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.34 - '@storybook/channels': 7.1.0-alpha.34 - '@storybook/client-logger': 7.1.0-alpha.34 - '@storybook/core-events': 7.1.0-alpha.34 + '@storybook/channel-postmessage': 7.1.0-alpha.36 + '@storybook/channels': 7.1.0-alpha.36 + '@storybook/client-logger': 7.1.0-alpha.36 + '@storybook/core-events': 7.1.0-alpha.36 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.34 + '@storybook/types': 7.1.0-alpha.36 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -9260,8 +9260,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.34 - '@storybook/instrumenter': 7.1.0-alpha.34 + '@storybook/client-logger': 7.1.0-alpha.36 + '@storybook/instrumenter': 7.1.0-alpha.36 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -9304,10 +9304,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.34: - resolution: {integrity: sha512-edgqqXNsk3DXknZt0oq8NlCxJK7vY4bpRSAevxUp35dvL/t9WodebyjUKeDBhh8wf9kZAOvtFZBou8NlA5flcg==} + /@storybook/types@7.1.0-alpha.36: + resolution: {integrity: sha512-fvY4jVe0McXa3DBBWc9EfXFDqdblDsY3IxH5p2m2s0RK5jv/QzMEb6MP4AZHwUyeLPoil4G7PYFkMakNMWHlgw==} dependencies: - '@storybook/channels': 7.1.0-alpha.34 + '@storybook/channels': 7.1.0-alpha.36 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 From 6b4dc4fb443ed07aa921fbe8b1a3694bd2b55fce Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 16:32:21 +0300 Subject: [PATCH 036/123] updated cookie secure to false for testing --- services/workflows-service/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 58bfc6899b..ad66e071a0 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -45,7 +45,7 @@ async function main() { keys: [env.SESSION_SECRET], httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, - secure: env.NODE_ENV === 'production', + secure: false, sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From 52e220cb621359639b6a59a02b795644e334c625 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 16:54:42 +0300 Subject: [PATCH 037/123] added secure proxy to cookie logic --- services/workflows-service/src/main.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index ad66e071a0..ab480ff630 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -45,7 +45,8 @@ async function main() { keys: [env.SESSION_SECRET], httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, - secure: false, + secure: env.NODE_ENV === 'production', + secureProxy: env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From b987c0d1cd5c47d09192e92b0020dc9759499ee3 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 17:25:12 +0300 Subject: [PATCH 038/123] added trust proxy key to app --- services/workflows-service/src/main.ts | 1 - services/workflows-websocket-service/src/main.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index ab480ff630..58bfc6899b 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -46,7 +46,6 @@ async function main() { httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, secure: env.NODE_ENV === 'production', - secureProxy: env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), diff --git a/services/workflows-websocket-service/src/main.ts b/services/workflows-websocket-service/src/main.ts index 8995cf40e6..0f92d9a91d 100644 --- a/services/workflows-websocket-service/src/main.ts +++ b/services/workflows-websocket-service/src/main.ts @@ -6,7 +6,7 @@ import { env } from '@/env'; async function main() { const app = await NestFactory.create(AppModule); app.useWebSocketAdapter(new WsAdapter(app)); - + app.set('trust proxy', 1); void app.listen(env.PORT); console.log(`Listening on port ${env.PORT}`); From d24467d0f1340504825c2945dfea55364c760d75 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 17:37:09 +0300 Subject: [PATCH 039/123] added trust proxy key to app --- services/workflows-service/src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 58bfc6899b..192d053b40 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -50,6 +50,7 @@ async function main() { maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), ); + app.getHttpAdapter().getInstance().set('trust proxy', 1); app.use((req: Request, res: Response, next: NextFunction) => { if (!req.session) return next(); From dd87e6e77bbae45653572362f29cd35189262a48 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 17:43:13 +0300 Subject: [PATCH 040/123] added trust proxy key to app --- services/workflows-websocket-service/src/main.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/services/workflows-websocket-service/src/main.ts b/services/workflows-websocket-service/src/main.ts index 0f92d9a91d..c8379f5595 100644 --- a/services/workflows-websocket-service/src/main.ts +++ b/services/workflows-websocket-service/src/main.ts @@ -6,7 +6,6 @@ import { env } from '@/env'; async function main() { const app = await NestFactory.create(AppModule); app.useWebSocketAdapter(new WsAdapter(app)); - app.set('trust proxy', 1); void app.listen(env.PORT); console.log(`Listening on port ${env.PORT}`); From 5c3f637eb44f61f601f998c1ff65bc24e4f7f150 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 18:13:54 +0300 Subject: [PATCH 041/123] reverted unnecessary changes --- services/workflows-service/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 192d053b40..6e43cc151d 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -50,7 +50,7 @@ async function main() { maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), ); - app.getHttpAdapter().getInstance().set('trust proxy', 1); + app.use((req: Request, res: Response, next: NextFunction) => { if (!req.session) return next(); From 6a3f87bedfc96afc587e593f2cee08a76e63bf77 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 18:16:59 +0300 Subject: [PATCH 042/123] reverted unnecessary changes --- services/workflows-service/src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 6e43cc151d..a8da844dde 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -46,6 +46,7 @@ async function main() { httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, secure: env.NODE_ENV === 'production', + secureProxy: env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From 73fd998540d6bf039e0e050c2c5ed5928fb309a2 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 18:17:28 +0300 Subject: [PATCH 043/123] added secureProxy --- services/workflows-service/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index a8da844dde..30401f2d75 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -45,8 +45,8 @@ async function main() { keys: [env.SESSION_SECRET], httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, - secure: env.NODE_ENV === 'production', secureProxy: env.NODE_ENV === 'production', + secure: env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From 428aa5fa8ed81732465b1b5639370633a7edfafc Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 18:43:35 +0300 Subject: [PATCH 044/123] removed secured of cookie --- services/workflows-service/src/main.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 30401f2d75..34fedca5c4 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -45,8 +45,6 @@ async function main() { keys: [env.SESSION_SECRET], httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, - secureProxy: env.NODE_ENV === 'production', - secure: env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From af68fe94965a99973c4697cd7ce2fad9a7e8269e Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 21:50:59 +0300 Subject: [PATCH 045/123] updated removed http only --- services/workflows-service/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 34fedca5c4..c00b5246e0 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -43,8 +43,8 @@ async function main() { cookieSession({ name: 'session', keys: [env.SESSION_SECRET], - httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, + secure: false, sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) }), From 31bb1b9c78c96698bbc067b90c5985cef6888a72 Mon Sep 17 00:00:00 2001 From: blokh <danielblokhi@gmail.com> Date: Sun, 18 Jun 2023 21:51:41 +0300 Subject: [PATCH 046/123] added secured false --- services/workflows-service/src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index c00b5246e0..0d3e97b412 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -43,6 +43,7 @@ async function main() { cookieSession({ name: 'session', keys: [env.SESSION_SECRET], + httpOnly: true, domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, secure: false, sameSite: 'strict', From ce8648e47b8236e236e073eed6f7842fcec09569 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 18 Jun 2023 22:04:48 +0300 Subject: [PATCH 047/123] remove cookie domaun --- services/workflows-service/src/main.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 0d3e97b412..91460fd2da 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -44,7 +44,6 @@ async function main() { name: 'session', keys: [env.SESSION_SECRET], httpOnly: true, - domain: env.NODE_ENV === 'production' ? '.ballerine.app' : undefined, secure: false, sameSite: 'strict', maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) From 94b1f48b61007260cad45b52172ebddce19b5f7b Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Mon, 19 Jun 2023 20:14:47 +0300 Subject: [PATCH 048/123] WIP - Headless example fix (#510) * feat(headless-example): checkpoint * feat(*): checkpoint * fix(workflows-service): fixed wrong destination on diskStorage * fix(workflows-service): fixed de-sync between external uploadFile and internal affected the fileNameOnDisk property * fix(*): fixed headless-example file upload flow * fix(headless-example): updated the name of the mock certificate of incorporation pdf file * feat(headless-example): now using the workflow document decisions for rejected/approved/revisions * refactor(headless-example): updated the condition for displaying re-submission ui * refactor(headless-example): replaced header auth with api key auth for the headless example * Apply filters on workflows instead of entity (#496) * feat(backoffice-v2): added react-router-dom * feat(backoffice-v2): added a react router provider * feat(backoffice-v2): re-added redirect to en locale * feat(backoffice-v2): re-added root error component * feat(backoffice-v2): the root route now uses the Root component * feat(backoffice-v2): added the locale route * feat(backoffice-v2): added the case management route * feat(backoffice-v2): added the sign in route * feat(backoffice-v2): added entities route and replaced imports of tanstack router * feat(backoffice-v2): added the entity by id route and refactored its loader * feat(backoffice-v2): wip work on search query params * refactor(backoffice-v2): removed tanstack router * feat(backoffice-v2): handling null values in search params and default filters * fix(backoffice-v2): it is now possible to remove filters with a catch clause * refactor(backoffice-v2): moved loaders to separate files * fix(backoffice-v2): fixed sign out redirect * refactor(backoffice-v2): moved locale component to the locale directory * fix(backoffice-v2): no longer encoding the url * fix(backoffice-v2): filters no longer revert to defaults when all filters are unselected * feat: implement backend * fix(backoffice-v2): fixes default search query params returning when unchecking filters solved by adding a placeholder for null and empty arrays for qs * fix(backoffice-v2): reduced padding on case list item - solves axis x overflow * refactor(backoffice-v2): refactored routes to pages * docs(backoffice-v2): added comments to the stringify/parse search params functions * feat: refactor completed * fix: pr fixes * fix: pr fixes * fix: tests * fix: pr comments --------- Co-authored-by: Omri Levy <omri.levy0197@gmail.com> * fix(useEntity): make actions disabled when there is a decision status * feat: split workflows endpoint into two * refactor(headless-example): improved flow behavior and added clear user button * feat: support sorting * fix: pr review * Cases pagination (#509) * fix(useEntity): make actions disabled when there is a decision status * feat: split workflows endpoint into two * feat: support sorting * fix: pr review * feat: pagination * fix: remove filterName * feat: client pagination * feat: backend pagination * feat: search * fix: code review * added watch for form * feat: finalized update form of category type * removed log * added test env ci * feat(added usewatchdropdown logic for category to type logic): added usewatchdropdown added usewatchdropdown logic for category to type logic * added test env ci * updated compose to edit naming * fix: document id as uuid * fixed test * fix(workflows-service): added optional chaining to properties which previously resolved to null * feat(merged with dev): merged with dev merged with dev + fixed conflicts + updated code after format changes * fix(*): can now see the re-submit ui and re-upload documents * updated use initial category set * added types to uniqueArrayByKey * fixed entries to document * minor refactoring * updated common version * fix(backoffice-v2): no longer rendering an empty block if there's no entity data * fix(*): now displaying the entity data when uploading docs from the headless example * feat(backoffice-v2): fixed the size of the navbar checkboxes * feat(*): checkpoint * fix(headless-example): fixed mock photos' names and removed the type field - broke dropdowns * fix(backoffice-v2): fixed document category initilizing with undefined * revert(backoffice-v2): reverted the changes to useInitialSetCategory * fix(backoffice-v2): fixed errors from the devtools logs due to wrong placement of controller shadcn select form controller placement * fix(backoffice-v2): fixed useWatchDropdownOptions no longer overrides document type to "undefined" * fix(seed.ts): updated seed.ts so information shows and is editable for the example * fix(*): fixed useUpdateWorkflowByIdMutation previously used the wrong query keys and updated data wrong * fix(*): no longer returning an empty function to appease eslint * fix(remove-ansi-escape-codes.ts): added eslint ignore for no-control-regex - makes sense here * refactor(workflows-service): moved assignIdToDocuments into the repository level for create moved to updateWorkflowRuntimeData for update * fix(setformdata): removed redundant useState * Fix E2E flow for headless example (affects backoffice, workflows service, and headless example) (#548) * feat(headless-example): checkpoint * feat(*): checkpoint * fix(workflows-service): fixed wrong destination on diskStorage * fix(workflows-service): fixed de-sync between external uploadFile and internal affected the fileNameOnDisk property * fix(*): fixed headless-example file upload flow * fix(headless-example): updated the name of the mock certificate of incorporation pdf file * feat(headless-example): now using the workflow document decisions for rejected/approved/revisions * refactor(headless-example): updated the condition for displaying re-submission ui * refactor(headless-example): replaced header auth with api key auth for the headless example * refactor(headless-example): improved flow behavior and added clear user button * feat(vite.config.ts): added sourcemaps * update common * fix(*): can now see the re-submit ui and re-upload documents * Blokh/fix/refactor update category (#517) * added watch for form * feat: finalized update form of category type * removed log * feat(added usewatchdropdown logic for category to type logic): added usewatchdropdown added usewatchdropdown logic for category to type logic * updated compose to edit naming * feat(merged with dev): merged with dev merged with dev + fixed conflicts + updated code after format changes * updated use initial category set * added types to uniqueArrayByKey * fixed entries to document * minor refactoring * updated common version * added find value * Blokh/feat/test infra (#500) * feat(database-infra): generated infra for test creations ( test & nest ) generate database infra for test creations, generated test for end-user in order to test the test-infra * feat: generated global setup and teardown * updated DATABASE_SCHEMA_NAME using zod * fixed comments * removed unnecessary actions and docker compose * updated lock * feat: running foramt * updated DB_CONTAINER type * feat(added testglobal): added TestGlobal * updated pnpm lock * feat: added TESTCONTAINERS_RYUK_DISABLED true * ran commitlint * removed unnecessary wawait * removed test using windows * updated test runnign strategy * removed windows test as it does not support db request * feat(added support for unit test ing test and e2e test): added support for unit test added support for unit test, integration test and e2e test * added different ci for ubuntu and windows * updated commons * removed unit test from browser sdk * removed unit test from workflow * fixed package json * removed unit test from node-sdk * added crossenv * merged with dev * fixed enduser test * reverted removal of unittest * ran format * updated nx json * added unit test for workflow core * fixed nx json * fixed duplicated tests configuration on nx * reverted remoival of lint * merged with dev * feat: added handling of prisma validation errors to workflow controller (#511) * feat: added handling of prisma validation errors to workflow /run controller * feat: moved prisma validation filter to global level * feat: implemented prisma validation errors parser & added parse output to filter * feat: added handling of unknown arguments exceptions from prisma * feat: added ansi codes removal from exception * use clean ansi fn --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> * fix(backoffice-v2): no longer rendering an empty block if there's no entity data * fix(*): now displaying the entity data when uploading docs from the headless example * feat(backoffice-v2): fixed the size of the navbar checkboxes * feat(*): checkpoint * add kyb w/ external request (#541) * feat(examples-kyb): kyb example w/ external request * feat(examples-kyb): kyb example w/ external request * fix(headless-example): fixed mock photos' names and removed the type field - broke dropdowns * fix(backoffice-v2): fixed document category initilizing with undefined * revert(backoffice-v2): reverted the changes to useInitialSetCategory * fix(backoffice-v2): fixed errors from the devtools logs due to wrong placement of controller shadcn select form controller placement * fix(backoffice-v2): fixed useWatchDropdownOptions no longer overrides document type to "undefined" * fix(backoffice-v2): fixed document type resetting to "undefined" * fix(*): no longer using hardcoded propertiesSchema * update common lib * feat(workflow-def): enable mulitple active workflows * update pnpm lock * fix(seed.ts): updated seed.ts so information shows and is editable for the example * updated cookie secure to false for testing * added secure proxy to cookie logic * added trust proxy key to app * added trust proxy key to app * added trust proxy key to app * reverted unnecessary changes * reverted unnecessary changes * added secureProxy * removed secured of cookie * updated removed http only * added secured false * remove cookie domaun * fix(*): fixed useUpdateWorkflowByIdMutation previously used the wrong query keys and updated data wrong * fix(*): no longer returning an empty function to appease eslint * fix(remove-ansi-escape-codes.ts): added eslint ignore for no-control-regex - makes sense here * refactor(workflows-service): moved assignIdToDocuments into the repository level for create moved to updateWorkflowRuntimeData for update * fix(setformdata): removed redundant useState --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Co-authored-by: Ilya Rudnev <cheskmr@gmail.com> Co-authored-by: blokh <danielblokhi@gmail.com> * refactor(backoffice-v2): made the parentMachine object have a default of an empty object creating workflows from the api will no longer fail if no parentMachine was specified * revert(backoffice-v2): reverted mistakenly workflow by id schema was removed * Fix workflow by id zod schema on test (#550) * feat(headless-example): checkpoint * feat(*): checkpoint * fix(workflows-service): fixed wrong destination on diskStorage * fix(workflows-service): fixed de-sync between external uploadFile and internal affected the fileNameOnDisk property * fix(*): fixed headless-example file upload flow * fix(headless-example): updated the name of the mock certificate of incorporation pdf file * feat(headless-example): now using the workflow document decisions for rejected/approved/revisions * refactor(headless-example): updated the condition for displaying re-submission ui * refactor(headless-example): replaced header auth with api key auth for the headless example * refactor(headless-example): improved flow behavior and added clear user button * feat(vite.config.ts): added sourcemaps * update common * fix(*): can now see the re-submit ui and re-upload documents * Blokh/fix/refactor update category (#517) * added watch for form * feat: finalized update form of category type * removed log * feat(added usewatchdropdown logic for category to type logic): added usewatchdropdown added usewatchdropdown logic for category to type logic * updated compose to edit naming * feat(merged with dev): merged with dev merged with dev + fixed conflicts + updated code after format changes * updated use initial category set * added types to uniqueArrayByKey * fixed entries to document * minor refactoring * updated common version * added find value * Blokh/feat/test infra (#500) * feat(database-infra): generated infra for test creations ( test & nest ) generate database infra for test creations, generated test for end-user in order to test the test-infra * feat: generated global setup and teardown * updated DATABASE_SCHEMA_NAME using zod * fixed comments * removed unnecessary actions and docker compose * updated lock * feat: running foramt * updated DB_CONTAINER type * feat(added testglobal): added TestGlobal * updated pnpm lock * feat: added TESTCONTAINERS_RYUK_DISABLED true * ran commitlint * removed unnecessary wawait * removed test using windows * updated test runnign strategy * removed windows test as it does not support db request * feat(added support for unit test ing test and e2e test): added support for unit test added support for unit test, integration test and e2e test * added different ci for ubuntu and windows * updated commons * removed unit test from browser sdk * removed unit test from workflow * fixed package json * removed unit test from node-sdk * added crossenv * merged with dev * fixed enduser test * reverted removal of unittest * ran format * updated nx json * added unit test for workflow core * fixed nx json * fixed duplicated tests configuration on nx * reverted remoival of lint * merged with dev * feat: added handling of prisma validation errors to workflow controller (#511) * feat: added handling of prisma validation errors to workflow /run controller * feat: moved prisma validation filter to global level * feat: implemented prisma validation errors parser & added parse output to filter * feat: added handling of unknown arguments exceptions from prisma * feat: added ansi codes removal from exception * use clean ansi fn --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> * fix(backoffice-v2): no longer rendering an empty block if there's no entity data * fix(*): now displaying the entity data when uploading docs from the headless example * feat(backoffice-v2): fixed the size of the navbar checkboxes * feat(*): checkpoint * add kyb w/ external request (#541) * feat(examples-kyb): kyb example w/ external request * feat(examples-kyb): kyb example w/ external request * fix(headless-example): fixed mock photos' names and removed the type field - broke dropdowns * fix(backoffice-v2): fixed document category initilizing with undefined * revert(backoffice-v2): reverted the changes to useInitialSetCategory * fix(backoffice-v2): fixed errors from the devtools logs due to wrong placement of controller shadcn select form controller placement * fix(backoffice-v2): fixed useWatchDropdownOptions no longer overrides document type to "undefined" * fix(backoffice-v2): fixed document type resetting to "undefined" * fix(*): no longer using hardcoded propertiesSchema * update common lib * feat(workflow-def): enable mulitple active workflows * update pnpm lock * fix(seed.ts): updated seed.ts so information shows and is editable for the example * updated cookie secure to false for testing * added secure proxy to cookie logic * added trust proxy key to app * added trust proxy key to app * added trust proxy key to app * reverted unnecessary changes * reverted unnecessary changes * added secureProxy * removed secured of cookie * updated removed http only * added secured false * remove cookie domaun * fix(*): fixed useUpdateWorkflowByIdMutation previously used the wrong query keys and updated data wrong * fix(*): no longer returning an empty function to appease eslint * fix(remove-ansi-escape-codes.ts): added eslint ignore for no-control-regex - makes sense here * refactor(workflows-service): moved assignIdToDocuments into the repository level for create moved to updateWorkflowRuntimeData for update * fix(setformdata): removed redundant useState * refactor(backoffice-v2): made the parentMachine object have a default of an empty object creating workflows from the api will no longer fail if no parentMachine was specified * revert(backoffice-v2): reverted mistakenly workflow by id schema was removed --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Co-authored-by: Ilya Rudnev <cheskmr@gmail.com> Co-authored-by: blokh <danielblokhi@gmail.com> * refactor(backoffice-v2): replaced default with optional for parentMachine validation * Omri levy/fix/fix headless example (#551) * feat(headless-example): checkpoint * feat(*): checkpoint * fix(workflows-service): fixed wrong destination on diskStorage * fix(workflows-service): fixed de-sync between external uploadFile and internal affected the fileNameOnDisk property * fix(*): fixed headless-example file upload flow * fix(headless-example): updated the name of the mock certificate of incorporation pdf file * feat(headless-example): now using the workflow document decisions for rejected/approved/revisions * refactor(headless-example): updated the condition for displaying re-submission ui * refactor(headless-example): replaced header auth with api key auth for the headless example * refactor(headless-example): improved flow behavior and added clear user button * feat(vite.config.ts): added sourcemaps * update common * fix(*): can now see the re-submit ui and re-upload documents * Blokh/fix/refactor update category (#517) * added watch for form * feat: finalized update form of category type * removed log * feat(added usewatchdropdown logic for category to type logic): added usewatchdropdown added usewatchdropdown logic for category to type logic * updated compose to edit naming * feat(merged with dev): merged with dev merged with dev + fixed conflicts + updated code after format changes * updated use initial category set * added types to uniqueArrayByKey * fixed entries to document * minor refactoring * updated common version * added find value * Blokh/feat/test infra (#500) * feat(database-infra): generated infra for test creations ( test & nest ) generate database infra for test creations, generated test for end-user in order to test the test-infra * feat: generated global setup and teardown * updated DATABASE_SCHEMA_NAME using zod * fixed comments * removed unnecessary actions and docker compose * updated lock * feat: running foramt * updated DB_CONTAINER type * feat(added testglobal): added TestGlobal * updated pnpm lock * feat: added TESTCONTAINERS_RYUK_DISABLED true * ran commitlint * removed unnecessary wawait * removed test using windows * updated test runnign strategy * removed windows test as it does not support db request * feat(added support for unit test ing test and e2e test): added support for unit test added support for unit test, integration test and e2e test * added different ci for ubuntu and windows * updated commons * removed unit test from browser sdk * removed unit test from workflow * fixed package json * removed unit test from node-sdk * added crossenv * merged with dev * fixed enduser test * reverted removal of unittest * ran format * updated nx json * added unit test for workflow core * fixed nx json * fixed duplicated tests configuration on nx * reverted remoival of lint * merged with dev * feat: added handling of prisma validation errors to workflow controller (#511) * feat: added handling of prisma validation errors to workflow /run controller * feat: moved prisma validation filter to global level * feat: implemented prisma validation errors parser & added parse output to filter * feat: added handling of unknown arguments exceptions from prisma * feat: added ansi codes removal from exception * use clean ansi fn --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> * fix(backoffice-v2): no longer rendering an empty block if there's no entity data * fix(*): now displaying the entity data when uploading docs from the headless example * feat(backoffice-v2): fixed the size of the navbar checkboxes * feat(*): checkpoint * add kyb w/ external request (#541) * feat(examples-kyb): kyb example w/ external request * feat(examples-kyb): kyb example w/ external request * fix(headless-example): fixed mock photos' names and removed the type field - broke dropdowns * fix(backoffice-v2): fixed document category initilizing with undefined * revert(backoffice-v2): reverted the changes to useInitialSetCategory * fix(backoffice-v2): fixed errors from the devtools logs due to wrong placement of controller shadcn select form controller placement * fix(backoffice-v2): fixed useWatchDropdownOptions no longer overrides document type to "undefined" * fix(backoffice-v2): fixed document type resetting to "undefined" * fix(*): no longer using hardcoded propertiesSchema * update common lib * feat(workflow-def): enable mulitple active workflows * update pnpm lock * fix(seed.ts): updated seed.ts so information shows and is editable for the example * updated cookie secure to false for testing * added secure proxy to cookie logic * added trust proxy key to app * added trust proxy key to app * added trust proxy key to app * reverted unnecessary changes * reverted unnecessary changes * added secureProxy * removed secured of cookie * updated removed http only * added secured false * remove cookie domaun * fix(*): fixed useUpdateWorkflowByIdMutation previously used the wrong query keys and updated data wrong * fix(*): no longer returning an empty function to appease eslint * fix(remove-ansi-escape-codes.ts): added eslint ignore for no-control-regex - makes sense here * refactor(workflows-service): moved assignIdToDocuments into the repository level for create moved to updateWorkflowRuntimeData for update * fix(setformdata): removed redundant useState * refactor(backoffice-v2): made the parentMachine object have a default of an empty object creating workflows from the api will no longer fail if no parentMachine was specified * revert(backoffice-v2): reverted mistakenly workflow by id schema was removed * refactor(backoffice-v2): replaced default with optional for parentMachine validation --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Co-authored-by: Ilya Rudnev <cheskmr@gmail.com> Co-authored-by: blokh <danielblokhi@gmail.com> * feat(workflows-service): added parentMachine id to an instance of update by id --------- Co-authored-by: Matan Yadaev <matan.yed@gmail.com> Co-authored-by: blokh <danielblokhi@gmail.com> Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Co-authored-by: Ilya Rudnev <cheskmr@gmail.com> --- apps/backoffice-v2/package.json | 4 +- .../images/mock-documents/set_1_doc_pdf.pdf | Bin 0 -> 3028 bytes .../atoms/AssignButton/AssignButton.tsx | 2 +- .../molecules/DetailsGrid/DetailsGrid.tsx | 2 +- .../organisms/Header/Header.Navbar.tsx | 5 +- .../ImageViewer/ImageViewer.Item.tsx | 6 +- .../src/domains/workflows/fetchers.ts | 53 +- .../useUpdateWorkflowByIdMutation.tsx | 25 +- .../pages/Entities/components/Cases/Cases.tsx | 6 +- .../src/pages/Entity/Entity.page.tsx | 32 +- .../components/CallToAction/CallToAction.tsx | 42 +- .../Entity/components/Case/Case.Actions.tsx | 2 +- .../EditableDetails/EditableDetails.tsx | 93 +- .../Entity/hooks/useEntity/useEntity.tsx | 48 +- .../src/pages/SignIn/SignIn.page.tsx | 3 + examples/headless-example/package.json | 3 +- .../{mock-id.png => mock-id-photo-CA.png} | Bin ...tion.pdf => mock-incorporation-pdf-CA.pdf} | Bin ...ck-selfie.png => mock-selfie-photo-CA.png} | Bin .../src/components/App.svelte | 195 +- .../src/components/DocumentPhoto.svelte | 50 +- .../src/components/DocumentReview.svelte | 16 +- .../src/components/DocumentSelection.svelte | 27 +- .../src/components/Final.svelte | 2 - .../src/components/RemoteImage.svelte | 36 +- .../src/components/Resubmission.svelte | 5 +- .../src/components/Workflow.svelte | 113 +- examples/headless-example/src/constants.ts | 21 +- .../services/ballerine-backoffice.service.ts | 16 +- examples/headless-example/src/steps.ts | 23 + examples/headless-example/src/utils.ts | 126 +- .../workflow/documents/schemas/CA.ts | 127 + .../workflow/documents/schemas/index.ts | 2 + packages/rules-engine/src/lib/rule-engine.ts | 27 +- pnpm-lock.yaml | 9172 ++++++++++------- .../src/lib/workflow-browser-sdk.ts | 3 + services/workflows-service/scripts/seed.ts | 130 +- .../business/business.controller.external.ts | 3 + .../use-key-auth-in-dev-guard.decorator.ts | 11 + .../utils/remove-ansi-escape-codes.ts | 1 + .../end-user/end-user.controller.external.ts | 3 + .../events/document-changed-webhook-caller.ts | 19 +- .../storage/storage.controller.external.ts | 4 + .../src/workflow/assign-id-to-documents.ts | 6 +- .../src/workflow/dtos/intent.ts | 2 +- .../src/workflow/schemas/zod-schemas.ts | 3 +- .../src/workflow/update-documents.ts | 4 +- .../workflow-runtime-data.repository.ts | 14 +- .../workflow/workflow.controller.external.ts | 34 +- .../workflow.controller.external.unit.test.ts | 2 +- .../src/workflow/workflow.service.ts | 224 +- 51 files changed, 6722 insertions(+), 4025 deletions(-) create mode 100644 apps/backoffice-v2/public/images/mock-documents/set_1_doc_pdf.pdf rename examples/headless-example/public/{mock-id.png => mock-id-photo-CA.png} (100%) rename examples/headless-example/public/{mock-certificate-of-incorporation.pdf => mock-incorporation-pdf-CA.pdf} (100%) rename examples/headless-example/public/{mock-selfie.png => mock-selfie-photo-CA.png} (100%) create mode 100644 examples/headless-example/src/steps.ts create mode 100644 packages/common/src/schemas/documents/workflow/documents/schemas/CA.ts create mode 100644 services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index d290f0d229..b5057c3fa0 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -1,6 +1,6 @@ { "name": "@ballerine/backoffice-v2", - "version": "0.4.2", + "version": "0.4.4", "description": "Ballerine - Backoffice", "homepage": "https://github.com/ballerine-io/ballerine", "repository": { @@ -56,7 +56,7 @@ "@lukemorales/query-key-factory": "^1.0.3", "@radix-ui/react-checkbox": "^1.0.1", "@radix-ui/react-dialog": "^1.0.2", - "@radix-ui/react-dropdown-menu": "^2.0.4", + "@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-hover-card": "^1.0.2", "@radix-ui/react-label": "^2.0.1", "@radix-ui/react-scroll-area": "^1.0.2", diff --git a/apps/backoffice-v2/public/images/mock-documents/set_1_doc_pdf.pdf b/apps/backoffice-v2/public/images/mock-documents/set_1_doc_pdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dbf091df9a607221e000593a8b5a97b5ea5fb073 GIT binary patch literal 3028 zcmd5;+iK%D7``|79sZj_3mw^3d>n>>rft|$r=<<MES<SfV<qw6$ibGIc3yHX_6>Gl zWIx$CH11?D%do5oLHZ^AN9p^&qnnG-8;=ca>*%k)|M=6kY|A5;iigj(_3oW*IpgQ0 zB<Eackry+}uWOxWN>;?N?G}O?F~e-o&fdSbEveGxxNVs&T}_+wIC);wN|S3_`=^Ym z?y1Je_6W!5=Pa%0o_u4M!sh=Ibyb<wuc>O>E+wq5{dR6;Rn+AKku*_{3aqswkCH}v ztJ}FLi^-kT6dU1Mb|uqH42vhacOeZu&Rl#HCGFr-<G9kWS5dG#w@Z`}uKgtE7pZ1? zPM#b2WHM9fQi_Gi=1;aY9NU&L;!<g<F+#Ci9?^JeTS3GIQ2?`?GakeKIJK=~I-|R6 zvCJi*(lp92IH57BdkIZOTdTvvcIXHb#seG;<CukRywNe9XBFWms9K0Tr&KNq1;2#O z3Po(0PHAd1zv-nr^jYNk8{MDlO4GC`sjehtiu7F4uUV;Uk<*o&%!SG(73o?RWhU~9 z(N$4O((*|&I#Vev%(PEP0cTObH)cBu`b_&6;W3N-ZQi#2^-+Ilb04!_$l@gYW^6;` zPt8v0i}_xp?x1UZ?7BWn{B0?lQXJIRd$ot*08cAPw#7V@y4III`f%~x_&={(fH&(6 zzFoIYY?qHxHFuuTIY25?wM+?*a0wU&CNsu%;R0Yb;IYFRgO&d?OpM^t8cTP68eta` z!zlb7kk|!8-U~nWArXn5Z1X=Yi$z-jkJ0bw4&U>xBWM-|+e^~95C3kuyCa8Nz&=d3 zPw9GoO7mhx4-J@*eqI7o0NLmbm9D2#M#EZ@Dl~~|vk9Y>(382@*~jiaPA^4<R-Bg4 zeIV;_+WQ#xU52)~0nrvO88!Xp6s<4Mv__A6VPlL|g$s*C^r5DYnOJ3>vloGW^${BO z&|L0&$FyZ<jCKZ^u)F<+b97&+AtmV7cl87E4pL^QnFqlKvA}F(hC@-whPyaF$ox_2 zY$71NRFfh#>34q1)S0TXjiAeyzye;HJqPhX+oj`M@hIuz@m%ZWTgO?gR!qsqvQPqV zVBwTl{djT$Lm)?KJ&`!^p<Sm7S!FX-nZ-sM_`-$Il8!Ila@P&rfeW6)V;*A1J`H>- zB?yU29^x`|s{JSof<ZuLW&L?bmH9~RWC>_pN9Oqel#YyZFw~B0kRS*9GB0?&&kJAg z<34|7m-_(#cV8b5!0fg%+X9aQc`Db0`!4$;o1mTB0`JJMabTnKqnZ}rgzd~^$`C_Q S>NZV0@_bPEqs!}&ZT$n`rwj1_ literal 0 HcmV?d00001 diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index fe73954468..ce7d8cae80 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -56,7 +56,7 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ <DropdownMenuContent className={`min-w-[16rem]`} align={'start'}> {isUnassignEnabled ? ( <DropdownMenuItem - className={`border-b-2 text-cyan-950`} + className={`text-cyan-950 border-b-2`} onClick={() => onAssigneeSelect(null)} > Unassign diff --git a/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx b/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx index e90b245eb4..1c7482daca 100644 --- a/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx +++ b/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx @@ -31,7 +31,7 @@ export const DetailsGrid = <TRecord extends AnyRecord>({ <> <details open className={`group`}> <summary - className={`mb-6 inline-flex cursor-pointer list-none items-center gap-x-3 rounded-md p-1 pl-0 text-2xl font-bold focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary`} + className={`mb-6 inline-flex cursor-pointer list-none items-center gap-x-3 rounded-md p-1 pl-0 text-2xl font-bold focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline`} > <span className={ctw({ diff --git a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx index 14da329ab6..2a45ba77fe 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx @@ -59,7 +59,10 @@ export const Navbar: FunctionComponent = () => { 'bg-muted font-bold': id === searchParams?.filterId, })} > - <CheckSquare /> {name} + <span> + <CheckSquare className={`d-4`} /> + </span>{' '} + {name} </NavItem> ))} </ul> diff --git a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx index d9a9b90532..702ed85aa7 100644 --- a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx @@ -53,13 +53,13 @@ export const Item: FunctionComponent<IItemProps> = ({ src={src} className={ctw( ` - group-hover:outline group-hover:outline-2 group-hover:outline-primary + group-hover:outline group-focus:shadow - group-focus:outline group-focus:outline-2 - group-focus:outline-primary`, + group-focus:outline-primary + group-focus:outline`, imageClassName, )} alt={alt} diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index 0de3dfe28f..b846baedf5 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -47,6 +47,34 @@ export const fetchWorkflows = async (params: { return handleZodError(error, workflows); }; +export const WorkflowByIdSchema = z.object({ + id: z.string(), + status: z.string(), + nextEvents: z.array(z.any()), + workflowDefinition: ObjectWithIdSchema.extend({ + name: z.string(), + contextSchema: z.record(z.any(), z.any()).nullable(), + config: z.record(z.any(), z.any()).nullable(), + }), + createdAt: z.string().datetime(), + context: z.object({ + documents: z.array(z.any()), + entity: z.record(z.any(), z.any()), + parentMachine: ObjectWithIdSchema.extend({ + status: z.union([z.literal('active'), z.literal('failed'), z.literal('completed')]), + }).optional(), + }), + entity: ObjectWithIdSchema.extend({ + name: z.string(), + avatarUrl: z.string().nullable(), + approvalState: z.enum(States), + }), + assignee: ObjectWithIdSchema.extend({ + firstName: z.string(), + lastName: z.string(), + }).nullable(), +}); + export const fetchWorkflowById = async ({ workflowId, filterId, @@ -57,30 +85,7 @@ export const fetchWorkflowById = async ({ const [workflow, error] = await apiClient({ endpoint: `workflows/${workflowId}?filterId=${filterId}`, method: Method.GET, - schema: z.object({ - id: z.string(), - status: z.string(), - nextEvents: z.array(z.any()), - workflowDefinition: ObjectWithIdSchema.extend({ - name: z.string(), - contextSchema: z.record(z.any(), z.any()).nullable(), - config: z.record(z.any(), z.any()).nullable(), - }), - createdAt: z.string().datetime(), - context: z.object({ - documents: z.array(z.any()), - entity: z.record(z.any(), z.any()), - }), - entity: ObjectWithIdSchema.extend({ - name: z.string(), - avatarUrl: z.string().nullable(), - approvalState: z.enum(States), - }), - assignee: ObjectWithIdSchema.extend({ - firstName: z.string(), - lastName: z.string(), - }).nullable(), - }), + schema: WorkflowByIdSchema, }); return handleZodError(error, workflow); diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx index 07d4f11b71..ee60d89959 100644 --- a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx +++ b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation.tsx @@ -1,14 +1,15 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import toast from 'react-hot-toast'; import { t } from 'i18next'; -import { fetchUpdateWorkflowById } from '../../../fetchers'; -import { useWorkflowQuery } from '../../queries/useWorkflowQuery/useWorkflowQuery'; +import { fetchUpdateWorkflowById, WorkflowByIdSchema } from '../../../fetchers'; import { useFilterId } from '../../../../../common/hooks/useFilterId/useFilterId'; +import { workflowsQueryKeys } from '../../../query-keys'; +import { z } from 'zod'; export const useUpdateWorkflowByIdMutation = ({ workflowId }: { workflowId: string }) => { const queryClient = useQueryClient(); const filterId = useFilterId(); - const { data: workflowById } = useWorkflowQuery({ workflowId, filterId }); + const workflowById = workflowsQueryKeys.byId({ workflowId, filterId }); return useMutation({ mutationFn: ({ @@ -33,18 +34,18 @@ export const useUpdateWorkflowByIdMutation = ({ workflowId }: { workflowId: stri }); const previousWorkflow = queryClient.getQueryData(workflowById.queryKey); - queryClient.setQueryData(workflowById.queryKey, oldWorkflow => { - return { - ...oldWorkflow, - workflowRuntimeData: { - ...oldWorkflow?.workflowRuntimeData, + queryClient.setQueryData( + workflowById.queryKey, + (oldWorkflow: z.output<typeof WorkflowByIdSchema>) => { + return { + ...oldWorkflow, context: { - ...oldWorkflow?.workflowRuntimeData?.context, + ...oldWorkflow?.context, ...context, }, - }, - }; - }); + }; + }, + ); return { previousWorkflow }; }, diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 63c041bbb7..0d17300791 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -50,7 +50,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ return ( <div id={`cases-list`} {...props}> <div className={`border-neutral/10 p-4 theme-dark:border-neutral/60`}> - <div className="form-control mb-2 rounded-md border border-neutral/10 focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary theme-dark:border-neutral/60"> + <div className="form-control mb-2 rounded-md border border-neutral/10 focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary focus-within:outline theme-dark:border-neutral/60"> <div className="input-group"> <div className={`btn-ghost btn-square btn pointer-events-none`}> <MagnifyingGlassSvg className={`!d-5`} /> @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> + <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} @@ -111,7 +111,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div - className={`form-control rounded-md border border-neutral/10 focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary theme-dark:border-neutral/60`} + className={`form-control rounded-md border border-neutral/10 focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary focus-within:outline theme-dark:border-neutral/60`} > <div className={`input-group flex items-center`}> <button diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx index c691a25564..ccfe3f0e43 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx +++ b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx @@ -20,21 +20,25 @@ export const Entity = () => { <Case.Content key={selectedEntity?.id}> {Array.isArray(tasks) && tasks?.length > 0 && - tasks?.map((task, index) => ( - <Card key={index} className={`me-4`}> - <CardContent - className={ctw('grid gap-2', { - 'grid-cols-2': task?.some(field => field?.type === 'multiDocuments'), - })} - > - {task?.map((field, index) => { - const Cell = components[field?.type]; + tasks?.map((task, index) => { + if (!Array.isArray(task) || !task?.length) return; - return <Cell key={index} {...field} />; - })} - </CardContent> - </Card> - ))} + return ( + <Card key={index} className={`me-4`}> + <CardContent + className={ctw('grid gap-2', { + 'grid-cols-2': task?.some(field => field?.type === 'multiDocuments'), + })} + > + {task?.map((field, index) => { + const Cell = components[field?.type]; + + return <Cell key={index} {...field} />; + })} + </CardContent> + </Card> + ); + })} {!isLoading && !tasks?.length && ( <div className={`p-2`}> <h2 className={`mt-4 text-6xl`}>No tasks were found</h2> diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx index 042b1fe2b6..c1f98ab22e 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx @@ -29,6 +29,7 @@ import { SelectTrigger } from '../../../../common/components/atoms/Select/Select import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; +import { Input } from '../../../../common/components/atoms/Input/Input'; export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, data }) => { const { entityId } = useParams(); @@ -165,24 +166,31 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat reason for requesting a document re-submission. </DialogDescription> </DialogHeader> - <Select onValueChange={onRevisionReasonChange}> - <SelectTrigger className="w-full"> - <SelectValue placeholder="Re-submission reason" /> - </SelectTrigger> - <SelectContent> - {revisionReasons?.map(reason => { - const reasonWithSpace = reason.replace(/_/g, ' ').toLowerCase(); - const capitalizedReason = - reasonWithSpace.charAt(0).toUpperCase() + reasonWithSpace.slice(1); + {!revisionReasons?.length ? ( + <Input + placeholder={`Re-submission reason`} + onChange={event => onRevisionReasonChange(event.target.value)} + /> + ) : ( + <Select onValueChange={onRevisionReasonChange}> + <SelectTrigger className="w-full"> + <SelectValue placeholder="Re-submission reason" /> + </SelectTrigger> + <SelectContent> + {revisionReasons?.map(reason => { + const reasonWithSpace = reason.replace(/_/g, ' ').toLowerCase(); + const capitalizedReason = + reasonWithSpace.charAt(0).toUpperCase() + reasonWithSpace.slice(1); - return ( - <SelectItem key={reason} value={reason}> - {capitalizedReason} - </SelectItem> - ); - })} - </SelectContent> - </Select> + return ( + <SelectItem key={reason} value={reason}> + {capitalizedReason} + </SelectItem> + ); + })} + </SelectContent> + </Select> + )} <DialogFooter> <DialogClose asChild> <button diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 129ce91af5..88c66e4c3c 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -112,7 +112,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ </h2> </div> {showResolutionButtons && ( - <div className={`flex items-center space-x-6 pe-[3.35rem]`}> + <div className={`pe-[3.35rem] flex items-center space-x-6`}> <Button className={ctw({ // loading: debouncedIsLoadingRejectEntity, diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 4d481ef453..84016203c7 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -21,6 +21,14 @@ import { SelectValue } from '../../../../common/components/atoms/Select/Select.V import { Select } from '../../../../common/components/atoms/Select/Select'; import { useWatchDropdownOptions } from './hooks/useWatchDropdown'; +const useInitialCategorySetValue = ({ form, data }) => { + useEffect(() => { + const categoryValue = form.getValues('category'); + + form.setValue('category', categoryValue); + }, [form, data]); +}; + export const EditableDetails: FunctionComponent<IEditableDetails> = ({ data, valueId, @@ -30,9 +38,6 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ workflowId, }) => { const [formData, setFormData] = useState(data); - const { mutate: mutateUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ - workflowId, - }); const useInitialCategorySetValue = () => { useEffect(() => { const categoryValue = form.getValues('category'); @@ -41,16 +46,23 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ }; const POSITIVE_VALUE_INDICATOR = ['approved']; const NEGATIVE_VALUE_INDICATOR = ['revision', 'rejected']; - const isDecisionPositive = (isDecisionComponent: boolean, value) => { - return ( - isDecisionComponent && value && POSITIVE_VALUE_INDICATOR.includes(String(value).toLowerCase()) - ); + const isDecisionPositive = (isDecisionComponent: boolean, value: string) => { + return isDecisionComponent && value && POSITIVE_VALUE_INDICATOR.includes(value.toLowerCase()); }; - const isDecisionNegative = (isDecisionComponent: boolean, value) => { - return ( - isDecisionComponent && value && NEGATIVE_VALUE_INDICATOR.includes(String(value).toLowerCase()) - ); + const isDecisionNegative = (isDecisionComponent: boolean, value: string) => { + return isDecisionComponent && value && NEGATIVE_VALUE_INDICATOR.includes(value.toLowerCase()); }; + const defaultValues = formData?.reduce((acc, curr) => { + acc[curr.title] = curr.value; + + return acc; + }, {}); + const form = useForm({ + defaultValues, + }); + const { mutate: mutateUpdateWorkflowById } = useUpdateWorkflowByIdMutation({ + workflowId, + }); const onMutateTaskDecisionById = ({ context, action, @@ -62,14 +74,6 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ context, action, }); - const defaultValues = data?.reduce((acc, curr) => { - acc[curr.title] = curr.value; - - return acc; - }, {}); - const form = useForm({ - defaultValues, - }); const onSubmit: SubmitHandler<Record<PropertyKey, unknown>> = formData => { const context = { documents: documents?.map(document => { @@ -102,7 +106,10 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ const isDecisionComponent = title === 'Decision'; useWatchDropdownOptions({ form, data, setFormData }); - useInitialCategorySetValue(); + useInitialCategorySetValue({ + form, + data, + }); return ( <Form {...form}> @@ -122,27 +129,29 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ render={({ field }) => ( <FormItem> <FormLabel>{toStartCase(camelCaseToSpace(title))}</FormLabel> - <FormControl> - {dropdownOptions ? ( - <Select - disabled={!isEditable} - onValueChange={field.onChange} - defaultValue={field.value} - > + {dropdownOptions ? ( + <Select + disabled={!isEditable} + onValueChange={field.onChange} + defaultValue={field.value} + > + <FormControl> <SelectTrigger className="w-full"> <SelectValue /> </SelectTrigger> - <SelectContent> - {dropdownOptions?.map(({ label, value }) => { - return ( - <SelectItem key={value} value={value}> - {label} - </SelectItem> - ); - })} - </SelectContent> - </Select> - ) : ( + </FormControl> + <SelectContent> + {dropdownOptions?.map(({ label, value }) => { + return ( + <SelectItem key={value} value={value}> + {label} + </SelectItem> + ); + })} + </SelectContent> + </Select> + ) : ( + <FormControl> <Input type={!format ? (type === 'string' ? 'text' : type) : format} disabled={!isEditable} @@ -151,11 +160,11 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ { 'font-bold text-success': isDecisionPositive( isDecisionComponent, - value, + field.value, ), 'font-bold text-destructive': isDecisionNegative( isDecisionComponent, - value, + field.value, ), }, )} @@ -163,8 +172,8 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ autoComplete={'off'} {...field} /> - )} - </FormControl> + </FormControl> + )} <FormMessage /> </FormItem> )} diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index a22ce803e4..fdaf986e53 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -38,7 +38,6 @@ export const useEntity = () => { const selectedEntity = workflow.entity; const issuerCountryCode = extractCountryCodeFromWorkflow(workflow); const documentsSchemas = !!issuerCountryCode && getDocumentsByCountry(issuerCountryCode); - const octetToFileType = (base64: string, fileType: string) => base64?.replace(/application\/octet-stream/gi, fileType); const { data: session } = useAuthenticatedUserQuery(); @@ -55,6 +54,9 @@ export const useEntity = () => { const additionProperties = isExistingSchemaForDocument(documentsSchemas) && composePickableCategoryType(category, docType, documentsSchemas); + const isDoneWithRevision = + decision?.status === 'revision' && + workflow?.context?.parentMachine?.status === 'completed'; return [ { @@ -76,7 +78,7 @@ export const useEntity = () => { value: 'Reject', data: { id, - disabled: Boolean(decision?.status), + disabled: !isDoneWithRevision && Boolean(decision?.status), approvalStatus: 'rejected', }, }, @@ -85,7 +87,7 @@ export const useEntity = () => { value: 'Approve', data: { id, - disabled: Boolean(decision?.status), + disabled: !isDoneWithRevision && Boolean(decision?.status), approvalStatus: 'approved', }, }, @@ -161,24 +163,28 @@ export const useEntity = () => { ]; }, ) ?? []), - [ - { - id: 'entity-details', - type: 'details', - value: { - title: `${toStartCase(contextEntity?.type)} Information`, - data: [ - ...Object.entries(omitPropsFromObject(contextEntity?.data, 'additionalInfo') ?? {}), - ...Object.entries(contextEntity?.data?.additionalInfo ?? {}), - ]?.map(([title, value]) => ({ - title, - value, - type: 'string', - isEditable: false, - })), - }, - }, - ], + Object.keys(contextEntity?.data ?? {}).length === 0 + ? [] + : [ + { + id: 'entity-details', + type: 'details', + value: { + title: `${toStartCase(contextEntity?.type)} Information`, + data: [ + ...Object.entries( + omitPropsFromObject(contextEntity?.data, 'additionalInfo') ?? {}, + ), + ...Object.entries(contextEntity?.data?.additionalInfo ?? {}), + ]?.map(([title, value]) => ({ + title, + value, + type: 'string', + isEditable: false, + })), + }, + }, + ], ] : []; diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 0a77a7a600..6bab0f2c6f 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -56,6 +56,9 @@ export const SignIn: FunctionComponent = () => { }, }); + // Handles a flash of content on sign in + if (isAuthenticated) return null; + return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 9d1abfdc33..1539ed3400 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -28,7 +28,8 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/workflow-browser-sdk": "^0.4.2", + "@ballerine/common": "0.5.2", + "@ballerine/workflow-browser-sdk": "^0.4.3", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", "@fontsource/inter": "^4.5.15", diff --git a/examples/headless-example/public/mock-id.png b/examples/headless-example/public/mock-id-photo-CA.png similarity index 100% rename from examples/headless-example/public/mock-id.png rename to examples/headless-example/public/mock-id-photo-CA.png diff --git a/examples/headless-example/public/mock-certificate-of-incorporation.pdf b/examples/headless-example/public/mock-incorporation-pdf-CA.pdf similarity index 100% rename from examples/headless-example/public/mock-certificate-of-incorporation.pdf rename to examples/headless-example/public/mock-incorporation-pdf-CA.pdf diff --git a/examples/headless-example/public/mock-selfie.png b/examples/headless-example/public/mock-selfie-photo-CA.png similarity index 100% rename from examples/headless-example/public/mock-selfie.png rename to examples/headless-example/public/mock-selfie-photo-CA.png diff --git a/examples/headless-example/src/components/App.svelte b/examples/headless-example/src/components/App.svelte index 089541fb07..0ffd3c8e69 100644 --- a/examples/headless-example/src/components/App.svelte +++ b/examples/headless-example/src/components/App.svelte @@ -9,7 +9,7 @@ import { makeWorkflow } from '@/utils'; import SignUp from './SignUp.svelte'; import Workflow from './Workflow.svelte'; - import { NO_AUTH_USER_KEY } from '@/constants'; + import { ENTITY_ID_STORAGE_KEY } from '@/constants'; import { writable } from 'svelte/store'; import Approved from '@/components/Approved.svelte'; import Rejected from '@/components/Rejected.svelte'; @@ -19,7 +19,14 @@ import { BallerineBackOfficeService } from '@/services/ballerine-backoffice.service'; import DevSidebar from '@/visualiser/dev-sidebar.svelte'; - let noAuthUserId = sessionStorage.getItem(NO_AUTH_USER_KEY); + let entityId = sessionStorage.getItem(ENTITY_ID_STORAGE_KEY); + let nextWorkflow; + let shouldResubmit = false; + let documentsDecisionStatuses; + let isDecided; + let isApproved; + let isRejected; + let isRevision; const { fetchEndUser, @@ -37,30 +44,36 @@ queryFn: async () => import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? fetchEndUser(id) : fetchBusiness(id), onSuccess(data) { - const cached = sessionStorage.getItem(NO_AUTH_USER_KEY); + const cached = sessionStorage.getItem(ENTITY_ID_STORAGE_KEY); if ((cached && cached === data?.id) || !data?.id) return; - noAuthUserId = data?.id; - sessionStorage.setItem(NO_AUTH_USER_KEY, noAuthUserId); + entityId = data?.id; + sessionStorage.setItem(ENTITY_ID_STORAGE_KEY, entityId); }, onError(error) { if (error.message !== 'Not Found (404)') { throw error; } - sessionStorage.removeItem(NO_AUTH_USER_KEY); - noAuthUserId = undefined; + sessionStorage.removeItem(ENTITY_ID_STORAGE_KEY); + entityId = undefined; }, enabled: typeof id === 'string' && id.length > 0, }); + const entityType = + import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? 'end-user' : ('business' as const); const createWorkflowsQuery = ( options: CreateQueryOptions<Awaited<ReturnType<typeof fetchWorkflows>>> = {}, ) => createQuery({ - queryKey: ['workflows'], - queryFn: fetchWorkflows, - enabled: typeof noAuthUserId === 'string' && noAuthUserId.length > 0, + queryKey: ['workflows', { entityType, entityId }], + queryFn: () => + fetchWorkflows({ + entityType, + entityId, + }), + enabled: typeof entityId === 'string' && entityId.length > 0, ...options, }); const createIntentQuery = () => @@ -79,15 +92,32 @@ createWorkflowsQuery({ select: workflows => { return Array.isArray(workflows) - ? workflows?.find( - workflow => workflow?.workflowDefinition?.name === import.meta.env.VITE_EXAMPLE_TYPE, - ) + ? workflows + ?.slice() + ?.sort((a, b) => { + if ( + a?.workflowRuntimeData?.status === 'active' && + b?.workflowRuntimeData?.status !== 'active' + ) + return -1; + if ( + b?.workflowRuntimeData?.status === 'active' && + a?.workflowRuntimeData?.status !== 'active' + ) + return 1; + + return 0; + }) + ?.find( + workflow => + workflow?.workflowDefinition?.name === import.meta.env.VITE_EXAMPLE_TYPE, + ) : undefined; }, }); const createWorkflowQuery = (id: string) => createQuery({ - queryKey: ['workflows', { id }], + queryKey: ['workflows', { id, entityType, entityId }], queryFn: async () => { const data = await fetchWorkflow(id); @@ -97,8 +127,9 @@ }, refetchInterval(data) { if ( - entityState === 'REJECTED' || - entityState === 'APPROVED' || + isRejected || + isApproved || + data?.workflowRuntimeData?.status === 'active' || (entityState === 'NEW' && data?.workflowRuntimeData?.status === 'created') || (isProcessing && data?.workflowRuntimeData?.status !== 'completed') ) { @@ -107,7 +138,7 @@ return parseInt(import.meta.env.VITE_POLLING_INTERVAL) * 1000 || false; }, - enabled: typeof id === 'string' && id.length > 0, + enabled: typeof id === 'string' && id.length > 0 && !!entityType && !!entityId, }); const queryClient = useQueryClient(); const createSignUpMutation = () => @@ -115,12 +146,12 @@ mutationFn: import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? fetchEnduserSignUp : fetchBusinessSignUp, onSuccess: data => { - sessionStorage.setItem(NO_AUTH_USER_KEY, data?.id); - noAuthUserId = data?.id; + sessionStorage.setItem(ENTITY_ID_STORAGE_KEY, data?.id); + entityId = data?.id; queryClient.invalidateQueries(); }, }); - $: entityQuery = createEntityQuery(noAuthUserId); + $: entityQuery = createEntityQuery(entityId); const firstWorkflowQuery = createFirstWorkflowQuery(); $: workflowQuery = createWorkflowQuery($firstWorkflowQuery?.data?.workflowRuntimeData?.id); const intentQuery = createIntentQuery(); @@ -151,7 +182,12 @@ }); const onSubmit = import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? onSubmitEnduser : onSubmitBusiness; - + const clearUser = () => { + sessionStorage.removeItem(ENTITY_ID_STORAGE_KEY); + entityId = undefined; + workflow.set(undefined); + queryClient.invalidateQueries(); + }; const workflow = writable<WorkflowOptionsBrowser | undefined>(); const debugWf = writable<{ definition: unknown }>(); @@ -174,92 +210,113 @@ const mergeWorkflow = () => makeWorkflow($workflowQuery?.data || $intentQuery?.data); const handleResubmit = () => { workflow.set(mergeWorkflow()); + shouldResubmit = false; + }; + const handleNextWorkflow = ({ + entityQueryId, + workflowQueryDefinition, + intentQueryDefinition, + workflowDefinitionInitial, + }: { + entityQueryId: string; + workflowQueryDefinition: Record<string, unknown>; + intentQueryDefinition: Record<string, unknown>; + workflowDefinitionInitial: string; + }) => { + if (!entityQueryId || (!workflowQueryDefinition && !intentQueryDefinition)) { + workflow.set(undefined); + shouldResubmit = false; + + return; + } + + nextWorkflow = mergeWorkflow(); + + if ( + nextWorkflow?.definition?.initial !== workflowDefinitionInitial && + nextWorkflow?.definition?.context?.documents?.some( + ({ decision }) => decision?.status === 'revision', + ) + ) { + shouldResubmit = true; + + return; + } + + workflow.set(nextWorkflow); + shouldResubmit = false; }; - let nextWorkflow; - let shouldResubmit = false; $: isCompleted = $workflowQuery.data?.workflowRuntimeData?.status === 'completed'; - $: entityId = $entityQuery.data?.id; $: entityState = $entityQuery.data?.approvalState; $: isProcessing = entityState === 'PROCESSING'; - $: isValidWorkflow = entityId && !isCompleted; $: { - if ( - entityId && - ($workflowQuery?.data?.workflowDefinition || $intentQuery?.data?.workflowDefinition) - ) { - nextWorkflow = mergeWorkflow(); - - if ( - nextWorkflow?.definition?.initial !== $workflow?.definition?.initial && - nextWorkflow?.definition?.context?.id?.resubmissionReason - ) { - shouldResubmit = true; - } else { - workflow.set(nextWorkflow); - shouldResubmit = false; - } - } else { - workflow.set(undefined); - shouldResubmit = false; - } + handleNextWorkflow({ + intentQueryDefinition: $intentQuery?.data?.workflowDefinition?.definition, + workflowQueryDefinition: $workflowQuery?.data?.workflowDefinition?.definition, + entityQueryId: $entityQuery?.data?.id, + workflowDefinitionInitial: $workflow?.definition?.initial, + }); } - let message; - $: { - switch (entityState) { - case 'PROCESSING': - message = ''; - break; - case 'REJECTED': - message = 'Your request was declined.'; - break; - case 'APPROVED': - message = 'Your request was approved :)'; - break; - default: - message = ''; - } + documentsDecisionStatuses = nextWorkflow + ? nextWorkflow?.workflowContext?.machineContext?.documents?.map( + ({ decision }) => decision?.status, + ) + : $workflow?.workflowContext?.machineContext?.documents?.map( + ({ decision }) => decision?.status, + ); + + const hasDecisions = !!documentsDecisionStatuses?.length; + + // In JavaScript `every` returns true with empty arrays. + isApproved = hasDecisions && documentsDecisionStatuses?.every(status => status === 'approved'); + isRejected = documentsDecisionStatuses?.some(status => status === 'rejected'); + isRevision = !isCompleted && documentsDecisionStatuses?.some(status => status === 'revision'); + isDecided = isApproved || isRejected || isRevision; } </script> <div class="flex h-full flex-row items-center justify-center"> <main class="flex h-full w-full flex-col items-center justify-center p-6"> - {#if !entityId} + {#if !$entityQuery.data?.id} <SignUp {onSubmit} /> {/if} {#if $workflow && !isCompleted && !shouldResubmit} <Workflow workflow={$workflow} on:workflow-updated={workflowComponentStateUpdated} /> {/if} - {#if entityId && !$workflow && !isProcessing} - <Intent disabled={!entityId} refetch={$intentQuery.refetch} /> + {#if $entityQuery.data?.id && !$workflow && !isProcessing} + <Intent disabled={!$entityQuery.data?.id} refetch={$intentQuery.refetch} /> {/if} - {#if entityId && isProcessing && isCompleted} + {#if $entityQuery.data?.id && isCompleted && !isDecided} <ThankYou /> {/if} - {#if isValidWorkflow && shouldResubmit} + {#if isRevision && shouldResubmit} <Resubmission {handleResubmit} - reason={nextWorkflow?.definition?.context?.id?.resubmissionReason - ?.toLowerCase() - ?.replace(/_/g, ' ')} + reason={nextWorkflow?.definition?.context?.documents + ?.find(({ decision }) => decision?.status === 'revision') + ?.decision?.revisionReason?.toLowerCase()} /> {/if} - {#if entityState === 'REJECTED'} + {#if isRejected} <Rejected /> {/if} - {#if entityState === 'APPROVED'} + {#if isApproved} <Approved /> {/if} </main> {#if $debugWf} <DevSidebar workflowDefinition={$debugWf?.definition} /> {/if} + <div class={'fixed left-2 top-2'}> + <button on:click={clearUser}> Clear User</button> + </div> </div> diff --git a/examples/headless-example/src/components/DocumentPhoto.svelte b/examples/headless-example/src/components/DocumentPhoto.svelte index 0c45ee3e1d..67735d32ae 100644 --- a/examples/headless-example/src/components/DocumentPhoto.svelte +++ b/examples/headless-example/src/components/DocumentPhoto.svelte @@ -4,8 +4,9 @@ import { camelCaseToTitle, createZodForm, getWorkflowContext } from '@/utils'; import Form from './Form.svelte'; import type { TOnPrev, TOnSubmit } from '@/types'; + import { DocumentId } from '@/constants'; - export let documentName: string; + export let documentId: string; export let initialValues: z.infer<typeof schema>; export let onSubmit: TOnSubmit<typeof schema>; export let onPrev: TOnPrev<typeof schema>; @@ -13,13 +14,13 @@ const workflowService = getWorkflowContext(); const schema = z.object({ - [documentName]: z.object({ + [documentId]: z.object({ type: z.union([ z.literal('passport'), z.literal('idCard'), z.literal('driverLicense'), z.literal('selfie'), - z.literal('certificateOfIncorporation'), + z.literal('incorporation'), ]), file: z.custom<File>(v => v instanceof File), }), @@ -27,16 +28,16 @@ const zodForm = createZodForm(schema, { initialValues: { - [documentName]: { - type: initialValues[documentName].type, + [documentId]: { + type: initialValues[documentId]?.type, }, }, async onSubmit(data, ctx) { - const uploadedFile = await workflowService.uploadFile(data[documentName]); + const uploadedFile = await workflowService.uploadFile(data[documentId]); return onSubmit( { - [documentName]: uploadedFile, + [documentId]: uploadedFile, }, ctx, ); @@ -54,7 +55,7 @@ }; $: { - title = camelCaseToTitle(documentName); + title = camelCaseToTitle(documentId); } </script> @@ -66,20 +67,24 @@ <fieldset class="mb-2 flex h-full flex-col"> <legend>Upload {title}</legend> <p class="max-w-[50ch] p-1"> - {#if documentName === 'selfie'} - You can download <a download="mock-selfie.png" href="/mock-selfie.png">this selfie file</a> + {#if documentId === DocumentId.SELFIE} + You can download <a + download={`mock-${DocumentId.SELFIE}.png`} + href={`/mock-${DocumentId.SELFIE}.png`}>this selfie file</a + > and upload it here. {/if} - {#if documentName === 'id'} + {#if documentId === DocumentId.ID_CARD} Pssst... instead of uploading your own ID, you can download <a - download="mock-id.png" - href="/mock-id.png">this file</a + download={`mock-${DocumentId.ID_CARD}.png`} + href={`/mock-${DocumentId.ID_CARD}.png`}>this file</a > and upload it here. {/if} - {#if documentName === 'certificateOfIncorporation'} + {#if documentId === DocumentId.CERTIFICATE_OF_INCORPORATION} You can download <a - download="mock-certificate-of-incorporation.pdf" - href="/mock-certificate-of-incorporation.pdf">this certificate of incorporation file</a + download={`mock-${DocumentId.CERTIFICATE_OF_INCORPORATION}.pdf`} + href={`mock-${DocumentId.CERTIFICATE_OF_INCORPORATION}.pdf`} + >this certificate of incorporation file</a > and upload it here. {/if} </p> @@ -88,7 +93,7 @@ type="file" class="hidden" id="file" - name={`${documentName}.file`} + name={`${documentId}.file`} on:change={updateFileName} bind:this={fileInput} /> @@ -102,7 +107,7 @@ </div> {:else} <img - src={`/${documentName === 'selfie' ? 'selfie' : 'upload-document'}.svg`} + src={`/${documentId === DocumentId.SELFIE ? 'selfie' : 'upload-document'}.svg`} alt="Upload Document" class="mx-auto h-48 w-48" /> @@ -110,7 +115,12 @@ <button type="button" on:click={uploadFile}>Choose Document</button> </div> </fieldset> - <ValidationMessage for={`${documentName}.file`} let:messages={message}> - <div style="color: red; font-weight: bold;">{message || ''}</div> + <ValidationMessage for={`${documentId}.type`} let:messages={message}> + <div style="color: red; font-weight: bold;"> + {message ? `Type ${message}: ${JSON.stringify(zodForm.data.type)}` : ''} + </div> + </ValidationMessage> + <ValidationMessage for={`${documentId}.file`} let:messages={message}> + <div style="color: red; font-weight: bold;">{message ? `File ${message}` : ''}</div> </ValidationMessage> </Form> diff --git a/examples/headless-example/src/components/DocumentReview.svelte b/examples/headless-example/src/components/DocumentReview.svelte index d50c412b30..2d21d66d09 100644 --- a/examples/headless-example/src/components/DocumentReview.svelte +++ b/examples/headless-example/src/components/DocumentReview.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { camelCaseToTitle, createZodForm, getWorkflowContext } from '@/utils'; + import { camelCaseToTitle, createZodForm, getSnapshotContext, getWorkflowContext } from '@/utils'; import { z } from 'zod'; import type { TOnPrev, TOnSubmit } from '@/types'; import Form from '@/components/Form.svelte'; @@ -7,11 +7,10 @@ const schema = z.object({}); - const workflowService = getWorkflowContext(); export let initialValues: z.infer<typeof schema>; export let onSubmit: TOnSubmit<typeof schema>; export let onPrev: TOnPrev<typeof schema>; - export let documentName: string; + export let documentId: string; // Defaults to 'Next' const submitText = 'Looks Good'; @@ -19,12 +18,16 @@ let id; let fileType; + const workflowService = getWorkflowContext(); const zodForm = createZodForm(schema, { initialValues, onSubmit(data, ctx) { + const context = getSnapshotContext(workflowService); + const document = context?.form?.[documentId]; + return onSubmit( { - [documentName]: workflowService.getSnapshot?.()?.context?.[documentName], + [documentId]: document, }, ctx, ); @@ -33,9 +36,10 @@ const backText = 'Re-upload'; $: { - const document = workflowService.getSnapshot?.()?.context?.[documentName]; + const context = getSnapshotContext(workflowService); + const document = context?.form?.[documentId]; - title = camelCaseToTitle(documentName); + title = camelCaseToTitle(documentId); id = document?.id; fileType = document?.fileType; } diff --git a/examples/headless-example/src/components/DocumentSelection.svelte b/examples/headless-example/src/components/DocumentSelection.svelte index 180721ce33..88ac3dbf47 100644 --- a/examples/headless-example/src/components/DocumentSelection.svelte +++ b/examples/headless-example/src/components/DocumentSelection.svelte @@ -5,9 +5,10 @@ import Form from './Form.svelte'; import type { TOnPrev, TOnSubmit } from '@/types'; import DocumentType from '@/components/DocumentType.svelte'; + import { DocumentId } from '@/constants'; const schema = z.object({ - id: z.object({ + [DocumentId.ID_CARD]: z.object({ type: z.union([z.literal('passport'), z.literal('idCard'), z.literal('driverLicense')]), }), }); @@ -18,8 +19,8 @@ const zodForm = createZodForm(schema, { initialValues: { - id: { - type: initialValues.id.type, + [DocumentId.ID_CARD]: { + type: initialValues[DocumentId.ID_CARD]?.type, }, }, onSubmit, @@ -33,20 +34,26 @@ <DocumentType id="passport" label="Passport" - name="id.type" + name={`${DocumentId.ID_CARD}.type`} value="passport" - type={$data.id.type} + type={$data[DocumentId.ID_CARD].type} + /> + <DocumentType + id="id-card" + label="ID Card" + name={`${DocumentId.ID_CARD}.type`} + value="idCard" + type={$data[DocumentId.ID_CARD].type} /> - <DocumentType id="id-card" label="ID Card" name="id.type" value="idCard" type={$data.id.type} /> <DocumentType id="driver-license" label="Driver License" - name="id.type" + name={`${DocumentId.ID_CARD}.type`} value="driverLicense" - type={$data.id.type} + type={$data[DocumentId.ID_CARD].type} /> </fieldset> - <ValidationMessage for="document" let:messages={message}> - <div style="color: red; font-weight: bold;">{message || ''}</div> + <ValidationMessage for={`${DocumentId.ID_CARD}.type`} let:messages={message}> + <div style="color: red; font-weight: bold;">{message ? `Type ${message}` : ''}</div> </ValidationMessage> </Form> diff --git a/examples/headless-example/src/components/Final.svelte b/examples/headless-example/src/components/Final.svelte index d80fe6a451..d06fcaac99 100644 --- a/examples/headless-example/src/components/Final.svelte +++ b/examples/headless-example/src/components/Final.svelte @@ -3,5 +3,3 @@ export let onSubmit = undefined; export let onPrev = undefined; </script> - -Final diff --git a/examples/headless-example/src/components/RemoteImage.svelte b/examples/headless-example/src/components/RemoteImage.svelte index 14e99921e2..2f36acb3a4 100644 --- a/examples/headless-example/src/components/RemoteImage.svelte +++ b/examples/headless-example/src/components/RemoteImage.svelte @@ -1,6 +1,7 @@ <script lang="ts"> import { onMount } from 'svelte'; - import { fetchBlob } from '@/utils'; + import { fetchBlob, fetchJson } from '@/utils'; + import { z } from 'zod'; export let id: string; export let alt: string; @@ -23,27 +24,36 @@ const isFileSourcePublic = fileInfo => { return fileInfo.uri.includes('https') && !fileInfo.fileNameInBucket; }; + const fetchFileInfoById = async (id: string) => { + const data = await fetchJson(`http://localhost:3000/api/v1/external/storage/${id}`); + + return z + .object({ + uri: z.string(), + fileNameInBucket: z.string().nullable(), + }) + .parse(data); + }; + const fetchFileContentById = async (id: string) => { + const data = await fetchBlob(`http://localhost:3000/api/v1/external/storage/content/${id}`); + + return z.instanceof(Blob).transform(blobToBase64).parseAsync(data); + }; onMount(async () => { if (!id) return; - const response = await fetch(`http://localhost:3000/api/v1/external/storage/${id}`); - if (!response.ok) { - throw new Error(`Error fetching fileInfo: ${response.statusText}`); - } - const fileInfo = await response.json(); + const fileInfo = await fetchFileInfoById(id); if (isFileSourcePublic(fileInfo)) { src = fileInfo.uri; - } else { - const streamedFile = await fetchBlob<Blob>( - `http://localhost:3000/api/v1/external/storage/content/${id}`, - ); - - const base64 = await blobToBase64(streamedFile); - src = base64?.replace(/application\/octet-stream/gi, fileType); + return; } + + const base64 = await fetchFileContentById(id); + + src = base64?.replace(/application\/octet-stream/gi, fileType); }); </script> diff --git a/examples/headless-example/src/components/Resubmission.svelte b/examples/headless-example/src/components/Resubmission.svelte index 8e6aad9d95..2fdf1d2988 100644 --- a/examples/headless-example/src/components/Resubmission.svelte +++ b/examples/headless-example/src/components/Resubmission.svelte @@ -1,5 +1,6 @@ <script lang="ts"> import Card from '@/components/Card.svelte'; + import { DocumentId } from '@/constants'; export let reason: string; export let handleResubmit = () => {}; @@ -9,7 +10,9 @@ <h1 class="w-full text-center text-2xl font-bold">Re-upload ID</h1> <p class="max-w-[50ch] p-1"> Your ID was rejected due to {reason}, please re-upload a clearer image. You can upload - <a download="mock-id.png" href="/mock-id.png">this file</a>. + <a download={`mock-${DocumentId.ID_CARD}.png`} href={`/mock-${DocumentId.ID_CARD}.png`} + >this file</a + >. </p> <img src="/re-upload-id.svg" alt="clock" class="m-auto mb-2 h-48 w-48" /> <button class="mt-auto" on:click={handleResubmit}>Re-upload ID File</button> diff --git a/examples/headless-example/src/components/Workflow.svelte b/examples/headless-example/src/components/Workflow.svelte index 0d7e9b0ba9..418769ceb7 100644 --- a/examples/headless-example/src/components/Workflow.svelte +++ b/examples/headless-example/src/components/Workflow.svelte @@ -1,31 +1,11 @@ <script lang="ts"> import type { WorkflowOptionsBrowser } from '@ballerine/workflow-browser-sdk'; - import DocumentPhoto from './DocumentPhoto.svelte'; - import DocumentSelection from './DocumentSelection.svelte'; - import ErrorComponent from './Error.svelte'; - import Final from './Final.svelte'; - import Resubmission from './Resubmission.svelte'; - import Success from './Success.svelte'; import { type ObjectValues, State } from '@/types'; - import Welcome from './Welcome.svelte'; - import { initWorkflowContext } from '@/utils'; - import DocumentReview from './DocumentReview.svelte'; + import { initWorkflowContext, makeDocument, upsertDocument } from '@/utils'; import { createEventDispatcher } from 'svelte'; + import { DocumentId } from '@/constants'; + import { Step } from '@/steps'; - const Step = { - WELCOME: Welcome, - DOCUMENT_SELECTION: DocumentSelection, - DOCUMENT_PHOTO: DocumentPhoto, - DOCUMENT_REVIEW: DocumentReview, - CERTIFICATE_OF_INCORPORATION: DocumentPhoto, - CERTIFICATE_OF_INCORPORATION_REVIEW: DocumentReview, - SELFIE: DocumentPhoto, - SELFIE_REVIEW: DocumentReview, - FINAL: Final, - ERROR: ErrorComponent, - SUCCESS: Success, - RESUBMISSION: Resubmission, - } as const; export let workflow: WorkflowOptionsBrowser; const dispatch = createEventDispatcher(); const workflowUpdated = (newWf: unknown) => dispatch('workflow-updated', newWf); @@ -39,52 +19,83 @@ const onPrev = (payload: Record<PropertyKey, any>) => () => { const context = workflowService.getSnapshot()?.context; + const document = makeDocument({ + id: Object.keys(payload)[0], + payload, + }); + const updatedDocuments = upsertDocument({ + documents: context?.documents, + document, + }); workflowService.sendEvent({ type: 'USER_PREV_STEP', payload: { ...context, - ...payload, - id: { - ...context?.id, - ...payload?.id, - }, - selfie: { - ...context?.selfie, - ...payload?.selfie, - }, - certificateOfIncorporation: { - ...context?.certificateOfIncorporation, - ...payload?.certificateOfIncorporation, + documents: updatedDocuments, + form: { + [DocumentId.ID_CARD]: { + ...context?.form?.[DocumentId.ID_CARD], + ...payload?.[DocumentId.ID_CARD], + }, + [DocumentId.SELFIE]: { + ...context?.form?.[DocumentId.SELFIE], + ...payload?.[DocumentId.SELFIE], + }, + [DocumentId.CERTIFICATE_OF_INCORPORATION]: { + ...context?.form?.[DocumentId.CERTIFICATE_OF_INCORPORATION], + ...payload?.[DocumentId.CERTIFICATE_OF_INCORPORATION], + }, }, }, }); }; const onSubmit = (payload: Record<PropertyKey, any>) => { + const context = workflowService.getSnapshot()?.context; + const documentId = Object.keys(payload ?? {})?.[0]; + const document = makeDocument({ + id: documentId, + payload, + }); + const newDocuments = upsertDocument({ + documents: context?.documents, + document, + }); + workflowService.sendEvent({ type: 'USER_NEXT_STEP', - payload, + payload: { + documents: newDocuments, + form: { + ...context?.form, + [documentId]: { + ...context?.form?.[documentId], + ...payload?.[documentId], + }, + }, + }, }); }; let initialValues = { - id: { - type: snapshot?.context?.id?.type, + [DocumentId.ID_CARD]: { + type: snapshot?.context?.form?.[DocumentId.ID_CARD]?.type, }, - selfie: { - type: snapshot?.context?.selfie?.type, + [DocumentId.SELFIE]: { + type: snapshot?.context?.form?.[DocumentId.SELFIE]?.type, }, - certificateOfIncorporation: { - type: snapshot?.context?.certificateOfIncorporation?.type, + [DocumentId.CERTIFICATE_OF_INCORPORATION]: { + type: snapshot?.context?.form?.[DocumentId.CERTIFICATE_OF_INCORPORATION]?.type, }, }; - let documentName; + + let documentId; workflowService.subscribe('USER_NEXT_STEP', async data => { currentStep = data.state; if (currentStep !== 'final') return; - window.location.reload(); + setTimeout(() => window.location.reload(), 240); }); workflowService.subscribe('USER_PREV_STEP', data => { @@ -112,22 +123,22 @@ step = Step[currentStep.toUpperCase() as keyof typeof Step]; snapshot = workflowService?.getSnapshot(); workflowUpdated(snapshot); - initialValues.id.type = snapshot?.context?.id?.type; - initialValues.selfie.type = 'selfie'; - initialValues.certificateOfIncorporation.type = 'certificateOfIncorporation'; + initialValues[DocumentId.ID_CARD].type = snapshot?.context?.form?.[DocumentId.ID_CARD]?.type; + initialValues[DocumentId.SELFIE].type = 'selfie'; + initialValues[DocumentId.CERTIFICATE_OF_INCORPORATION].type = 'incorporation'; switch (currentStep) { case 'document_photo': case 'document_review': - documentName = 'id'; + documentId = DocumentId.ID_CARD; break; case 'selfie': case 'selfie_review': - documentName = 'selfie'; + documentId = DocumentId.SELFIE; break; case 'certificate_of_incorporation': case 'certificate_of_incorporation_review': - documentName = 'certificateOfIncorporation'; + documentId = DocumentId.CERTIFICATE_OF_INCORPORATION; break; default: break; @@ -149,4 +160,4 @@ {/if} </span> -<svelte:component this={step} {onPrev} {onSubmit} {initialValues} {documentName} /> +<svelte:component this={step} {onPrev} {onSubmit} {initialValues} {documentId} /> diff --git a/examples/headless-example/src/constants.ts b/examples/headless-example/src/constants.ts index b3ce4c0aa1..c2b6afc661 100644 --- a/examples/headless-example/src/constants.ts +++ b/examples/headless-example/src/constants.ts @@ -1 +1,20 @@ -export const NO_AUTH_USER_KEY = 'no_auth_user_id'; +export const ENTITY_ID_STORAGE_KEY = 'entityId' as const; + +export const Category = { + ID_CARD: 'id', + SELFIE: 'selfie', + CERTIFICATE_OF_INCORPORATION: 'incorporation', +} as const; + +export const Type = { + PHOTO: 'photo', + PDF: 'pdf', +} as const; + +export const ISSUER_COUNTRY = 'CA' as const; + +export const DocumentId = { + ID_CARD: `${Category.ID_CARD}-${Type.PHOTO}-${ISSUER_COUNTRY}`, + SELFIE: `${Category.SELFIE}-${Type.PHOTO}-${ISSUER_COUNTRY}`, + CERTIFICATE_OF_INCORPORATION: `${Category.CERTIFICATE_OF_INCORPORATION}-${Type.PDF}-${ISSUER_COUNTRY}`, +} as const; diff --git a/examples/headless-example/src/services/ballerine-backoffice.service.ts b/examples/headless-example/src/services/ballerine-backoffice.service.ts index 5c48735b99..c856647044 100644 --- a/examples/headless-example/src/services/ballerine-backoffice.service.ts +++ b/examples/headless-example/src/services/ballerine-backoffice.service.ts @@ -1,4 +1,5 @@ import { fetchJson } from '@/utils'; +import { ENTITY_ID_STORAGE_KEY } from '@/constants'; export type WorkServiceEndpoints = { base: string; @@ -10,7 +11,13 @@ export class BallerineBackOfficeService { fetchBusiness = async (id: string) => fetchJson(`${this.baseUrl}/businesses/${id}`); fetchWorkflow = async (id: string) => fetchJson(`${this.baseUrl}/workflows/${id}`); - fetchWorkflows = async () => + fetchWorkflows = async ({ + entityType, + entityId, + }: { + entityType: 'end-user' | 'business'; + entityId: string; + }) => fetchJson< Array<{ workflowDefinition: { @@ -22,11 +29,14 @@ export class BallerineBackOfficeService { status: string; }; }> - >(`${this.baseUrl}/workflows`); + >(`${this.baseUrl}/workflows/${entityType}/${entityId}`); fetchIntent = async () => fetchJson<Array<Record<string, unknown>>>(`${this.baseUrl}/workflows/intent`, { method: 'POST', - body: { intentName: import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? 'kycSignup' : 'kybSignup' }, + body: { + intentName: import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? 'kycSignup' : 'kybSignup', + entityId: sessionStorage.getItem(ENTITY_ID_STORAGE_KEY), + }, }); fetchBusinessSignUp = async ({ diff --git a/examples/headless-example/src/steps.ts b/examples/headless-example/src/steps.ts new file mode 100644 index 0000000000..1ff6a63ef8 --- /dev/null +++ b/examples/headless-example/src/steps.ts @@ -0,0 +1,23 @@ +import Welcome from '@/components/Welcome.svelte'; +import DocumentSelection from '@/components/DocumentSelection.svelte'; +import DocumentPhoto from '@/components/DocumentPhoto.svelte'; +import DocumentReview from '@/components/DocumentReview.svelte'; +import Final from '@/components/Final.svelte'; +import ErrorComponent from '@/components/Error.svelte'; +import Success from '@/components/Success.svelte'; +import Resubmission from '@/components/Resubmission.svelte'; + +export const Step = { + WELCOME: Welcome, + DOCUMENT_SELECTION: DocumentSelection, + DOCUMENT_PHOTO: DocumentPhoto, + DOCUMENT_REVIEW: DocumentReview, + CERTIFICATE_OF_INCORPORATION: DocumentPhoto, + CERTIFICATE_OF_INCORPORATION_REVIEW: DocumentReview, + SELFIE: DocumentPhoto, + SELFIE_REVIEW: DocumentReview, + FINAL: Final, + ERROR: ErrorComponent, + SUCCESS: Success, + RESUBMISSION: Resubmission, +} as const; diff --git a/examples/headless-example/src/utils.ts b/examples/headless-example/src/utils.ts index dd1a84982e..d01aadae40 100644 --- a/examples/headless-example/src/utils.ts +++ b/examples/headless-example/src/utils.ts @@ -1,3 +1,4 @@ +import { getDocumentId } from '@ballerine/common'; import { type ClassValue, clsx } from 'clsx'; import { twMerge } from 'tailwind-merge'; import type { WorkflowBrowserSDK, WorkflowOptionsBrowser } from '@ballerine/workflow-browser-sdk'; @@ -9,7 +10,7 @@ import { createForm } from 'felte'; import { getContext, setContext } from 'svelte'; import type { z, ZodSchema } from 'zod'; import type { FetchInitWithJson, Serializable } from './types'; -import { NO_AUTH_USER_KEY } from './constants'; +import { Category } from '@/constants'; export const setWorkflowContext = (service: InstanceType<typeof WorkflowBrowserSDK>) => { setContext('workflow', service); @@ -64,6 +65,12 @@ export const makeWorkflow = (data: { }, backend: { baseUrl: 'http://localhost:3000/api/v1/external', + headers: { + Authorization: + import.meta.env.MODE === 'development' + ? `Api-Key ${import.meta.env.VITE_API_KEY}` + : undefined, + }, }, }; }; @@ -105,7 +112,7 @@ export const fetchJson = async <TData, TBody = Record<string, unknown>>( ...init, headers: { ...init?.headers, - no_auth_user_id: sessionStorage.getItem(NO_AUTH_USER_KEY) ?? '', + Authorization: `Api-Key ${import.meta.env.VITE_API_KEY}`, }, }); const data: TData = await res.json(); @@ -121,7 +128,7 @@ export const fetchBlob = async <TData, TBody = Record<string, unknown>>( ...init, headers: { ...init?.headers, - no_auth_user_id: sessionStorage.getItem(NO_AUTH_USER_KEY) ?? '', + Authorization: `Api-Key ${import.meta.env.VITE_API_KEY}`, }, }); @@ -143,6 +150,113 @@ export const handlePromise = async <TData>( export const ctw = (...classNames: Array<ClassValue>) => twMerge(clsx(classNames)); export const camelCaseToTitle = (str: string) => str - .replace(/([A-Z])/g, ' $1') - .replace(/^./, str => str.toUpperCase()) - .replace(/id/i, 'ID'); + ?.replace(/([A-Z])/g, ' $1') + ?.replace(/^./, str => str?.toUpperCase()) + ?.replace(/id/i, 'ID'); + +export const getSnapshotContext = (workflowService: InstanceType<typeof WorkflowBrowserSDK>) => + workflowService?.getSnapshot()?.context; +export const makeDocument = ({ + id, + payload, +}: { + id: string; + payload: { + [key: string]: { + id: string; + fileType: string; + }; + }; +}) => { + const [category, type, issuerCountry] = id?.split('-') ?? []; + const properties = (() => { + if (category === Category.CERTIFICATE_OF_INCORPORATION) { + return { + businessName: 'Test Business', + website: 'https://testbusiness.com', + phone: '+233 123 456 789', + email: 'test@test.com', + owner: 'Test Owner', + tin: '123456789', + }; + } + + if ( + (category === Category.ID_CARD || category === Category.SELFIE) && + import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' + ) { + return { + firstName: 'John', + middleName: 'Oed', + lastName: 'Doe', + authority: 'Canada', + placeOfIssue: 'Canada', + issueDate: '2020-01-01', + expires: '2025-01-01', + dateOfBirth: '1990-01-01', + placeOfBirth: 'Canada', + sex: 'Other', + }; + } + + if ( + (category === Category.ID_CARD || category === Category.SELFIE) && + import.meta.env.VITE_EXAMPLE_TYPE === 'kyb' + ) { + return { + firstName: 'John', + middleName: 'Oed', + lastName: 'Doe', + authority: 'Canada', + placeOfIssue: 'Canada', + issueDate: '2020-01-01', + expires: '2025-01-01', + dateOfBirth: '1990-01-01', + placeOfBirth: 'Canada', + sex: 'Other', + }; + } + + throw new Error(`Invalid properties`); + })(); + + return { + category, + type, + issuer: { + country: issuerCountry, + }, + version: 1, + pages: [ + { + ballerineFileId: payload?.[id]?.id, + type: payload?.[id]?.fileType === 'application/pdf' ? 'pdf' : 'png', + provider: 'http', + uri: '', + }, + ], + properties, + }; +}; +// Update document if it exists, otherwise add a new document. +export const upsertDocument = ({ + documents, + document, +}: { + documents: Array<any>; + document: any; +}) => { + const documentExists = documents?.some( + doc => getDocumentId(doc, false) === getDocumentId(document, false), + ); + + if (!Array.isArray(documents) || !documents?.length) return [document]; + + return !documentExists + ? [...documents, document] + : documents?.map(doc => { + if (getDocumentId(doc, false) !== getDocumentId(document, false)) return doc; + + return document; + }); +}; diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/CA.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/CA.ts new file mode 100644 index 0000000000..c25ab5e60c --- /dev/null +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/CA.ts @@ -0,0 +1,127 @@ +import { TDocument } from '@/schemas'; + +export const canadaDocuments: TDocument[] = [ + { + category: 'incorporation', + type: 'pdf', + issuer: { + type: 'local_authority', + country: 'CA', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + businessName: { + type: 'string', + }, + website: { + type: 'string', + }, + phone: { + type: 'string', + }, + email: { + type: 'string', + }, + owner: { + type: 'string', + }, + tin: { + type: 'string', + }, + }, + }, + }, + { + category: 'id', + type: 'photo', + issuer: { + type: 'local_authority', + country: 'CA', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + firstName: { + type: 'string', + }, + middleName: { + type: 'string', + }, + lastName: { + type: 'string', + }, + authority: { + type: 'string', + }, + placeOfIssue: { + type: 'string', + }, + issueDate: { + type: 'string', + }, + expires: { + type: 'string', + }, + dateOfBirth: { + type: 'string', + }, + placeOfBirth: { + type: 'string', + }, + sex: { + type: 'string', + }, + }, + }, + }, + { + category: 'selfie', + type: 'photo', + issuer: { + type: 'local_authority', + country: 'CA', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + firstName: { + type: 'string', + }, + middleName: { + type: 'string', + }, + lastName: { + type: 'string', + }, + authority: { + type: 'string', + }, + placeOfIssue: { + type: 'string', + }, + issueDate: { + type: 'string', + }, + expires: { + type: 'string', + }, + dateOfBirth: { + type: 'string', + }, + placeOfBirth: { + type: 'string', + }, + sex: { + type: 'string', + }, + }, + }, + }, +]; diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts index 22bb2ee587..8ae114d17d 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/index.ts @@ -2,9 +2,11 @@ import { ghanaDocuments } from './GH'; import { TDocument } from '../types'; import { countryCodes } from '@/countries'; import { DefaultContextSchema } from '@/schemas'; +import { canadaDocuments } from './CA'; const documentIdsByCountry: Partial<Record<(typeof countryCodes)[number], TDocument[]>> = { GH: ghanaDocuments, + CA: canadaDocuments, }; export const getDocumentsByCountry = (countryCode: (typeof countryCodes)[number]): TDocument[] => { diff --git a/packages/rules-engine/src/lib/rule-engine.ts b/packages/rules-engine/src/lib/rule-engine.ts index f7d077fb4f..6ee107c601 100644 --- a/packages/rules-engine/src/lib/rule-engine.ts +++ b/packages/rules-engine/src/lib/rule-engine.ts @@ -1,6 +1,5 @@ import * as jsonLogic from 'json-logic-js'; - export interface RuleEngineOptions { Provider: 'json-logic' | 'json-rule-engine'; } @@ -12,21 +11,19 @@ export interface RuleEngine { } export interface LogicRule { - evaluate: (data: any) => boolean + evaluate: (data: any) => boolean; } export class JsonLogicRule { - #__rule: any; - constructor(rule: any) { - this.#__rule = rule - } - - evaluate(data: any) { - return jsonLogic.apply( - this.#__rule, // Rule - data // Data - ); - } + #__rule: any; + constructor(rule: any) { + this.#__rule = rule; + } + + evaluate(data: any) { + return jsonLogic.apply( + this.#__rule, // Rule + data, // Data + ); } - - \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 67adb8b653..9b0cf6afd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,10 +28,10 @@ importers: version: 2.26.1 '@commitlint/cli': specifier: ^17.5.0 - version: 17.6.0 + version: 17.5.0 '@commitlint/config-conventional': specifier: ^17.4.4 - version: 17.6.0 + version: 17.4.4 commitizen: specifier: ^4.3.0 version: 4.3.0 @@ -52,7 +52,7 @@ importers: version: 15.0.2 prettier: specifier: ^2.8.7 - version: 2.8.7 + version: 2.8.8 apps/backoffice-v2: dependencies: @@ -73,28 +73,28 @@ importers: version: 3.1.0(react-hook-form@7.43.9) '@lukemorales/query-key-factory': specifier: ^1.0.3 - version: 1.2.0(@tanstack/query-core@4.29.1) + version: 1.0.3 '@radix-ui/react-checkbox': specifier: ^1.0.1 - version: 1.0.3(react-dom@18.2.0)(react@18.2.0) + version: 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.2 - version: 1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': - specifier: ^2.0.4 - version: 2.0.4(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.0.5 + version: 2.0.5(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-hover-card': specifier: ^1.0.2 - version: 1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.2(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-label': specifier: ^2.0.1 version: 2.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-scroll-area': specifier: ^1.0.2 - version: 1.0.3(react-dom@18.2.0)(react@18.2.0) + version: 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^1.2.1 - version: 1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.2.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-separator': specifier: ^1.0.2 version: 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -103,7 +103,7 @@ importers: version: 1.0.1(react@18.2.0) '@tanstack/react-query': specifier: ^4.19.1 - version: 4.29.1(react-dom@18.2.0)(react@18.2.0) + version: 4.19.1(react-dom@18.2.0)(react@18.2.0) class-variance-authority: specifier: ^0.6.0 version: 0.6.0(typescript@4.9.5) @@ -112,25 +112,25 @@ importers: version: 1.2.1 dayjs: specifier: ^1.11.6 - version: 1.11.7 + version: 1.11.6 eslint-plugin-tailwindcss: specifier: ^3.8.0 - version: 3.11.0(tailwindcss@3.3.1) + version: 3.8.0(ts-node@10.9.1) face-api.js: specifier: ^0.22.2 version: 0.22.2 framer-motion: specifier: ^8.3.4 - version: 8.5.5(react-dom@18.2.0)(react@18.2.0) + version: 8.3.4(react-dom@18.2.0)(react@18.2.0) i18next: specifier: ^22.4.9 - version: 22.4.14 + version: 22.4.9 i18next-browser-languagedetector: specifier: ^7.0.1 version: 7.0.1 i18next-http-backend: specifier: ^2.1.1 - version: 2.2.0 + version: 2.1.1 lucide-react: specifier: ^0.144.0 version: 0.144.0(react@18.2.0) @@ -139,7 +139,7 @@ importers: version: 6.3.1 msw: specifier: ^1.0.0 - version: 1.2.1(typescript@4.9.5) + version: 1.1.0(typescript@4.9.5) qs: specifier: ^6.11.2 version: 6.11.2 @@ -157,7 +157,7 @@ importers: version: 2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) react-i18next: specifier: ^12.1.4 - version: 12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0) + version: 12.1.4(i18next@22.4.9)(react-dom@18.2.0)(react@18.2.0) react-image-crop: specifier: ^10.0.9 version: 10.0.9(react@18.2.0) @@ -166,16 +166,16 @@ importers: version: 6.11.2(react-dom@18.2.0)(react@18.2.0) tailwind-merge: specifier: ^1.10.0 - version: 1.12.0 + version: 1.10.0 tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.5(tailwindcss@3.3.1) + version: 1.0.5(tailwindcss@3.2.4) tesseract.js: specifier: ^4.0.1 - version: 4.0.3(eslint@8.22.0) + version: 4.0.1(eslint@8.22.0) vite-plugin-terminal: specifier: ^1.1.0 - version: 1.1.0(vite@4.2.1) + version: 1.1.0(vite@4.1.1) zod: specifier: ^3.21.4 version: 3.21.4 @@ -185,7 +185,7 @@ importers: version: 7.6.0 '@playwright/test': specifier: ^1.32.1 - version: 1.32.3 + version: 1.32.1 '@storybook/addon-a11y': specifier: ^6.5.16 version: 6.5.16(react-dom@18.2.0)(react@18.2.0) @@ -206,100 +206,103 @@ importers: version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@storybook/react-vite': specifier: ^7.0.0-rc.10 - version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1) + version: 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.1) '@storybook/testing-library': specifier: ^0.0.14-next.1 version: 0.0.14-next.1 '@tanstack/react-query-devtools': specifier: 4.22.0 - version: 4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.0(@tanstack/react-query@4.19.1)(react-dom@18.2.0)(react@18.2.0) '@testing-library/jest-dom': specifier: ^5.16.4 version: 5.16.5 '@testing-library/react': specifier: ^13.3.0 - version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + version: 13.3.0(react-dom@18.2.0)(react@18.2.0) '@types/node': specifier: ^18.11.13 - version: 18.15.11 + version: 18.14.6 '@types/qs': specifier: ^6.9.7 version: 6.9.7 '@types/react': specifier: ^18.0.14 - version: 18.0.35 + version: 18.0.14 '@types/react-dom': specifier: ^18.0.5 - version: 18.0.11 + version: 18.0.5 '@types/testing-library__jest-dom': specifier: ^5.14.5 version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.30.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.30.0 - version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.22.0)(typescript@4.9.5) '@vitejs/plugin-react-swc': specifier: ^3.0.1 - version: 3.3.0(vite@4.2.1) + version: 3.0.1(vite@4.1.1) autoprefixer: specifier: ^10.4.7 - version: 10.4.14(postcss@8.4.21) + version: 10.4.7(postcss@8.4.21) daisyui: specifier: ^2.46.1 - version: 2.51.5(autoprefixer@10.4.14)(postcss@8.4.21)(ts-node@10.9.1) + version: 2.46.1(autoprefixer@10.4.7)(postcss@8.4.21)(ts-node@10.9.1) eslint: specifier: 8.22.0 version: 8.22.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.22.0) + version: 8.7.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) eslint-plugin-react: specifier: ^7.30.1 - version: 7.32.2(eslint@8.22.0) + version: 7.30.1(eslint@8.22.0) eslint-plugin-react-hooks: specifier: ^4.6.0 version: 4.6.0(eslint@8.22.0) eslint-plugin-storybook: specifier: ^0.6.6 - version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) + version: 0.6.6(eslint@8.22.0)(typescript@4.9.5) postcss: specifier: ^8.4.14 version: 8.4.21 prettier: specifier: ^2.8.0 - version: 2.8.7 + version: 2.8.8 prettier-plugin-tailwindcss: specifier: ^0.2.1 - version: 0.2.7(prettier@2.8.7) + version: 0.2.1(prettier@2.8.8) storybook: specifier: ^7.0.0-rc.10 version: 7.0.0-rc.10 tailwindcss: specifier: ^3.2.4 - version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^4.0.4 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.29.8 version: 0.29.8 examples/headless-example: dependencies: + '@ballerine/common': + specifier: 0.5.2 + version: 0.5.2 '@ballerine/workflow-browser-sdk': - specifier: ^0.4.2 + specifier: ^0.4.3 version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 - version: 1.1.5(svelte@3.58.0) + version: 1.1.5(svelte@3.55.1) '@felte/validator-zod': specifier: ^1.0.13 version: 1.0.13(zod@3.21.4) @@ -308,22 +311,22 @@ importers: version: 4.5.15 '@tanstack/svelte-query': specifier: ^4.27.0 - version: 4.29.1(svelte@3.58.0) + version: 4.27.0(svelte@3.55.1) '@xstate/svelte': specifier: ^2.0.1 - version: 2.0.1(svelte@3.58.0)(xstate@4.37.1) + version: 2.0.1(svelte@3.55.1)(xstate@4.37.1) clsx: specifier: ^1.2.1 version: 1.2.1 felte: specifier: ^1.2.7 - version: 1.2.7(svelte@3.58.0) + version: 1.2.7(svelte@3.55.1) tailwind-merge: specifier: ^1.8.1 - version: 1.12.0 + version: 1.10.0 vite-tsconfig-paths: specifier: ^4.0.7 - version: 4.2.0(typescript@4.9.5)(vite@4.2.1) + version: 4.0.7(typescript@4.9.5)(vite@4.1.1) xstate: specifier: 4.37.1 version: 4.37.1 @@ -336,7 +339,7 @@ importers: version: 1.3.7 '@sveltejs/vite-plugin-svelte': specifier: ^2.0.2 - version: 2.0.4(svelte@3.58.0)(vite@4.2.1) + version: 2.0.2(svelte@3.55.1)(vite@4.1.1) '@tsconfig/svelte': specifier: ^3.0.0 version: 3.0.0 @@ -345,7 +348,7 @@ importers: version: 0.7.1(ws@8.13.0)(xstate@4.37.1) autoprefixer: specifier: ^10.4.7 - version: 10.4.14(postcss@8.4.21) + version: 10.4.7(postcss@8.4.21) postcss: specifier: ^8.4.21 version: 8.4.21 @@ -354,16 +357,16 @@ importers: version: 2.8.8 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.8)(svelte@3.58.0) + version: 2.8.0(prettier@2.8.8)(svelte@3.55.1) svelte: specifier: ^3.55.1 - version: 3.58.0 + version: 3.55.1 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) + version: 2.10.3(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1) tailwindcss: specifier: ^3.2.4 - version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -372,7 +375,7 @@ importers: version: 4.9.5 vite: specifier: ^4.1.0 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) packages/common: dependencies: @@ -397,7 +400,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -415,16 +418,16 @@ importers: version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.14.6 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.4(jsdom@20.0.2) concurrently: specifier: ^7.6.0 version: 7.6.0 @@ -433,28 +436,28 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.11.0(eslint@8.35.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.35.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.0.2(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) fs-extra: specifier: ^11.1.0 - version: 11.1.1 + version: 11.1.0 prettier: specifier: ^2.1.1 - version: 2.8.7 + version: 2.8.8 rimraf: specifier: ^4.1.2 - version: 4.4.1 + version: 4.1.2 rollup: specifier: 2.70.2 version: 2.70.2 @@ -475,16 +478,16 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.5(jsdom@20.0.2) packages/rules-engine: dependencies: @@ -509,7 +512,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -527,13 +530,13 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.4(jsdom@20.0.2) concurrently: specifier: ^7.6.0 version: 7.6.0 @@ -542,25 +545,25 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.11.0(eslint@8.35.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.35.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.0.2(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) fs-extra: specifier: ^11.1.0 - version: 11.1.1 + version: 11.1.0 prettier: specifier: ^2.1.1 - version: 2.8.7 + version: 2.8.8 rollup: specifier: 2.70.2 version: 2.70.2 @@ -578,16 +581,16 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.5(jsdom@20.0.2) packages/workflow-core: dependencies: @@ -615,7 +618,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -624,7 +627,7 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.1(rollup@2.70.2) + version: 0.4.0(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 @@ -636,16 +639,16 @@ importers: version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.14.6 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.4(jsdom@20.0.2) concurrently: specifier: ^7.6.0 version: 7.6.0 @@ -654,22 +657,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.11.0(eslint@8.35.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.35.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.0.2(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) fs-extra: specifier: ^11.1.0 - version: 11.1.1 + version: 11.1.0 plugin-babel: specifier: link:@types/@rollup/plugin-babel version: link:@types/@rollup/plugin-babel @@ -678,10 +681,10 @@ importers: version: link:@types/@rollup/plugin-terser prettier: specifier: ^2.1.1 - version: 2.8.7 + version: 2.8.8 rimraf: specifier: ^4.1.2 - version: 4.4.1 + version: 4.1.2 rollup: specifier: 2.70.2 version: 2.70.2 @@ -696,16 +699,16 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.5(jsdom@20.0.2) sdks/web-ui-sdk: dependencies: @@ -714,35 +717,35 @@ importers: version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 - version: 0.8.2 + version: 0.8.0 compressorjs: specifier: ^1.1.1 - version: 1.2.1 + version: 1.1.1 deepmerge: specifier: ^4.3.0 - version: 4.3.1 + version: 4.3.0 dotenv: specifier: ^16.0.3 version: 16.0.3 jslib-html5-camera-photo: specifier: ^3.3.3 - version: 3.3.4 + version: 3.3.3 devDependencies: '@babel/core': specifier: ^7.18.5 - version: 7.21.4 + version: 7.18.5 '@playwright/test': specifier: ^1.27.1 - version: 1.32.3 + version: 1.32.1 '@sveltejs/vite-plugin-svelte': specifier: 1.0.8 - version: 1.0.8(svelte@3.58.0)(vite@4.0.3) + version: 1.0.8(svelte@3.55.1)(vite@4.0.3) '@testing-library/jest-dom': specifier: ^5.16.5 version: 5.16.5 '@testing-library/svelte': specifier: ^3.2.2 - version: 3.2.2(svelte@3.58.0) + version: 3.2.2(svelte@3.55.1) '@tsconfig/svelte': specifier: ^2.0.1 version: 2.0.1 @@ -754,16 +757,16 @@ importers: version: 4.6.7 '@types/node': specifier: ^18.11.9 - version: 18.15.11 + version: 18.14.6 '@types/testing-library__jest-dom': specifier: ^5.14.5 version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.41.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.41.0 - version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.22.0)(typescript@4.9.5) editorconfig: specifier: ^1.0.1 version: 1.0.2 @@ -772,58 +775,58 @@ importers: version: 8.22.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.22.0) + version: 8.7.0(eslint@8.22.0) eslint-plugin-storybook: specifier: ^0.6.6 - version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) + version: 0.6.6(eslint@8.22.0)(typescript@4.9.5) eslint-plugin-svelte3: specifier: ^4.0.0 - version: 4.0.0(eslint@8.22.0)(svelte@3.58.0) + version: 4.0.0(eslint@8.22.0)(svelte@3.55.1) jsdom: specifier: ^20.0.2 - version: 20.0.3 + version: 20.0.2 postcss: specifier: ^8.4.18 version: 8.4.21 prettier: specifier: ^2.7.1 - version: 2.8.7 + version: 2.8.8 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.7)(svelte@3.58.0) + version: 2.8.0(prettier@2.8.8)(svelte@3.55.1) rollup-plugin-visualizer: specifier: ^5.8.3 - version: 5.9.0 + version: 5.8.3 svelte: specifier: ^3.39.0 - version: 3.58.0 + version: 3.55.1 svelte-check: specifier: ^2.2.7 - version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) + version: 2.10.3(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1) svelte-preprocess: specifier: ^4.9.8 - version: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) + version: 4.9.8(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1)(typescript@4.9.5) typedoc: specifier: ^0.23.23 - version: 0.23.28(typescript@4.9.5) + version: 0.23.23(typescript@4.9.5) typedoc-plugin-markdown: specifier: ^3.14.0 - version: 3.15.1(typedoc@0.23.28) + version: 3.14.0(typedoc@0.23.23) typescript: specifier: ^4.5.4 version: 4.9.5 vite: specifier: 4.0.3 - version: 4.0.3(@types/node@18.15.11) + version: 4.0.3(@types/node@18.14.6) vite-plugin-dts: specifier: ^1.6.6 - version: 1.7.3(@types/node@18.15.11)(vite@4.0.3) + version: 1.6.6(@types/node@18.14.6)(vite@4.0.3) vite-plugin-html: specifier: ^3.2.0 version: 3.2.0(vite@4.0.3) vitest: specifier: ^0.24.5 - version: 0.24.5(jsdom@20.0.3) + version: 0.24.5(jsdom@20.0.2) sdks/workflow-browser-sdk: dependencies: @@ -851,7 +854,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -860,7 +863,7 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.1(rollup@2.70.2) + version: 0.4.0(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 @@ -869,16 +872,16 @@ importers: version: 11.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.14.6 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.4(jsdom@20.0.2) concurrently: specifier: ^7.6.0 version: 7.6.0 @@ -890,28 +893,28 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.11.0(eslint@8.35.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.35.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.0.2(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) fs-extra: specifier: ^11.1.0 - version: 11.1.1 + version: 11.1.0 jsdom: specifier: ^20.0.2 - version: 20.0.3 + version: 20.0.2 msw: specifier: ^1.1.0 - version: 1.2.1(typescript@4.9.5) + version: 1.1.0(typescript@4.9.5) plugin-babel: specifier: link:@types/@rollup/plugin-babel version: link:@types/@rollup/plugin-babel @@ -920,10 +923,10 @@ importers: version: link:@types/@rollup/plugin-terser prettier: specifier: ^2.1.1 - version: 2.8.7 + version: 2.8.8 rimraf: specifier: ^4.1.2 - version: 4.4.1 + version: 4.1.2 rollup: specifier: 2.70.2 version: 2.70.2 @@ -938,16 +941,16 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.5(jsdom@20.0.2) sdks/workflow-node-sdk: dependencies: @@ -975,7 +978,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -993,13 +996,13 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.4(jsdom@20.0.2) concurrently: specifier: ^7.6.0 version: 7.6.0 @@ -1008,25 +1011,25 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.11.0(eslint@8.35.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.35.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.0.2(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) fs-extra: specifier: ^11.1.0 - version: 11.1.1 + version: 11.1.0 prettier: specifier: ^2.1.1 - version: 2.8.7 + version: 2.8.8 rollup: specifier: 2.70.2 version: 2.70.2 @@ -1044,16 +1047,16 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.1.1(@types/node@18.14.6) vitest: specifier: ^0.28.5 - version: 0.28.5(jsdom@20.0.3) + version: 0.28.5(jsdom@20.0.2) services/workflows-service: dependencies: @@ -1062,7 +1065,7 @@ importers: version: 3.325.0 '@aws-sdk/lib-storage': specifier: 3.325.0 - version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1074,40 +1077,40 @@ importers: version: 7.6.0 '@nestjs/axios': specifier: ^2.0.0 - version: 2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/common': specifier: ^9.3.12 - version: 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/config': specifier: 2.3.1 - version: 2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/devtools-integration': specifier: ^0.1.4 - version: 0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) + version: 0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) '@nestjs/event-emitter': specifier: ^1.4.1 - version: 1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) + version: 1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) '@nestjs/graphql': specifier: ^10.0.0 - version: 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + version: 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) '@nestjs/jwt': specifier: 10.0.3 - version: 10.0.3(@nestjs/common@9.4.0) + version: 10.0.3(@nestjs/common@9.3.12) '@nestjs/passport': specifier: 9.0.3 - version: 9.0.3(@nestjs/common@9.4.0)(passport@0.6.0) + version: 9.0.3(@nestjs/common@9.3.12)(passport@0.6.0) '@nestjs/platform-express': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@nestjs/serve-static': specifier: 3.0.1 - version: 3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2) + version: 3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2) '@nestjs/testing': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) '@prisma/client': specifier: ^4.13.0 version: 4.13.0(prisma@4.13.0) @@ -1158,19 +1161,19 @@ importers: version: 4.17.1 helmet: specifier: ^6.0.1 - version: 6.1.5 + version: 6.0.1 lodash: specifier: ^4.17.21 version: 4.17.21 multer-s3: specifier: 3.0.1 - version: 3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + version: 3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) nest-access-control: specifier: 2.2.0 version: 2.2.0(@nestjs/graphql@10.0.0) nestjs-prisma: specifier: 0.20.0 - version: 0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0) + version: 0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0) passport: specifier: 0.6.0 version: 0.6.0 @@ -1204,7 +1207,7 @@ importers: version: 9.3.0 '@nestjs/swagger': specifier: 6.2.1 - version: 6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + version: 6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) '@types/bcrypt': specifier: 5.0.0 version: 5.0.0 @@ -1216,10 +1219,10 @@ importers: version: 4.17.9 '@types/jest': specifier: ^26.0.19 - version: 26.0.24 + version: 26.0.19 '@types/lodash': specifier: ^4.14.191 - version: 4.14.192 + version: 4.14.191 '@types/multer': specifier: ^1.4.7 version: 1.4.7 @@ -1228,7 +1231,7 @@ importers: version: 3.0.0 '@types/node': specifier: ^18.14.6 - version: 18.15.11 + version: 18.14.6 '@types/normalize-path': specifier: 3.0.0 version: 3.0.0 @@ -1249,37 +1252,37 @@ importers: version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) dotenv: specifier: ^16.0.3 version: 16.0.3 eslint: specifier: ^8.35.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.38.0) + version: 8.7.0(eslint@8.35.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.35.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) jest: specifier: 27.0.6 version: 27.0.6(ts-node@10.9.1) jest-mock-extended: specifier: ^2.0.4 - version: 2.0.9(jest@27.0.6)(typescript@4.9.5) + version: 2.0.4(jest@27.0.6)(typescript@4.9.5) json-schema-to-typescript: specifier: ^13.0.1 version: 13.0.1 prettier: specifier: ^2.8.4 - version: 2.8.7 + version: 2.8.8 prisma: specifier: 4.13.0 version: 4.13.0 @@ -1294,7 +1297,7 @@ importers: version: 27.0.3(jest@27.0.6)(typescript@4.9.5) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) type-fest: specifier: 0.11.0 version: 0.11.0 @@ -1306,19 +1309,19 @@ importers: dependencies: '@nestjs/common': specifier: ^9.3.12 - version: 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@nestjs/platform-ws': specifier: ^9.4.2 - version: 9.4.2(@nestjs/common@9.4.0)(@nestjs/websockets@9.4.2)(rxjs@7.8.0) + version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0) '@nestjs/websockets': specifier: ^9.4.2 - version: 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@t3-oss/env-core': specifier: ^0.3.1 version: 0.3.1(typescript@4.9.5)(zod@3.21.4) @@ -1343,43 +1346,43 @@ importers: version: 9.3.0 '@nestjs/schematics': specifier: ^9.0.0 - version: 9.1.0(chokidar@3.5.3)(typescript@4.9.5) + version: 9.2.0(chokidar@3.5.3)(typescript@4.9.5) '@nestjs/testing': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) '@types/express': specifier: 4.17.9 version: 4.17.9 '@types/jest': specifier: ^26.0.19 - version: 26.0.24 + version: 26.0.19 '@types/node': specifier: ^18.14.6 - version: 18.15.11 + version: 18.14.6 '@types/supertest': specifier: 2.0.11 version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.54.1(eslint@8.35.0)(typescript@4.9.5) eslint: specifier: ^8.35.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.38.0) + version: 8.7.0(eslint@8.35.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.35.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) jest: specifier: 29.5.0 - version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + version: 29.5.0(@types/node@18.14.6)(ts-node@10.9.1) prettier: specifier: ^2.8.4 version: 2.8.8 @@ -1388,13 +1391,13 @@ importers: version: 6.1.3 ts-jest: specifier: 29.1.0 - version: 29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@4.9.5) + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) ts-loader: specifier: ^9.2.3 version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -1406,46 +1409,46 @@ importers: dependencies: '@algolia/client-search': specifier: ^4.13.1 - version: 4.17.0 + version: 4.13.1 '@astrojs/mdx': specifier: ^0.18.3 - version: 0.18.3(astro@1.9.2)(rollup@2.70.2) + version: 0.18.3(astro@1.6.10)(rollup@2.70.2) '@astrojs/react': specifier: ^1.2.2 - version: 1.2.2(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) + version: 1.2.2(@types/react-dom@18.0.5)(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.21.4)(solid-js@1.7.3)(vite@3.2.5) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.4.3)(vite@3.2.5) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 - version: 3.3.3 + version: 3.1.0 '@docsearch/react': specifier: ^3.1.0 - version: 3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) + version: 3.1.0(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0) '@types/node': specifier: ^18.0.0 - version: 18.15.11 + version: 18.14.6 '@types/react': specifier: ^17.0.45 - version: 17.0.58 + version: 17.0.45 '@types/react-dom': specifier: ^18.0.0 - version: 18.0.11 + version: 18.0.5 astro: specifier: ^1.6.10 - version: 1.9.2(@types/node@18.15.11)(ts-node@10.9.1) + version: 1.6.10(@types/node@18.14.6)(ts-node@10.9.1) react-dom: specifier: ^18.1.0 version: 18.2.0(react@18.2.0) solid-js: specifier: ^1.4.3 - version: 1.7.3 + version: 1.4.3 vite: specifier: ~3.2.5 - version: 3.2.5(@types/node@18.15.11) + version: 3.2.5(@types/node@18.14.6) devDependencies: '@types/html-escaper': specifier: ^3.0.0 @@ -1455,25 +1458,25 @@ importers: version: 1.0.2 eslint: specifier: ^8.28.0 - version: 8.38.0 + version: 8.35.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.38.0) + version: 8.7.0(eslint@8.35.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.54.1)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.35.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 - version: 0.21.1(eslint@8.38.0) + version: 0.21.0(eslint@8.35.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 prettier: specifier: ^2.8.0 - version: 2.8.7 + version: 2.8.8 prettier-plugin-astro: specifier: ^0.7.0 - version: 0.7.2 + version: 0.7.0 packages: @@ -1481,115 +1484,139 @@ packages: resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==} dev: true - /@algolia/autocomplete-core@1.7.4: - resolution: {integrity: sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==} + /@algolia/autocomplete-core@1.6.3: + resolution: {integrity: sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA==} dependencies: - '@algolia/autocomplete-shared': 1.7.4 + '@algolia/autocomplete-shared': 1.6.3 dev: false - /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0): - resolution: {integrity: sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' + /@algolia/autocomplete-shared@1.6.3: + resolution: {integrity: sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg==} + dev: false + + /@algolia/cache-browser-local-storage@4.17.2: + resolution: {integrity: sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==} dependencies: - '@algolia/autocomplete-shared': 1.7.4 - '@algolia/client-search': 4.17.0 - algoliasearch: 4.17.0 + '@algolia/cache-common': 4.17.2 + dev: false + + /@algolia/cache-common@4.13.1: + resolution: {integrity: sha512-7Vaf6IM4L0Jkl3sYXbwK+2beQOgVJ0mKFbz/4qSxKd1iy2Sp77uTAazcX+Dlexekg1fqGUOSO7HS4Sx47ZJmjA==} dev: false - /@algolia/autocomplete-shared@1.7.4: - resolution: {integrity: sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==} + /@algolia/cache-common@4.17.2: + resolution: {integrity: sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==} dev: false - /@algolia/cache-browser-local-storage@4.17.0: - resolution: {integrity: sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==} + /@algolia/cache-in-memory@4.17.2: + resolution: {integrity: sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==} dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/cache-common': 4.17.2 dev: false - /@algolia/cache-common@4.17.0: - resolution: {integrity: sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==} + /@algolia/client-account@4.17.2: + resolution: {integrity: sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==} + dependencies: + '@algolia/client-common': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/transporter': 4.17.2 dev: false - /@algolia/cache-in-memory@4.17.0: - resolution: {integrity: sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==} + /@algolia/client-analytics@4.17.2: + resolution: {integrity: sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==} dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/client-common': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: false - /@algolia/client-account@4.17.0: - resolution: {integrity: sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==} + /@algolia/client-common@4.13.1: + resolution: {integrity: sha512-LcDoUE0Zz3YwfXJL6lJ2OMY2soClbjrrAKB6auYVMNJcoKZZ2cbhQoFR24AYoxnGUYBER/8B+9sTBj5bj/Gqbg==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/requester-common': 4.13.1 + '@algolia/transporter': 4.13.1 dev: false - /@algolia/client-analytics@4.17.0: - resolution: {integrity: sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==} + /@algolia/client-common@4.17.2: + resolution: {integrity: sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: false - /@algolia/client-common@4.17.0: - resolution: {integrity: sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==} + /@algolia/client-personalization@4.17.2: + resolution: {integrity: sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==} dependencies: - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: false - /@algolia/client-personalization@4.17.0: - resolution: {integrity: sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==} + /@algolia/client-search@4.13.1: + resolution: {integrity: sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.13.1 + '@algolia/requester-common': 4.13.1 + '@algolia/transporter': 4.13.1 dev: false - /@algolia/client-search@4.17.0: - resolution: {integrity: sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==} + /@algolia/client-search@4.17.2: + resolution: {integrity: sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 + dev: false + + /@algolia/logger-common@4.13.1: + resolution: {integrity: sha512-L6slbL/OyZaAXNtS/1A8SAbOJeEXD5JcZeDCPYDqSTYScfHu+2ePRTDMgUTY4gQ7HsYZ39N1LujOd8WBTmM2Aw==} dev: false - /@algolia/logger-common@4.17.0: - resolution: {integrity: sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==} + /@algolia/logger-common@4.17.2: + resolution: {integrity: sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==} dev: false - /@algolia/logger-console@4.17.0: - resolution: {integrity: sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==} + /@algolia/logger-console@4.17.2: + resolution: {integrity: sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==} dependencies: - '@algolia/logger-common': 4.17.0 + '@algolia/logger-common': 4.17.2 dev: false - /@algolia/requester-browser-xhr@4.17.0: - resolution: {integrity: sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==} + /@algolia/requester-browser-xhr@4.17.2: + resolution: {integrity: sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/requester-common': 4.17.2 + dev: false + + /@algolia/requester-common@4.13.1: + resolution: {integrity: sha512-eGVf0ID84apfFEuXsaoSgIxbU3oFsIbz4XiotU3VS8qGCJAaLVUC5BUJEkiFENZIhon7hIB4d0RI13HY4RSA+w==} + dev: false + + /@algolia/requester-common@4.17.2: + resolution: {integrity: sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==} dev: false - /@algolia/requester-common@4.17.0: - resolution: {integrity: sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==} + /@algolia/requester-node-http@4.17.2: + resolution: {integrity: sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==} + dependencies: + '@algolia/requester-common': 4.17.2 dev: false - /@algolia/requester-node-http@4.17.0: - resolution: {integrity: sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==} + /@algolia/transporter@4.13.1: + resolution: {integrity: sha512-pICnNQN7TtrcYJqqPEXByV8rJ8ZRU2hCiIKLTLRyNpghtQG3VAFk6fVtdzlNfdUGZcehSKGarPIZEHlQXnKjgw==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/cache-common': 4.13.1 + '@algolia/logger-common': 4.13.1 + '@algolia/requester-common': 4.13.1 dev: false - /@algolia/transporter@4.17.0: - resolution: {integrity: sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==} + /@algolia/transporter@4.17.2: + resolution: {integrity: sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==} dependencies: - '@algolia/cache-common': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/requester-common': 4.17.0 + '@algolia/cache-common': 4.17.2 + '@algolia/logger-common': 4.17.2 + '@algolia/requester-common': 4.17.2 dev: false /@ampproject/remapping@2.2.1: @@ -1633,6 +1660,23 @@ packages: source-map: 0.7.4 dev: true + /@angular-devkit/core@16.0.1(chokidar@3.5.3): + resolution: {integrity: sha512-2uz98IqkKJlgnHbWQ7VeL4pb+snGAZXIama2KXi+k9GsRntdcw+udX8rL3G9SdUGUF+m6+147Y1oRBMHsO/v4w==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + chokidar: 3.5.3 + jsonc-parser: 3.2.0 + rxjs: 7.8.1 + source-map: 0.7.4 + dev: true + /@angular-devkit/schematics-cli@15.2.4(chokidar@3.5.3): resolution: {integrity: sha512-QTTKEH5HOkxvQtCxb2Lna2wubehkaIzA6DKUBISijPQliLomw74tzc7lXCywmMqRTbQPVRLG3kBK97hR4x67nA==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1674,17 +1718,30 @@ packages: - chokidar dev: true + /@angular-devkit/schematics@16.0.1(chokidar@3.5.3): + resolution: {integrity: sha512-A9D0LTYmiqiBa90GKcSuWb7hUouGIbm/AHbJbjL85WLLRbQA2PwKl7P5Mpd6nS/ZC0kfG4VQY3VOaDvb3qpI9g==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 16.0.1(chokidar@3.5.3) + jsonc-parser: 3.2.0 + magic-string: 0.30.0 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + dev: true + /@apidevtools/json-schema-ref-parser@9.1.2: resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==} dependencies: '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 call-me-maybe: 1.0.2 js-yaml: 4.1.0 dev: false - /@astrojs/compiler@0.31.4: - resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==} + /@astrojs/compiler@0.29.19: + resolution: {integrity: sha512-lvPpoOA6Fc1NpJrPT65ZOhhFieYkiBds9wzOhWX55lXMUpNPu5CUxqzgDAkNSTIoXHZxkxHfi+6EpFNnRZBBYQ==} /@astrojs/compiler@0.32.0: resolution: {integrity: sha512-QL5qMGkfsC1/kDjJF4RRagz8/hACBUb19cHWrQ8AROphS42qXM6JhoO1Og5FohV3p2VfT5CdEJspn4uNsgZvmw==} @@ -1694,13 +1751,13 @@ packages: resolution: {integrity: sha512-fPovAX/X46eE2w03jNRMpQ7W9m2mAvNt4Ay65lD9wl1Z5vIQYxlg7Enp9qP225muTr4jSVB5QiLumFJmZMAaVA==} hasBin: true dependencies: - '@vscode/emmet-helper': 2.8.6 + '@vscode/emmet-helper': 2.8.9 events: 3.3.0 prettier: 2.8.8 - prettier-plugin-astro: 0.7.2 + prettier-plugin-astro: 0.7.0 source-map: 0.7.4 - vscode-css-languageservice: 6.2.4 - vscode-html-languageservice: 5.0.4 + vscode-css-languageservice: 6.2.6 + vscode-html-languageservice: 5.0.6 vscode-languageserver: 8.1.0 vscode-languageserver-protocol: 3.17.3 vscode-languageserver-textdocument: 1.0.8 @@ -1718,16 +1775,16 @@ packages: github-slugger: 1.5.0 hast-util-to-html: 8.0.4 import-meta-resolve: 2.2.2 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdx-jsx: 1.2.0 - micromark-extension-mdx-expression: 1.0.4 - micromark-extension-mdx-md: 1.0.0 - micromark-util-combine-extensions: 1.0.0 + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-md: 1.0.1 + micromark-util-combine-extensions: 1.1.0 rehype-raw: 6.1.1 rehype-stringify: 9.0.3 remark-gfm: 3.0.1 - remark-parse: 10.0.1 + remark-parse: 10.0.2 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 shiki: 0.11.1 @@ -1739,22 +1796,22 @@ packages: - supports-color dev: false - /@astrojs/markdown-remark@2.1.4(astro@1.9.2): - resolution: {integrity: sha512-z5diCcFo2xkBAJ11KySAIKpZZkULZmzUvWsZ2VWIOrR6QrEgEfVl5jTpgPSedx4m+xUPuemlUviOotGB7ItNsQ==} + /@astrojs/markdown-remark@2.2.1(astro@1.6.10): + resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==} peerDependencies: - astro: ^2.3.0 + astro: ^2.5.0 dependencies: - '@astrojs/prism': 2.1.1 - astro: 1.9.2(@types/node@18.15.11)(ts-node@10.9.1) + '@astrojs/prism': 2.1.2 + astro: 1.6.10(@types/node@18.14.6)(ts-node@10.9.1) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 rehype-raw: 6.1.1 rehype-stringify: 9.0.3 remark-gfm: 3.0.1 - remark-parse: 10.0.1 + remark-parse: 10.0.2 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 - shiki: 0.11.1 + shiki: 0.14.2 unified: 10.1.2 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -1762,16 +1819,16 @@ packages: - supports-color dev: false - /@astrojs/mdx@0.18.3(astro@1.9.2)(rollup@2.70.2): + /@astrojs/mdx@0.18.3(astro@1.6.10)(rollup@2.70.2): resolution: {integrity: sha512-fFkzYthnFqxmdp6IesvzU6FDHdAGo9bf4dbMOPCREcBfEhATqSpT9gjK/HdJ5s1MfZI8jjYeSC3yzhmNlq62qA==} engines: {node: '>=16.12.0'} dependencies: - '@astrojs/markdown-remark': 2.1.4(astro@1.9.2) - '@astrojs/prism': 2.1.1 + '@astrojs/markdown-remark': 2.2.1(astro@1.6.10) + '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 '@mdx-js/rollup': 2.3.0(rollup@2.70.2) acorn: 8.8.2 - es-module-lexer: 1.2.1 + es-module-lexer: 1.3.0 estree-util-visit: 1.2.1 github-slugger: 1.5.0 gray-matter: 4.0.3 @@ -1794,11 +1851,11 @@ packages: dependencies: '@types/acorn': 4.0.6 estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 dev: false @@ -1810,14 +1867,14 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/prism@2.1.1: - resolution: {integrity: sha512-Gnwnlb1lGJzCQEg89r4/WqgfCGPNFC7Kuh2D/k289Cbdi/2PD7Lrdstz86y1itDvcb2ijiRqjqWnJ5rsfu/QOA==} + /@astrojs/prism@2.1.2: + resolution: {integrity: sha512-3antim1gb34689GHRQFJ88JEo93HuZKQBnmxDT5W/nxiNz1p/iRxnCTEhIbJhqMOTRbbo5h2ldm5qSxx+TMFQA==} engines: {node: '>=16.12.0'} dependencies: prismjs: 1.29.0 dev: false - /@astrojs/react@1.2.2(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): + /@astrojs/react@1.2.2(@types/react-dom@18.0.5)(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ab9fYvzkC74J7N+M3DWQuZgwu7sYjW0aLO3sEAdCX/jZZz+0BhrqS8m9QjtGJyQK/niF4tgJjpPfadopxKc56g==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: @@ -1826,24 +1883,24 @@ packages: react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.4) - '@types/react': 17.0.58 - '@types/react-dom': 18.0.11 + '@babel/core': 7.18.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.18.5) + '@types/react': 17.0.45 + '@types/react-dom': 18.0.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.21.4)(solid-js@1.7.3)(vite@3.2.5): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.4.3)(vite@3.2.5): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: solid-js: ^1.4.3 dependencies: - babel-preset-solid: 1.7.3(@babel/core@7.21.4) - solid-js: 1.7.3 + babel-preset-solid: 1.7.4(@babel/core@7.22.5) + solid-js: 1.4.3 vitefu: 0.2.4(vite@3.2.5) transitivePeerDependencies: - '@babel/core' @@ -1948,11 +2005,11 @@ packages: '@aws-sdk/types': 3.310.0 tslib: 2.5.2 - /@aws-sdk/abort-controller@3.329.0: - resolution: {integrity: sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw==} + /@aws-sdk/abort-controller@3.347.0: + resolution: {integrity: sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.329.0 + '@aws-sdk/types': 3.347.0 tslib: 2.5.2 dev: false @@ -2318,14 +2375,14 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): + /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-QobsFsDDoOs26nLmxo8nTTCwjJmO4jmElqU4R2r2mlf4g3ClSm5+W79jbqbfDKlEGbN4TtDr+FzWYiULOl/TIg==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/abort-controller': ^3.0.0 '@aws-sdk/client-s3': ^3.0.0 dependencies: - '@aws-sdk/abort-controller': 3.329.0 + '@aws-sdk/abort-controller': 3.347.0 '@aws-sdk/client-s3': 3.325.0 '@aws-sdk/middleware-endpoint': 3.325.0 '@aws-sdk/smithy-client': 3.325.0 @@ -2600,8 +2657,8 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/types@3.329.0: - resolution: {integrity: sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==} + /@aws-sdk/types@3.347.0: + resolution: {integrity: sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.2 @@ -2774,14 +2831,14 @@ packages: dependencies: tslib: 2.5.2 - /@babel/code-frame@7.21.4: - resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.5 - /@babel/compat-data@7.21.4: - resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} engines: {node: '>=6.9.0'} /@babel/core@7.17.9: @@ -2789,15 +2846,60 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.4 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/core@7.18.5: + resolution: {integrity: sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.18.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + /@babel/core@7.21.8: + resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -2807,20 +2909,20 @@ packages: - supports-color dev: true - /@babel/core@7.21.4: - resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} + /@babel/core@7.22.5: + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.4 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -2829,114 +2931,206 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.21.4: - resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} + /@babel/generator@7.21.9: + resolution: {integrity: sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: - resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: + resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.22.5 '@babel/core': 7.17.9 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.8 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.18.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.8 + lru-cache: 5.1.1 + semver: 6.3.0 + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.8 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.8 lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.0 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 + semver: 6.3.0 dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 + semver: 6.3.0 dev: true /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.17.9): @@ -2945,8 +3139,8 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.2 @@ -2955,14 +3149,14 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.2 @@ -2971,230 +3165,284 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} - engines: {node: '>=6.9.0'} - - /@babel/helper-explode-assignable-expression@7.18.6: - resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} - engines: {node: '>=6.9.0'} + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + peerDependencies: + '@babel/core': ^7.4.0-0 dependencies: - '@babel/types': 7.21.4 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-function-name@7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.4 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/helper-member-expression-to-functions@7.21.0: - resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 dev: true /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 dev: false - /@babel/helper-module-imports@7.21.4: - resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/helper-module-transforms@7.21.2: - resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + /@babel/helper-module-transforms@7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 dev: true - /@babel/helper-plugin-utils@7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.4 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-replace-supers@7.20.7: - resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + /@babel/helper-replace-supers@7.22.5: + resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-simple-access@7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.5: + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.20.5: - resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + /@babel/helper-wrap-function@7.22.5: + resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers@7.21.0: - resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.21.4: - resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} + /@babel/parser@7.21.9: + resolution: {integrity: sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.17.9) + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.8) dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) dev: true /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.17.9): @@ -3204,25 +3452,25 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.17.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) transitivePeerDependencies: - supports-color dev: true @@ -3234,21 +3482,34 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.18.5): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.18.5) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3260,23 +3521,23 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.8): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color dev: true @@ -3288,19 +3549,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.17.9): @@ -3310,19 +3571,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.17.9): @@ -3332,19 +3593,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.17.9): @@ -3354,19 +3615,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.17.9): @@ -3376,19 +3637,30 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.18.5): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.18.5) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.17.9): @@ -3398,19 +3670,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.17.9): @@ -3419,26 +3691,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.22.5 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.17.9): @@ -3448,19 +3720,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.17.9): @@ -3470,21 +3742,33 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.18.5): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.18.5) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) dev: true /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.17.9): @@ -3494,51 +3778,60 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.17.9): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.21.8): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color dev: true @@ -3550,1526 +3843,2488 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.9): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.9): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.18.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.17.9): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.17.9): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.18.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.4): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.9): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.18.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.9): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.18.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.9): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.18.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.17.9): - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.18.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.9): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.18.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.8): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.17.9): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.17.9): - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.17.9): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/core': 7.21.8 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.17.9): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.17.9): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.4): - resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/types': 7.21.4 + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - regenerator-transform: 0.15.1 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - regenerator-transform: 0.15.1 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.17.9): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.18.5) dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.17.9): - resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.17.9) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.4): - resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.17.9): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/preset-env@7.16.11(@babel/core@7.17.9): - resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.17.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.17.9) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.17.9) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.17.9) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.17.9) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.17.9) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.17.9) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.17.9) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.17.9) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.17.9) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.17.9) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.17.9) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.17.9) - '@babel/preset-modules': 0.1.5(@babel/core@7.17.9) - '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.9) - babel-plugin-polyfill-corejs3: 0.5.3(@babel/core@7.17.9) - babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.9) - core-js-compat: 3.30.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.20.2(@babel/core@7.21.4): - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) - '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) - core-js-compat: 3.30.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) - '@babel/types': 7.21.4 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) - core-js-compat: 3.30.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-flow@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.4) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.17.9): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/types': 7.21.4 - esutils: 2.0.3 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.21.4): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/types': 7.21.4 - esutils: 2.0.3 + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-typescript@7.16.7(@babel/core@7.17.9): - resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.17.9) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-typescript@7.16.7(@babel/core@7.21.4): - resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/register@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==} + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.5 - source-map-support: 0.5.21 - dev: true + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.18.5) + '@babel/types': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.17.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.18.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.18.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.16.11(@babel/core@7.17.9): + resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.17.9 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.17.9) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.17.9) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.17.9) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.17.9) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.17.9) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.17.9) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.17.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.17.9) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.17.9) + '@babel/preset-modules': 0.1.5(@babel/core@7.17.9) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.9) + babel-plugin-polyfill-corejs3: 0.5.3(@babel/core@7.17.9) + babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.9) + core-js-compat: 3.31.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env@7.20.2(@babel/core@7.21.8): + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.21.8) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.8) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) + core-js-compat: 3.31.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-flow@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.18.5) + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.17.9): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.17.9) + '@babel/types': 7.22.5 + esutils: 2.0.3 + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.21.8): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) + '@babel/types': 7.22.5 + esutils: 2.0.3 + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + esutils: 2.0.3 + dev: true + + /@babel/preset-typescript@7.16.7(@babel/core@7.17.9): + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.17.9) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-typescript@7.16.7(@babel/core@7.18.5): + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.18.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/register@7.22.5(@babel/core@7.18.5): + resolution: {integrity: sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.5 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.5 + source-map-support: 0.5.21 + dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.21.0: - resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} + /@babel/runtime@7.22.5: + resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + + /@babel/traverse@7.21.5: + resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.21.9 + '@babel/types': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/traverse@7.21.4: - resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} + /@babel/traverse@7.22.5: + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.21.4: - resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} + /@babel/types@7.21.5: + resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + dev: true + + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 /@balena/dockerignore@1.0.2: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true + /@ballerine/common@0.5.2: + resolution: {integrity: sha512-RD+fw92CiF/FbYqqpWrRKZq++ncRP3EMnTD9Xvd6jUPedSlik6HVF5EXWhEHSpMeYK0622tvVxyYqAOhDlUFKw==} + engines: {node: '>=12'} + dependencies: + ajv: 8.12.0 + json-schema-to-zod: 0.6.3 + dev: false + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -5079,7 +6334,7 @@ packages: engines: {node: '>= 16'} dependencies: '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 call-me-maybe: 1.0.2 js-yaml: 4.1.0 dev: true @@ -5109,14 +6364,14 @@ packages: dependencies: '@branchlint/common': 0.0.1 lodash: 4.17.21 - yargs: 17.7.1 + yargs: 17.7.2 zod: 3.21.4 dev: true /@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/config': 2.3.0 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 2.0.0 @@ -5134,7 +6389,7 @@ packages: /@changesets/assemble-release-plan@5.2.3: resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.5 '@changesets/types': 5.2.1 @@ -5152,7 +6407,7 @@ packages: resolution: {integrity: sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==} hasBin: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/apply-release-plan': 6.1.3 '@changesets/assemble-release-plan': 5.2.3 '@changesets/changelog-git': 0.1.14 @@ -5218,7 +6473,7 @@ packages: /@changesets/get-release-plan@3.0.16: resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/assemble-release-plan': 5.2.3 '@changesets/config': 2.3.0 '@changesets/pre': 1.0.14 @@ -5234,7 +6489,7 @@ packages: /@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -5259,7 +6514,7 @@ packages: /@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -5269,7 +6524,7 @@ packages: /@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/git': 2.0.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.16 @@ -5290,7 +6545,7 @@ packages: /@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 @@ -5304,13 +6559,13 @@ packages: dev: true optional: true - /@commitlint/cli@17.6.0: - resolution: {integrity: sha512-JaZeZ1p6kfkSiZlDoQjK09AuiI9zYQMiIUJzTOM8qNRHFOXOPmiTM56nI67yzeUSNTFu6M/DRqjmdjtA5q3hEg==} + /@commitlint/cli@17.5.0: + resolution: {integrity: sha512-yNW3+M7UM1ioK28LKTrryIVB5qGpXlEv8+rJQiWPMZNayy9/1XR5+lL8qBTNlgopYtZWWnIm5RETcAN29ZTL/A==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.6.0 + '@commitlint/lint': 17.6.5 '@commitlint/load': 17.5.0 '@commitlint/read': 17.5.1 '@commitlint/types': 17.4.4 @@ -5318,14 +6573,14 @@ packages: lodash.isfunction: 3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/config-conventional@17.6.0: - resolution: {integrity: sha512-2Y9M7MN942bTK5h70fJGknhXA02+OtWCkKeIzTSwsdwz1V7y6bxYv24x052E9XHKtZHJfvM3iLuTOsjRvLqWtA==} + /@commitlint/config-conventional@17.4.4: + resolution: {integrity: sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 @@ -5364,21 +6619,21 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.4.4: - resolution: {integrity: sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw==} + /@commitlint/is-ignored@17.6.5: + resolution: {integrity: sha512-CQvAPt9gX7cuUbMrIaIMKczfWJqqr6m8IlJs0F2zYwyyMTQ87QMHIj5jJ5HhOaOkaj6dvTMVGx8Dd1I4xgUuoQ==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 - semver: 7.3.8 + semver: 7.5.0 dev: true - /@commitlint/lint@17.6.0: - resolution: {integrity: sha512-6cEXxpxZd7fbtYMxeosOum/Nnwu3VdSuZcrFSqP9lWNsrHRv4ijVsnLeomvo6WHPchGOeEWAazAI7Q6Ap22fJw==} + /@commitlint/lint@17.6.5: + resolution: {integrity: sha512-BSJMwkE4LWXrOsiP9KoHG+/heSDfvOL/Nd16+ojTS/DX8HZr8dNl8l3TfVr/d/9maWD8fSegRGtBtsyGuugFrw==} engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 17.4.4 - '@commitlint/parse': 17.4.4 - '@commitlint/rules': 17.6.0 + '@commitlint/is-ignored': 17.6.5 + '@commitlint/parse': 17.6.5 + '@commitlint/rules': 17.6.5 '@commitlint/types': 17.4.4 dev: true @@ -5390,15 +6645,15 @@ packages: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 - cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) + cosmiconfig: 8.2.0 + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.14.6)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' @@ -5410,8 +6665,8 @@ packages: engines: {node: '>=v14'} dev: true - /@commitlint/parse@17.4.4: - resolution: {integrity: sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg==} + /@commitlint/parse@17.6.5: + resolution: {integrity: sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 @@ -5442,8 +6697,8 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.6.0: - resolution: {integrity: sha512-Ka7AsRFvkKMYYE7itgo7hddRGCiV+0BgbTIAq4PWmnkHAECxYpdqMVzW5jaATmXZfwfRRTB57e7KZWj6EPmK1A==} + /@commitlint/rules@17.6.5: + resolution: {integrity: sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.4.4 @@ -5483,49 +6738,39 @@ packages: engines: {node: '>=10.0.0'} dev: true - /@docsearch/css@3.3.3: - resolution: {integrity: sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==} + /@docsearch/css@3.1.0: + resolution: {integrity: sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA==} dev: false - /@docsearch/react@3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==} + /@docsearch/react@3.1.0(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' react-dom: '>= 16.8.0 < 19.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true dependencies: - '@algolia/autocomplete-core': 1.7.4 - '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0) - '@docsearch/css': 3.3.3 - '@types/react': 17.0.58 - algoliasearch: 4.17.0 + '@algolia/autocomplete-core': 1.6.3 + '@docsearch/css': 3.1.0 + '@types/react': 17.0.45 + algoliasearch: 4.17.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@algolia/client-search' dev: false - /@emmetio/abbreviation@2.3.1: - resolution: {integrity: sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g==} + /@emmetio/abbreviation@2.3.3: + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} dependencies: - '@emmetio/scanner': 1.0.2 + '@emmetio/scanner': 1.0.4 dev: false - /@emmetio/css-abbreviation@2.1.6: - resolution: {integrity: sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw==} + /@emmetio/css-abbreviation@2.1.8: + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} dependencies: - '@emmetio/scanner': 1.0.2 + '@emmetio/scanner': 1.0.4 dev: false - /@emmetio/scanner@1.0.2: - resolution: {integrity: sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w==} + /@emmetio/scanner@1.0.4: + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} dev: false /@emotion/is-prop-valid@0.8.8: @@ -5541,8 +6786,8 @@ packages: dev: false optional: true - /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0): - resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' dependencies: @@ -5555,15 +6800,15 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-arm64@0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-arm@0.15.18: @@ -5580,15 +6825,15 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-arm@0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-x64@0.16.17: @@ -5597,15 +6842,15 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-x64@0.17.16: - resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/darwin-arm64@0.16.17: @@ -5614,15 +6859,15 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-arm64@0.17.16: - resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/darwin-x64@0.16.17: @@ -5631,15 +6876,15 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-x64@0.17.16: - resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-arm64@0.16.17: @@ -5648,15 +6893,15 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-arm64@0.17.16: - resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-x64@0.16.17: @@ -5665,15 +6910,15 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-x64@0.17.16: - resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm64@0.16.17: @@ -5682,15 +6927,15 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm64@0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm@0.16.17: @@ -5699,15 +6944,15 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm@0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ia32@0.16.17: @@ -5716,15 +6961,24 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ia32@0.17.16: - resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.14.54: + resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false optional: true /@esbuild/linux-loong64@0.15.18: @@ -5741,15 +6995,15 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-loong64@0.17.16: - resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-mips64el@0.16.17: @@ -5758,15 +7012,15 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-mips64el@0.17.16: - resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ppc64@0.16.17: @@ -5775,15 +7029,15 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ppc64@0.17.16: - resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-riscv64@0.16.17: @@ -5792,15 +7046,15 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-riscv64@0.17.16: - resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-s390x@0.16.17: @@ -5809,15 +7063,15 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-s390x@0.17.16: - resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-x64@0.16.17: @@ -5826,15 +7080,15 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-x64@0.17.16: - resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/netbsd-x64@0.16.17: @@ -5843,15 +7097,15 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true - /@esbuild/netbsd-x64@0.17.16: - resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true + dev: true optional: true /@esbuild/openbsd-x64@0.16.17: @@ -5860,15 +7114,15 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true - /@esbuild/openbsd-x64@0.17.16: - resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true + dev: true optional: true /@esbuild/sunos-x64@0.16.17: @@ -5877,15 +7131,15 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true - /@esbuild/sunos-x64@0.17.16: - resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true + dev: true optional: true /@esbuild/win32-arm64@0.16.17: @@ -5894,15 +7148,15 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-arm64@0.17.16: - resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-ia32@0.16.17: @@ -5911,15 +7165,15 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-ia32@0.17.16: - resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-x64@0.16.17: @@ -5928,15 +7182,15 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-x64@0.17.16: - resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.22.0): @@ -5946,22 +7200,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.22.0 - eslint-visitor-keys: 3.4.0 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.38.0 - eslint-visitor-keys: 3.4.0 - dev: true - - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + eslint-visitor-keys: 3.4.1 dev: true /@eslint/eslintrc@1.4.1: @@ -5970,7 +7209,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -5980,13 +7219,13 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -5997,8 +7236,8 @@ packages: - supports-color dev: true - /@eslint/js@8.38.0: - resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} + /@eslint/js@8.35.0: + resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -6020,14 +7259,14 @@ packages: dependencies: '@felte/common': 1.1.4 - /@felte/reporter-svelte@1.1.5(svelte@3.58.0): + /@felte/reporter-svelte@1.1.5(svelte@3.55.1): resolution: {integrity: sha512-emV9eYpN6/JcUP5sDXC3zPFdTnEp4Tw3G7KyT/cSg9MSnhYz+6ZW7eBEGsFSS0dJHocIliZPk+T4ROKdQgFG+w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/common': 1.1.4 - svelte: 3.58.0 + svelte: 3.55.1 dev: false /@felte/validator-zod@1.0.13(zod@3.21.4): @@ -6044,13 +7283,23 @@ packages: resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} dev: false + /@floating-ui/core@1.3.0: + resolution: {integrity: sha512-vX1WVAdPjZg9DkDkC+zEx/tKtnST6/qcNpwcjeBgco3XRNHz5PUA+ivi/yr6G3o0kMR60uKBJcfOdfzOFI7PMQ==} + dev: false + /@floating-ui/dom@0.5.4: resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} dependencies: '@floating-ui/core': 0.7.3 dev: false - /@floating-ui/react-dom@0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/dom@1.3.0: + resolution: {integrity: sha512-qIAwejE3r6NeA107u4ELDKkH8+VtgRKdXqtSPaKflL2S2V+doyN+Wt9s5oHKXPDo4E8TaVXaHT3+6BbagH31xw==} + dependencies: + '@floating-ui/core': 1.3.0 + dev: false + + /@floating-ui/react-dom@0.7.2(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: react: '>=16.8.0' @@ -6059,11 +7308,22 @@ packages: '@floating-ui/dom': 0.5.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.35)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.14)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false + /@floating-ui/react-dom@2.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.3.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@fontsource/inter@4.5.15: resolution: {integrity: sha512-FzleM9AxZQK2nqsTDtBiY0PMEVWvnKnuu2i09+p6DHvrHsuucoV2j0tmw+kAT3L4hvsLdAIDv6MdGehsPIdT+Q==} dev: false @@ -6082,22 +7342,12 @@ packages: tslib: 2.3.1 dev: false - /@graphql-tools/merge@8.4.0(graphql@16.6.0): - resolution: {integrity: sha512-3XYCWe0d3I4F1azNj1CdShlbHfTIfiDgj00R9uvFH8tHKh7i1IWN3F7QQYovcHKhayaR6zPok3YYMESYQcBoaA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.6.0) - graphql: 16.6.0 - tslib: 2.5.2 - dev: false - /@graphql-tools/schema@8.3.1(graphql@16.6.0): resolution: {integrity: sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/merge': 8.4.0(graphql@16.6.0) + '@graphql-tools/merge': 8.2.2(graphql@16.6.0) '@graphql-tools/utils': 8.6.1(graphql@16.6.0) graphql: 16.6.0 tslib: 2.3.1 @@ -6113,24 +7363,6 @@ packages: tslib: 2.3.1 dev: false - /@graphql-tools/utils@9.2.1(graphql@16.6.0): - resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0) - graphql: 16.6.0 - tslib: 2.5.2 - dev: false - - /@graphql-typed-document-node/core@3.2.0(graphql@16.6.0): - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - graphql: 16.6.0 - dev: false - /@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} dev: false @@ -6159,8 +7391,8 @@ packages: transitivePeerDependencies: - supports-color - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -6202,7 +7434,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -6214,7 +7446,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -6235,7 +7467,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -6280,14 +7512,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.14.6)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -6314,7 +7546,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-mock: 27.5.1 dev: true @@ -6324,7 +7556,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-mock: 29.5.0 dev: true @@ -6351,7 +7583,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -6362,8 +7594,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.2.0 - '@types/node': 18.15.11 + '@sinonjs/fake-timers': 10.1.0 + '@types/node': 18.14.6 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -6404,7 +7636,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -6443,7 +7675,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -6536,7 +7768,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -6559,7 +7791,7 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 @@ -6584,7 +7816,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -6595,7 +7827,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -6607,13 +7839,13 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.2.2(typescript@4.9.5)(vite@4.2.1): - resolution: {integrity: sha512-BlArZRyCNaQXo9jSW1crabSqdQXlgIB9bh3W7WpKTeopUFy2PqOkVFdOv3FvvcJOu0A3pC/ECyQMiXxXK547MQ==} + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.3(typescript@4.9.5)(vite@4.1.1): + resolution: {integrity: sha512-OJqiEnia4VlAlitUfCwB7UBbxI+x9E4yfuR5uCPvkJGkXac4/v+/c7ZO3ySG028ib/NTS3pIqIaSo7hWsp7p8w==} peerDependencies: typescript: '>= 4.3.x' vite: ^3.0.0 || ^4.0.0 @@ -6621,10 +7853,12 @@ packages: typescript: optional: true dependencies: + glob: 7.2.3 + glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@4.9.5) typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) dev: true /@jridgewell/gen-mapping@0.3.3: @@ -6687,19 +7921,15 @@ packages: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - /@lukemorales/query-key-factory@1.2.0(@tanstack/query-core@4.29.1): - resolution: {integrity: sha512-ilUedLpJdpOCMKgxoncRkYEFF7C+K//IK/QWXHs0G6HjmZunT9XcrpWHNc5RjrBBqPhdxYNa7aUoEhjonwl4eQ==} + /@lukemorales/query-key-factory@1.0.3: + resolution: {integrity: sha512-50E4OCFbOUkHNCiHS5g2RzoDH2ZI0zg+k1/z0x9c9QqfotWNHSVSQ0F1Xb6cO+Ys/W+uMrECIFEcvzFJ/oVmFg==} engines: {node: '>=14'} - peerDependencies: - '@tanstack/query-core': ^4.0.0 - dependencies: - '@tanstack/query-core': 4.29.1 dev: false /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -6708,7 +7938,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -6723,12 +7953,12 @@ packages: detect-libc: 2.0.1 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.6.9 + node-fetch: 2.6.11 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.4.0 - tar: 6.1.13 + semver: 7.5.1 + tar: 6.1.15 transitivePeerDependencies: - encoding - supports-color @@ -6738,16 +7968,16 @@ packages: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.0 - '@types/mdx': 2.0.4 + '@types/mdx': 2.0.5 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 estree-walker: 3.0.3 - hast-util-to-estree: 2.3.2 + hast-util-to-estree: 2.3.3 markdown-extensions: 1.1.1 periscopic: 3.1.0 remark-mdx: 2.3.0 - remark-parse: 10.0.1 + remark-parse: 10.0.2 remark-rehype: 10.1.0 unified: 10.1.2 unist-util-position-from-estree: 1.1.2 @@ -6763,8 +7993,8 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.4 - '@types/react': 18.0.35 + '@types/mdx': 2.0.5 + '@types/react': 18.0.14 react: 18.2.0 dev: true @@ -6782,32 +8012,32 @@ packages: - supports-color dev: false - /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.11): - resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} + /@microsoft/api-extractor-model@7.27.2(@types/node@18.14.6): + resolution: {integrity: sha512-JWhSfEb4UMYZgI4JsJOws1DjQrb7BaoXoWQV5XW23MWRn1krHVmRHky82Dby5rQPHdr/BBKvEjZV6joFmaGU4Q==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@rushstack/node-core-library': 3.59.3(@types/node@18.14.6) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.34.4(@types/node@18.15.11): - resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} + /@microsoft/api-extractor@7.35.3(@types/node@18.14.6): + resolution: {integrity: sha512-Psh6rZB7BeJznIKJd1+xPhM0AQVXLyYHxIz5ezN7Whu3DIHfx/iRJZLFvMdshpB046ir/JDYBciuYdQbArloHQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.11) + '@microsoft/api-extractor-model': 7.27.2(@types/node@18.14.6) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) - '@rushstack/rig-package': 0.3.18 - '@rushstack/ts-command-line': 4.13.2 + '@rushstack/node-core-library': 3.59.3(@types/node@18.14.6) + '@rushstack/rig-package': 0.3.20 + '@rushstack/ts-command-line': 4.15.0 colors: 1.2.5 lodash: 4.17.21 resolve: 1.22.2 semver: 7.3.8 source-map: 0.6.1 - typescript: 4.8.4 + typescript: 5.0.4 transitivePeerDependencies: - '@types/node' dev: true @@ -6834,8 +8064,8 @@ packages: tslib: 2.5.2 dev: false - /@motionone/dom@10.15.5: - resolution: {integrity: sha512-Xc5avlgyh3xukU9tydh9+8mB8+2zAq+WlLsC3eEIp7Ax7DnXgY7Bj/iv0a4X2R9z9ZFZiaXK3BO0xMYHKbAAdA==} + /@motionone/dom@10.16.2: + resolution: {integrity: sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg==} dependencies: '@motionone/animation': 10.15.1 '@motionone/generators': 10.15.1 @@ -6884,8 +8114,8 @@ packages: engines: {node: '>=14'} dependencies: '@open-draft/until': 1.0.3 - '@types/debug': 4.1.7 - '@xmldom/xmldom': 0.8.7 + '@types/debug': 4.1.8 + '@xmldom/xmldom': 0.8.8 debug: 4.3.4(supports-color@8.1.1) headers-polyfill: 3.1.2 outvariant: 1.4.0 @@ -6894,15 +8124,15 @@ packages: transitivePeerDependencies: - supports-color - /@ndelangen/get-tarball@3.0.7: - resolution: {integrity: sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==} + /@ndelangen/get-tarball@3.0.9: + resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} dependencies: gunzip-maybe: 1.4.2 pump: 3.0.0 tar-fs: 2.1.1 dev: true - /@nestjs/axios@2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/axios@2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-F6oceoQLEn031uun8NiommeMkRIojQqVryxQy/mK7fx0CI0KbgkJL3SloCQcsOD+agoEnqKJKXZpEvL6FNswJg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -6910,7 +8140,7 @@ packages: reflect-metadata: ^0.1.12 rxjs: ^6.0.0 || ^7.0.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) axios: 1.4.0 reflect-metadata: 0.1.13 rxjs: 7.8.0 @@ -6924,7 +8154,7 @@ packages: '@angular-devkit/core': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics-cli': 15.2.4(chokidar@3.5.3) - '@nestjs/schematics': 9.1.0(chokidar@3.5.3)(typescript@4.9.5) + '@nestjs/schematics': 9.2.0(chokidar@3.5.3)(typescript@4.9.5) chalk: 4.1.2 chokidar: 3.5.3 cli-table3: 0.6.3 @@ -6950,8 +8180,8 @@ packages: - webpack-cli dev: true - /@nestjs/common@9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-RUcVAQsEF4WPrmzFXEOUfZnPwrLTe1UVlzXTlSyfqfqbdWDPKDGlIPVelBLfc5/+RRUQ0I5iE4+CQvpCmkqldw==} + /@nestjs/common@9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-NtrUG2VgCbhmZEO1yRt/Utq16uFRV+xeHAOtdYIsfHGG0ssAV2lVLlvFFAQYh0SQ+KuYY1Gsxd3GK2JFoJCNqQ==} peerDependencies: cache-manager: <=5 class-transformer: '*' @@ -6972,16 +8202,16 @@ packages: reflect-metadata: 0.1.13 rxjs: 7.8.0 tslib: 2.5.0 - uid: 2.0.2 + uid: 2.0.1 - /@nestjs/config@2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/config@2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-Ckzel0NZ9CWhNsLfE1hxfDuxJuEbhQvGxSlmZ1/X8awjRmAA/g3kT6M1+MO1SHj1wMtPyUfd9WpwkiqFbiwQgA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.13 rxjs: ^6.0.0 || ^7.2.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) dotenv: 16.0.3 dotenv-expand: 10.0.0 lodash: 4.17.21 @@ -6990,8 +8220,8 @@ packages: uuid: 9.0.0 dev: false - /@nestjs/core@9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-yTLryCgFD0462wPe4HIzhyTcDgibt8Stfwb5YzcX7Ma0NM4m8uBIpcPG109KBubp8ZmV85e5mw4rl20qLQQVsQ==} + /@nestjs/core@9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-Qe0ZjJo7bOlfudn7KHLppYrt5i4k1nR1+9d5ppYat2bb5knCIT4kIqblj666n+22/2zvsHRiTo015cLyLKsLRQ==} requiresBuild: true peerDependencies: '@nestjs/common': ^9.0.0 @@ -7008,9 +8238,9 @@ packages: '@nestjs/websockets': optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) - '@nestjs/websockets': 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) + '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 iterare: 1.2.1 @@ -7018,40 +8248,40 @@ packages: reflect-metadata: 0.1.13 rxjs: 7.8.0 tslib: 2.5.0 - uid: 2.0.2 + uid: 2.0.1 transitivePeerDependencies: - encoding - /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): + /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): resolution: {integrity: sha512-jAKTrpc+Ilrb7CFV1ZuG9b4OYVlFPHUXna2H8BrmxKResyqnzlzR/YIUr8zJE7p15MipAjiVaLHHyEL0C9OYGA==} peerDependencies: '@nestjs/common': ^9.3.7 '@nestjs/core': ^9.3.7 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) chalk: 4.1.2 - node-fetch: 2.6.9 + node-fetch: 2.6.11 reflect-metadata: 0.1.13 transitivePeerDependencies: - encoding dev: false - /@nestjs/event-emitter@1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): + /@nestjs/event-emitter@1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): resolution: {integrity: sha512-PmLpzMYgEKJNxOUrRjb6kNSm2PC6J+BeLTuF/bkYViGM/mVGvYOgU5jq8DQnXmiSmDmyWN+tO2cHSnR7odJJRA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) eventemitter2: 6.4.9 reflect-metadata: 0.1.13 dev: false - /@nestjs/graphql@10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): + /@nestjs/graphql@10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-fsOsoK2nMqmnBisrno+S+Yj/Qr/GLh2b3QCDEx4eooOEGM0+/NjCwmJ19iQ6nBLW6n4K8ZUvuCDMjg9ecaTZ+Q==} peerDependencies: '@apollo/subgraph': ^0.1.5 || ^0.3.0 @@ -7069,9 +8299,9 @@ packages: '@graphql-tools/merge': 8.2.2(graphql@16.6.0) '@graphql-tools/schema': 8.3.1(graphql@16.6.0) '@graphql-tools/utils': 8.6.1(graphql@16.6.0) - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) chokidar: 3.5.3 fast-glob: 3.2.11 graphql: 16.6.0 @@ -7092,17 +8322,17 @@ packages: - utf-8-validate dev: false - /@nestjs/jwt@10.0.3(@nestjs/common@9.4.0): + /@nestjs/jwt@10.0.3(@nestjs/common@9.3.12): resolution: {integrity: sha512-WO8MI3uEMOFKpbO+SAg6l4aRCr+9KvaL+raFMZaXuEUDphXek6pqdox+4tex9242pNSJUA0trfAMaiy/yVrXQg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@types/jsonwebtoken': 9.0.1 jsonwebtoken: 9.0.0 dev: false - /@nestjs/mapped-types@1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 @@ -7115,13 +8345,13 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: false - /@nestjs/mapped-types@1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 || ^9.0.0 @@ -7134,30 +8364,30 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: true - /@nestjs/passport@9.0.3(@nestjs/common@9.4.0)(passport@0.6.0): + /@nestjs/passport@9.0.3(@nestjs/common@9.3.12)(passport@0.6.0): resolution: {integrity: sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 passport: ^0.4.0 || ^0.5.0 || ^0.6.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) passport: 0.6.0 dev: false - /@nestjs/platform-express@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): - resolution: {integrity: sha512-PpnfghpNq7mwG43z3+pacHulsabUCBMla4nUikntXT525ORpZSDvh/nLi1HLfE4w5+FcINc8/RBOyYTeRVmiRQ==} + /@nestjs/platform-express@9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12): + resolution: {integrity: sha512-iQToH9rnZHmm3a2YDKLEN7weU2qC/EVOBnuwTf1lIkqB48yLxlykSJu3KmgtlUUNDt2/HY527QIo+GZSZfCLyg==} peerDependencies: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) body-parser: 1.20.2 cors: 2.8.5 express: 4.18.2 @@ -7166,15 +8396,15 @@ packages: transitivePeerDependencies: - supports-color - /@nestjs/platform-ws@9.4.2(@nestjs/common@9.4.0)(@nestjs/websockets@9.4.2)(rxjs@7.8.0): + /@nestjs/platform-ws@9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0): resolution: {integrity: sha512-JURYiQ/0yoDD/Z14szKDMts6xUP7hI/z5CSBOSAEJk+GdhKB4VW6noTgZQu8KRSZxtLj5tm73JIaOMX9P97Buw==} peerDependencies: '@nestjs/common': ^9.0.0 '@nestjs/websockets': ^9.0.0 rxjs: ^7.1.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/websockets': 9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) rxjs: 7.8.0 tslib: 2.5.2 ws: 8.13.0 @@ -7183,13 +8413,13 @@ packages: - utf-8-validate dev: false - /@nestjs/schematics@9.1.0(chokidar@3.5.3)(typescript@4.9.5): - resolution: {integrity: sha512-/7CyMTnPJSK9/xD9CkCqwuHPOlHVlLC2RDnbdCJ7mIO07SdbBbY14msTqtYW9VRQtsjZPLh1GTChf7ryJUImwA==} + /@nestjs/schematics@9.2.0(chokidar@3.5.3)(typescript@4.9.5): + resolution: {integrity: sha512-wHpNJDPzM6XtZUOB3gW0J6mkFCSJilzCM3XrHI1o0C8vZmFE1snbmkIXNyoi1eV0Nxh1BMymcgz5vIMJgQtTqw==} peerDependencies: typescript: '>=4.3.5' dependencies: - '@angular-devkit/core': 15.2.4(chokidar@3.5.3) - '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) + '@angular-devkit/core': 16.0.1(chokidar@3.5.3) + '@angular-devkit/schematics': 16.0.1(chokidar@3.5.3) jsonc-parser: 3.2.0 pluralize: 8.0.0 typescript: 4.9.5 @@ -7197,7 +8427,7 @@ packages: - chokidar dev: true - /@nestjs/serve-static@3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2): + /@nestjs/serve-static@3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2): resolution: {integrity: sha512-i766UJPYOqvQ2BbRKh0/+Mmq5NkJnmKcShjWV1i5qpXyeM0KDZTn0n7g7ykWq/3LbQgjpMzrhYtGv35GX7GVQw==} peerDependencies: '@fastify/static': ^6.5.0 @@ -7213,13 +8443,13 @@ packages: fastify: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) express: 4.18.2 path-to-regexp: 0.2.5 dev: false - /@nestjs/swagger@6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/swagger@6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-9M2vkfJHIzLqDZwvM5TEZO0MxRCvIb0xVy0LsmWwxH1lrb0z/4MhU+r2CWDhBtTccVJrKxVPiU2s3T3b9uUJbg==} peerDependencies: '@fastify/static': ^6.0.0 @@ -7236,9 +8466,9 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) class-transformer: 0.5.1 class-validator: 0.14.0 js-yaml: 4.1.0 @@ -7248,8 +8478,8 @@ packages: swagger-ui-dist: 4.15.5 dev: true - /@nestjs/testing@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0): - resolution: {integrity: sha512-xZWp363P4otcebg++gSjUcdCfTK0RorORzyFq3aLaSAQOlq8kxfFDRIKzEATR4aOUfqTMMsAA8lhnMJWf35N6A==} + /@nestjs/testing@9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12): + resolution: {integrity: sha512-nH274IXEqU4hr4bcb71POe58hYLONt9RcfKKM5ZvOS7wYMnybMpKKR8DkC1WcfE1P2k2GQmQoHeSH5emPtYrBA==} peerDependencies: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 @@ -7261,12 +8491,12 @@ packages: '@nestjs/platform-express': optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) tslib: 2.5.0 - /@nestjs/websockets@9.4.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/websockets@9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-u1Txsb+rHWOG0mHxTfNt/64eyYSCGg6t/k736P2bdYP1fP4ETo/Z/F4Othau8q0MsWvKi3ZgYRQbhcefaudQww==} peerDependencies: '@nestjs/common': ^9.0.0 @@ -7278,8 +8508,8 @@ packages: '@nestjs/platform-socket.io': optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) iterare: 1.2.1 object-hash: 3.0.0 reflect-metadata: 0.1.13 @@ -7332,7 +8562,7 @@ packages: dependencies: chalk: 4.1.2 consola: 2.15.3 - node-fetch: 2.6.9 + node-fetch: 2.6.11 transitivePeerDependencies: - encoding @@ -7352,24 +8582,24 @@ packages: node-gyp-build: 4.6.0 dev: true - /@pkgr/utils@2.3.1: - resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} + /@pkgr/utils@2.4.1: + resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 + fast-glob: 3.2.12 is-glob: 4.0.3 - open: 8.4.2 + open: 9.1.0 picocolors: 1.0.0 - tiny-glob: 0.2.9 tslib: 2.5.2 - /@playwright/test@1.32.3: - resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} + /@playwright/test@1.32.1: + resolution: {integrity: sha512-FTwjCuhlm1qHUGf4hWjfr64UMJD/z0hXYbk+O387Ioe6WdyZQ+0TBDAc6P+pHjx2xCv1VYNgrKbYrNixFWy4Dg==} engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.15.11 - playwright-core: 1.32.3 + '@types/node': 18.14.6 + playwright-core: 1.32.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -7403,7 +8633,7 @@ packages: /@proload/core@0.3.3: resolution: {integrity: sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ==} dependencies: - deepmerge: 4.3.1 + deepmerge: 4.3.0 escalade: 3.1.1 dev: false @@ -7419,13 +8649,31 @@ packages: /@radix-ui/number@1.0.0: resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: false /@radix-ui/primitive@1.0.0: resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.22.5 + dev: false + + /@radix-ui/react-arrow@1.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false /@radix-ui/react-arrow@1.0.2(react-dom@18.2.0)(react@18.2.0): @@ -7434,24 +8682,45 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-checkbox@1.0.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==} + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-checkbox@1.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TisH0B8hWmYP3ONRduYCyN04rR9yLPIw/Rwyn1RoC1suSoGCa8Wn+YPdSSSarSszeIbcg3p2lBkDp2XXit4sZw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) '@radix-ui/react-use-previous': 1.0.0(react@18.2.0) '@radix-ui/react-use-size': 1.0.0(react@18.2.0) @@ -7465,7 +8734,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -7474,12 +8743,50 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 react: 18.2.0 dev: false @@ -7488,35 +8795,56 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 react: 18.2.0 dev: false - /@radix-ui/react-dialog@1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@babel/runtime': 7.22.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' + react-remove-scroll: 2.5.5(@types/react@18.0.14)(react@18.2.0) dev: false /@radix-ui/react-direction@1.0.0(react@18.2.0): @@ -7524,44 +8852,106 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} + /@radix-ui/react-direction@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.4(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==} + /@radix-ui/react-dismissable-layer@1.0.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-menu': 2.0.4(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): @@ -7569,7 +8959,21 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 react: 18.2.0 dev: false @@ -7579,7 +8983,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) @@ -7587,21 +8991,44 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-jXRuZEkxSWdHZbVyL0J46cm7pQjmOMpwJEFKY+VqAJnV+FxS+zIZExI1OCeIiDwCBzUy6If1FfouOsfqBxr86g==} + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-hover-card@1.0.2(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-LOqJAHdjjLoIhOCHdFO5ASkNACG/wwPQljzrm4U53n1Uxa1Crheazs82dST1946zgu4p0U4IrFmuQ6PTODIlkw==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.0.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -7614,98 +9041,239 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 dev: false + /@radix-ui/react-id@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-label@2.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qcfbS3B8hTYmEO44RNcXB6pegkxRsJIbdxTMu0PEX0Luv5O2DvTIwwVYxQfUwLpM88EL84QRPLOLgwUSApMsLQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-menu@2.0.4(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==} + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.22.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.14)(react@18.2.0) + dev: false + + /@radix-ui/react-popper@1.0.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.22.5 + '@floating-ui/react-dom': 0.7.2(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - aria-hidden: 1.2.3 + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-size': 1.0.0(react@18.2.0) + '@radix-ui/rect': 1.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-popper@1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 - '@floating-ui/react-dom': 0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.22.5 + '@floating-ui/react-dom': 0.7.2(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) - '@radix-ui/react-use-size': 1.0.0(react@18.2.0) - '@radix-ui/rect': 1.0.0 + '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-size': 1.0.0(react@18.2.0) + '@radix-ui/rect': 1.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-portal@1.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.22.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + /@radix-ui/react-primitive@1.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@babel/runtime': 7.22.5 + '@radix-ui/react-slot': 1.0.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -7716,59 +9284,89 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-slot': 1.0.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@babel/runtime': 7.22.5 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + '@types/react-dom': 18.0.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-scroll-area@1.0.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sBX9j8Q+0/jReNObEAveKIGXJtk3xUoSIx4cMKygGtO128QJyVDn01XNOFsyvihKDCTcu7SINzQ2jPAZEhIQtw==} + /@radix-ui/react-scroll-area@1.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/number': 1.0.0 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-direction': 1.0.0(react@18.2.0) '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-select@1.2.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/number': 1.0.0 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -7779,7 +9377,7 @@ packages: '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.1(react@18.2.0) @@ -7791,7 +9389,7 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.14)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -7802,7 +9400,7 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -7813,17 +9411,46 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) react: 18.2.0 dev: false + /@radix-ui/react-slot@1.0.2(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 react: 18.2.0 dev: false @@ -7832,27 +9459,71 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0): resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@types/react': 18.0.14 react: 18.2.0 dev: false @@ -7861,7 +9532,7 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 react: 18.2.0 dev: false @@ -7870,28 +9541,58 @@ packages: peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/rect': 1.0.0 react: 18.2.0 dev: false + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-use-size@1.0.0(react@18.2.0): resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 dev: false + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.14)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) + '@types/react': 18.0.14 + react: 18.2.0 + dev: false + /@radix-ui/react-visually-hidden@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -7900,7 +9601,13 @@ packages: /@radix-ui/rect@1.0.0: resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 + dev: false + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.22.5 dev: false /@remix-run/router@1.6.2: @@ -7920,14 +9627,14 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.21.4 + '@babel/helper-module-imports': 7.22.5 '@rollup/pluginutils': 3.1.0(rollup@2.70.2) '@types/babel__core': 7.20.0 rollup: 2.70.2 dev: true - /@rollup/plugin-commonjs@24.1.0(rollup@2.70.2): - resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==} + /@rollup/plugin-commonjs@24.0.1(rollup@2.70.2): + resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -7953,7 +9660,7 @@ packages: '@rollup/pluginutils': 3.1.0(rollup@2.70.2) '@types/resolve': 1.17.1 builtin-modules: 3.3.0 - deepmerge: 4.3.1 + deepmerge: 4.3.0 is-module: 1.0.0 resolve: 1.22.2 rollup: 2.70.2 @@ -7983,8 +9690,8 @@ packages: magic-string: 0.27.0 dev: false - /@rollup/plugin-terser@0.4.1(rollup@2.70.2): - resolution: {integrity: sha512-aKS32sw5a7hy+fEXVy+5T95aDIwjpGHCTv833HXVtyKMDoVS7pBr5K3L9hEQoNqbJFjfANPrNpIXlTQ7is00eA==} + /@rollup/plugin-terser@0.4.0(rollup@2.70.2): + resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -7995,7 +9702,7 @@ packages: rollup: 2.70.2 serialize-javascript: 6.0.1 smob: 0.0.6 - terser: 5.16.9 + terser: 5.18.0 dev: true /@rollup/pluginutils@3.1.0(rollup@2.70.2): @@ -8027,20 +9734,20 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 2.70.2 - /@rushstack/node-core-library@3.55.2(@types/node@18.15.11): - resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} + /@rushstack/node-core-library@3.59.3(@types/node@18.14.6): + resolution: {integrity: sha512-OGk0nQc+SvDkn+IQN16co691A/96gPoRIoWdIlpUds+sYPAGWdTcNVjKMwFOAsCSASqOeF2lh1GdPtWoWJCkPQ==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -8050,20 +9757,20 @@ packages: z-schema: 5.0.5 dev: true - /@rushstack/rig-package@0.3.18: - resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} + /@rushstack/rig-package@0.3.20: + resolution: {integrity: sha512-XemFRFbH9FOk1Es1kTjrYydenf3hXtrV3xxMCEWPuOSn2Lcll/dsLzEULbhCL0Nf5nGMe52ewEiVtX3odd5Ukg==} dependencies: resolve: 1.22.2 strip-json-comments: 3.1.1 dev: true - /@rushstack/ts-command-line@4.13.2: - resolution: {integrity: sha512-bCU8qoL9HyWiciltfzg7GqdfODUeda/JpI0602kbN5YH22rzTxyqYvv7aRLENCM7XCQ1VRs7nMkEqgJUOU8Sag==} + /@rushstack/ts-command-line@4.15.0: + resolution: {integrity: sha512-Xl1Xc8d89ioJ6AbOQsSIPyYvrQPqmGG+YrqUZKYEDenZtKq57xuFbBJya9TXgAWSB+uVRmDYYd9ogu6WTwRjCQ==} dependencies: '@types/argparse': 1.0.38 argparse: 1.0.10 colors: 1.2.5 - string-argv: 0.3.1 + string-argv: 0.3.2 dev: true /@schematics/angular@13.3.11: @@ -8094,7 +9801,7 @@ packages: requiresBuild: true dependencies: https-proxy-agent: 5.0.1 - node-fetch: 2.6.9 + node-fetch: 2.6.11 progress: 2.0.3 proxy-from-env: 1.1.0 which: 2.0.2 @@ -8181,8 +9888,8 @@ packages: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.2.0: - resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} + /@sinonjs/fake-timers@10.1.0: + resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} dependencies: '@sinonjs/commons': 3.0.0 dev: true @@ -8212,8 +9919,8 @@ packages: '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - axe-core: 4.6.3 - core-js: 3.30.0 + axe-core: 4.7.2 + core-js: 3.31.0 global: 4.4.0 lodash: 4.17.21 react: 18.2.0 @@ -8249,7 +9956,7 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-inspector: 6.0.1(react@18.2.0) + react-inspector: 6.0.2(react@18.2.0) telejson: 7.1.0 ts-dedent: 2.2.0 uuid-browser: 3.1.0 @@ -8318,8 +10025,8 @@ packages: '@storybook/mdx1-csf': optional: true dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.4) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) '@jest/transform': 29.5.0 '@mdx-js/react': 2.3.0(react@18.2.0) '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) @@ -8335,7 +10042,7 @@ packages: '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-rc.10 - fs-extra: 11.1.1 + fs-extra: 11.1.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) remark-external-links: 8.0.0 @@ -8537,8 +10244,8 @@ packages: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - '@types/webpack-env': 1.18.0 - core-js: 3.30.0 + '@types/webpack-env': 1.18.1 + core-js: 3.31.0 global: 4.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8558,7 +10265,7 @@ packages: '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.30.0 + core-js: 3.31.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -8589,11 +10296,11 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-rc.10 - '@types/lodash': 4.14.192 + '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 - markdown-to-jsx: 7.2.0(react@18.2.0) + markdown-to-jsx: 7.2.1(react@18.2.0) memoizerific: 1.11.3 polished: 4.2.2 react: 18.2.0 @@ -8615,10 +10322,10 @@ packages: '@storybook/node-logger': 7.0.0-rc.10 '@types/ejs': 3.1.2 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.16) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.19) browser-assert: 1.2.1 ejs: 3.1.9 - esbuild: 0.17.16 + esbuild: 0.17.19 esbuild-plugin-alias: 0.2.1 express: 4.18.2 find-cache-dir: 3.3.2 @@ -8629,7 +10336,7 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.0.0-rc.10(typescript@4.9.5)(vite@4.2.1): + /@storybook/builder-vite@7.0.0-rc.10(typescript@4.9.5)(vite@4.1.1): resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==} peerDependencies: '@preact/preset-vite': '*' @@ -8660,15 +10367,15 @@ packages: browser-assert: 1.2.1 es-module-lexer: 0.9.3 express: 4.18.2 - fs-extra: 11.1.1 + fs-extra: 11.1.0 glob: 8.1.0 - glob-promise: 6.0.2(glob@8.1.0) + glob-promise: 6.0.3(glob@8.1.0) magic-string: 0.27.0 remark-external-links: 9.0.1 remark-slug: 7.0.1 rollup: 2.70.2 typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - supports-color dev: true @@ -8703,7 +10410,7 @@ packages: /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: - core-js: 3.30.0 + core-js: 3.31.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true @@ -8727,9 +10434,9 @@ packages: resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==} hasBin: true dependencies: - '@babel/core': 7.21.4 - '@babel/preset-env': 7.21.4(@babel/core@7.21.4) - '@ndelangen/get-tarball': 3.0.7 + '@babel/core': 7.22.5 + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.0.0-rc.10 '@storybook/core-common': 7.0.0-rc.10 '@storybook/core-server': 7.0.0-rc.10 @@ -8737,7 +10444,7 @@ packages: '@storybook/node-logger': 7.0.0-rc.10 '@storybook/telemetry': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 - '@types/semver': 7.3.13 + '@types/semver': 7.5.0 boxen: 5.1.2 chalk: 4.1.2 commander: 6.2.1 @@ -8747,18 +10454,18 @@ packages: execa: 5.1.1 express: 4.18.2 find-up: 5.0.0 - fs-extra: 11.1.1 + fs-extra: 11.1.0 get-npm-tarball-url: 2.0.3 get-port: 5.1.1 giget: 1.1.2 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.21.4) + jscodeshift: 0.14.0(@babel/preset-env@7.22.5) leven: 3.1.0 prettier: 2.8.8 prompts: 2.4.2 puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.4.0 + semver: 7.5.1 shelljs: 0.8.5 simple-update-notifier: 1.1.0 strip-json-comments: 3.1.1 @@ -8775,7 +10482,7 @@ packages: /@storybook/client-logger@6.5.16: resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==} dependencies: - core-js: 3.30.0 + core-js: 3.31.0 global: 4.4.0 dev: true @@ -8794,9 +10501,9 @@ packages: /@storybook/codemod@7.0.0-rc.10: resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==} dependencies: - '@babel/core': 7.21.4 - '@babel/preset-env': 7.20.2(@babel/core@7.21.4) - '@babel/types': 7.21.4 + '@babel/core': 7.21.8 + '@babel/preset-env': 7.20.2(@babel/core@7.21.8) + '@babel/types': 7.21.5 '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 '@storybook/node-logger': 7.0.0-rc.10 @@ -8806,7 +10513,7 @@ packages: jscodeshift: 0.14.0(@babel/preset-env@7.20.2) lodash: 4.17.21 prettier: 2.8.8 - recast: 0.23.1 + recast: 0.23.2 transitivePeerDependencies: - supports-color dev: true @@ -8820,7 +10527,7 @@ packages: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.30.0 + core-js: 3.31.0 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -8859,16 +10566,16 @@ packages: dependencies: '@storybook/node-logger': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 - '@types/node': 16.18.25 + '@types/node': 16.18.36 '@types/pretty-hrtime': 1.0.1 chalk: 4.1.2 - esbuild: 0.17.16 - esbuild-register: 3.4.2(esbuild@0.17.16) - file-system-cache: 2.1.1 + esbuild: 0.17.19 + esbuild-register: 3.4.2(esbuild@0.17.19) + file-system-cache: 2.3.0 find-up: 5.0.0 - fs-extra: 11.1.1 + fs-extra: 11.1.0 glob: 8.1.0 - glob-promise: 6.0.2(glob@8.1.0) + glob-promise: 6.0.3(glob@8.1.0) handlebars: 4.7.7 lazy-universal-dotenv: 4.0.0 picomatch: 2.3.1 @@ -8883,7 +10590,7 @@ packages: /@storybook/core-events@6.5.16: resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==} dependencies: - core-js: 3.30.0 + core-js: 3.31.0 dev: true /@storybook/core-events@7.0.0-rc.10: @@ -8911,11 +10618,11 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 '@storybook/telemetry': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 - '@types/detect-port': 1.3.2 - '@types/node': 16.18.25 - '@types/node-fetch': 2.6.3 + '@types/detect-port': 1.3.3 + '@types/node': 16.18.36 + '@types/node-fetch': 2.6.4 '@types/pretty-hrtime': 1.0.1 - '@types/semver': 7.3.13 + '@types/semver': 7.5.0 better-opn: 2.1.1 boxen: 5.1.2 chalk: 4.1.2 @@ -8927,12 +10634,12 @@ packages: globby: 11.1.0 ip: 2.0.0 lodash: 4.17.21 - node-fetch: 2.6.9 + node-fetch: 2.6.11 open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.4.0 + semver: 7.5.1 serve-favicon: 2.5.0 telejson: 7.1.0 ts-dedent: 2.2.0 @@ -8958,14 +10665,14 @@ packages: /@storybook/csf-tools@7.0.0-rc.10: resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==} dependencies: - '@babel/generator': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/generator': 7.21.9 + '@babel/parser': 7.21.9 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 '@storybook/csf': 0.1.1-next.0 '@storybook/types': 7.0.0-rc.10 fs-extra: 11.1.1 - recast: 0.23.1 + recast: 0.23.2 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -8983,8 +10690,8 @@ packages: lodash: 4.17.21 dev: true - /@storybook/csf@0.1.0: - resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} + /@storybook/csf@0.1.1: + resolution: {integrity: sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==} dependencies: type-fest: 2.19.0 dev: true @@ -9002,7 +10709,7 @@ packages: /@storybook/docs-tools@7.0.0-rc.10: resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==} dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 '@storybook/core-common': 7.0.0-rc.10 '@storybook/preview-api': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 @@ -9056,7 +10763,7 @@ packages: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - semver: 7.4.0 + semver: 7.5.1 store2: 2.14.2 telejson: 7.1.0 ts-dedent: 2.2.0 @@ -9110,7 +10817,7 @@ packages: '@storybook/channels': 7.1.0-alpha.36 '@storybook/client-logger': 7.1.0-alpha.36 '@storybook/core-events': 7.1.0-alpha.36 - '@storybook/csf': 0.1.0 + '@storybook/csf': 0.1.1 '@storybook/global': 5.0.0 '@storybook/types': 7.1.0-alpha.36 '@types/qs': 6.9.7 @@ -9137,7 +10844,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1): + /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.1.1): resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==} engines: {node: '>=16'} peerDependencies: @@ -9145,17 +10852,17 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.2(typescript@4.9.5)(vite@4.2.1) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.3(typescript@4.9.5)(vite@4.1.1) '@rollup/pluginutils': 4.2.1 - '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.2.1) + '@storybook/builder-vite': 7.0.0-rc.10(typescript@4.9.5)(vite@4.1.1) '@storybook/react': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) - '@vitejs/plugin-react': 3.1.0(vite@4.2.1) + '@vitejs/plugin-react': 3.1.0(vite@4.1.1) ast-types: 0.14.2 magic-string: 0.27.0 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - '@preact/preset-vite' - '@storybook/mdx1-csf' @@ -9184,7 +10891,7 @@ packages: '@storybook/types': 7.0.0-rc.10 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 16.18.25 + '@types/node': 16.18.36 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -9210,7 +10917,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.30.0 + core-js: 3.31.0 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -9236,7 +10943,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - core-js: 3.30.0 + core-js: 3.31.0 find-up: 4.1.0 dev: true @@ -9247,7 +10954,7 @@ packages: '@storybook/core-common': 7.0.0-rc.10 chalk: 4.1.2 detect-package-manager: 2.0.1 - fetch-retry: 5.0.4 + fetch-retry: 5.0.6 fs-extra: 11.1.1 isomorphic-unfetch: 3.1.0 nanoid: 3.3.6 @@ -9274,7 +10981,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.30.0 + core-js: 3.31.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9287,7 +10994,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@storybook/client-logger': 7.0.0-rc.10 '@storybook/global': 5.0.0 memoizerific: 1.11.3 @@ -9301,7 +11008,7 @@ packages: '@storybook/channels': 7.0.0-rc.10 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 dev: true /@storybook/types@7.1.0-alpha.36: @@ -9310,10 +11017,10 @@ packages: '@storybook/channels': 7.1.0-alpha.36 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 dev: true - /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.58.0)(vite@4.0.3): + /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.55.1)(vite@4.0.3): resolution: {integrity: sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -9326,37 +11033,37 @@ packages: dependencies: '@rollup/pluginutils': 4.2.1 debug: 4.3.4(supports-color@8.1.1) - deepmerge: 4.3.1 + deepmerge: 4.3.0 kleur: 4.1.5 magic-string: 0.26.7 - svelte: 3.58.0 - svelte-hmr: 0.15.1(svelte@3.58.0) - vite: 4.0.3(@types/node@18.15.11) + svelte: 3.55.1 + svelte-hmr: 0.15.2(svelte@3.55.1) + vite: 4.0.3(@types/node@18.14.6) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.0.4(svelte@3.58.0)(vite@4.2.1): - resolution: {integrity: sha512-pjqhW00KwK2uzDGEr+yJBwut+D+4XfJO/+bHHdHzPRXn9+1Jeq5JcFHyrUiYaXgHtyhX0RsllCTm4ssAx4ZY7Q==} + /@sveltejs/vite-plugin-svelte@2.0.2(svelte@3.55.1)(vite@4.1.1): + resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 vite: ^4.0.0 dependencies: debug: 4.3.4(supports-color@8.1.1) - deepmerge: 4.3.1 + deepmerge: 4.3.0 kleur: 4.1.5 - magic-string: 0.30.0 - svelte: 3.58.0 - svelte-hmr: 0.15.1(svelte@3.58.0) - vite: 4.2.1(@types/node@18.15.11) - vitefu: 0.2.4(vite@4.2.1) + magic-string: 0.27.0 + svelte: 3.55.1 + svelte-hmr: 0.15.2(svelte@3.55.1) + vite: 4.1.1(@types/node@18.14.6) + vitefu: 0.2.4(vite@4.1.1) transitivePeerDependencies: - supports-color dev: true - /@swc/core-darwin-arm64@1.3.49: - resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} + /@swc/core-darwin-arm64@1.3.64: + resolution: {integrity: sha512-gSPld6wxZBZoEvZXWmNfd+eJGlGvrEXmhMBCUwSccpuMa0KqK7F6AAZVu7kFkmlXPq2kS8owjk6/VXnVBmm5Vw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -9364,8 +11071,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.49: - resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} + /@swc/core-darwin-x64@1.3.64: + resolution: {integrity: sha512-SJd1pr+U2pz5ZVv5BL36CN879Pn1V0014uVNlB+6yNh3e8T0fjUbtRJcbFiBB+OeYuJ1UNUeslaRJtKJNtMH7A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -9373,8 +11080,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.49: - resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} + /@swc/core-linux-arm-gnueabihf@1.3.64: + resolution: {integrity: sha512-XE60bZS+qO+d8IQYAayhn3TRqyzVmQeOsX2B1yUHuKZU3Zb/mt/cmD/HLzZZW7J3z19kYf2na7Hvmnt3amUGoA==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -9382,8 +11089,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.49: - resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} + /@swc/core-linux-arm64-gnu@1.3.64: + resolution: {integrity: sha512-+jcUua4cYLRMqDicv+4AaTZUGgYWXkXVI9AzaAgfkMNLU2TMXwuYXopxk1giAMop88+ovzYIqrxErRdu70CgtQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -9391,8 +11098,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.49: - resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} + /@swc/core-linux-arm64-musl@1.3.64: + resolution: {integrity: sha512-50MI8NFYUKhLncqY2piM/XOnNqZT6zY2ZoNOFsy63/T2gAYy1ts4mF4YUEkg4XOA2zhue1JSLZBUrHQXbgMYUQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -9400,8 +11107,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.49: - resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} + /@swc/core-linux-x64-gnu@1.3.64: + resolution: {integrity: sha512-bT8seQ41Q4J2JDgn2JpFCGNehGAIilAkZ476gEaKKroEWepBhkD0K1MspSSVYSJhLSGbBVSaadUEiBPxWgu1Rw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -9409,8 +11116,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.49: - resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} + /@swc/core-linux-x64-musl@1.3.64: + resolution: {integrity: sha512-sJgh3TXCDOEq/Au4XLAgNqy4rVcLeywQBoftnV3rcvX1/u9OCSRzgKLgYc5d1pEN5AMJV1l4u26kbGlQuZ+yRw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -9418,8 +11125,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.49: - resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} + /@swc/core-win32-arm64-msvc@1.3.64: + resolution: {integrity: sha512-zWIy+mAWDjtJjl4e4mmhQL7g9KbkOwcWbeoIk4C6NT4VpjnjdX1pMml/Ez2sF5J5cGBwu7B1ePfTe/kAE6G36Q==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -9427,8 +11134,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.49: - resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} + /@swc/core-win32-ia32-msvc@1.3.64: + resolution: {integrity: sha512-6HMiuUeSMpTUAimb1E+gUNjy8m211oAzw+wjU8oOdA6iihWaLBz4TOhU9IaKZPPjqEcYGwqaT3tj5b5+mxde6Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -9436,8 +11143,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.49: - resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} + /@swc/core-win32-x64-msvc@1.3.64: + resolution: {integrity: sha512-c8Al0JJfmgnO9sg6w34PICibqI4p7iXywo+wOxjY88oFwMcfV5rGaif1Fe3RqxJP/1WtUV7lYuKKZrneMXtyLA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -9445,8 +11152,8 @@ packages: dev: true optional: true - /@swc/core@1.3.49: - resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} + /@swc/core@1.3.64: + resolution: {integrity: sha512-be1dk2pfjzBjFp/+p47/wvOAm7KpEtsi7hqI3ofox6pK3hBJChHgVTLVV9xqZm7CnYdyYYw3Z78hH6lrwutxXQ==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -9455,16 +11162,16 @@ packages: '@swc/helpers': optional: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.49 - '@swc/core-darwin-x64': 1.3.49 - '@swc/core-linux-arm-gnueabihf': 1.3.49 - '@swc/core-linux-arm64-gnu': 1.3.49 - '@swc/core-linux-arm64-musl': 1.3.49 - '@swc/core-linux-x64-gnu': 1.3.49 - '@swc/core-linux-x64-musl': 1.3.49 - '@swc/core-win32-arm64-msvc': 1.3.49 - '@swc/core-win32-ia32-msvc': 1.3.49 - '@swc/core-win32-x64-msvc': 1.3.49 + '@swc/core-darwin-arm64': 1.3.64 + '@swc/core-darwin-x64': 1.3.64 + '@swc/core-linux-arm-gnueabihf': 1.3.64 + '@swc/core-linux-arm64-gnu': 1.3.64 + '@swc/core-linux-arm64-musl': 1.3.64 + '@swc/core-linux-x64-gnu': 1.3.64 + '@swc/core-linux-x64-musl': 1.3.64 + '@swc/core-win32-arm64-msvc': 1.3.64 + '@swc/core-win32-ia32-msvc': 1.3.64 + '@swc/core-win32-x64-msvc': 1.3.64 dev: true /@t3-oss/env-core@0.3.1(typescript@4.9.5)(zod@3.21.4): @@ -9484,10 +11191,14 @@ packages: remove-accents: 0.4.2 dev: true - /@tanstack/query-core@4.29.1: - resolution: {integrity: sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg==} + /@tanstack/query-core@4.19.1: + resolution: {integrity: sha512-Zp0aIose5C8skBzqbVFGk9HJsPtUhRVDVNWIqVzFbGQQgYSeLZMd3Sdb4+EnA5wl1J7X+bre2PJGnQg9x/zHOA==} + + /@tanstack/query-core@4.27.0: + resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} + dev: false - /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0): + /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.19.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-YeYFBnfqvb+ZlA0IiJqiHNNSzepNhI1p2o9i8NlhQli9+Zrn230M47OBaBUs8qr3DD1dC2zGB1Dis50Ktz8gAA==} peerDependencies: '@tanstack/react-query': 4.22.0 @@ -9495,15 +11206,15 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.29.1(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query': 4.19.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - superjson: 1.12.2 + superjson: 1.12.3 use-sync-external-store: 1.2.0(react@18.2.0) dev: true - /@tanstack/react-query@4.29.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw==} + /@tanstack/react-query@4.19.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5dvHvmc0vrWI03AJugzvKfirxCyCLe+qawrWFCXdu8t7dklIhJ7D5ZhgTypv7mMtIpdHPcECtCiT/+V74wCn2A==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -9514,18 +11225,18 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.29.1 + '@tanstack/query-core': 4.19.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) - /@tanstack/svelte-query@4.29.1(svelte@3.58.0): - resolution: {integrity: sha512-V+Ueq8fWHx6W9kBlVfrdFJbSUodJknOdgGKV90lNYM1WFeoOzqihXDOgeJHUaT+JKs96sRBQJAVN7NIbBR0iMw==} + /@tanstack/svelte-query@4.27.0(svelte@3.55.1): + resolution: {integrity: sha512-FmrviPCoWbgBOLgG4uOG4EHi80DDzvD4XK+0nQBTLb4c2cKyN7c98MLgG58yHbdFEPQyhhcJlqagXP18vWWS9w==} peerDependencies: svelte: ^3.54.0 dependencies: - '@tanstack/query-core': 4.29.1 - svelte: 3.58.0 + '@tanstack/query-core': 4.27.0 + svelte: 3.55.1 dev: false /@tensorflow/tfjs-core@1.7.0: @@ -9544,10 +11255,10 @@ packages: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/runtime': 7.21.0 + '@babel/code-frame': 7.22.5 + '@babel/runtime': 7.22.5 '@types/aria-query': 5.0.1 - aria-query: 5.1.3 + aria-query: 5.2.1 chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 @@ -9559,9 +11270,9 @@ packages: engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.2.0 - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@types/testing-library__jest-dom': 5.14.5 - aria-query: 5.1.3 + aria-query: 5.2.1 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.5.16 @@ -9569,28 +11280,28 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react@13.4.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + /@testing-library/react@13.3.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==} engines: {node: '>=12'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@testing-library/dom': 8.20.0 - '@types/react-dom': 18.0.11 + '@types/react-dom': 18.0.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/svelte@3.2.2(svelte@3.58.0): + /@testing-library/svelte@3.2.2(svelte@3.55.1): resolution: {integrity: sha512-IKwZgqbekC3LpoRhSwhd0JswRGxKdAGkf39UiDXTywK61YyLXbCYoR831e/UUC6EeNW4hiHPY+2WuovxOgI5sw==} engines: {node: '>= 10'} peerDependencies: svelte: 3.x dependencies: '@testing-library/dom': 8.20.0 - svelte: 3.58.0 + svelte: 3.55.1 dev: true /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0): @@ -9599,7 +11310,7 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 '@testing-library/dom': 8.20.0 dev: true @@ -9613,8 +11324,8 @@ packages: engines: {node: '>= 10'} dev: true - /@ts-morph/common@0.18.1: - resolution: {integrity: sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA==} + /@ts-morph/common@0.17.0: + resolution: {integrity: sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==} dependencies: fast-glob: 3.2.12 minimatch: 5.1.6 @@ -9631,8 +11342,8 @@ packages: /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} /@tsconfig/svelte@2.0.1: resolution: {integrity: sha512-aqkICXbM1oX5FfgZd2qSSAGdyo/NRxjWCamxoyi3T8iVQnzGge19HhDYzZ6NrVOW7bhcWNSq9XexWFtMzbB24A==} @@ -9645,7 +11356,7 @@ packages: /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /@types/archiver@5.3.2: @@ -9665,55 +11376,55 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.1 /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 - /@types/babel__traverse@7.18.3: - resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} + /@types/babel__traverse@7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 /@types/bcrypt@5.0.0: resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/chai-subset@1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.5 dev: true - /@types/chai@4.3.4: - resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/cookie-session@2.0.44: @@ -9730,19 +11441,19 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: '@types/ms': 0.7.31 - /@types/detect-port@1.3.2: - resolution: {integrity: sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==} + /@types/detect-port@1.3.3: + resolution: {integrity: sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==} dev: true /@types/docker-modem@3.0.2: resolution: {integrity: sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/ssh2': 1.11.11 dev: true @@ -9750,7 +11461,7 @@ packages: resolution: {integrity: sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==} dependencies: '@types/docker-modem': 3.0.2 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/doctrine@0.0.3: @@ -9768,27 +11479,27 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.37.0 - '@types/estree': 1.0.0 + '@types/eslint': 8.40.2 + '@types/estree': 1.0.1 dev: true - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + /@types/eslint@8.40.2: + resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==} dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 dev: true /@types/estree-jsx@0.0.1: resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /@types/estree-jsx@1.0.0: resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /@types/estree@0.0.39: @@ -9799,22 +11510,23 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - /@types/express-serve-static-core@4.17.33: - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + /@types/express-serve-static-core@4.17.35: + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 + '@types/send': 0.17.1 dev: true /@types/express@4.17.9: resolution: {integrity: sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/qs': 6.9.7 '@types/serve-static': 1.15.1 dev: true @@ -9827,27 +11539,27 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/hast@2.3.4: @@ -9884,20 +11596,13 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@26.0.24: - resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} + /@types/jest@26.0.19: + resolution: {integrity: sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ==} dependencies: jest-diff: 26.6.2 pretty-format: 26.6.2 dev: true - /@types/jest@29.5.0: - resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} - dependencies: - expect: 29.5.0 - pretty-format: 29.5.0 - dev: true - /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} @@ -9909,8 +11614,8 @@ packages: resolution: {integrity: sha512-exWt46x9L1dSe8xLH/REujkeb5Gcqm1Ygdxukmv2sSVZujJRIl6ARNgq73vONvosiN7miX8gYeBTzxivqiNSgw==} dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -9923,13 +11628,20 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/jsonwebtoken@9.0.1: resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 + dev: false + + /@types/jsonwebtoken@9.0.2: + resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==} + dependencies: + '@types/node': 18.14.6 + dev: true /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} @@ -9938,11 +11650,11 @@ packages: /@types/lodash.keyby@4.6.7: resolution: {integrity: sha512-3qSHbbxLfXlARIKsaijZPb/5ZHDajv1vRg7OlAOuBNwN29PESS3sEOPfG1s2kzSuZnKtxtXZd1lvGj5JasN91w==} dependencies: - '@types/lodash': 4.14.192 + '@types/lodash': 4.14.191 dev: true - /@types/lodash@4.14.192: - resolution: {integrity: sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==} + /@types/lodash@4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: true /@types/mdast@3.0.11: @@ -9950,13 +11662,17 @@ packages: dependencies: '@types/unist': 2.0.6 - /@types/mdx@2.0.4: - resolution: {integrity: sha512-qCYrNdpKwN6YO6FVnx+ulfqifKlE3lQGsNhvDaW9Oxzyob/cRLBJWow8GHBBD4NxQ7BVvtsATgLsX0vZAWmtrg==} + /@types/mdx@2.0.5: + resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==} /@types/mime-types@2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} dev: true + /@types/mime@1.3.2: + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + dev: true + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true @@ -9994,10 +11710,10 @@ packages: '@types/unist': 2.0.6 dev: false - /@types/node-fetch@2.6.3: - resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} + /@types/node-fetch@2.6.4: + resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 form-data: 3.0.1 dev: true @@ -10005,12 +11721,12 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@16.18.25: - resolution: {integrity: sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA==} + /@types/node@16.18.36: + resolution: {integrity: sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==} dev: true - /@types/node@18.15.11: - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + /@types/node@18.14.6: + resolution: {integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -10047,7 +11763,7 @@ packages: resolution: {integrity: sha512-cmAAMIRTaEwpqxlrZyiEY9kdibk94gP5KTF8AT1Ra4rWNZYHNMreqhKUEeC5WJtuN5SJZjPQmV+XO2P5PlnvNQ==} dependencies: '@types/express': 4.17.9 - '@types/jsonwebtoken': 9.0.1 + '@types/jsonwebtoken': 9.0.2 '@types/passport-strategy': 0.2.35 dev: true @@ -10072,8 +11788,8 @@ packages: '@types/express': 4.17.9 dev: true - /@types/prettier@2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true /@types/pretty-hrtime@1.0.1: @@ -10095,20 +11811,21 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/react-dom@18.0.11: - resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + /@types/react-dom@18.0.5: + resolution: {integrity: sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==} dependencies: - '@types/react': 17.0.58 + '@types/react': 18.0.14 - /@types/react@17.0.58: - resolution: {integrity: sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==} + /@types/react@17.0.45: + resolution: {integrity: sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.2 + dev: false - /@types/react@18.0.35: - resolution: {integrity: sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==} + /@types/react@18.0.14: + resolution: {integrity: sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 @@ -10117,13 +11834,13 @@ packages: /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/resolve@1.20.2: @@ -10134,7 +11851,7 @@ packages: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: - sass: 1.62.0 + sass: 1.63.4 dev: true /@types/scheduler@0.16.3: @@ -10148,62 +11865,69 @@ packages: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/send@0.17.1: + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + dependencies: + '@types/mime': 1.3.2 + '@types/node': 18.14.6 dev: true /@types/serve-static@1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 /@types/ssh2-streams@0.1.9: resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/ssh2@0.5.52: resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@types/ssh2-streams': 0.1.9 dev: true /@types/ssh2@1.11.11: resolution: {integrity: sha512-LdnE7UBpvHCgUznvn2fwLt2hkaENcKPFqOyXGkvyTLfxCXBN6roc1RmECNYuzzbHePzD3PaAov5rri9hehzx9Q==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/superagent@4.1.16: - resolution: {integrity: sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==} + /@types/superagent@4.1.18: + resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /@types/supertest@2.0.11: resolution: {integrity: sha512-uci4Esokrw9qGb9bvhhSVEjd6rkny/dk5PK/Qz4yxKiyppEI+dOPlNrZBahE3i+PoKFYyDxChVXZ/ysS/nrm1Q==} dependencies: - '@types/superagent': 4.1.16 + '@types/superagent': 4.1.18 dev: true /@types/testing-library__jest-dom@5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 29.5.0 + '@types/jest': 26.0.19 dev: true /@types/tmp@0.2.3: @@ -10213,8 +11937,8 @@ packages: /@types/unist@2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - /@types/validator@13.7.14: - resolution: {integrity: sha512-J6OAed6rhN6zyqL9Of6ZMamhlsOEU/poBVvbHr/dKOYKTeuYYMlDkMv+b6UUV0o2i0tw73cgyv/97WTWaUl0/g==} + /@types/validator@13.7.17: + resolution: {integrity: sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==} /@types/webgl-ext@0.0.30: resolution: {integrity: sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==} @@ -10224,14 +11948,14 @@ packages: resolution: {integrity: sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==} dev: false - /@types/webpack-env@1.18.0: - resolution: {integrity: sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==} + /@types/webpack-env@1.18.1: + resolution: {integrity: sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==} dev: true /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: false /@types/yargs-parser@21.0.0: @@ -10255,8 +11979,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} + /@typescript-eslint/eslint-plugin@5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -10266,25 +11990,25 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.54.1(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/type-utils': 5.54.1(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.1(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + regexpp: 3.2.0 + semver: 7.5.1 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} + /@typescript-eslint/eslint-plugin@5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -10294,43 +12018,55 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/type-utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.35.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + regexpp: 3.2.0 + semver: 7.5.1 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.33.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} + /@typescript-eslint/experimental-utils@3.10.1(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: '*' dependencies: - '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 4.33.0 - '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) - eslint: 8.38.0 + '@types/json-schema': 7.0.12 + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/typescript-estree': 3.10.1(typescript@4.9.5) + eslint: 8.35.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.38.0) + eslint-utils: 2.1.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/experimental-utils@5.59.11(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-GkQGV0UF/V5Ra7gZMBmiD1WrYUFOJNvCZs+XQnUyJoxmqfWMXVNyB2NVCPRKefoQcpvTv9UpJyfCvsJFs8NzzQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.59.11(eslint@8.22.0)(typescript@4.9.5) + eslint: 8.22.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} + /@typescript-eslint/parser@5.54.1(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -10339,9 +12075,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 typescript: 4.9.5 @@ -10349,8 +12085,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} + /@typescript-eslint/parser@5.54.1(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -10359,34 +12095,34 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.35.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@4.33.0: - resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + /@typescript-eslint/scope-manager@5.54.1: + resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/visitor-keys': 4.33.0 + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/visitor-keys': 5.54.1 dev: true - /@typescript-eslint/scope-manager@5.58.0: - resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} + /@typescript-eslint/scope-manager@5.59.11: + resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/visitor-keys': 5.58.0 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} + /@typescript-eslint/type-utils@5.54.1(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -10395,8 +12131,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.1(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 tsutils: 3.21.0(typescript@4.9.5) @@ -10405,8 +12141,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} + /@typescript-eslint/type-utils@5.54.1(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -10415,28 +12151,33 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.1(eslint@8.35.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.35.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@4.33.0: - resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} + /@typescript-eslint/types@3.10.1: + resolution: {integrity: sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types@5.58.0: - resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} + /@typescript-eslint/types@5.54.1: + resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@5.59.11: + resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5): - resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} + /@typescript-eslint/typescript-estree@3.10.1(typescript@4.9.5): + resolution: {integrity: sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: typescript: '*' @@ -10444,20 +12185,42 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/visitor-keys': 4.33.0 + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/visitor-keys': 3.10.1 + debug: 4.3.4(supports-color@8.1.1) + glob: 7.2.3 + is-glob: 4.0.3 + lodash: 4.17.21 + semver: 7.5.1 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@5.54.1(typescript@4.9.5): + resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/visitor-keys': 5.54.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.4.0 + semver: 7.5.1 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.58.0(typescript@4.9.5): - resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} + /@typescript-eslint/typescript-estree@5.59.11(typescript@4.9.5): + resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -10465,103 +12228,130 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/visitor-keys': 5.58.0 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.4.0 + semver: 7.5.1 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} + /@typescript-eslint/utils@5.54.1(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) eslint: 8.22.0 eslint-scope: 5.1.1 - semver: 7.4.0 + eslint-utils: 3.0.0(eslint@8.22.0) + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.54.1(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.54.1 + '@typescript-eslint/types': 5.54.1 + '@typescript-eslint/typescript-estree': 5.54.1(typescript@4.9.5) + eslint: 8.35.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0(eslint@8.35.0) + semver: 7.5.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} + /@typescript-eslint/utils@5.59.11(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - eslint: 8.38.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@4.9.5) + eslint: 8.22.0 eslint-scope: 5.1.1 - semver: 7.4.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@4.33.0: - resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} + /@typescript-eslint/visitor-keys@3.10.1: + resolution: {integrity: sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.33.0 - eslint-visitor-keys: 2.1.0 + eslint-visitor-keys: 1.3.0 + dev: true + + /@typescript-eslint/visitor-keys@5.54.1: + resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.54.1 + eslint-visitor-keys: 3.4.1 dev: true - /@typescript-eslint/visitor-keys@5.58.0: - resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} + /@typescript-eslint/visitor-keys@5.59.11: + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.58.0 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.59.11 + eslint-visitor-keys: 3.4.1 dev: true - /@vitejs/plugin-react-swc@3.3.0(vite@4.2.1): - resolution: {integrity: sha512-Ycg+n2eyCOTpn/wRy+evVo859+hw7qCj9iaX5CMny6x1fx1Uoq0xBG+a98lFtwLNGfGEnpI0F26YigRuxCRkwg==} + /@vitejs/plugin-react-swc@3.0.1(vite@4.1.1): + resolution: {integrity: sha512-3GQ2oruZO9j8dSHcI0MUeOZQBhjYyDQsF/pKY4Px+CJxn0M16OhgFeEzUjeuwci4zhhjoNIDE9aFNaV5GMQ09g==} peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.49 - vite: 4.2.1(@types/node@18.15.11) + '@swc/core': 1.3.64 + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - '@swc/helpers' dev: true - /@vitejs/plugin-react@3.1.0(vite@4.2.1): + /@vitejs/plugin-react@3.1.0(vite@4.1.1): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.1.0-beta.0 dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.4) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - supports-color dev: true - /@vitest/coverage-istanbul@0.28.5(jsdom@20.0.3): - resolution: {integrity: sha512-na1pkr3AVrdFflzuBXsBh1MvBfhSMrv4nfd4N8rm0HEJlvlbQc+GiqNwtwzfO8TPsXxcjNphSIMp5wvCy+0xrQ==} + /@vitest/coverage-istanbul@0.28.4(jsdom@20.0.2): + resolution: {integrity: sha512-M2ZhFD12hQX4H6iBAVLG5z3N6W4jUEgFNZr6sFYZ5GkbfYjdSVolHtjv4X/WbcmWtNtpXHat1/UZmJ5kbTdwsw==} dependencies: istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 @@ -10569,7 +12359,7 @@ packages: istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 test-exclude: 6.0.0 - vitest: 0.28.5(jsdom@20.0.3) + vitest: 0.28.4(jsdom@20.0.2) transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' @@ -10584,6 +12374,14 @@ packages: - terser dev: true + /@vitest/expect@0.28.4: + resolution: {integrity: sha512-JqK0NZ4brjvOSL8hXAnIsfi+jxDF7rH/ZWCGCt0FAqRnVFc1hXsfwXksQvEnKqD84avRt3gmeXoK4tNbmkoVsQ==} + dependencies: + '@vitest/spy': 0.28.4 + '@vitest/utils': 0.28.4 + chai: 4.3.7 + dev: true + /@vitest/expect@0.28.5: resolution: {integrity: sha512-gqTZwoUTwepwGIatnw4UKpQfnoyV0Z9Czn9+Lo2/jLIt4/AXLTn+oVZxlQ7Ng8bzcNkR+3DqLJ08kNr8jRmdNQ==} dependencies: @@ -10600,12 +12398,20 @@ packages: chai: 4.3.7 dev: true + /@vitest/runner@0.28.4: + resolution: {integrity: sha512-Q8UV6GjDvBSTfUoq0QXVCNpNOUrWu4P2qvRq7ssJWzn0+S0ojbVOxEjMt+8a32X6SdkhF8ak+2nkppsqV0JyNQ==} + dependencies: + '@vitest/utils': 0.28.4 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + /@vitest/runner@0.28.5: resolution: {integrity: sha512-NKkHtLB+FGjpp5KmneQjTcPLWPTDfB7ie+MmF1PnUBf/tGe2OjGxWyB62ySYZ25EYp9krR5Bw0YPLS/VWh1QiA==} dependencies: '@vitest/utils': 0.28.5 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 dev: true /@vitest/runner@0.29.8: @@ -10613,7 +12419,13 @@ packages: dependencies: '@vitest/utils': 0.29.8 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 + dev: true + + /@vitest/spy@0.28.4: + resolution: {integrity: sha512-8WuhfXLlvCXpNXEGJW6Gc+IKWI32435fQJLh43u70HnZ1otJOa2Cmg2Wy2Aym47ZnNCP4NolF+8cUPwd0MigKQ==} + dependencies: + tinyspy: 1.1.1 dev: true /@vitest/spy@0.28.5: @@ -10628,6 +12440,16 @@ packages: tinyspy: 1.1.1 dev: true + /@vitest/utils@0.28.4: + resolution: {integrity: sha512-l2QztOLdc2LkR+w/lP52RGh8hW+Ul4KESmCAgVE8q737I7e7bQoAfkARKpkPJ4JQtGpwW4deqlj1732VZD7TFw==} + dependencies: + cli-truncate: 3.1.0 + diff: 5.1.0 + loupe: 2.3.6 + picocolors: 1.0.0 + pretty-format: 27.5.1 + dev: true + /@vitest/utils@0.28.5: resolution: {integrity: sha512-UyZdYwdULlOa4LTUSwZ+Paz7nBHGTT72jKwdFSV4IjHF1xsokp+CabMdhjvVhYwkLfO88ylJT46YMilnkSARZA==} dependencies: @@ -10647,18 +12469,18 @@ packages: pretty-format: 27.5.1 dev: true - /@vscode/emmet-helper@2.8.6: - resolution: {integrity: sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==} + /@vscode/emmet-helper@2.8.9: + resolution: {integrity: sha512-ygpVStaePHt9aI9zk4NNJWI/NsRaeDSW1vQsZVmtpVRVCOdwYlsc3BfB/eppUu1OucT0x3OHDAzKcxnitjcSXQ==} dependencies: - emmet: 2.4.2 + emmet: 2.4.4 jsonc-parser: 2.3.1 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 vscode-uri: 2.1.2 dev: false - /@vscode/l10n@0.0.11: - resolution: {integrity: sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==} + /@vscode/l10n@0.0.14: + resolution: {integrity: sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg==} dev: false /@webassemblyjs/ast@1.11.1: @@ -10767,8 +12589,8 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@xmldom/xmldom@0.8.7: - resolution: {integrity: sha512-sI1Ly2cODlWStkINzqGrZ8K6n+MTSbAeQnAipGyL+KZCXuHaRlj2gyyy8B/9MvsFFqN7XHryQnB2QwhzvJXovg==} + /@xmldom/xmldom@0.8.8: + resolution: {integrity: sha512-0LNz4EY8B/8xXY86wMrQ4tz6zEHZv9ehFMJPm8u2gq5lQ71cfRKdaKyxfJAx5aUoyzx0qzgURblTisPGgz3d+Q==} engines: {node: '>=10.0.0'} /@xstate/inspect@0.7.1(ws@8.13.0)(xstate@4.37.1): @@ -10786,7 +12608,7 @@ packages: xstate: 4.37.1 dev: true - /@xstate/svelte@2.0.1(svelte@3.58.0)(xstate@4.37.1): + /@xstate/svelte@2.0.1(svelte@3.55.1)(xstate@4.37.1): resolution: {integrity: sha512-A4QSCt4EpbyzbPIPGCRLoRn50VUq6gXcmJPIwgBaCTsTRsPsp8KSvltDqS2msBKEDr4FHWXEXOC4QVGDWFL5dg==} peerDependencies: '@xstate/fsm': ^2.0.0 @@ -10798,7 +12620,7 @@ packages: xstate: optional: true dependencies: - svelte: 3.58.0 + svelte: 3.55.1 xstate: 4.37.1 dev: false @@ -10810,13 +12632,13 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.16): + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.19): resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: esbuild: '>=0.10.0' dependencies: - esbuild: 0.17.16 + esbuild: 0.17.19 tslib: 2.5.2 dev: true @@ -10824,16 +12646,16 @@ packages: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true - /@yarnpkg/parsers@3.0.0-rc.42: - resolution: {integrity: sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA==} + /@yarnpkg/parsers@3.0.0-rc.45: + resolution: {integrity: sha512-Aj0aHBV/crFQTpKQvL6k1xNiOhnlfVLu06LunelQAvl1MTeWrSi8LD9UJJDCFJiG4kx8NysUE6Tx0KZyPQUzIw==} engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 tslib: 2.5.2 dev: true - /@zerodevx/svelte-toast@0.8.2: - resolution: {integrity: sha512-EDtZ/Hw37T/UWCQ5drhMss0J9vItYUSDivQ3+mET5My6No7YNiNQklj2bkE61UAzut2TjHJfOJNBZsj78ODFtw==} + /@zerodevx/svelte-toast@0.8.0: + resolution: {integrity: sha512-PAcQQGhGYkdZJqPY7obnGIdlBoeoMteogYoN/nJn87CI5LYgRz6X9ST4AA65jyGlybWnniYzlrTT/dFepvuC/g==} dev: false /@zkochan/js-yaml@0.0.6: @@ -10891,8 +12713,8 @@ packages: acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.2): - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + /acorn-import-assertions@1.9.0(acorn@8.8.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: @@ -10914,10 +12736,16 @@ packages: dependencies: acorn: 8.8.2 + /acorn-node@1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - dev: true /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -10927,7 +12755,6 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} @@ -11023,23 +12850,23 @@ packages: uri-js: 4.4.1 dev: false - /algoliasearch@4.17.0: - resolution: {integrity: sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==} + /algoliasearch@4.17.2: + resolution: {integrity: sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==} dependencies: - '@algolia/cache-browser-local-storage': 4.17.0 - '@algolia/cache-common': 4.17.0 - '@algolia/cache-in-memory': 4.17.0 - '@algolia/client-account': 4.17.0 - '@algolia/client-analytics': 4.17.0 - '@algolia/client-common': 4.17.0 - '@algolia/client-personalization': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/logger-console': 4.17.0 - '@algolia/requester-browser-xhr': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/requester-node-http': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/cache-browser-local-storage': 4.17.2 + '@algolia/cache-common': 4.17.2 + '@algolia/cache-in-memory': 4.17.2 + '@algolia/client-account': 4.17.2 + '@algolia/client-analytics': 4.17.2 + '@algolia/client-common': 4.17.2 + '@algolia/client-personalization': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/logger-common': 4.17.2 + '@algolia/logger-console': 4.17.2 + '@algolia/requester-browser-xhr': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/requester-node-http': 4.17.2 + '@algolia/transporter': 4.17.2 dev: false /ansi-align@3.0.1: @@ -11068,7 +12895,7 @@ packages: /ansi-sequence-parser@1.1.0: resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - dev: true + dev: false /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -11093,6 +12920,7 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -11168,10 +12996,10 @@ packages: tslib: 2.5.2 dev: false - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + /aria-query@5.2.1: + resolution: {integrity: sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==} dependencies: - deep-equal: 2.2.0 + dequal: 2.0.3 dev: true /array-buffer-byte-length@1.0.0: @@ -11195,7 +13023,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -11238,16 +13066,6 @@ packages: is-string: 1.0.7 dev: true - /array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.0 - dev: true - /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -11297,8 +13115,8 @@ packages: engines: {node: '>=8'} dev: true - /astring@1.8.4: - resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==} + /astring@1.8.6: + resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true dev: false @@ -11307,59 +13125,57 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@astrojs/compiler': 0.32.0 - '@typescript-eslint/types': 5.58.0 - astrojs-compiler-sync: 0.3.2(@astrojs/compiler@0.32.0) + '@typescript-eslint/types': 5.59.11 + astrojs-compiler-sync: 0.3.3(@astrojs/compiler@0.32.0) debug: 4.3.4(supports-color@8.1.1) - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 transitivePeerDependencies: - supports-color dev: true - /astro@1.9.2(@types/node@18.15.11)(ts-node@10.9.1): - resolution: {integrity: sha512-L+Ma0eR0Aa6QZg7RF0lEs+106Ye1/zukvtq3KtsYIogAojltlwllwU9X5CwMBzFwA55NxpNp4gSRh5US/xb+8Q==} + /astro@1.6.10(@types/node@18.14.6)(ts-node@10.9.1): + resolution: {integrity: sha512-W/ZGROkCKsDicpiXB82n8EkY6I0/12wdXS80NGaBdIUR1jZZxdN+0YMmdz+C2kYbjlo45KUsXpC/Tej+5KQYSQ==} engines: {node: ^14.18.0 || >=16.12.0, npm: '>=6.14.0'} hasBin: true dependencies: - '@astrojs/compiler': 0.31.4 + '@astrojs/compiler': 0.29.19 '@astrojs/language-server': 0.28.3 '@astrojs/markdown-remark': 1.2.0 '@astrojs/telemetry': 1.0.1 '@astrojs/webapi': 1.1.1 - '@babel/core': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.4) - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/core': 7.18.5 + '@babel/generator': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.18.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@proload/core': 0.3.3 '@proload/plugin-tsm': 0.2.1(@proload/core@0.3.3) '@types/babel__core': 7.20.0 '@types/html-escaper': 3.0.0 '@types/yargs-parser': 21.0.0 - acorn: 8.8.2 boxen: 6.2.1 ci-info: 3.8.0 common-ancestor-path: 1.0.1 cookie: 0.5.0 debug: 4.3.4(supports-color@8.1.1) deepmerge-ts: 4.3.0 - devalue: 4.3.0 diff: 5.1.0 - es-module-lexer: 1.2.1 - estree-walker: 3.0.3 + es-module-lexer: 0.10.5 + esbuild: 0.14.54 execa: 6.1.0 fast-glob: 3.2.12 - github-slugger: 2.0.0 + github-slugger: 1.5.0 gray-matter: 4.0.3 - html-entities: 2.3.3 + html-entities: 2.3.6 html-escaper: 3.0.3 import-meta-resolve: 2.2.2 kleur: 4.1.5 - magic-string: 0.27.0 + magic-string: 0.25.9 mime: 3.0.0 - ora: 6.3.0 + ora: 6.3.1 path-browserify: 1.0.1 path-to-regexp: 6.2.1 postcss: 8.4.21 @@ -11370,18 +13186,18 @@ packages: rehype: 12.0.1 resolve: 1.22.2 rollup: 2.79.1 - semver: 7.4.0 + semver: 7.5.1 shiki: 0.11.1 - sirv: 2.0.2 + sirv: 2.0.3 slash: 4.0.0 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 supports-esm: 1.0.0 tsconfig-resolver: 3.0.1 typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 3.2.5(@types/node@18.15.11) + vite: 3.2.5(@types/node@18.14.6) vitefu: 0.2.4(vite@3.2.5) yargs-parser: 21.1.1 zod: 3.21.4 @@ -11396,8 +13212,8 @@ packages: - ts-node dev: false - /astrojs-compiler-sync@0.3.2(@astrojs/compiler@0.32.0): - resolution: {integrity: sha512-q/8Z30WNpsktLKS5NdT/6QAF9Q/C4ucLldqUpHgvRhuj/6jkJyOQfapQxkTKp8MK4RjH9sSsClfrTIdk8JZlKw==} + /astrojs-compiler-sync@0.3.3(@astrojs/compiler@0.32.0): + resolution: {integrity: sha512-LbhchWgsvjvRBb5n5ez8/Q/f9ZKViuox27VxMDOdTUm8MRv9U7phzOiLue5KluqTmC0z1LId4gY2SekvoDrkuw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@astrojs/compiler': '>=0.27.0' @@ -11426,15 +13242,15 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /autoprefixer@10.4.14(postcss@8.4.21): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + /autoprefixer@10.4.7(postcss@8.4.21): + resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001478 + browserslist: 4.21.8 + caniuse-lite: 1.0.30001503 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -11446,8 +13262,8 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /axe-core@4.6.3: - resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} + /axe-core@4.7.2: + resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} engines: {node: '>=4'} dev: true @@ -11478,12 +13294,12 @@ packages: transitivePeerDependencies: - debug - /babel-core@7.0.0-bridge.0(@babel/core@7.21.4): + /babel-core@7.0.0-bridge.0(@babel/core@7.18.5): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 dev: true /babel-eslint@10.1.0(eslint@8.22.0): @@ -11493,10 +13309,10 @@ packages: peerDependencies: eslint: '>= 4.12.1' dependencies: - '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 resolve: 1.22.2 @@ -11504,18 +13320,18 @@ packages: - supports-color dev: false - /babel-jest@27.5.1(@babel/core@7.21.4): + /babel-jest@27.5.1(@babel/core@7.18.5): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.21.4) + babel-preset-jest: 27.5.1(@babel/core@7.18.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -11523,17 +13339,17 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.21.4): + /babel-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.4) + babel-preset-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -11545,7 +13361,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -11558,56 +13374,69 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.4 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.1 dev: true /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.4 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.1 dev: true - /babel-plugin-jsx-dom-expressions@0.36.9(@babel/core@7.21.4): - resolution: {integrity: sha512-4ACO10PoUvqRcBEErbhVGv5vAHXgkz7epvULHfqJXw5TPtDYwjhmhGxGNGSK6220ec/b85ElLrGHlqQiJxI0WQ==} + /babel-plugin-jsx-dom-expressions@0.36.10(@babel/core@7.22.5): + resolution: {integrity: sha512-QA2k/14WGw+RgcGGnEuLWwnu4em6CGhjeXtjvgOYyFHYS2a+CzPeaVQHDOlfuiBcjq/3hWMspHMIMnPEOIzdBg==} peerDependencies: '@babel/core': ^7.20.12 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/types': 7.21.4 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 html-entities: 2.3.3 - validate-html-nesting: 1.2.1 + validate-html-nesting: 1.2.2 dev: false - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.17.9): + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.17.9): + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.17.9 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.8): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.17.9 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -11620,19 +13449,31 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) - core-js-compat: 3.30.0 + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) - core-js-compat: 3.30.0 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + core-js-compat: 3.31.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.5): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color dev: true @@ -11648,66 +13489,97 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.5): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.4): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.18.5): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.18.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.18.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.18.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.18.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.18.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.18.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.18.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.18.5) + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - dev: true - - /babel-preset-jest@27.5.1(@babel/core@7.21.4): + '@babel/core': 7.22.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + dev: true + + /babel-preset-jest@27.5.1(@babel/core@7.18.5): resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.18.5) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.21.4): + /babel-preset-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-solid@1.7.3(@babel/core@7.21.4): - resolution: {integrity: sha512-HOdyrij99zo+CBrmtDxSexBAl54vCBCfBoyueLBvcfVniaEXNd4ftKqSN6XQcLvFfCY28UFO+DHaigXzWKOfzg==} + /babel-preset-solid@1.7.4(@babel/core@7.22.5): + resolution: {integrity: sha512-0mbHNYkbOVYhH6L95VlHVkBEVQjOXSzUqLDiFxUcsg/tU4yTM/qx7FI8C+kmos9LHckQBSm3wtwoe1BZLNJR1w==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - babel-plugin-jsx-dom-expressions: 0.36.9(@babel/core@7.21.4) + '@babel/core': 7.22.5 + babel-plugin-jsx-dom-expressions: 0.36.10(@babel/core@7.22.5) dev: false /backo2@1.0.2: @@ -11762,7 +13634,6 @@ packages: /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} - dev: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -11891,7 +13762,6 @@ packages: engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.51 - dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -11911,8 +13781,8 @@ packages: dependencies: fill-range: 7.0.1 - /breakword@1.0.5: - resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} dependencies: wcwidth: 1.0.1 dev: true @@ -11938,15 +13808,15 @@ packages: pako: 0.2.9 dev: true - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + /browserslist@4.21.8: + resolution: {integrity: sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001478 - electron-to-chromium: 1.4.361 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) + caniuse-lite: 1.0.30001503 + electron-to-chromium: 1.4.430 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.8) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -12006,9 +13876,15 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.4.0 + semver: 7.5.1 dev: true + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -12034,8 +13910,8 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - /c8@7.13.0: - resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} + /c8@7.14.0: + resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} engines: {node: '>=10.12.0'} hasBin: true dependencies: @@ -12067,7 +13943,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -12105,8 +13981,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001478: - resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} + /caniuse-lite@1.0.30001503: + resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -12231,8 +14107,8 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} - /cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true /class-transformer@0.5.1: @@ -12241,8 +14117,8 @@ packages: /class-validator@0.14.0: resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} dependencies: - '@types/validator': 13.7.14 - libphonenumber-js: 1.10.26 + '@types/validator': 13.7.17 + libphonenumber-js: 1.10.34 validator: 13.9.0 /class-variance-authority@0.6.0(typescript@4.9.5): @@ -12308,8 +14184,8 @@ packages: engines: {node: '>=6'} dev: true - /cli-spinners@2.8.0: - resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} + /cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} engines: {node: '>=6'} /cli-table3@0.6.3: @@ -12436,8 +14312,8 @@ packages: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} dev: true - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true /colors@1.2.5: @@ -12455,8 +14331,8 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false - /commander@10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} dev: true @@ -12467,6 +14343,7 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -12560,8 +14437,8 @@ packages: - supports-color dev: true - /compressorjs@1.2.1: - resolution: {integrity: sha512-+geIjeRnPhQ+LLvvA7wxBQE5ddeLU7pJ3FsKFWirDw6veY3s9iLxAQEw7lXGHnhCJvBujEQWuNnGzZcvCvdkLQ==} + /compressorjs@1.1.1: + resolution: {integrity: sha512-SysRuUPfmUNoq+RviE0iMFVUmoX2q/x+7PkEPUmk6NGkd85hDrmvujx0Qtp8UCGA6KMe5kuodsylPQcNaLf60w==} dependencies: blueimp-canvas-to-blob: 3.29.0 is-blob: 2.1.0 @@ -12585,14 +14462,14 @@ packages: hasBin: true dependencies: chalk: 4.1.2 - date-fns: 2.29.3 + date-fns: 2.30.0 lodash: 4.17.21 rxjs: 7.8.0 shell-quote: 1.8.1 spawn-command: 0.0.2-1 supports-color: 8.1.1 tree-kill: 1.2.2 - yargs: 17.7.1 + yargs: 17.7.2 /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} @@ -12698,21 +14575,21 @@ packages: keygrip: 1.1.0 dev: false - /copy-anything@3.0.3: - resolution: {integrity: sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==} + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} dependencies: - is-what: 4.1.8 + is-what: 4.1.15 dev: true - /core-js-compat@3.30.0: - resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} + /core-js-compat@3.31.0: + resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.8 dev: true - /core-js@3.30.0: - resolution: {integrity: sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==} + /core-js@3.31.0: + resolution: {integrity: sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==} requiresBuild: true dev: true @@ -12726,7 +14603,7 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.14.6)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -12735,9 +14612,9 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.15.11 - cosmiconfig: 8.1.3 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + '@types/node': 18.14.6 + cosmiconfig: 8.2.0 + ts-node: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) typescript: 4.9.5 dev: true @@ -12752,8 +14629,8 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + /cosmiconfig@8.2.0: + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} engines: {node: '>=14'} dependencies: import-fresh: 3.3.0 @@ -12924,18 +14801,18 @@ packages: type: 1.2.0 dev: true - /daisyui@2.51.5(autoprefixer@10.4.14)(postcss@8.4.21)(ts-node@10.9.1): - resolution: {integrity: sha512-L05dRw0tasmz2Ha+10LhftEGLq4kaA8vRR/T0wDaXfHwqcgsf81jfXDJ6NlZ63Z7Rl1k3rj7UHs0l0p7CM3aYA==} + /daisyui@2.46.1(autoprefixer@10.4.7)(postcss@8.4.21)(ts-node@10.9.1): + resolution: {integrity: sha512-i59+nLuzzPAVOhNhot3KLtt6stfYeCIPXs9uiLcpXjykpqxHfBA3W6hQWOUWPMwfqhyQd0WKub3sydtPGjzLtA==} peerDependencies: autoprefixer: ^10.0.2 postcss: ^8.1.6 dependencies: - autoprefixer: 10.4.14(postcss@8.4.21) + autoprefixer: 10.4.7(postcss@8.4.21) color: 4.2.3 css-selector-tokenizer: 0.8.0 postcss: 8.4.21 postcss-js: 4.0.1(postcss@8.4.21) - tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: true @@ -12968,12 +14845,14 @@ packages: whatwg-url: 11.0.0 dev: true - /date-fns@2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.22.5 - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + /dayjs@1.11.6: + resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==} dev: false /debug@2.6.9: @@ -13053,28 +14932,6 @@ packages: type-detect: 4.0.8 dev: true - /deep-equal@2.2.0: - resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} - dependencies: - call-bind: 1.0.2 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.0 - 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.4.3 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.9 - dev: true - /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -13083,8 +14940,8 @@ packages: engines: {node: '>=12.4.0'} dev: false - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + /deepmerge@4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} /default-browser-id@3.0.0: @@ -13093,7 +14950,15 @@ packages: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.1.1 + titleize: 3.0.0 /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -13103,6 +14968,11 @@ packages: /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} @@ -13111,6 +14981,9 @@ packages: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + /defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + /defu@6.1.2: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} dev: true @@ -13202,9 +15075,14 @@ packages: - supports-color dev: true - /devalue@4.3.0: - resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==} - dev: false + /detective@5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -13402,9 +15280,9 @@ packages: hasBin: true dependencies: '@one-ini/wasm': 0.1.1 - commander: 10.0.0 + commander: 10.0.1 minimatch: 6.1.6 - semver: 7.4.0 + semver: 7.5.1 dev: true /ee-first@1.1.1: @@ -13415,11 +15293,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.8.5 + jake: 10.8.7 dev: true - /electron-to-chromium@1.4.361: - resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} + /electron-to-chromium@1.4.430: + resolution: {integrity: sha512-FytjTbGwz///F+ToZ5XSeXbbSaXalsVRXsz2mHityI5gfxft7ieW3HqFLkU5V1aIrY42aflICqbmFoDxW10etg==} /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -13437,11 +15315,11 @@ packages: engines: {node: '>=10'} dev: true - /emmet@2.4.2: - resolution: {integrity: sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w==} + /emmet@2.4.4: + resolution: {integrity: sha512-v8Mwpjym55CS3EjJgiCLWUB3J2HSR93jhzXW325720u8KvYxdI2voYLstW3pHBxFz54H6jFjayR9G4LfTG0q+g==} dependencies: - '@emmetio/abbreviation': 2.3.1 - '@emmetio/css-abbreviation': 2.1.6 + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 dev: false /emoji-regex@8.0.0: @@ -13460,8 +15338,8 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -13479,8 +15357,8 @@ packages: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true - /entities@4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true @@ -13506,7 +15384,7 @@ packages: es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -13526,7 +15404,7 @@ packages: object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 safe-regex-test: 1.0.0 string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 @@ -13540,33 +15418,23 @@ packages: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - 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 - dev: true + /es-module-lexer@0.10.5: + resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} + dev: false /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} dev: false /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 dev: true @@ -13632,6 +15500,15 @@ packages: es6-symbol: 3.1.3 dev: true + /esbuild-android-64@0.14.54: + resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + /esbuild-android-64@0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -13640,6 +15517,15 @@ packages: requiresBuild: true optional: true + /esbuild-android-arm64@0.14.54: + resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + /esbuild-android-arm64@0.15.18: resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} engines: {node: '>=12'} @@ -13648,6 +15534,15 @@ packages: requiresBuild: true optional: true + /esbuild-darwin-64@0.14.54: + resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /esbuild-darwin-64@0.15.18: resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} engines: {node: '>=12'} @@ -13656,6 +15551,15 @@ packages: requiresBuild: true optional: true + /esbuild-darwin-arm64@0.14.54: + resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /esbuild-darwin-arm64@0.15.18: resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} engines: {node: '>=12'} @@ -13664,6 +15568,15 @@ packages: requiresBuild: true optional: true + /esbuild-freebsd-64@0.14.54: + resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /esbuild-freebsd-64@0.15.18: resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} engines: {node: '>=12'} @@ -13672,6 +15585,15 @@ packages: requiresBuild: true optional: true + /esbuild-freebsd-arm64@0.14.54: + resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /esbuild-freebsd-arm64@0.15.18: resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} engines: {node: '>=12'} @@ -13680,6 +15602,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-32@0.14.54: + resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-32@0.15.18: resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} engines: {node: '>=12'} @@ -13688,6 +15619,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-64@0.14.54: + resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-64@0.15.18: resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} engines: {node: '>=12'} @@ -13696,6 +15636,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-arm64@0.14.54: + resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-arm64@0.15.18: resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} engines: {node: '>=12'} @@ -13704,6 +15653,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-arm@0.14.54: + resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-arm@0.15.18: resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} engines: {node: '>=12'} @@ -13712,6 +15670,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-mips64le@0.14.54: + resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-mips64le@0.15.18: resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} engines: {node: '>=12'} @@ -13720,6 +15687,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-ppc64le@0.14.54: + resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-ppc64le@0.15.18: resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} engines: {node: '>=12'} @@ -13728,6 +15704,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-riscv64@0.14.54: + resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-riscv64@0.15.18: resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} engines: {node: '>=12'} @@ -13736,6 +15721,15 @@ packages: requiresBuild: true optional: true + /esbuild-linux-s390x@0.14.54: + resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /esbuild-linux-s390x@0.15.18: resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} engines: {node: '>=12'} @@ -13744,6 +15738,15 @@ packages: requiresBuild: true optional: true + /esbuild-netbsd-64@0.14.54: + resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + /esbuild-netbsd-64@0.15.18: resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} engines: {node: '>=12'} @@ -13752,6 +15755,15 @@ packages: requiresBuild: true optional: true + /esbuild-openbsd-64@0.14.54: + resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + /esbuild-openbsd-64@0.15.18: resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} engines: {node: '>=12'} @@ -13764,17 +15776,26 @@ packages: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: true - /esbuild-register@3.4.2(esbuild@0.17.16): + /esbuild-register@3.4.2(esbuild@0.17.19): resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==} peerDependencies: esbuild: '>=0.12 <1' dependencies: debug: 4.3.4(supports-color@8.1.1) - esbuild: 0.17.16 + esbuild: 0.17.19 transitivePeerDependencies: - supports-color dev: true + /esbuild-sunos-64@0.14.54: + resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + /esbuild-sunos-64@0.15.18: resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} @@ -13783,6 +15804,15 @@ packages: requiresBuild: true optional: true + /esbuild-windows-32@0.14.54: + resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /esbuild-windows-32@0.15.18: resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} engines: {node: '>=12'} @@ -13791,6 +15821,15 @@ packages: requiresBuild: true optional: true + /esbuild-windows-64@0.14.54: + resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /esbuild-windows-64@0.15.18: resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} engines: {node: '>=12'} @@ -13799,6 +15838,15 @@ packages: requiresBuild: true optional: true + /esbuild-windows-arm64@0.14.54: + resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /esbuild-windows-arm64@0.15.18: resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} engines: {node: '>=12'} @@ -13807,6 +15855,35 @@ packages: requiresBuild: true optional: true + /esbuild@0.14.54: + resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@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 + dev: false + /esbuild@0.15.18: resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} @@ -13864,36 +15941,36 @@ packages: '@esbuild/win32-arm64': 0.16.17 '@esbuild/win32-ia32': 0.16.17 '@esbuild/win32-x64': 0.16.17 - dev: true - /esbuild@0.17.16: - resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.16 - '@esbuild/android-arm64': 0.17.16 - '@esbuild/android-x64': 0.17.16 - '@esbuild/darwin-arm64': 0.17.16 - '@esbuild/darwin-x64': 0.17.16 - '@esbuild/freebsd-arm64': 0.17.16 - '@esbuild/freebsd-x64': 0.17.16 - '@esbuild/linux-arm': 0.17.16 - '@esbuild/linux-arm64': 0.17.16 - '@esbuild/linux-ia32': 0.17.16 - '@esbuild/linux-loong64': 0.17.16 - '@esbuild/linux-mips64el': 0.17.16 - '@esbuild/linux-ppc64': 0.17.16 - '@esbuild/linux-riscv64': 0.17.16 - '@esbuild/linux-s390x': 0.17.16 - '@esbuild/linux-x64': 0.17.16 - '@esbuild/netbsd-x64': 0.17.16 - '@esbuild/openbsd-x64': 0.17.16 - '@esbuild/sunos-x64': 0.17.16 - '@esbuild/win32-arm64': 0.17.16 - '@esbuild/win32-ia32': 0.17.16 - '@esbuild/win32-x64': 0.17.16 + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -13933,18 +16010,18 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@6.15.0(eslint@8.38.0): - resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==} + /eslint-config-prettier@6.11.0(eslint@8.35.0): + resolution: {integrity: sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==} hasBin: true peerDependencies: eslint: '>=3.14.1' dependencies: - eslint: 8.38.0 + eslint: 8.35.0 get-stdin: 6.0.0 dev: true - /eslint-config-prettier@8.8.0(eslint@8.22.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + /eslint-config-prettier@8.7.0(eslint@8.22.0): + resolution: {integrity: sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -13952,16 +16029,16 @@ packages: eslint: 8.22.0 dev: true - /eslint-config-prettier@8.8.0(eslint@8.38.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + /eslint-config-prettier@8.7.0(eslint@8.35.0): + resolution: {integrity: sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.38.0 + eslint: 8.35.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5): + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.54.1)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.35.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -13971,19 +16048,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - eslint: 8.38.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) - eslint-plugin-promise: 6.1.1(eslint@8.38.0) + '@typescript-eslint/eslint-plugin': 5.54.1(@typescript-eslint/parser@5.54.1)(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) + eslint: 8.35.0 + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.35.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) + eslint-plugin-n: 15.7.0(eslint@8.35.0) + eslint-plugin-promise: 6.1.1(eslint@8.35.0) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): + /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.35.0): resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -13991,48 +16068,44 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.38.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) - eslint-plugin-promise: 6.1.1(eslint@8.38.0) + eslint: 8.35.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) + eslint-plugin-n: 15.7.0(eslint@8.35.0) + eslint-plugin-promise: 6.1.1(eslint@8.35.0) dev: true /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - is-core-module: 2.12.0 + is-core-module: 2.12.1 resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0): - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} + /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.35.0): + resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: debug: 4.3.4(supports-color@8.1.1) - enhanced-resolve: 5.12.0 - eslint: 8.38.0 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - get-tsconfig: 4.5.0 + enhanced-resolve: 5.15.0 + eslint: 8.35.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) + get-tsconfig: 4.6.0 globby: 13.1.4 - is-core-module: 2.12.0 + is-core-module: 2.12.1 is-glob: 4.0.3 synckit: 0.8.5 transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -14052,79 +16125,76 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.38.0 + eslint: 8.35.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.35.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-astro@0.21.1(eslint@8.38.0): - resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} + /eslint-plugin-astro@0.21.0(eslint@8.35.0): + resolution: {integrity: sha512-7pEhTfYT+tlOMOSmQV77TNgCeuFZgqSAqJPTHh6LYlwLqYyBQLURc5RRtlQqCJkufSh4Fan4nsV3LXCT/vjpCA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=7.0.0' dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/types': 5.59.11 astro-eslint-parser: 0.9.5 - eslint: 8.38.0 - eslint-utils: 3.0.0(eslint@8.38.0) + eslint: 8.35.0 + eslint-utils: 3.0.0(eslint@8.35.0) postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss-selector-parser: 6.0.13 + sourcemap-codec: 1.4.8 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es@4.1.0(eslint@8.38.0): + /eslint-plugin-es@4.1.0(eslint@8.35.0): resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.38.0 + eslint: 8.35.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.38.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.35.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.38.0 + eslint: 8.35.0 ignore: 5.2.4 dev: true - /eslint-plugin-functional@3.7.2(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg==} + /eslint-plugin-functional@3.0.2(eslint@8.35.0)(typescript@4.9.5): + resolution: {integrity: sha512-miOugVKh+Yvu9h4a3M6yPxrbK4orVghD6Uyd3y62Rv0vz+gPqrI4p7UY7CUa3rA9GKwwgJW02tLPQBYsbytqug==} engines: {node: '>=10.18.0'} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - tsutils: ^3.0.0 typescript: ^3.4.1 || ^4.0.0 peerDependenciesMeta: - tsutils: - optional: true typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 3.10.1(eslint@8.35.0)(typescript@4.9.5) array.prototype.flatmap: 1.3.1 - deepmerge: 4.3.1 + deepmerge: 4.3.0 escape-string-regexp: 4.0.0 - eslint: 8.38.0 + eslint: 8.35.0 object.fromentries: 2.0.6 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -14134,17 +16204,17 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.54.1(eslint@8.35.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.38.0 + eslint: 8.35.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.54.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.35.0) has: 1.0.3 - is-core-module: 2.12.0 + is-core-module: 2.12.1 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 @@ -14157,30 +16227,30 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.7.0(eslint@8.38.0): + /eslint-plugin-n@15.7.0(eslint@8.35.0): resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '>=7.0.0' dependencies: builtins: 5.0.1 - eslint: 8.38.0 - eslint-plugin-es: 4.1.0(eslint@8.38.0) - eslint-utils: 3.0.0(eslint@8.38.0) + eslint: 8.35.0 + eslint-plugin-es: 4.1.0(eslint@8.35.0) + eslint-utils: 3.0.0(eslint@8.35.0) ignore: 5.2.4 - is-core-module: 2.12.0 + is-core-module: 2.12.1 minimatch: 3.1.2 resolve: 1.22.2 - semver: 7.4.0 + semver: 7.5.1 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.38.0): + /eslint-plugin-promise@6.1.1(eslint@8.35.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.38.0 + eslint: 8.35.0 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.22.0): @@ -14192,15 +16262,14 @@ packages: eslint: 8.22.0 dev: true - /eslint-plugin-react@7.32.2(eslint@8.22.0): - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + /eslint-plugin-react@7.30.1(eslint@8.22.0): + resolution: {integrity: sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 eslint: 8.22.0 estraverse: 5.3.0 @@ -14216,14 +16285,14 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-storybook@0.6.11(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-lIVmCqQgA0bhcuS1yWYBFrnPHBKPEQI+LHPDtlN81UE1/17onCqgwUW7Nyt7gS2OHjCAiOR4npjTGEoe0hssKw==} + /eslint-plugin-storybook@0.6.6(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-nqYq802vJABpaV0n9cpIZl4Mlmy1yStxa8T3sPqvqbByOpXXtA9ZKRqVv2faSDp0DKVC0B3ItTNU7iMX3Et8VQ==} engines: {node: 12.x || 14.x || >= 16} peerDependencies: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 5.59.11(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -14232,25 +16301,25 @@ packages: - typescript dev: true - /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.58.0): + /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.55.1): resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: eslint: 8.22.0 - svelte: 3.58.0 + svelte: 3.55.1 dev: true - /eslint-plugin-tailwindcss@3.11.0(tailwindcss@3.3.1): - resolution: {integrity: sha512-RaraOG4D6VXutKnoNvFQ4+frTWGJDKtezy1yCrGFS7Um1to/npDNdh2GL19IRoGB/eanbtwhxFXy+xyEw0grAg==} + /eslint-plugin-tailwindcss@3.8.0(ts-node@10.9.1): + resolution: {integrity: sha512-Lsyncgp/eXZriAEUK9zfGHOH+9iQplygHiOuGY8SFFHKIeT0BYjyST/ownHF8UPa1TEh+jJPkdE2vlV3778C3w==} engines: {node: '>=12.13.0'} - peerDependencies: - tailwindcss: ^3.2.2 dependencies: fast-glob: 3.2.12 postcss: 8.4.21 - tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) + transitivePeerDependencies: + - ts-node dev: false /eslint-scope@5.1.1: @@ -14261,8 +16330,8 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + /eslint-scope@7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 @@ -14284,13 +16353,13 @@ packages: eslint: 8.22.0 eslint-visitor-keys: 2.1.0 - /eslint-utils@3.0.0(eslint@8.38.0): + /eslint-utils@3.0.0(eslint@8.35.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.38.0 + eslint: 8.35.0 eslint-visitor-keys: 2.1.0 dev: true @@ -14302,8 +16371,8 @@ packages: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint@8.22.0: @@ -14320,10 +16389,10 @@ packages: debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 + eslint-scope: 7.2.0 eslint-utils: 3.0.0(eslint@8.22.0) - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14353,16 +16422,14 @@ packages: transitivePeerDependencies: - supports-color - /eslint@8.38.0: - resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} + /eslint@8.35.0: + resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 - '@eslint/js': 8.38.0 - '@humanwhocodes/config-array': 0.11.8 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.35.0 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -14371,9 +16438,10 @@ packages: debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-scope: 7.2.0 + eslint-utils: 3.0.0(eslint@8.35.0) + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14387,7 +16455,7 @@ packages: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.4.0 + js-sdsl: 4.4.1 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -14395,6 +16463,7 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 + regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -14402,13 +16471,13 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -14440,9 +16509,9 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 - c8: 7.13.0 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + c8: 7.14.0 transitivePeerDependencies: - supports-color dev: true @@ -14450,7 +16519,7 @@ packages: /estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /estree-util-build-jsx@2.2.2: @@ -14469,7 +16538,7 @@ packages: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: '@types/estree-jsx': 1.0.0 - astring: 1.8.4 + astring: 1.8.6 source-map: 0.7.4 dev: false @@ -14490,7 +16559,7 @@ packages: /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /esutils@2.0.3: @@ -14548,7 +16617,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /execa@6.1.0: resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} @@ -14565,6 +16633,20 @@ packages: strip-final-newline: 3.0.0 dev: false + /execa@7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -14797,14 +16879,14 @@ packages: pend: 1.2.0 dev: true - /felte@1.2.7(svelte@3.58.0): + /felte@1.2.7(svelte@3.55.1): resolution: {integrity: sha512-VfCkYBODReCUrYeRMmJ9lRs7O/pC4PYKMTT7E2K6m9UzmTGpm3Ql3C518J3gUVVG5ZeEeSEifUaqmrAcaWB89w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/core': 1.3.7 - svelte: 3.58.0 + svelte: 3.55.1 dev: false /fetch-blob@3.2.0: @@ -14815,8 +16897,8 @@ packages: web-streams-polyfill: 3.2.1 dev: false - /fetch-retry@5.0.4: - resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==} + /fetch-retry@5.0.6: + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true /figures@3.2.0: @@ -14831,11 +16913,11 @@ packages: dependencies: flat-cache: 3.0.4 - /file-system-cache@2.1.1: - resolution: {integrity: sha512-vgZ1uDsK29DM4pptUOv47zdJO2tYM5M/ERyAE9Jk0QBN6e64Md+a+xJSOp68dCCDH4niFMVD8nC8n8A5ic0bmg==} + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} dependencies: fs-extra: 11.1.1 - ramda: 0.28.0 + ramda: 0.29.0 dev: true /file-type@12.4.2: @@ -14970,8 +17052,8 @@ packages: /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /flow-parser@0.203.1: - resolution: {integrity: sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==} + /flow-parser@0.208.1: + resolution: {integrity: sha512-VfWzg5/5W6/sO/Zk69ByKWGHOI1aXLRZ0wznxbOfFiOYMtAtP8CePGkGkkZaI5vXkUt7HJzVZ1+0Rxat0k7rgw==} engines: {node: '>=0.4.0'} dev: true @@ -15013,17 +17095,17 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 - deepmerge: 4.3.1 + deepmerge: 4.3.0 fs-extra: 10.1.0 - memfs: 3.5.0 + memfs: 3.5.3 minimatch: 3.1.2 node-abort-controller: 3.1.1 - schema-utils: 3.1.1 - semver: 7.4.0 + schema-utils: 3.2.0 + semver: 7.5.1 tapable: 2.2.1 typescript: 4.9.5 webpack: 5.76.2 @@ -15080,13 +17162,13 @@ packages: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true - /framer-motion@8.5.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5IDx5bxkjWHWUF3CVJoSyUVOtrbAxtzYBBowRE2uYI/6VYhkEBD+rbTHEGuUmbGHRj6YqqSfoG7Aa1cLyWCrBA==} + /framer-motion@8.3.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3HE8+25FYkm2C7mgwuVtY+TrknBywbkXBUMXziMdfKZmzxoBteffSgqNuLDpvNJIvpmrgy+AKgk67sYIXhm+aw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@motionone/dom': 10.15.5 + '@motionone/dom': 10.16.2 hey-listen: 1.0.8 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -15112,6 +17194,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@11.1.0: + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -15155,8 +17246,8 @@ packages: dependencies: minipass: 3.3.6 - /fs-monkey@1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + /fs-monkey@1.0.4: + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} dev: true /fs.realpath@1.0.0: @@ -15215,11 +17306,12 @@ packages: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: function-bind: 1.1.1 has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 /get-nonce@1.0.1: @@ -15272,24 +17364,26 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true - /get-tsconfig@4.5.0: - resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} + /get-tsconfig@4.6.0: + resolution: {integrity: sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==} + dependencies: + resolve-pkg-maps: 1.0.0 dev: true /giget@1.1.2: resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==} hasBin: true dependencies: - colorette: 2.0.19 + colorette: 2.0.20 defu: 6.1.2 https-proxy-agent: 5.0.1 mri: 1.2.0 - node-fetch-native: 1.1.0 - pathe: 1.1.0 - tar: 6.1.13 + node-fetch-native: 1.2.0 + pathe: 1.1.1 + tar: 6.1.15 transitivePeerDependencies: - supports-color dev: true @@ -15309,10 +17403,6 @@ packages: /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: false - /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -15335,8 +17425,8 @@ packages: glob: 7.2.3 dev: true - /glob-promise@6.0.2(glob@8.1.0): - resolution: {integrity: sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==} + /glob-promise@6.0.3(glob@8.1.0): + resolution: {integrity: sha512-m+kxywR5j/2Z2V9zvHKfwwL5Gp7gIFEBX+deTB9w2lJB+wSuw9kcS43VfvTAMk8TXL5JCl/cCjsR+tgNVspGyA==} engines: {node: '>=16'} peerDependencies: glob: ^8.0.3 @@ -15350,25 +17440,15 @@ packages: dev: true /glob@7.1.4: - resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.0.5 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -15398,7 +17478,7 @@ packages: fs.realpath: 1.0.0 minimatch: 8.0.4 minipass: 4.2.8 - path-scurry: 1.6.4 + path-scurry: 1.9.2 dev: true /global-agent@3.0.0: @@ -15409,7 +17489,7 @@ packages: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.4.0 + semver: 7.5.1 serialize-error: 7.0.1 dev: false @@ -15463,9 +17543,6 @@ packages: dependencies: define-properties: 1.2.0 - /globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -15490,9 +17567,10 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: false - /goober@2.1.12(csstype@3.1.2): - resolution: {integrity: sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==} + /goober@2.1.13(csstype@3.1.2): + resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} peerDependencies: csstype: ^3.0.10 dependencies: @@ -15502,7 +17580,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -15602,12 +17680,11 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} @@ -15662,10 +17739,10 @@ packages: zwitch: 2.0.4 dev: false - /hast-util-to-estree@2.3.2: - resolution: {integrity: sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==} + /hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/unist': 2.0.6 @@ -15733,8 +17810,8 @@ packages: /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /helmet@6.1.5: - resolution: {integrity: sha512-UgAvdoG0BhF9vcCh/j0bWtElo2ZHHk6OzC98NLCM6zK03DEVSM0vUAtT7iR+oTo2Mi6sGelAH3tL6B/uUWxV4g==} + /helmet@6.0.1: + resolution: {integrity: sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==} engines: {node: '>=14.0.0'} dev: false @@ -15782,6 +17859,10 @@ packages: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} dev: false + /html-entities@2.3.6: + resolution: {integrity: sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==} + dev: false + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -15800,7 +17881,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.9 + terser: 5.18.0 dev: true /html-parse-stringify@3.0.1: @@ -15829,6 +17910,17 @@ packages: toidentifier: 1.0.0 dev: false + /http-errors@1.7.3: + resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: false + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -15892,13 +17984,16 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /human-signals@3.0.1: resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} engines: {node: '>=12.20.0'} dev: false + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -15908,21 +18003,21 @@ packages: /i18next-browser-languagedetector@7.0.1: resolution: {integrity: sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: false - /i18next-http-backend@2.2.0: - resolution: {integrity: sha512-Z4sM7R6tzdLknSPER9GisEBxKPg5FkI07UrQniuroZmS15PHQrcCPLyuGKj8SS68tf+O2aEDYSUnmy1TZqZSbw==} + /i18next-http-backend@2.1.1: + resolution: {integrity: sha512-jByfUCDVgQ8+/Wens7queQhYYvMcGTW/lR4IJJNEDDXnmqjLrwi8ubXKpmp76/JIWEZHffNdWqnxFJcTVGeaOw==} dependencies: cross-fetch: 3.1.5 transitivePeerDependencies: - encoding dev: false - /i18next@22.4.14: - resolution: {integrity: sha512-VtLPtbdwGn0+DAeE00YkiKKXadkwg+rBUV+0v8v0ikEjwdiJ0gmYChVE4GIa9HXymY6wKapkL93vGT7xpq6aTw==} + /i18next@22.4.9: + resolution: {integrity: sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: false /iconv-lite@0.4.24: @@ -16045,7 +18140,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.0 + rxjs: 7.8.1 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -16066,7 +18161,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.0 + rxjs: 7.8.1 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -16076,7 +18171,7 @@ packages: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -16131,7 +18226,7 @@ packages: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-typed-array: 1.1.10 dev: true @@ -16183,8 +18278,8 @@ packages: ci-info: 3.8.0 dev: true - /is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 @@ -16212,7 +18307,6 @@ packages: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: false /is-electron@2.2.2: resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} @@ -16266,6 +18360,13 @@ packages: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} dev: false + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -16275,10 +18376,6 @@ packages: engines: {node: '>=12'} dev: false - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - /is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true @@ -16362,13 +18459,13 @@ packages: /is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: true /is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: false /is-regex@1.1.4: @@ -16384,10 +18481,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: @@ -16397,12 +18490,10 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -16463,25 +18554,14 @@ packages: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - dev: true - - /is-what@4.1.8: - resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} + /is-what@4.1.15: + resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} engines: {node: '>=12.13'} dev: true @@ -16519,7 +18599,7 @@ packages: /isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} dependencies: - node-fetch: 2.6.9 + node-fetch: 2.6.11 unfetch: 4.2.0 transitivePeerDependencies: - encoding @@ -16534,8 +18614,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.9 - '@babel/parser': 7.21.4 + '@babel/core': 7.18.5 + '@babel/parser': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -16579,8 +18659,8 @@ packages: resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} - /jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} hasBin: true dependencies: @@ -16614,7 +18694,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -16642,7 +18722,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -16692,7 +18772,7 @@ packages: - utf-8-validate dev: true - /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-cli@29.5.0(@types/node@18.14.6)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -16709,11 +18789,11 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.14.6)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - supports-color @@ -16729,13 +18809,13 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.21.4) + babel-jest: 27.5.1(@babel/core@7.18.5) chalk: 4.1.2 ci-info: 3.8.0 - deepmerge: 4.3.1 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.11 jest-circus: 27.5.1 @@ -16753,7 +18833,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -16761,7 +18841,7 @@ packages: - utf-8-validate dev: true - /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-config@29.5.0(@types/node@18.14.6)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -16773,14 +18853,14 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 - babel-jest: 29.5.0(@babel/core@7.21.4) + '@types/node': 18.14.6 + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 - deepmerge: 4.3.1 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.11 jest-circus: 29.5.0 @@ -16796,7 +18876,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -16874,7 +18954,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -16892,7 +18972,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -16904,7 +18984,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -16930,7 +19010,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.11 + '@types/node': 18.14.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -16950,7 +19030,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.11 + '@types/node': 18.14.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -16971,7 +19051,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -17028,7 +19108,7 @@ packages: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -17043,7 +19123,7 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -17054,10 +19134,10 @@ packages: stack-utils: 2.0.6 dev: true - /jest-mock-extended@2.0.9(jest@27.0.6)(typescript@4.9.5): - resolution: {integrity: sha512-eRZq7/FgwHbxOMm3Lo4DpQX6S2zi4OvwMVFHEb3FgDLp0Xy3P1WARkF93xxO5uD4nAHiEPYHZ25qVU9mAVxoLQ==} + /jest-mock-extended@2.0.4(jest@27.0.6)(typescript@4.9.5): + resolution: {integrity: sha512-MgL3B3GjURQFjjPGqbCANydA5BFNPygv0mYp4Tjfxohh9MWwxxX8Eq2p6ncCt/Vt+RAnaLlDaI7gwrDRD7Pt9A==} peerDependencies: - jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 + jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 typescript: ^3.0.0 || ^4.0.0 dependencies: jest: 27.0.6(ts-node@10.9.1) @@ -17070,7 +19150,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 dev: true /jest-mock@29.5.0: @@ -17078,7 +19158,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-util: 29.5.0 dev: true @@ -17177,7 +19257,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -17209,7 +19289,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -17241,7 +19321,7 @@ packages: '@jest/transform': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 + cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.1 execa: 5.1.1 glob: 7.2.3 @@ -17270,9 +19350,9 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 + cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -17293,7 +19373,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 graceful-fs: 4.2.11 dev: true @@ -17301,16 +19381,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/core': 7.18.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.18.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + '@types/babel__traverse': 7.20.1 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.18.5) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -17322,7 +19402,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.4.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color dev: true @@ -17331,18 +19411,18 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.4) - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.4) + '@types/babel__traverse': 7.20.1 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -17353,7 +19433,7 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.4.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color dev: true @@ -17363,7 +19443,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -17375,7 +19455,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -17412,7 +19492,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -17425,7 +19505,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -17437,7 +19517,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -17446,7 +19526,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -17455,7 +19535,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -17482,7 +19562,7 @@ packages: - utf-8-validate dev: true - /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest@29.5.0(@types/node@18.14.6)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -17495,17 +19575,13 @@ packages: '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-cli: 29.5.0(@types/node@18.14.6)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true - /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -17524,8 +19600,8 @@ packages: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} - /js-sdsl@4.4.0: - resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} + /js-sdsl@4.4.1: + resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} dev: true /js-tokens@4.0.0: @@ -17550,19 +19626,19 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/preset-env': 7.20.2(@babel/core@7.21.4) - '@babel/preset-flow': 7.21.4(@babel/core@7.21.4) - '@babel/preset-typescript': 7.16.7(@babel/core@7.21.4) - '@babel/register': 7.21.0(@babel/core@7.21.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.4) + '@babel/core': 7.18.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.18.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.18.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.18.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.18.5) + '@babel/preset-env': 7.20.2(@babel/core@7.21.8) + '@babel/preset-flow': 7.22.5(@babel/core@7.18.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.18.5) + '@babel/register': 7.22.5(@babel/core@7.18.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.18.5) chalk: 4.1.2 - flow-parser: 0.203.1 + flow-parser: 0.208.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -17574,25 +19650,25 @@ packages: - supports-color dev: true - /jscodeshift@0.14.0(@babel/preset-env@7.21.4): + /jscodeshift@0.14.0(@babel/preset-env@7.22.5): resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/preset-env': 7.21.4(@babel/core@7.21.4) - '@babel/preset-flow': 7.21.4(@babel/core@7.21.4) - '@babel/preset-typescript': 7.16.7(@babel/core@7.21.4) - '@babel/register': 7.21.0(@babel/core@7.21.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.4) + '@babel/core': 7.18.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.18.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.18.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.18.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.18.5) + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/preset-flow': 7.22.5(@babel/core@7.18.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.18.5) + '@babel/register': 7.22.5(@babel/core@7.18.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.18.5) chalk: 4.1.2 - flow-parser: 0.203.1 + flow-parser: 0.208.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -17627,11 +19703,11 @@ packages: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.4 + nwsapi: 2.2.5 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 @@ -17646,8 +19722,8 @@ packages: - utf-8-validate dev: true - /jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + /jsdom@20.0.2: + resolution: {integrity: sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -17669,12 +19745,12 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.4 + nwsapi: 2.2.5 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-xmlserializer: 4.0.0 + tough-cookie: 4.1.3 + w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 @@ -17697,8 +19773,8 @@ packages: engines: {node: '>=4'} hasBin: true - /jslib-html5-camera-photo@3.3.4: - resolution: {integrity: sha512-qysjLnP4bud0+g0qs5uA/7i569x+6ID2ufgezf9XQ+BE3EvhYjz177vi9WXLEuq+V6C/WXEv73NUICvHm5VGmQ==} + /jslib-html5-camera-photo@3.3.3: + resolution: {integrity: sha512-kGmIesH3UIaTfwKnqYbolBlSGSiTtNI+l/Np0b+PDIz8VfNJwkN/xmV4mQxBzpTbWq1gF3rB/CmfIojcY4Jqow==} dev: false /json-logic-js@2.0.2: @@ -17715,9 +19791,9 @@ packages: hasBin: true dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork - '@types/json-schema': 7.0.11 - '@types/lodash': 4.14.192 - '@types/prettier': 2.7.2 + '@types/json-schema': 7.0.12 + '@types/lodash': 4.14.191 + '@types/prettier': 2.7.3 cli-color: 2.0.3 get-stdin: 8.0.0 glob: 7.2.3 @@ -17735,7 +19811,7 @@ packages: hasBin: true dependencies: '@apidevtools/json-schema-ref-parser': 9.1.2 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 prettier: 2.8.8 dev: false @@ -17801,7 +19877,7 @@ packages: jws: 3.2.2 lodash: 4.17.21 ms: 2.1.3 - semver: 7.4.0 + semver: 7.5.1 dev: false /jsx-ast-utils@3.3.3: @@ -17846,8 +19922,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - /kolorist@1.7.0: - resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==} + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} /lazy-universal-dotenv@4.0.0: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} @@ -17885,8 +19961,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /libphonenumber-js@1.10.26: - resolution: {integrity: sha512-oB3l4J5gEhMV+ymmlIjWedsbCpsNRqbEZ/E/MpN2QVyinKNra6DcuXywxSk/72M3DZDoH/6kzurOq1erznBMwQ==} + /libphonenumber-js@1.10.34: + resolution: {integrity: sha512-p6g4NaQH4gK1gre32+kV14Mk6GPo2EDcPDvjbi+D2ycsPFsN4gVWNbs0itdHLZqByg6YEK8mE7OeP200I/ScTQ==} /lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -17900,6 +19976,7 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lint-staged@11.2.6: resolution: {integrity: sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==} @@ -17931,12 +20008,12 @@ packages: optional: true dependencies: cli-truncate: 2.1.0 - colorette: 2.0.19 + colorette: 2.0.20 enquirer: 2.3.6 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.8.0 + rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -18134,8 +20211,8 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache@9.0.1: - resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} + /lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} engines: {node: 14 || >=16.14} dev: true @@ -18181,7 +20258,6 @@ packages: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 - dev: true /magic-string@0.26.7: resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} @@ -18256,8 +20332,8 @@ packages: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false - /markdown-to-jsx@7.2.0(react@18.2.0): - resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==} + /markdown-to-jsx@7.2.1(react@18.2.0): + resolution: {integrity: sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' @@ -18274,7 +20350,7 @@ packages: /match-sorter@6.3.1: resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 remove-accents: 0.4.2 dev: false @@ -18307,19 +20383,19 @@ packages: unist-util-visit-parents: 5.1.3 dev: false - /mdast-util-from-markdown@1.3.0: - resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==} + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 - micromark: 3.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-decode-string: 1.0.2 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-stringify-position: 3.0.3 uvu: 0.5.6 transitivePeerDependencies: @@ -18331,7 +20407,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 - micromark-extension-frontmatter: 1.1.0 + micromark-extension-frontmatter: 1.1.1 dev: false /mdast-util-gfm-autolink-literal@1.0.3: @@ -18340,7 +20416,7 @@ packages: '@types/mdast': 3.0.11 ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 - micromark-util-character: 1.1.0 + micromark-util-character: 1.2.0 dev: false /mdast-util-gfm-footnote@1.0.2: @@ -18348,7 +20424,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 - micromark-util-normalize-identifier: 1.0.0 + micromark-util-normalize-identifier: 1.1.0 dev: false /mdast-util-gfm-strikethrough@1.0.3: @@ -18363,7 +20439,7 @@ packages: dependencies: '@types/mdast': 3.0.11 markdown-table: 3.0.3 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -18379,7 +20455,7 @@ packages: /mdast-util-gfm@2.0.2: resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-gfm-autolink-literal: 1.0.3 mdast-util-gfm-footnote: 1.0.2 mdast-util-gfm-strikethrough: 1.0.3 @@ -18396,7 +20472,7 @@ packages: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -18415,15 +20491,15 @@ packages: vfile-message: 3.1.4 dev: false - /mdast-util-mdx-jsx@2.1.2: - resolution: {integrity: sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==} + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.11 '@types/unist': 2.0.6 ccount: 2.0.1 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 parse-entities: 4.0.1 stringify-entities: 4.0.3 @@ -18437,9 +20513,9 @@ packages: /mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} dependencies: - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 - mdast-util-mdx-jsx: 2.1.2 + mdast-util-mdx-jsx: 2.1.4 mdast-util-mdxjs-esm: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: @@ -18452,7 +20528,7 @@ packages: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -18471,7 +20547,7 @@ packages: '@types/hast': 2.3.4 '@types/mdast': 3.0.11 mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 trim-lines: 3.0.1 unist-util-generated: 2.0.1 unist-util-position: 4.0.4 @@ -18486,7 +20562,7 @@ packages: longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 mdast-util-to-string: 3.2.0 - micromark-util-decode-string: 1.0.2 + micromark-util-decode-string: 1.1.0 unist-util-visit: 4.1.2 zwitch: 2.0.4 dev: false @@ -18504,11 +20580,11 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - /memfs@3.5.0: - resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} dependencies: - fs-monkey: 1.0.3 + fs-monkey: 1.0.4 dev: true /memoizee@0.4.15: @@ -18582,342 +20658,344 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - /micromark-core-commonmark@1.0.6: - resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.0.0 - micromark-factory-label: 1.0.2 - micromark-factory-space: 1.0.0 - micromark-factory-title: 1.0.2 - micromark-factory-whitespace: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-html-tag-name: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-extension-frontmatter@1.1.0: - resolution: {integrity: sha512-0nLelmvXR5aZ+F2IL6/Ed4cDnHLpL/VD/EELKuclsTWHrLI8UgxGHEmeoumeX2FXiM6z2WrBIOEcbKUZR8RYNg==} + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} dependencies: fault: 2.0.1 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-extension-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-extension-gfm-footnote@1.1.0: - resolution: {integrity: sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==} + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} dependencies: - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-extension-gfm-strikethrough@1.0.5: - resolution: {integrity: sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==} + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-extension-gfm-table@1.0.5: - resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false /micromark-extension-gfm-tagfilter@1.0.2: resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 dev: false - /micromark-extension-gfm-task-list-item@1.0.4: - resolution: {integrity: sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==} + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-extension-gfm@2.0.1: - resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} dependencies: - micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.1.0 - micromark-extension-gfm-strikethrough: 1.0.5 - micromark-extension-gfm-table: 1.0.5 + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 micromark-extension-gfm-tagfilter: 1.0.2 - micromark-extension-gfm-task-list-item: 1.0.4 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-extension-mdx-expression@1.0.4: - resolution: {integrity: sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==} + /micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} dependencies: - micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + '@types/estree': 1.0.1 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-extension-mdx-jsx@1.0.3: - resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} + /micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} dependencies: '@types/acorn': 4.0.6 + '@types/estree': 1.0.1 estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 dev: false - /micromark-extension-mdx-md@1.0.0: - resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 dev: false - /micromark-extension-mdxjs-esm@1.0.3: - resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} + /micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} dependencies: - micromark-core-commonmark: 1.0.6 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + '@types/estree': 1.0.1 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 dev: false - /micromark-extension-mdxjs@1.0.0: - resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - micromark-extension-mdx-expression: 1.0.4 - micromark-extension-mdx-jsx: 1.0.3 - micromark-extension-mdx-md: 1.0.0 - micromark-extension-mdxjs-esm: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-factory-destination@1.0.0: - resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-factory-label@1.0.2: - resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-factory-mdx-expression@1.0.7: - resolution: {integrity: sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==} + /micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + '@types/estree': 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 dev: false - /micromark-factory-space@1.0.0: - resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 dev: false - /micromark-factory-title@1.0.2: - resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-factory-whitespace@1.0.0: - resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-util-character@1.1.0: - resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-util-chunked@1.0.0: - resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 dev: false - /micromark-util-classify-character@1.0.0: - resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-util-combine-extensions@1.0.0: - resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 dev: false - /micromark-util-decode-numeric-character-reference@1.0.0: - resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 dev: false - /micromark-util-decode-string@1.0.2: - resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 dev: false - /micromark-util-encode@1.0.1: - resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} dev: false - /micromark-util-events-to-acorn@1.2.1: - resolution: {integrity: sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==} + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 + '@types/unist': 2.0.6 estree-util-visit: 1.2.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 - vfile-location: 4.1.0 vfile-message: 3.1.4 dev: false - /micromark-util-html-tag-name@1.1.0: - resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} dev: false - /micromark-util-normalize-identifier@1.0.0: - resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 dev: false - /micromark-util-resolve-all@1.0.0: - resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 dev: false - /micromark-util-sanitize-uri@1.1.0: - resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-encode: 1.0.1 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 dev: false - /micromark-util-subtokenize@1.0.2: - resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false - /micromark-util-symbol@1.0.1: - resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} dev: false - /micromark-util-types@1.0.2: - resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} dev: false - /micromark@3.1.0: - resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.8 debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-combine-extensions: 1.0.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-encode: 1.0.1 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 transitivePeerDependencies: - supports-color @@ -18964,7 +21042,6 @@ packages: /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: false /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} @@ -19002,13 +21079,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -19041,10 +21111,15 @@ packages: /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} + dev: true /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + + /minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} dev: true /minizlib@2.1.2: @@ -19074,13 +21149,13 @@ packages: engines: {node: '>=10'} hasBin: true - /mlly@1.2.0: - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} + /mlly@1.3.0: + resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} dependencies: acorn: 8.8.2 - pathe: 1.1.0 - pkg-types: 1.0.2 - ufo: 1.1.1 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 dev: true /mri@1.2.0: @@ -19104,13 +21179,13 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /msw@1.2.1(typescript@4.9.5): - resolution: {integrity: sha512-bF7qWJQSmKn6bwGYVPXOxhexTCGD5oJSZg8yt8IBClxvo3Dx/1W0zqE1nX9BSWmzRsCKWfeGWcB/vpqV6aclpw==} + /msw@1.1.0(typescript@4.9.5): + resolution: {integrity: sha512-oqMvUXm1bMbwvGpoXAQVz8vXXQyQyx52HBDg3EDOK+dFXkQHssgkXEG4LfMwwZyr2Qt18I/w04XPaY4BkFTkzA==} engines: {node: '>=14'} hasBin: true requiresBuild: true peerDependencies: - typescript: '>= 4.4.x <= 5.0.x' + typescript: '>= 4.4.x <= 4.9.x' peerDependenciesMeta: typescript: optional: true @@ -19128,25 +21203,25 @@ packages: inquirer: 8.2.5 is-node-process: 1.2.0 js-levenshtein: 1.1.6 - node-fetch: 2.6.9 + node-fetch: 2.6.11 outvariant: 1.4.0 path-to-regexp: 6.2.1 strict-event-emitter: 0.4.6 type-fest: 2.19.0 typescript: 4.9.5 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - encoding - supports-color - /multer-s3@3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): + /multer-s3@3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==} engines: {node: '>= 12.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 dependencies: '@aws-sdk/client-s3': 3.325.0 - '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) file-type: 3.9.0 html-comment-regex: 1.1.2 run-parallel: 1.2.0 @@ -19175,6 +21250,7 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -19209,11 +21285,11 @@ packages: '@nestjs/graphql': optional: true dependencies: - '@nestjs/graphql': 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + '@nestjs/graphql': 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) accesscontrol: 2.2.1 dev: false - /nestjs-prisma@0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0): + /nestjs-prisma@0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0): resolution: {integrity: sha512-tqOcoJQh4U8Y7akyCwluo1VFqhqjqYy8JAYYfrKRhvZ7N4trt3wYXXllRGH3LeLaom09QchHP9WEo/BAV9JMjg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -19222,7 +21298,7 @@ packages: dependencies: '@angular-devkit/core': 13.3.11 '@angular-devkit/schematics': 13.3.11 - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@prisma/client': 4.13.0(prisma@4.13.0) '@schematics/angular': 13.3.11 prisma: 4.13.0 @@ -19277,8 +21353,8 @@ packages: lodash: 4.17.21 dev: true - /node-fetch-native@1.1.0: - resolution: {integrity: sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==} + /node-fetch-native@1.2.0: + resolution: {integrity: sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==} dev: true /node-fetch@2.1.2: @@ -19286,8 +21362,8 @@ packages: engines: {node: 4.x || >=6.0.0} dev: false - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -19297,8 +21373,8 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -19333,8 +21409,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -19358,8 +21434,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.12.0 - semver: 7.4.0 + is-core-module: 2.12.1 + semver: 7.5.1 validate-npm-package-license: 3.0.4 dev: true @@ -19381,14 +21457,12 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: false /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} @@ -19404,8 +21478,8 @@ packages: boolbase: 1.0.0 dev: true - /nwsapi@2.2.4: - resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} + /nwsapi@2.2.5: + resolution: {integrity: sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==} dev: true /nx@15.0.2: @@ -19425,7 +21499,7 @@ packages: '@nrwl/tao': 15.0.2 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.0-rc.42 + '@yarnpkg/parsers': 3.0.0-rc.45 '@zkochan/js-yaml': 0.0.6 axios: 1.4.0 chalk: 4.1.0 @@ -19454,7 +21528,7 @@ packages: tsconfig-paths: 3.14.2 tslib: 2.5.0 v8-compile-cache: 2.3.0 - yargs: 17.7.1 + yargs: 17.7.2 yargs-parser: 21.0.1 transitivePeerDependencies: - debug @@ -19511,14 +21585,15 @@ packages: es-abstract: 1.21.2 dev: true - /object.getownpropertydescriptors@2.1.5: - resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} + /object.getownpropertydescriptors@2.1.6: + resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} engines: {node: '>= 0.8'} dependencies: array.prototype.reduce: 1.0.5 call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 + safe-array-concat: 1.0.0 dev: true /object.hasown@1.1.2: @@ -19570,7 +21645,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: false /open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} @@ -19587,6 +21661,16 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 /opencollective-postinstall@2.0.3: resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} @@ -19623,25 +21707,25 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.8.0 + cli-spinners: 2.9.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - /ora@6.3.0: - resolution: {integrity: sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==} + /ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: chalk: 5.2.0 cli-cursor: 4.0.0 - cli-spinners: 2.8.0 + cli-spinners: 2.9.0 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 stdin-discarder: 0.1.0 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 wcwidth: 1.0.1 dev: false @@ -19759,7 +21843,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -19784,7 +21868,7 @@ packages: /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 dev: true /parseurl@1.3.3: @@ -19856,17 +21940,16 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: false /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.6.4: - resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} + /path-scurry@1.9.2: + resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 9.0.1 - minipass: 5.0.0 + lru-cache: 9.1.2 + minipass: 6.0.2 dev: true /path-to-regexp@0.1.7: @@ -19890,8 +21973,8 @@ packages: resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} dev: true - /pathe@1.1.0: - resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true /pathval@1.1.1: @@ -19917,7 +22000,7 @@ packages: /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 estree-walker: 3.0.3 is-reference: 3.0.1 dev: false @@ -19940,6 +22023,7 @@ packages: /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} + dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -19961,16 +22045,16 @@ packages: find-up: 5.0.0 dev: true - /pkg-types@1.0.2: - resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.3.0 + pathe: 1.1.1 dev: true - /playwright-core@1.32.3: - resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} + /playwright-core@1.32.1: + resolution: {integrity: sha512-KZYUQC10mXD2Am1rGlidaalNGYk3LU1vZqqNk0gT4XPty1jOqgup8KDP8l2CUlqoNKhXM5IfGjWgW37xvGllBA==} engines: {node: '>=14'} hasBin: true dev: true @@ -19990,7 +22074,7 @@ packages: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: true /postcss-import@14.1.0(postcss@8.4.21): @@ -20027,7 +22111,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.21 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.14.6)(typescript@4.9.5) yaml: 1.10.2 /postcss-nested@6.0.0(postcss@8.4.21): @@ -20037,10 +22121,10 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss-selector-parser: 6.0.13 - /postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -20075,94 +22159,32 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-astro@0.7.2: - resolution: {integrity: sha512-mmifnkG160BtC727gqoimoxnZT/dwr8ASxpoGGl6EHevhfblSOeu+pwH1LAm5Qu1MynizktztFujHHaijLCkww==} - engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} + /prettier-plugin-astro@0.7.0: + resolution: {integrity: sha512-ehCUx7MqHWvkHwUmxxAWLsL35pFaCTM5YXQ8xjG/1W6dY2yBhvEks+2aCfjeI5zmMrZNCXkiMQtpznSlLSLrxw==} + engines: {node: ^14.15.0 || >=16.0.0, npm: '>=6.14.0'} dependencies: - '@astrojs/compiler': 0.31.4 + '@astrojs/compiler': 0.29.19 prettier: 2.8.8 sass-formatter: 0.7.6 synckit: 0.8.5 - /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.58.0): - resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} - peerDependencies: - prettier: ^1.16.4 || ^2.0.0 - svelte: ^3.2.0 - dependencies: - prettier: 2.8.7 - svelte: 3.58.0 - dev: true - - /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0): - resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} + /prettier-plugin-svelte@2.8.0(prettier@2.8.8)(svelte@3.55.1): + resolution: {integrity: sha512-QlXv/U3bUszks3XYDPsk1fsaQC+fo2lshwKbcbO+lrSVdJ+40mB1BfL8OCAk1W9y4pJxpqO/4gqm6NtF3zNGCw==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: prettier: 2.8.8 - svelte: 3.58.0 + svelte: 3.55.1 dev: true - /prettier-plugin-tailwindcss@0.2.7(prettier@2.8.7): - resolution: {integrity: sha512-jQopIOgjLpX+y8HeD56XZw7onupRTC0cw7eKKUimI7vhjkPF5/1ltW5LyqaPtSyc8HvEpvNZsvvsGFa2qpa59w==} + /prettier-plugin-tailwindcss@0.2.1(prettier@2.8.8): + resolution: {integrity: sha512-aIO8IguumORyRsmT+E7JfJ3A9FEoyhqZR7Au7TBOege3VZkgMvHJMkufeYp4zjnDK2iq4ktkvGMNOQR9T8lisQ==} engines: {node: '>=12.17.0'} peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-php': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@shufo/prettier-plugin-blade': '*' - '@trivago/prettier-plugin-sort-imports': '*' prettier: '>=2.2.0' - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-php': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@shufo/prettier-plugin-blade': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier-plugin-twig-melody: - optional: true dependencies: - prettier: 2.8.7 - dev: true - - /prettier@2.8.7: - resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} - engines: {node: '>=10.13.0'} - hasBin: true + prettier: 2.8.8 dev: true /prettier@2.8.8: @@ -20200,7 +22222,7 @@ packages: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.1.0 dev: true /pretty-hrtime@1.0.3: @@ -20365,8 +22387,8 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - /ramda@0.28.0: - resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} dev: true /randombytes@2.1.0: @@ -20430,8 +22452,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@babel/core': 7.21.4 - '@babel/generator': 7.21.4 + '@babel/core': 7.18.5 + '@babel/generator': 7.22.5 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -20482,15 +22504,15 @@ packages: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.1.12(csstype@3.1.2) + goober: 2.1.13(csstype@3.1.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - csstype dev: false - /react-i18next@12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} + /react-i18next@12.1.4(i18next@22.4.9)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-XQND7jYtgM7ht5PH3yIZljCRpAMTlH/zmngM9ZjToqa+0BR6xuu8c7QF0WIIOEjcMTB2S3iOfpN/xG/ZrAnO6g==} peerDependencies: i18next: '>= 19.0.0' react: '>= 16.8.0' @@ -20502,9 +22524,9 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 html-parse-stringify: 3.0.1 - i18next: 22.4.14 + i18next: 22.4.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -20518,8 +22540,8 @@ packages: react: 18.2.0 dev: false - /react-inspector@6.0.1(react@18.2.0): - resolution: {integrity: sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==} + /react-inspector@6.0.2(react@18.2.0): + resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} peerDependencies: react: ^16.8.4 || ^17.0.0 || ^18.0.0 dependencies: @@ -20538,16 +22560,12 @@ packages: resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar@2.3.4(@types/react@18.0.35)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -20557,13 +22575,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.14)(react@18.2.0) tslib: 2.5.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.0.35)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -20573,13 +22591,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.35)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.0.14)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.14)(react@18.2.0) tslib: 2.5.2 - use-callback-ref: 1.3.0(@types/react@18.0.35)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.35)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.0.14)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.14)(react@18.2.0) dev: false /react-router-dom@6.11.2(react-dom@18.2.0)(react@18.2.0): @@ -20614,7 +22632,7 @@ packages: throttle-debounce: 3.0.1 dev: true - /react-style-singleton@2.2.1(@types/react@18.0.35)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -20624,7 +22642,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -20722,8 +22740,8 @@ packages: tslib: 2.5.2 dev: true - /recast@0.23.1: - resolution: {integrity: sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==} + /recast@0.23.2: + resolution: {integrity: sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw==} engines: {node: '>= 4'} dependencies: assert: 2.0.0 @@ -20768,11 +22786,11 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: true - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -20870,7 +22888,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-frontmatter: 1.0.1 - micromark-extension-frontmatter: 1.1.0 + micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 dev: false @@ -20879,7 +22897,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-gfm: 2.0.2 - micromark-extension-gfm: 2.0.1 + micromark-extension-gfm: 2.0.3 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -20889,16 +22907,16 @@ packages: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} dependencies: mdast-util-mdx: 2.0.1 - micromark-extension-mdxjs: 1.0.0 + micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color dev: false - /remark-parse@10.0.1: - resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -20996,6 +23014,10 @@ packages: global-dirs: 0.1.1 dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -21014,7 +23036,7 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 dev: true @@ -21022,7 +23044,7 @@ packages: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21030,7 +23052,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -21113,16 +23135,15 @@ packages: dependencies: glob: 7.2.3 - /rimraf@4.4.0: - resolution: {integrity: sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==} + /rimraf@4.1.2: + resolution: {integrity: sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==} engines: {node: '>=14'} + deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. hasBin: true - dependencies: - glob: 9.3.5 dev: true - /rimraf@4.4.1: - resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + /rimraf@4.4.0: + resolution: {integrity: sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==} engines: {node: '>=14'} hasBin: true dependencies: @@ -21152,7 +23173,7 @@ packages: rollup: 2.70.2 typescript: 4.9.5 optionalDependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 dev: true /rollup-plugin-size@0.2.2: @@ -21170,11 +23191,11 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 jest-worker: 26.6.2 rollup: 2.70.2 serialize-javascript: 4.0.0 - terser: 5.16.9 + terser: 5.18.0 dev: true /rollup-plugin-typescript-paths@1.4.0(typescript@4.9.5): @@ -21196,11 +23217,11 @@ packages: open: 8.4.2 rollup: 2.70.2 source-map: 0.7.4 - yargs: 17.7.1 + yargs: 17.7.2 dev: true - /rollup-plugin-visualizer@5.9.0: - resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} + /rollup-plugin-visualizer@5.8.3: + resolution: {integrity: sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -21210,9 +23231,8 @@ packages: optional: true dependencies: open: 8.4.2 - picomatch: 2.3.1 source-map: 0.7.4 - yargs: 17.7.1 + yargs: 17.7.2 dev: true /rollup@2.70.2: @@ -21229,13 +23249,19 @@ packages: optionalDependencies: fsevents: 2.3.2 - /rollup@3.20.2: - resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} + /rollup@3.25.1: + resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -21256,6 +23282,11 @@ packages: dependencies: tslib: 2.5.2 + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.5.2 + /s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} @@ -21265,6 +23296,16 @@ packages: dependencies: mri: 1.2.0 + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.1: resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} dev: true @@ -21279,7 +23320,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -21300,8 +23341,8 @@ packages: dependencies: suf-log: 2.5.3 - /sass@1.62.0: - resolution: {integrity: sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==} + /sass@1.63.4: + resolution: {integrity: sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -21329,11 +23370,11 @@ packages: dependencies: loose-envify: 1.4.0 - /schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + /schema-utils@3.2.0: + resolution: {integrity: sha512-0zTyLGyDJYd/MBxG1AhJkKa6fpEBds4OQO2ut0w7OYG+ZGhGea09lijvzsqegYSik88zc7cUtIlnnO+/BvD6gQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true @@ -21383,8 +23424,16 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.4.0: - resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} + /semver@7.5.0: + resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -21401,7 +23450,7 @@ packages: escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 1.7.2 + http-errors: 1.7.3 mime: 1.6.0 ms: 2.1.1 on-finished: 2.3.0 @@ -21450,11 +23499,6 @@ packages: randombytes: 2.1.0 dev: true - /seroval@0.5.1: - resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} - engines: {node: '>=10'} - dev: false - /serve-favicon@2.5.0: resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} engines: {node: '>= 0.8.0'} @@ -21554,22 +23598,21 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 6.0.0 - dev: false - /shiki@0.14.1: - resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} + /shiki@0.14.2: + resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: ansi-sequence-parser: 1.1.0 jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true + dev: false /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 /siginfo@2.0.0: @@ -21592,8 +23635,8 @@ packages: semver: 7.0.0 dev: true - /sirv@2.0.2: - resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} + /sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: '@polka/url': 1.0.0-next.21 @@ -21615,7 +23658,7 @@ packages: minimatch: 3.1.2 pretty-bytes: 5.6.0 size-plugin-store: 0.0.5 - util.promisify: 1.1.1 + util.promisify: 1.1.2 transitivePeerDependencies: - supports-color dev: true @@ -21669,7 +23712,7 @@ packages: hasBin: true dependencies: array.prototype.flat: 1.3.1 - breakword: 1.0.5 + breakword: 1.0.6 grapheme-splitter: 1.0.4 strip-ansi: 6.0.1 wcwidth: 1.0.1 @@ -21680,11 +23723,8 @@ packages: resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==} dev: true - /solid-js@1.7.3: - resolution: {integrity: sha512-4hwaF/zV/xbNeBBIYDyu3dcReOZBECbO//mrra6GqOrKy4Soyo+fnKjpZSa0nODm6j1aL0iQRh/7ofYowH+jzw==} - dependencies: - csstype: 3.1.2 - seroval: 0.5.1 + /solid-js@1.4.3: + resolution: {integrity: sha512-3uh2cbT4ICronIasLAxycF6SVgvqcfwFCDCzlEA9CEahn1qQg8Rw8aRGiI4O51PrHcN5aPRO9knYYRCs0PgzcQ==} dev: false /sorcery@0.10.0: @@ -21827,8 +23867,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - /std-env@3.3.2: - resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true /stdin-discarder@0.1.0: @@ -21838,13 +23878,6 @@ packages: bl: 5.1.0 dev: false - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.5 - dev: true - /store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} dev: true @@ -21895,6 +23928,11 @@ packages: engines: {node: '>=0.6.19'} dev: true + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -21917,7 +23955,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -21925,10 +23963,10 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 side-channel: 1.0.4 dev: true @@ -21989,8 +24027,8 @@ packages: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -22011,12 +24049,10 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: false /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -22077,19 +24113,6 @@ packages: - utf-8-validate dev: false - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.5 - ts-interface-checker: 0.1.13 - /suf-log@2.5.3: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: @@ -22129,16 +24152,16 @@ packages: mime: 2.6.0 qs: 6.11.2 readable-stream: 3.6.2 - semver: 7.4.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color dev: true - /superjson@1.12.2: - resolution: {integrity: sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==} + /superjson@1.12.3: + resolution: {integrity: sha512-0j+U70KUtP8+roVPbwfqkyQI7lBt7ETnuA7KXbTDX3mCKiD/4fXs2ldKSMdt0MCfpTwiMxo20yFU3vu6ewETpQ==} engines: {node: '>=10'} dependencies: - copy-anything: 3.0.3 + copy-anything: 3.0.5 dev: true /supertest@4.0.2: @@ -22197,7 +24220,7 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0): + /svelte-check@2.10.3(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1): resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} hasBin: true peerDependencies: @@ -22209,8 +24232,8 @@ packages: import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 3.58.0 - svelte-preprocess: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) + svelte: 3.55.1 + svelte-preprocess: 4.9.8(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' @@ -22225,29 +24248,29 @@ packages: - sugarss dev: true - /svelte-hmr@0.15.1(svelte@3.58.0): - resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} + /svelte-hmr@0.15.2(svelte@3.55.1): + resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: - svelte: '>=3.19.0' + svelte: ^3.19.0 || ^4.0.0-next.0 dependencies: - svelte: 3.58.0 + svelte: 3.55.1 dev: true - /svelte-preprocess@4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5): - resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + /svelte-preprocess@4.9.8(@babel/core@7.18.5)(postcss@8.4.21)(svelte@3.55.1)(typescript@4.9.5): + resolution: {integrity: sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og==} engines: {node: '>= 9.11.2'} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 + less: ^3.11.3 node-sass: '*' postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + postcss-load-config: ^2.1.0 || ^3.0.0 pug: ^3.0.0 sass: ^1.26.8 - stylus: ^0.55.0 + stylus: ^0.54.7 sugarss: ^2.0.0 svelte: ^3.23.0 typescript: ^3.9.5 || ^4.0.0 @@ -22275,7 +24298,7 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.18.5 '@types/pug': 2.0.6 '@types/sass': 1.45.0 detect-indent: 6.1.0 @@ -22283,20 +24306,20 @@ packages: postcss: 8.4.21 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.58.0 + svelte: 3.55.1 typescript: 4.9.5 dev: true - /svelte@3.58.0: - resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==} + /svelte@3.55.1: + resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==} engines: {node: '>= 8'} /swagger-ui-dist@4.15.5: resolution: {integrity: sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==} dev: true - /swagger-ui-dist@4.18.2: - resolution: {integrity: sha512-oVBoBl9Dg+VJw8uRWDxlyUyHoNEDC0c1ysT6+Boy6CTgr2rUcLcfPon4RvxgS2/taNW6O0+US+Z/dlAsWFjOAQ==} + /swagger-ui-dist@5.0.0: + resolution: {integrity: sha512-bwl6og9I9CAHKGSnYLKydjhBuH7d3oU6RX6uKN8oDCkLusTHXOW3sZMyBWjRtjGFnCMmN085oZoaR/4Wm9nIaQ==} dev: false /swagger-ui-express@4.6.2(express@4.18.2): @@ -22306,7 +24329,7 @@ packages: express: '>=4.0.0' dependencies: express: 4.18.2 - swagger-ui-dist: 4.18.2 + swagger-ui-dist: 5.0.0 dev: false /symbol-observable@1.2.0: @@ -22331,23 +24354,23 @@ packages: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.3.1 + '@pkgr/utils': 2.4.1 tslib: 2.5.2 - /tailwind-merge@1.12.0: - resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==} + /tailwind-merge@1.10.0: + resolution: {integrity: sha512-WFnDXSS4kFTZwjKg5/oZSGzBRU/l+qcbv5NVTzLUQvJ9yovDAP05h0F2+ZFW0Lw9EcgRoc2AfURUdZvnEFrXKg==} dev: false - /tailwindcss-animate@1.0.5(tailwindcss@3.3.1): + /tailwindcss-animate@1.0.5(tailwindcss@3.2.4): resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) dev: false - /tailwindcss@3.3.1(postcss@8.4.21)(ts-node@10.9.1): - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + /tailwindcss@3.2.4(postcss@8.4.21)(ts-node@10.9.1): + resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -22356,12 +24379,12 @@ packages: arg: 5.0.2 chokidar: 3.5.3 color-name: 1.1.4 + detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.18.2 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -22372,11 +24395,10 @@ packages: postcss-js: 4.0.1(postcss@8.4.21) postcss-load-config: 3.1.4(postcss@8.4.21)(ts-node@10.9.1) postcss-nested: 6.0.0(postcss@8.4.21) - postcss-selector-parser: 6.0.11 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 resolve: 1.22.2 - sucrase: 3.32.0 transitivePeerDependencies: - ts-node @@ -22414,13 +24436,13 @@ packages: readable-stream: 3.6.2 dev: true - /tar@6.1.13: - resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + /tar@6.1.15: + resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.2.8 + minipass: 5.0.0 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -22480,8 +24502,8 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /terser-webpack-plugin@5.3.7(webpack@5.76.2): - resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} + /terser-webpack-plugin@5.3.9(webpack@5.76.2): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -22498,14 +24520,14 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.18 jest-worker: 27.5.1 - schema-utils: 3.1.1 + schema-utils: 3.2.0 serialize-javascript: 6.0.1 - terser: 5.16.9 + terser: 5.18.0 webpack: 5.76.2 dev: true - /terser@5.16.9: - resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} + /terser@5.18.0: + resolution: {integrity: sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -22515,12 +24537,12 @@ packages: source-map-support: 0.5.21 dev: true - /tesseract.js-core@4.0.3: - resolution: {integrity: sha512-NqSqnq0dNhlQYw9JYWUh0rymN0gG/GaLmP2gdRnxUIivzYkPa0aYQW4WSRO6lGKIabyqxa2j2sELBujyOFYVgQ==} + /tesseract.js-core@4.0.4: + resolution: {integrity: sha512-MJ+vtktjAaT0681uPl6TDUPhbRbpD/S9emko5rtorgHRZpQo7R3BG7h+3pVHgn1KjfNf1bvnx4B7KxEK8YKqpg==} dev: false - /tesseract.js@4.0.3(eslint@8.22.0): - resolution: {integrity: sha512-hgFhIx1pqtZD95/xG6mhETpy5lbIzgBoBGPUntb2uIXVk7KcfHo3+ObgPxNZtLOI7LfXXfBvgfraQVmQSo7m9g==} + /tesseract.js@4.0.1(eslint@8.22.0): + resolution: {integrity: sha512-zrdcRp10w6mXUq++Isqf8c91aYB3UzWZwwTR+w4EBmixgAbVSo0qhOjvczyc9bgFLjc8kX+c2J6l7JP7QgydfQ==} requiresBuild: true dependencies: babel-eslint: 10.1.0(eslint@8.22.0) @@ -22529,11 +24551,11 @@ packages: idb-keyval: 3.2.0 is-electron: 2.2.2 is-url: 1.2.4 - node-fetch: 2.6.9 + node-fetch: 2.6.11 opencollective-postinstall: 2.0.3 regenerator-runtime: 0.13.11 resolve-url: 0.2.1 - tesseract.js-core: 4.0.3 + tesseract.js-core: 4.0.4 wasm-feature-detect: 1.5.1 zlibjs: 0.3.1 transitivePeerDependencies: @@ -22565,7 +24587,7 @@ packages: docker-compose: 0.23.19 dockerode: 3.3.5 get-port: 5.1.1 - node-fetch: 2.6.9 + node-fetch: 2.6.11 properties-reader: 2.2.0 ssh-remote-port-forward: 1.0.4 tar-fs: 2.1.1 @@ -22587,11 +24609,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} @@ -22625,18 +24649,12 @@ packages: next-tick: 1.1.0 dev: true - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: true - /tinybench@2.4.0: - resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true /tinypool@0.3.1: @@ -22654,6 +24672,10 @@ packages: engines: {node: '>=14.0.0'} dev: true + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -22694,8 +24716,8 @@ packages: engines: {node: '>=6'} dev: false - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -22750,9 +24772,6 @@ packages: typescript: 4.9.5 dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-jest@27.0.3(jest@27.0.6)(typescript@4.9.5): resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -22770,12 +24789,12 @@ packages: lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.4.0 + semver: 7.5.1 typescript: 4.9.5 yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.21.4)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -22796,15 +24815,15 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.22.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest: 29.5.0(@types/node@18.14.6)(ts-node@10.9.1) jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.4.0 + semver: 7.5.1 typescript: 4.9.5 yargs-parser: 21.1.1 dev: true @@ -22817,21 +24836,21 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.12.0 + enhanced-resolve: 5.15.0 micromatch: 4.0.5 - semver: 7.4.0 + semver: 7.5.1 typescript: 4.9.5 webpack: 5.76.2 dev: true - /ts-morph@17.0.1: - resolution: {integrity: sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g==} + /ts-morph@16.0.0: + resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==} dependencies: - '@ts-morph/common': 0.18.1 + '@ts-morph/common': 0.17.0 code-block-writer: 11.0.3 dev: true - /ts-node@10.9.1(@types/node@18.15.11)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@18.14.6)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -22849,8 +24868,8 @@ packages: '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.11 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.14.6 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -22879,7 +24898,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 - enhanced-resolve: 5.12.0 + enhanced-resolve: 5.15.0 tsconfig-paths: 4.2.0 dev: true @@ -22968,7 +24987,7 @@ packages: smartwrap: 2.0.2 strip-ansi: 6.0.1 wcwidth: 1.0.1 - yargs: 17.7.1 + yargs: 17.7.2 dev: true /tweetnacl@0.14.5: @@ -23066,42 +25085,42 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typedoc-plugin-markdown@3.15.1(typedoc@0.23.28): - resolution: {integrity: sha512-TaXE8gc8s5YepU1Ogyqfkh+khPE1/n4rV5vaoZCNyXvSLv62jWmHf443lHiQh7r07qAimUOKAndaaufAeIUSiQ==} + /typedoc-plugin-markdown@3.14.0(typedoc@0.23.23): + resolution: {integrity: sha512-UyQLkLRkfTFhLdhSf3RRpA3nNInGn+k6sll2vRXjflaMNwQAAiB61SYbisNZTg16t4K1dt1bPQMMGLrxS0GZ0Q==} peerDependencies: - typedoc: '>=0.24.0' + typedoc: '>=0.23.0' dependencies: handlebars: 4.7.7 - typedoc: 0.23.28(typescript@4.9.5) + typedoc: 0.23.23(typescript@4.9.5) dev: true - /typedoc@0.23.28(typescript@4.9.5): - resolution: {integrity: sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==} + /typedoc@0.23.23(typescript@4.9.5): + resolution: {integrity: sha512-cg1YQWj+/BU6wq74iott513U16fbrPCbyYs04PHZgvoKJIc6EY4xNobyDZh4KMfRGW8Yjv6wwIzQyoqopKOUGw==} engines: {node: '>= 14.14'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 7.4.6 - shiki: 0.14.1 + minimatch: 5.1.6 + shiki: 0.11.1 typescript: 4.9.5 dev: true - /typescript@4.8.4: - resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true - /ufo@1.1.1: - resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} + /typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + dev: true + + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -23111,8 +25130,8 @@ packages: dev: true optional: true - /uid@2.0.2: - resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + /uid@2.0.1: + resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==} engines: {node: '>=8'} dependencies: '@lukeed/csprng': 1.1.0 @@ -23290,15 +25309,14 @@ packages: /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db@1.0.11(browserslist@4.21.8): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.5 + browserslist: 4.21.8 escalade: 3.1.1 picocolors: 1.0.0 @@ -23314,7 +25332,7 @@ packages: requires-port: 1.0.0 dev: true - /use-callback-ref@1.3.0(@types/react@18.0.35)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -23324,12 +25342,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 react: 18.2.0 tslib: 2.5.2 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.35)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -23338,7 +25356,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 react: 18.2.0 dev: false @@ -23353,7 +25371,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /use-sidecar@1.1.2(@types/react@18.0.35)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.0.14)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -23363,7 +25381,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.14 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.5.2 @@ -23379,14 +25397,16 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify@1.1.1: - resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} + /util.promisify@1.1.2: + resolution: {integrity: sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 for-each: 0.3.3 + has-proto: 1.0.1 has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.5 + object.getownpropertydescriptors: 2.1.6 + safe-array-concat: 1.0.0 dev: true /util@0.12.5: @@ -23404,6 +25424,7 @@ packages: /uuid-browser@3.1.0: resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} + deprecated: Package no longer supported and required. Use the uuid package or crypto.randomUUID instead dev: true /uuid@8.3.2: @@ -23450,8 +25471,8 @@ packages: convert-source-map: 1.9.0 dev: true - /validate-html-nesting@1.2.1: - resolution: {integrity: sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==} + /validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} dev: false /validate-npm-package-license@3.0.4: @@ -23495,19 +25516,42 @@ packages: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - /vite-node@0.28.5(@types/node@18.15.11): + /vite-node@0.28.4(@types/node@18.14.6): + resolution: {integrity: sha512-KM0Q0uSG/xHHKOJvVHc5xDBabgt0l70y7/lWTR7Q0pR5/MrYxadT+y32cJOE65FfjGmJgxpVEEY+69btJgcXOQ==} + engines: {node: '>=v14.16.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@8.1.1) + mlly: 1.3.0 + pathe: 1.1.1 + picocolors: 1.0.0 + source-map: 0.6.1 + source-map-support: 0.5.21 + vite: 4.1.1(@types/node@18.14.6) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-node@0.28.5(@types/node@18.14.6): resolution: {integrity: sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==} engines: {node: '>=v14.16.0'} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.3.0 + pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - '@types/node' - less @@ -23518,17 +25562,17 @@ packages: - terser dev: true - /vite-node@0.29.8(@types/node@18.15.11): + /vite-node@0.29.8(@types/node@18.14.6): resolution: {integrity: sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==} engines: {node: '>=v14.16.0'} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.3.0 + pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - '@types/node' - less @@ -23539,24 +25583,22 @@ packages: - terser dev: true - /vite-plugin-dts@1.7.3(@types/node@18.15.11)(vite@4.0.3): - resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} + /vite-plugin-dts@1.6.6(@types/node@18.14.6)(vite@4.0.3): + resolution: {integrity: sha512-XEZQlcAN5Bi1PWL0l/E08cI3VpjTCWY5x7C4/bVyC7lpS+/q9CDBCV8gGsqV97/g34N7gNNRNhqs8r0m6JAmIQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.34.4(@types/node@18.15.11) - '@rollup/pluginutils': 5.0.2(rollup@2.70.2) - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@microsoft/api-extractor': 7.35.3(@types/node@18.14.6) + '@rushstack/node-core-library': 3.59.3(@types/node@18.14.6) debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 fs-extra: 10.1.0 - kolorist: 1.7.0 - ts-morph: 17.0.1 - vite: 4.0.3(@types/node@18.15.11) + kolorist: 1.8.0 + ts-morph: 16.0.0 + vite: 4.0.3(@types/node@18.14.6) transitivePeerDependencies: - '@types/node' - - rollup - supports-color dev: true @@ -23566,7 +25608,7 @@ packages: vite: '>=2.0.0' dependencies: '@rollup/pluginutils': 4.2.1 - colorette: 2.0.19 + colorette: 2.0.20 connect-history-api-fallback: 1.6.0 consola: 2.15.3 dotenv: 16.0.3 @@ -23577,10 +25619,10 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.0.3(@types/node@18.15.11) + vite: 4.0.3(@types/node@18.14.6) dev: true - /vite-plugin-terminal@1.1.0(vite@4.2.1): + /vite-plugin-terminal@1.1.0(vite@4.1.1): resolution: {integrity: sha512-W550yBGApBSp67LgqCSSA9u3aMEFFHqTleYMxcVQFf5XCY973bGTSjHW7ZjUsJT3VkiW9mfmc+azhVHvsEMpcg==} engines: {node: '>=14'} peerDependencies: @@ -23588,17 +25630,17 @@ packages: dependencies: '@rollup/plugin-strip': 3.0.2 debug: 4.3.4(supports-color@8.1.1) - kolorist: 1.7.0 - sirv: 2.0.2 - ufo: 1.1.1 - vite: 4.2.1(@types/node@18.15.11) + kolorist: 1.8.0 + sirv: 2.0.3 + ufo: 1.1.2 + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - rollup - supports-color dev: false - /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.2.1): - resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} + /vite-tsconfig-paths@4.0.7(typescript@4.9.5)(vite@4.1.1): + resolution: {integrity: sha512-MwIYaby6kcbQGZqMH+gAK6h0UYQGOkjsuAgw4q6bP/5vWkn8VKvnmLuCQHA2+IzHAJHnE8OFTO4lnJLFMf9+7Q==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -23608,13 +25650,13 @@ packages: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) transitivePeerDependencies: - supports-color - typescript dev: false - /vite@3.2.5(@types/node@18.15.11): + /vite@3.2.5(@types/node@18.14.6): resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -23639,7 +25681,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 esbuild: 0.15.18 postcss: 8.4.21 resolve: 1.22.2 @@ -23647,7 +25689,7 @@ packages: optionalDependencies: fsevents: 2.3.2 - /vite@4.0.3(@types/node@18.15.11): + /vite@4.0.3(@types/node@18.14.6): resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -23672,17 +25714,17 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.14.6 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.2 - rollup: 3.20.2 + rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.2.1(@types/node@18.15.11): - resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} + /vite@4.1.1(@types/node@18.14.6): + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -23706,11 +25748,11 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 - esbuild: 0.17.16 + '@types/node': 18.14.6 + esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.2 - rollup: 3.20.2 + rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 @@ -23722,10 +25764,10 @@ packages: vite: optional: true dependencies: - vite: 3.2.5(@types/node@18.15.11) + vite: 3.2.5(@types/node@18.14.6) dev: false - /vitefu@0.2.4(vite@4.2.1): + /vitefu@0.2.4(vite@4.1.1): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -23733,10 +25775,10 @@ packages: vite: optional: true dependencies: - vite: 4.2.1(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) dev: true - /vitest@0.24.5(jsdom@20.0.3): + /vitest@0.24.5(jsdom@20.0.2): resolution: {integrity: sha512-zw6JhPUHtLILQDe5Q39b/SzoITkG+R7hcFjuthp4xsi6zpmfQPOZcHodZ+3bqoWl4EdGK/p1fuMiEwdxgbGLOA==} engines: {node: '>=v14.16.0'} hasBin: true @@ -23758,18 +25800,74 @@ packages: jsdom: optional: true dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.14.6 chai: 4.3.7 debug: 4.3.4(supports-color@8.1.1) - jsdom: 20.0.3 + jsdom: 20.0.2 local-pkg: 0.4.3 strip-literal: 0.4.2 - tinybench: 2.4.0 + tinybench: 2.5.0 + tinypool: 0.3.1 + tinyspy: 1.1.1 + vite: 3.2.5(@types/node@18.14.6) + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@0.28.4(jsdom@20.0.2): + resolution: {integrity: sha512-sfWIy0AdlbyGRhunm+TLQEJrFH9XuRPdApfubsyLcDbCRrUX717BRQKInTgzEfyl2Ipi1HWoHB84Nqtcwxogcg==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 18.14.6 + '@vitest/expect': 0.28.4 + '@vitest/runner': 0.28.4 + '@vitest/spy': 0.28.4 + '@vitest/utils': 0.28.4 + acorn: 8.8.2 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4(supports-color@8.1.1) + jsdom: 20.0.2 + local-pkg: 0.4.3 + pathe: 1.1.1 + picocolors: 1.0.0 + source-map: 0.6.1 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 3.2.5(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) + vite-node: 0.28.4(@types/node@18.14.6) + why-is-node-running: 2.2.2 transitivePeerDependencies: - less - sass @@ -23779,7 +25877,7 @@ packages: - terser dev: true - /vitest@0.28.5(jsdom@20.0.3): + /vitest@0.28.5(jsdom@20.0.2): resolution: {integrity: sha512-pyCQ+wcAOX7mKMcBNkzDwEHRGqQvHUl0XnoHR+3Pb1hytAHISgSxv9h0gUiSiYtISXUU3rMrKiKzFYDrI6ZIHA==} engines: {node: '>=v14.16.0'} hasBin: true @@ -23801,9 +25899,9 @@ packages: jsdom: optional: true dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@vitest/expect': 0.28.5 '@vitest/runner': 0.28.5 '@vitest/spy': 0.28.5 @@ -23813,18 +25911,18 @@ packages: cac: 6.7.14 chai: 4.3.7 debug: 4.3.4(supports-color@8.1.1) - jsdom: 20.0.3 + jsdom: 20.0.2 local-pkg: 0.4.3 - pathe: 1.1.0 + pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 - std-env: 3.3.2 + std-env: 3.3.3 strip-literal: 1.0.1 - tinybench: 2.4.0 + tinybench: 2.5.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.2.1(@types/node@18.15.11) - vite-node: 0.28.5(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) + vite-node: 0.28.5(@types/node@18.14.6) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -23866,9 +25964,9 @@ packages: webdriverio: optional: true dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.14.6 '@vitest/expect': 0.29.8 '@vitest/runner': 0.29.8 '@vitest/spy': 0.29.8 @@ -23879,16 +25977,16 @@ packages: chai: 4.3.7 debug: 4.3.4(supports-color@8.1.1) local-pkg: 0.4.3 - pathe: 1.1.0 + pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 - std-env: 3.3.2 + std-env: 3.3.3 strip-literal: 1.0.1 - tinybench: 2.4.0 + tinybench: 2.5.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.2.1(@types/node@18.15.11) - vite-node: 0.29.8(@types/node@18.15.11) + vite: 4.1.1(@types/node@18.14.6) + vite-node: 0.29.8(@types/node@18.14.6) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -23904,19 +26002,19 @@ packages: engines: {node: '>=0.10.0'} dev: false - /vscode-css-languageservice@6.2.4: - resolution: {integrity: sha512-9UG0s3Ss8rbaaPZL1AkGzdjrGY8F+P+Ne9snsrvD9gxltDGhsn8C2dQpqQewHrMW37OvlqJoI8sUU2AWDb+qNw==} + /vscode-css-languageservice@6.2.6: + resolution: {integrity: sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg==} dependencies: - '@vscode/l10n': 0.0.11 + '@vscode/l10n': 0.0.14 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 vscode-uri: 3.0.7 dev: false - /vscode-html-languageservice@5.0.4: - resolution: {integrity: sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==} + /vscode-html-languageservice@5.0.6: + resolution: {integrity: sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ==} dependencies: - '@vscode/l10n': 0.0.11 + '@vscode/l10n': 0.0.14 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 vscode-uri: 3.0.7 @@ -23954,11 +26052,10 @@ packages: /vscode-textmate@6.0.0: resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==} - dev: false /vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true + dev: false /vscode-uri@2.1.2: resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} @@ -23982,9 +26079,9 @@ packages: xml-name-validator: 3.0.0 dev: true - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} + /w3c-xmlserializer@3.0.0: + resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} + engines: {node: '>=12'} dependencies: xml-name-validator: 4.0.0 dev: true @@ -23998,7 +26095,7 @@ packages: joi: 17.9.2 lodash: 4.17.21 minimist: 1.2.8 - rxjs: 7.8.0 + rxjs: 7.8.1 transitivePeerDependencies: - debug dev: false @@ -24090,10 +26187,10 @@ packages: '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.2 - acorn-import-assertions: 1.8.0(acorn@8.8.2) - browserslist: 4.21.5 + acorn-import-assertions: 1.9.0(acorn@8.8.2) + browserslist: 4.21.8 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.12.0 + enhanced-resolve: 5.15.0 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -24103,9 +26200,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.1 + schema-utils: 3.2.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7(webpack@5.76.2) + terser-webpack-plugin: 5.3.9(webpack@5.76.2) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -24169,17 +26266,8 @@ packages: is-symbol: 1.0.4 dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true /which-pm-runs@1.1.0: @@ -24285,7 +26373,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false /wrappy@1.0.2: @@ -24443,7 +26531,7 @@ packages: require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 4.2.3 - which-module: 2.0.0 + which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 dev: true @@ -24461,8 +26549,8 @@ packages: yargs-parser: 20.2.9 dev: true - /yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 diff --git a/sdks/workflow-browser-sdk/src/lib/workflow-browser-sdk.ts b/sdks/workflow-browser-sdk/src/lib/workflow-browser-sdk.ts index ba18c5876d..8808fe1071 100644 --- a/sdks/workflow-browser-sdk/src/lib/workflow-browser-sdk.ts +++ b/sdks/workflow-browser-sdk/src/lib/workflow-browser-sdk.ts @@ -262,6 +262,9 @@ export class WorkflowBrowserSDK { { method: this.#__backendOptions.endpoints.uploadFile.method, body: formData, + headers: { + Authorization: this.#__backendOptions.headers?.Authorization ?? '', + }, }, ); diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 68d51cec81..a9c7a6d78c 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -36,12 +36,16 @@ const persistImageFile = async (client: PrismaClient, uri: string) => { return file.id; }; -function generateAvatarImageUri(imageTemplate: string, countOfBusiness: number) { +function generateAvatarImageUri(imageTemplate: string, countOfBusiness: number, pdf = false) { + if (pdf) { + return `https://backoffice-demo.ballerine.app/images/mock-documents/set_1_doc_pdf.pdf`; + } + if (countOfBusiness < 4) { return `https://backoffice-demo.ballerine.app/images/mock-documents/${imageTemplate}`; - } else { - return faker.image.people(1000, 2000, true); } + + return faker.image.people(1000, 2000, true); } async function seed(bcryptSalt: Salt) { @@ -113,7 +117,11 @@ async function seed(bcryptSalt: Salt) { `set_${countOfBusiness}_doc_face.png`, countOfBusiness, ); - const imageUri3 = generateAvatarImageUri(`set_${countOfBusiness}_selfie.png`, countOfBusiness); + const imageUri3 = generateAvatarImageUri( + `set_${countOfBusiness}_selfie.png`, + countOfBusiness, + true, + ); const mockData = { entity: { @@ -180,12 +188,12 @@ async function seed(bcryptSalt: Salt) { }, ], properties: { - userNationalId: generateUserNationalId(), + nationalIdNumber: generateUserNationalId(), docNumber: faker.finance.account(9), - userAddress: faker.address.streetAddress(), - website: faker.internet.url(), - expiryDate: faker.date.future(10).toISOString().split('T')[0], - email: faker.internet.email(), + employeeName: faker.name.fullName(), + position: faker.name.jobTitle(), + salaryAmount: faker.finance.amount(1000, 10000), + issuingDate: faker.date.past(10).toISOString().split('T')[0], }, }, { @@ -213,12 +221,12 @@ async function seed(bcryptSalt: Salt) { }, ], properties: { - userNationalId: generateUserNationalId(), + nationalIdNumber: generateUserNationalId(), docNumber: faker.finance.account(9), - userAddress: faker.address.streetAddress(), - website: faker.internet.url(), - expiryDate: faker.date.future(10).toISOString().split('T')[0], - email: faker.internet.email(), + employeeName: faker.name.fullName(), + position: faker.name.jobTitle(), + salaryAmount: faker.finance.amount(1000, 10000), + issuingDate: faker.date.past(10).toISOString().split('T')[0], }, }, ], @@ -240,6 +248,7 @@ async function seed(bcryptSalt: Salt) { const imageUri3 = generateAvatarImageUri( `set_${countOfIndividual}_selfie.png`, countOfIndividual, + true, ); const mockData = { @@ -262,12 +271,12 @@ async function seed(bcryptSalt: Salt) { documents: [ { id: faker.datatype.uuid(), - category: 'ID', + category: 'id', type: 'photo', issuer: { type: 'government', name: 'Government', - country: faker.address.country(), + country: 'CA', city: faker.address.city(), additionalInfo: { customParam: 'customValue' }, }, @@ -299,22 +308,26 @@ async function seed(bcryptSalt: Salt) { }, ], properties: { - userNationalId: generateUserNationalId(), - docNumber: faker.finance.account(9), - userAddress: faker.address.streetAddress(), - website: faker.internet.url(), - expiryDate: faker.date.future(10).toISOString().split('T')[0], - email: faker.internet.email(), + firstName: faker.name.firstName(), + middleName: faker.name.firstName(), + lastName: faker.name.lastName(), + authority: faker.company.name(), + placeOfIssue: faker.address.city(), + issueDate: faker.date.past(10).toISOString().split('T')[0], + expires: faker.date.future(10).toISOString().split('T')[0], + dateOfBirth: faker.date.past(20).toISOString().split('T')[0], + placeOfBirth: faker.address.city(), + sex: faker.helpers.arrayElement(['male', 'female', 'other']), }, }, { id: faker.datatype.uuid(), category: 'selfie', - type: 'certificate', + type: 'photo', issuer: { type: 'government', name: 'Government', - country: faker.address.country(), + country: 'CA', city: faker.address.city(), additionalInfo: { customParam: 'customValue' }, }, @@ -332,12 +345,16 @@ async function seed(bcryptSalt: Salt) { }, ], properties: { - userNationalId: generateUserNationalId(), - docNumber: faker.finance.account(9), - userAddress: faker.address.streetAddress(), - website: faker.internet.url(), - expiryDate: faker.date.future(10).toISOString().split('T')[0], - email: faker.internet.email(), + firstName: faker.name.firstName(), + middleName: faker.name.firstName(), + lastName: faker.name.lastName(), + authority: faker.company.name(), + placeOfIssue: faker.address.city(), + issueDate: faker.date.past(10).toISOString().split('T')[0], + expires: faker.date.future(10).toISOString().split('T')[0], + dateOfBirth: faker.date.past(20).toISOString().split('T')[0], + placeOfBirth: faker.address.city(), + sex: faker.helpers.arrayElement(['male', 'female', 'other']), }, }, ], @@ -762,6 +779,59 @@ async function seed(bcryptSalt: Salt) { }, }); + await createFilter('KYB', 'businesses', { + select: { + id: true, + status: true, + assigneeId: true, + createdAt: true, + context: true, + workflowDefinition: { + select: { + id: true, + name: true, + contextSchema: true, + config: true, + }, + }, + business: { + select: { + id: true, + companyName: true, + registrationNumber: true, + legalForm: true, + countryOfIncorporation: true, + dateOfIncorporation: true, + address: true, + phoneNumber: true, + email: true, + website: true, + industry: true, + taxIdentificationNumber: true, + vatNumber: true, + shareholderStructure: true, + numberOfEmployees: true, + businessPurpose: true, + documents: true, + approvalState: true, + createdAt: true, + updatedAt: true, + }, + }, + assignee: { + select: { + id: true, + firstName: true, + lastName: true, + }, + }, + }, + where: { + workflowDefinitionId: manualMachineId, + businessId: { not: null }, + }, + }); + await client.$transaction(async () => endUserIds.map(async (id, index) => client.endUser.create({ diff --git a/services/workflows-service/src/business/business.controller.external.ts b/services/workflows-service/src/business/business.controller.external.ts index c9759d3335..c1378cf275 100644 --- a/services/workflows-service/src/business/business.controller.external.ts +++ b/services/workflows-service/src/business/business.controller.external.ts @@ -11,6 +11,7 @@ import { BusinessModel } from './business.model'; import { BusinessService } from './business.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import { BusinessCreateDto } from './dtos/business-create'; +import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; @swagger.ApiTags('external/businesses') @common.Controller('external/businesses') @@ -24,6 +25,7 @@ export class BusinessControllerExternal { @common.Post() @swagger.ApiCreatedResponse({ type: [BusinessModel] }) @swagger.ApiForbiddenResponse() + @UseKeyAuthInDevGuard() async create( @common.Body() data: BusinessCreateDto, ): Promise<Pick<BusinessModel, 'id' | 'companyName'>> { @@ -57,6 +59,7 @@ export class BusinessControllerExternal { @swagger.ApiOkResponse({ type: BusinessModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse() + @UseKeyAuthInDevGuard() async getById(@common.Param() params: BusinessWhereUniqueInput): Promise<BusinessModel | null> { try { const business = await this.service.getById(params.id); diff --git a/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts b/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts new file mode 100644 index 0000000000..7e7234bbfa --- /dev/null +++ b/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts @@ -0,0 +1,11 @@ +import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; +import { env } from '@/env'; + +export const UseKeyAuthInDevGuard = () => { + if (env.NODE_ENV !== 'development') + return () => { + return; + }; + + return UseKeyAuthGuard(); +}; diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts index 814c95b69e..028ac78105 100644 --- a/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/utils/remove-ansi-escape-codes.ts @@ -1,3 +1,4 @@ export function removeAnsiEscapeCodes(string: string): string { + // eslint-disable-next-line no-control-regex return string.replace(/\x1B\[[0-9;]*[A-Za-z]/g, ''); } diff --git a/services/workflows-service/src/end-user/end-user.controller.external.ts b/services/workflows-service/src/end-user/end-user.controller.external.ts index ff3a2b133d..d42444d234 100644 --- a/services/workflows-service/src/end-user/end-user.controller.external.ts +++ b/services/workflows-service/src/end-user/end-user.controller.external.ts @@ -12,6 +12,7 @@ import { EndUserWhereUniqueInput } from './dtos/end-user-where-unique-input'; import { EndUserModel } from './end-user.model'; import { EndUserService } from './end-user.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; +import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; @swagger.ApiTags('external/end-users') @common.Controller('external/end-users') @@ -25,6 +26,7 @@ export class EndUserControllerExternal { @common.Post() @swagger.ApiCreatedResponse({ type: [EndUserModel] }) @swagger.ApiForbiddenResponse() + @UseKeyAuthInDevGuard() async create( @common.Body() data: EndUserCreateDto, ): Promise<Pick<EndUserModel, 'id' | 'firstName' | 'lastName' | 'avatarUrl'>> { @@ -59,6 +61,7 @@ export class EndUserControllerExternal { @swagger.ApiOkResponse({ type: EndUserModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse() + @UseKeyAuthInDevGuard() async getById(@common.Param() params: EndUserWhereUniqueInput): Promise<EndUserModel | null> { try { const endUser = await this.service.getById(params.id); diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index b1c9d08832..201f5d71ad 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -12,6 +12,7 @@ import { ConfigService } from '@nestjs/config'; import * as Sentry from '@sentry/node'; import { AxiosInstance, isAxiosError } from 'axios'; import { WorkflowConfig } from '@/workflow/schemas/zod-schemas'; +import { getDocumentId } from '@ballerine/common'; @Injectable() export class DocumentChangedWebhookCaller { @@ -40,29 +41,21 @@ export class DocumentChangedWebhookCaller { const oldDocuments = data.runtimeData.context['documents'] || []; const newDocuments = data.context?.['documents'] || []; - const documentIdentifier = (doc: any) => { - return ( - doc.id || - `${doc.category as string}$${doc.type as string}$${ - doc.issuer?.country as string - }`.toLowerCase() - ); - }; - const newDocumentsByIdentifier = newDocuments.reduce((accumulator: any, doc: any) => { - const id = documentIdentifier(doc); + const id = getDocumentId(doc, false); accumulator[id] = doc; return accumulator; }, {}); - const anyDocumentStatusChanged = (oldDocuments as Array<any>).some(oldDocument => { - const id = documentIdentifier(oldDocument); + const anyDocumentStatusChanged = oldDocuments.some((oldDocument: any) => { + const id = getDocumentId(oldDocument, false); + return ( (!oldDocument.decision && newDocumentsByIdentifier[id].decision) || (oldDocument.decision && oldDocument.decision.status && id in newDocumentsByIdentifier && - oldDocument.decision.status !== newDocumentsByIdentifier[id].decision.status) + oldDocument.decision.status !== newDocumentsByIdentifier[id].decision?.status) ); }); diff --git a/services/workflows-service/src/storage/storage.controller.external.ts b/services/workflows-service/src/storage/storage.controller.external.ts index b65efe442f..c9b2ceb382 100644 --- a/services/workflows-service/src/storage/storage.controller.external.ts +++ b/services/workflows-service/src/storage/storage.controller.external.ts @@ -12,6 +12,7 @@ import { downloadFileFromS3, manageFileByProvider } from '@/storage/get-file-sto import { AwsS3FileConfig } from '@/providers/file/file-provider/aws-s3-file.config'; import * as os from 'os'; import * as path from 'path'; +import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; // Temporarily identical to StorageControllerInternal @swagger.ApiTags('Storage') @@ -42,6 +43,7 @@ export class StorageControllerExternal { }, }, }) + @UseKeyAuthInDevGuard() async uploadFile(@UploadedFile() file: Partial<Express.MulterS3.File>) { const id = await this.service.createFileLink({ uri: file.location || String(file.path), @@ -56,6 +58,7 @@ export class StorageControllerExternal { // curl -v http://localhost:3000/api/v1/storage/1679322938093 @common.Get('/:id') + @UseKeyAuthInDevGuard() async getFileById(@Param('id') id: string, @Res() res: Response) { // currently ignoring user id due to no user info const persistedFile = await this.service.getFileNameById({ @@ -70,6 +73,7 @@ export class StorageControllerExternal { // curl -v http://localhost:3000/api/v1/storage/content/1679322938093 @common.Get('/content/:id') + @UseKeyAuthInDevGuard() async fetchFileContent(@Param('id') id: string, @Res() res: Response) { // currently ignoring user id due to no user info const persistedFile = await this.service.getFileNameById({ diff --git a/services/workflows-service/src/workflow/assign-id-to-documents.ts b/services/workflows-service/src/workflow/assign-id-to-documents.ts index 532d7d2e41..1776b5435f 100644 --- a/services/workflows-service/src/workflow/assign-id-to-documents.ts +++ b/services/workflows-service/src/workflow/assign-id-to-documents.ts @@ -1,10 +1,10 @@ import { randomUUID } from 'crypto'; import { DefaultContextSchema } from '@ballerine/common'; -type Documents = DefaultContextSchema['documents']; +export type TDocuments = DefaultContextSchema['documents']; -export const assignIdToDocuments = (documents: Documents): Documents => - documents.map(document => { +export const assignIdToDocuments = (documents: TDocuments): TDocuments => + documents?.map(document => { return { id: randomUUID(), ...document, diff --git a/services/workflows-service/src/workflow/dtos/intent.ts b/services/workflows-service/src/workflow/dtos/intent.ts index 2ab8e62115..77d42e7bab 100644 --- a/services/workflows-service/src/workflow/dtos/intent.ts +++ b/services/workflows-service/src/workflow/dtos/intent.ts @@ -4,5 +4,5 @@ export class IntentDto { @ApiProperty() intentName!: string; @ApiProperty() - userId!: string; + entityId!: string; } diff --git a/services/workflows-service/src/workflow/schemas/zod-schemas.ts b/services/workflows-service/src/workflow/schemas/zod-schemas.ts index c0a88bc9c8..171519c697 100644 --- a/services/workflows-service/src/workflow/schemas/zod-schemas.ts +++ b/services/workflows-service/src/workflow/schemas/zod-schemas.ts @@ -15,6 +15,7 @@ export const ConfigSchema = z workflowLevelResolution: z.boolean().optional(), allowMultipleActiveWorkflows: z.boolean().optional(), }) - .strict(); + .strict() + .optional(); export type WorkflowConfig = z.infer<typeof ConfigSchema>; diff --git a/services/workflows-service/src/workflow/update-documents.ts b/services/workflows-service/src/workflow/update-documents.ts index f4422a1c10..759ad88e88 100644 --- a/services/workflows-service/src/workflow/update-documents.ts +++ b/services/workflows-service/src/workflow/update-documents.ts @@ -10,12 +10,12 @@ export const updateDocuments = ( const updatedDocumentsMap = new Map<string, Document>(); // @ts-ignore - existingDocuments.forEach(document => { + existingDocuments?.forEach(document => { updatedDocumentsMap.set(document.id!, document); }); // @ts-ignore - documentsToUpdate.forEach(document => { + documentsToUpdate?.forEach(document => { updatedDocumentsMap.set(document.id!, document); }); diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index 74e51cdb19..fc6c6229a1 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -3,6 +3,7 @@ import { Injectable } from '@nestjs/common'; import { Prisma, WorkflowRuntimeData, WorkflowRuntimeDataStatus } from '@prisma/client'; import { TEntityType } from '@/workflow/types'; import { merge } from 'lodash'; +import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; @Injectable() export class WorkflowRuntimeDataRepository { @@ -11,12 +12,21 @@ export class WorkflowRuntimeDataRepository { async create<T extends Prisma.WorkflowRuntimeDataCreateArgs>( args: Prisma.SelectSubset<T, Prisma.WorkflowRuntimeDataCreateArgs>, ): Promise<WorkflowRuntimeData> { - return await this.prisma.workflowRuntimeData.create<T>(args); + return await this.prisma.workflowRuntimeData.create<T>({ + ...args, + data: { + ...args.data, + context: { + ...((args.data?.context ?? {}) as any), + documents: assignIdToDocuments((args.data?.context as any)?.documents), + }, + }, + }); } async findMany<T extends Prisma.WorkflowRuntimeDataFindManyArgs>( args?: Prisma.SelectSubset<T, Prisma.WorkflowRuntimeDataFindManyArgs>, - ): Promise<WorkflowRuntimeData[]> { + ) { return await this.prisma.workflowRuntimeData.findMany(args); } diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 0d64684dca..080e010d7c 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -5,7 +5,7 @@ import { UserInfo } from '@/user/user-info'; import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import * as common from '@nestjs/common'; -import { Headers, NotFoundException, Res, UseFilters } from '@nestjs/common'; +import { NotFoundException, Param, Res, UseFilters } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { WorkflowRuntimeData } from '@prisma/client'; import * as nestAccessControl from 'nest-access-control'; @@ -15,13 +15,15 @@ import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find- import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { WorkflowDefinitionWhereUniqueInput } from './dtos/workflow-where-unique-input'; -import { RunnableWorkflowData } from './types'; +import { RunnableWorkflowData, TEntityType } from './types'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { IntentResponse, WorkflowService } from './workflow.service'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; +import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; +import { camelCase } from 'lodash'; @swagger.ApiBearerAuth() @swagger.ApiTags('external/workflows') @@ -35,17 +37,21 @@ export class WorkflowControllerExternal { ) {} // GET /workflows - @common.Get() + @common.Get('/:entityType/:entityId') @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) @common.HttpCode(200) @ApiNestedQuery(WorkflowDefinitionFindManyArgs) + @UseKeyAuthInDevGuard() async listWorkflowRuntimeDataByUserId( - @UserData() - _userInfo: UserInfo, - @Headers('no_auth_user_id') no_auth_user_id: string, - ): Promise<RunnableWorkflowData[]> { - const completeWorkflowData = await this.service.listFullWorkflowDataByUserId(no_auth_user_id); + @Param('entityType') entityType: 'end-user' | 'business', + @Param('entityId') entityId: string, + ) { + const completeWorkflowData = await this.service.listFullWorkflowDataByUserId({ + entityId, + // Expecting kebab-case from the url + entity: camelCase(entityType) as TEntityType, + }); const response = completeWorkflowData.map(({ workflowDefinition, ...rest }) => ({ workflowRuntimeData: rest, workflowDefinition, @@ -58,6 +64,7 @@ export class WorkflowControllerExternal { @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @UseKeyAuthInDevGuard() async getRunnableWorkflowDataById( @common.Param() params: WorkflowDefinitionWhereUniqueInput, ): Promise<RunnableWorkflowData> { @@ -81,6 +88,7 @@ export class WorkflowControllerExternal { @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @UseKeyAuthInDevGuard() async updateById( @common.Param() params: WorkflowDefinitionWhereUniqueInput, @common.Body() data: WorkflowDefinitionUpdateInput, @@ -100,13 +108,11 @@ export class WorkflowControllerExternal { @swagger.ApiOkResponse() @common.HttpCode(200) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) - async intent( - @common.Body() intent: IntentDto, - @Headers('no_auth_user_id') no_auth_user_id: string, - ): Promise<IntentResponse> { + @UseKeyAuthInDevGuard() + async intent(@common.Body() { intentName, entityId }: IntentDto): Promise<IntentResponse> { // Rename to intent or getRunnableWorkflowDataByIntent? - const entityType = intent.intentName === 'kycSignup' ? 'endUser' : 'business'; - return await this.service.resolveIntent(intent.intentName, no_auth_user_id, entityType); + const entityType = intentName === 'kycSignup' ? 'endUser' : 'business'; + return await this.service.resolveIntent(intentName, entityId, entityType); } @common.Post('/run') diff --git a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts index cc91f86d50..b91fe71d88 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts @@ -79,7 +79,7 @@ describe('Workflow (external)', () => { ); await request(app.getHttpServer()) - .get('/external/workflows') + .get('/external/workflows/end-user/123') .expect(HttpStatus.OK) .expect([ { diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 941d51ecdd..57679159ce 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -5,13 +5,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { ApprovalState, + Business, + EndUser, Prisma, WorkflowDefinition, WorkflowRuntimeData, WorkflowRuntimeDataStatus, } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; -import { CompleteWorkflowData, RunnableWorkflowData, TWorkflowWithRelations } from './types'; +import { RunnableWorkflowData, TWorkflowWithRelations } from './types'; import { createWorkflow } from '@ballerine/workflow-node-sdk'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { isEqual, merge } from 'lodash'; @@ -24,10 +26,9 @@ import { EndUserRepository } from '@/end-user/end-user.repository'; import { InputJsonValue, IObjectWithId } from '@/types'; import { WorkflowEventEmitterService } from './workflow-event-emitter.service'; import { BusinessRepository } from '@/business/business.repository'; -import Ajv, { Schema } from 'ajv'; +import Ajv from 'ajv'; import addFormats from 'ajv-formats'; import addKeywords from 'ajv-keywords'; -import * as console from 'console'; import { TRemoteFileConfig, TS3BucketConfig } from '@/providers/file/types/files-types'; import { z } from 'zod'; import { HttpFileService } from '@/providers/file/file-provider/http-file.service'; @@ -40,7 +41,6 @@ import * as crypto from 'crypto'; import { AwsS3FileConfig } from '@/providers/file/file-provider/aws-s3-file.config'; import { TFileServiceProvider } from '@/providers/file/types'; import { updateDocuments } from '@/workflow/update-documents'; -import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; import { WorkflowAssigneeId } from '@/workflow/dtos/workflow-assignee-id'; import { ConfigSchema, WorkflowConfig } from './schemas/zod-schemas'; import { toPrismaOrderBy } from '@/workflow/utils/toPrismaOrderBy'; @@ -51,6 +51,7 @@ import { getDocumentsByCountry, TDefaultSchemaDocumentPage, } from '@ballerine/common'; +import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; type TEntityId = string; @@ -209,6 +210,7 @@ export class WorkflowService { assigneeId: true, id: true, status: true, + workflowDefinitionId: true, }, }); } @@ -260,12 +262,10 @@ export class WorkflowService { throw new NotFoundException('Page not found'); } - const workflows = (await this.workflowRuntimeDataRepository.findMany( - query, - )) as TWorkflowWithRelations[]; + const workflows = await this.workflowRuntimeDataRepository.findMany(query); return { - data: this.formatWorkflowsRuntimeData(workflows), + data: this.formatWorkflowsRuntimeData(workflows as unknown as TWorkflowWithRelations[]), meta: { totalItems: totalWorkflowsCount, totalPages: Math.max(Math.ceil(totalWorkflowsCount / page.size), 1), @@ -310,12 +310,19 @@ export class WorkflowService { }); } - async listFullWorkflowDataByUserId(userId: string): Promise<CompleteWorkflowData[]> { - return (await this.workflowRuntimeDataRepository.findMany({ - // todo refactor - where: { businessId: userId }, + async listFullWorkflowDataByUserId({ + entityId, + entity, + }: { + entityId: string; + entity: TEntityType; + }) { + return await this.workflowRuntimeDataRepository.findMany({ + where: { + [`${entity}Id`]: entityId, + }, include: { workflowDefinition: true }, - })) as CompleteWorkflowData[]; + }); } async listWorkflowDefinitions(args: WorkflowDefinitionFindManyArgs) { @@ -345,34 +352,26 @@ export class WorkflowService { let contextHasChanged, mergedContext; if (data.context) { + data.context.documents = assignIdToDocuments(data.context.documents); contextHasChanged = !isEqual(data.context, runtimeData.context); mergedContext = merge({}, runtimeData.context, data.context); + const context = { ...mergedContext, // @ts-ignore documents: mergedContext?.documents?.map( // @ts-ignore - ({ propertiesSchema: _propertiesSchema, id: _id, ...document }) => document, + // Validating the context should be done without the propertiesSchema + ({ propertiesSchema: _propertiesSchema, ...document }) => document, ), }; - const validateContextSchema = ajv.compile( - (workflowDef?.contextSchema?.schema as Schema) ?? {}, - ); - const isValidContextSchema = validateContextSchema(context); - - if (!isValidContextSchema) { - throw new BadRequestException( - validateContextSchema.errors?.map(({ instancePath, message, ...rest }) => ({ - ...rest, - instancePath, - message: `${instancePath} ${message}`, - })), - ); - } + this.__validateWorkflowDefinitionContext(workflowDef, context); // @ts-ignore - data?.context?.documents?.forEach(({ propertiesSchema, id: _id, ...document }) => { + data?.context?.documents?.forEach(({ propertiesSchema, ...document }) => { + if (!Object.keys(propertiesSchema ?? {})?.length) return; + const validatePropertiesSchema = ajv.compile(propertiesSchema ?? {}); const isValidPropertiesSchema = validatePropertiesSchema(document?.properties); @@ -406,11 +405,12 @@ export class WorkflowService { ['active'].includes(data.status! || runtimeData.status) && workflowDef.config?.completedWhenTasksResolved ) { - const allDocumentsResolved = data.context?.documents?.every( - (document: DefaultContextSchema['documents'][number]) => { + // TODO: Check against `contextSchema` or a policy if the length of documents is equal to the number of tasks defined. + const allDocumentsResolved = + data.context?.documents?.length && + data.context?.documents?.every((document: DefaultContextSchema['documents'][number]) => { return ['approved', 'rejected'].includes(document?.decision?.status as string); - }, - ); + }); data.status = allDocumentsResolved ? 'completed' : data.status! || runtimeData.status; } @@ -421,16 +421,70 @@ export class WorkflowService { this.logger.log('Workflow resolved', { id: workflowRuntimeId }); } - const updateResult = await this.workflowRuntimeDataRepository.updateById(workflowRuntimeId, { - data: { - ...data, - resolvedAt: isResolved ? new Date() : null, - }, - }); + const documentToRevise = data.context?.documents?.find( + ({ decision }: { decision: DefaultContextSchema['documents'][number]['decision'] }) => + decision?.status === 'revision', + ); + let updatedResult; + + if (documentToRevise && !workflowDef.reviewMachineId) { + const parentMachine = await this.workflowRuntimeDataRepository.findById( + runtimeData?.context?.parentMachine?.id, + { + include: { + workflowDefinition: { + select: { + definition: true, + }, + }, + }, + }, + ); + + // Updates the collect documents workflow with the manual review workflow's decision. + await this.workflowRuntimeDataRepository.updateById(parentMachine?.id, { + data: { + status: 'active', + state: parentMachine?.workflowDefinition?.definition?.initial as string, + context: { + ...parentMachine?.context, + documents: parentMachine?.context?.documents?.map((document: any) => { + if (document.id !== documentToRevise.id) return document; + + return { + ...document, + decision: documentToRevise.decision, + }; + }), + }, + }, + }); + + updatedResult = await this.workflowRuntimeDataRepository.updateById(workflowRuntimeId, { + data: { + ...data, + context: { + ...data.context, + parentMachine: { + id: parentMachine?.id, + status: 'active', + }, + }, + resolvedAt: isResolved ? new Date() : null, + }, + }); + } else { + updatedResult = await this.workflowRuntimeDataRepository.updateById(workflowRuntimeId, { + data: { + ...data, + resolvedAt: isResolved ? new Date() : null, + }, + }); + } if (contextHasChanged) { this.workflowEventEmitter.emit('workflow.context.changed', { - runtimeData: runtimeData, + runtimeData, state: currentState as string, context: mergedContext, entityId: (runtimeData.businessId || runtimeData.endUserId) as string, @@ -439,15 +493,13 @@ export class WorkflowService { } // TODO: Move to a separate method - if (data.state) { - if (isFinal && workflowDef.reviewMachineId) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - await this.handleRuntimeFinalState(runtimeData, data.context, workflowDef); - } + if (data.state && isFinal && workflowDef.reviewMachineId) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + await this.handleRuntimeFinalState(runtimeData, data.context, workflowDef); } - return updateResult; + return updatedResult; } async assignWorkflowToUser(workflowRuntimeId: string, { assigneeId }: WorkflowAssigneeId) { @@ -527,7 +579,7 @@ export class WorkflowService { entitySearch.endUserId = runtime.endUserId as string; } - const workflowRuntimeDataExists = await this.workflowRuntimeDataRepository.findOne({ + const manualReviewWorkflow = await this.workflowRuntimeDataRepository.findOne({ where: { ...entitySearch, context: { @@ -537,7 +589,7 @@ export class WorkflowService { }, }); - if (!workflowRuntimeDataExists) { + if (!manualReviewWorkflow) { await this.workflowRuntimeDataRepository.create({ data: { ...entitySearch, @@ -547,34 +599,27 @@ export class WorkflowService { ...context, parentMachine: { id: runtime.id, + status: 'completed', }, }, status: 'active', }, }); } else { - await this.workflowRuntimeDataRepository.updateById(workflowRuntimeDataExists.id, { + await this.workflowRuntimeDataRepository.updateById(manualReviewWorkflow.id, { data: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - context: context as any, + context: { + ...manualReviewWorkflow.context, + parentMachine: { + id: runtime.id, + status: 'completed', + }, + }, }, }); } await this.updateWorkflowRuntimeData(runtime.id, { - ...((runtime.context as { resubmissionReason: string })?.resubmissionReason - ? { - ...entitySearch, - workflowDefinitionVersion: workflow.version, - workflowDefinitionId: workflow.reviewMachineId, - context: { - ...context, - parentMachine: { - id: runtime.id, - }, - }, - } - : {}), status: 'completed', }); } @@ -582,14 +627,36 @@ export class WorkflowService { async resolveIntent( intent: string, entityId: string, - tempEntityType: TEntityType, + entityType: TEntityType, ): Promise<RunnableWorkflowData[]> { const workflowDefinitionResolver = policies[intent as keyof typeof policies]; + const entity = await (async () => { + if (entityType === 'business') return await this.businessRepository.findById(entityId); + if (entityType === 'endUser') return await this.endUserRepository.findById(entityId); + + throw new BadRequestException(`Invalid entity type ${entityType}`); + })(); + const isBusinessEntity = (entity: EndUser | Business): entity is Business => + entityType === 'business'; // TODO: implement logic for multiple workflows const { workflowDefinitionId } = workflowDefinitionResolver()[0]; const context: DefaultContextSchema = { - entity: { ballerineEntityId: entityId, entityType: tempEntityType }, + entity: { + ballerineEntityId: entityId, + type: entityType, + data: { + ...(isBusinessEntity(entity) + ? { + companyName: entity?.companyName, + registrationNumber: entity?.registrationNumber, + } + : { + firstName: entity?.firstName, + lastName: entity?.lastName, + }), + }, + }, documents: [], }; return this.createOrUpdateWorkflowRuntime({ workflowDefinitionId, context }); @@ -614,7 +681,6 @@ export class WorkflowService { } catch (error) { throw new BadRequestException(error); } - context.documents = assignIdToDocuments(context.documents); this.__validateWorkflowDefinitionContext(workflowDefinition, context); const entityId = await this.__findOrPersistEntityInformation(context); const entityType = context.entity.type === 'business' ? 'business' : 'endUser'; @@ -815,15 +881,20 @@ export class WorkflowService { workflowDefinition: WorkflowDefinition, context: DefaultContextSchema, ) { - if (workflowDefinition.contextSchema && Object.keys(workflowDefinition.contextSchema).length) { - const validate = ajv.compile(workflowDefinition.contextSchema.schema); // TODO: fix type - const validationResult = validate(context); + if (!Object.keys(workflowDefinition?.contextSchema ?? {}).length) return; - if (!validationResult) { - console.log(validate.errors); - throw new BadRequestException('Invalid context', JSON.stringify(validate.errors)); - } - } + const validate = ajv.compile((workflowDefinition?.contextSchema as any)?.schema); // TODO: fix type + const isValid = validate(context); + + if (isValid) return; + + throw new BadRequestException( + validate.errors?.map(({ instancePath, message, ...rest }) => ({ + ...rest, + instancePath, + message: `${instancePath} ${message}`, + })), + ); } async event({ @@ -864,6 +935,7 @@ export class WorkflowService { to: currentState, }); + // TODO: Update to work with changes related to revision if (type === 'resubmit' && document) { switch (resubmissionReason) { case ResubmissionReason.BLURRY_IMAGE: From 6c91250828b17dba7b0f9dc3f1ce472d6908806f Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 20 Jun 2023 11:58:22 +0300 Subject: [PATCH 049/123] fix(swagger): dont open swagger in dev/prod (#533) --- services/workflows-service/.env.example | 2 +- services/workflows-service/src/env.ts | 2 +- services/workflows-service/src/main.ts | 20 +++++++++++--------- services/workflows-service/src/swagger.ts | 8 ++++---- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/services/workflows-service/.env.example b/services/workflows-service/.env.example index b9934f2fb7..ae790ec182 100644 --- a/services/workflows-service/.env.example +++ b/services/workflows-service/.env.example @@ -11,7 +11,7 @@ SESSION_SECRET=iGdnj4A0YOhj8dHJK7IWSvQKEZsG7P70FFehuddhFPjtg/bSkzFejYILk4Xue6Ilx BACKOFFICE_CORS_ORIGIN=http://localhost:5137 HEADLESS_EXAMPLE_CORS_ORIGIN=http://localhost:5173 API_KEY=secret -NODE_ENV=development +NODE_ENV=local SENTRY_DSN= WEBHOOK_URL= WEBHOOK_SECRET=webhook_secret diff --git a/services/workflows-service/src/env.ts b/services/workflows-service/src/env.ts index c2138c82b5..e870d6a588 100644 --- a/services/workflows-service/src/env.ts +++ b/services/workflows-service/src/env.ts @@ -8,7 +8,7 @@ export const env = createEnv({ */ clientPrefix: 'PUBLIC_', server: { - NODE_ENV: z.enum(['development', 'production', 'test']), + NODE_ENV: z.enum(['development', 'production', 'test', 'local']), ENV_FILE_NAME: z.string().optional(), BCRYPT_SALT: z.coerce.number().int().nonnegative().or(z.string()), COMPOSE_PROJECT_NAME: z.string(), diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 91460fd2da..5bd12e5001 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -86,18 +86,20 @@ async function main() { defaultVersion: '1', }); - const document = SwaggerModule.createDocument(app, swaggerDocumentOptions); + if (env.NODE_ENV === 'local') { + const document = SwaggerModule.createDocument(app, swaggerDocumentOptions); - /** check if there is Public decorator for each path (action) and its method (findMany / findOne) on each controller */ - Object.values(document.paths).forEach((path: PathItemObject) => { - Object.values(path).forEach((method: { security: string[] | unknown }) => { - if (Array.isArray(method.security) && method.security.includes('isPublic')) { - method.security = []; - } + /** check if there is Public decorator for each path (action) and its method (findMany / findOne) on each controller */ + Object.values(document.paths).forEach((path: PathItemObject) => { + Object.values(path).forEach((method: { security: string[] | unknown }) => { + if (Array.isArray(method.security) && method.security.includes('isPublic')) { + method.security = []; + } + }); }); - }); - SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); + SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); + } const { httpAdapter } = app.get(HttpAdapterHost); app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); diff --git a/services/workflows-service/src/swagger.ts b/services/workflows-service/src/swagger.ts index 78dd2d1412..18b85ee7c5 100644 --- a/services/workflows-service/src/swagger.ts +++ b/services/workflows-service/src/swagger.ts @@ -3,9 +3,9 @@ import { DocumentBuilder, SwaggerCustomOptions } from '@nestjs/swagger'; export const swaggerPath = 'api'; export const swaggerDocumentOptions = new DocumentBuilder() - .setTitle('Workflow API Service') - .setDescription('Workflow API Service') - .setVersion('20') + .setTitle('Workflows API Service') + .setDescription('Workflows API Service') + .setVersion('1') .addBearerAuth() .build(); @@ -15,5 +15,5 @@ export const swaggerSetupOptions: SwaggerCustomOptions = { }, customCssUrl: '../common/swagger/swagger.css', customfavIcon: '../common/swagger/favicon.png', - customSiteTitle: 'Sample service', + customSiteTitle: 'Workflow Service', }; From 7cf1a603729ef0e82ec07f3210a057ff67af10cf Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 20 Jun 2023 17:46:52 +0300 Subject: [PATCH 050/123] add timestamps to workflow webhooks (#561) * feat(wrofkflow webhooks): add timestamps to wrokflow webhooks * feat(wh): add timestamps to workflows webhooks \ * fixed tests * fixed tests --- apps/backoffice-v2/package.json | 2 +- .../common/components/atoms/AssignButton/AssignButton.tsx | 2 +- .../common/components/molecules/DetailsGrid/DetailsGrid.tsx | 2 +- .../components/organisms/ImageViewer/ImageViewer.Item.tsx | 6 +++--- .../src/pages/Entities/components/Cases/Cases.tsx | 6 +++--- .../src/pages/Entity/components/Case/Case.Actions.tsx | 2 +- .../src/events/document-changed-webhook-caller.ts | 2 ++ services/workflows-service/src/workflow/workflow.service.ts | 4 ++-- 8 files changed, 14 insertions(+), 12 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 7e8605d31b..04ebbbbcfb 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -120,7 +120,7 @@ "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-storybook": "^0.6.6", - "eslint-plugin-unused-imports" : "^2.0.0", + "eslint-plugin-unused-imports": "^2.0.0", "postcss": "^8.4.14", "prettier": "^2.8.0", "prettier-plugin-tailwindcss": "^0.2.1", diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index ce7d8cae80..fe73954468 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -56,7 +56,7 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ <DropdownMenuContent className={`min-w-[16rem]`} align={'start'}> {isUnassignEnabled ? ( <DropdownMenuItem - className={`text-cyan-950 border-b-2`} + className={`border-b-2 text-cyan-950`} onClick={() => onAssigneeSelect(null)} > Unassign diff --git a/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx b/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx index 1c7482daca..e90b245eb4 100644 --- a/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx +++ b/apps/backoffice-v2/src/common/components/molecules/DetailsGrid/DetailsGrid.tsx @@ -31,7 +31,7 @@ export const DetailsGrid = <TRecord extends AnyRecord>({ <> <details open className={`group`}> <summary - className={`mb-6 inline-flex cursor-pointer list-none items-center gap-x-3 rounded-md p-1 pl-0 text-2xl font-bold focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline`} + className={`mb-6 inline-flex cursor-pointer list-none items-center gap-x-3 rounded-md p-1 pl-0 text-2xl font-bold focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary`} > <span className={ctw({ diff --git a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx index 702ed85aa7..d9a9b90532 100644 --- a/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/ImageViewer/ImageViewer.Item.tsx @@ -53,13 +53,13 @@ export const Item: FunctionComponent<IItemProps> = ({ src={src} className={ctw( ` + group-hover:outline group-hover:outline-2 group-hover:outline-primary - group-hover:outline group-focus:shadow + group-focus:outline group-focus:outline-2 - group-focus:outline-primary - group-focus:outline`, + group-focus:outline-primary`, imageClassName, )} alt={alt} diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 0d17300791..63c041bbb7 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -50,7 +50,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ return ( <div id={`cases-list`} {...props}> <div className={`border-neutral/10 p-4 theme-dark:border-neutral/60`}> - <div className="form-control mb-2 rounded-md border border-neutral/10 focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary focus-within:outline theme-dark:border-neutral/60"> + <div className="form-control mb-2 rounded-md border border-neutral/10 focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary theme-dark:border-neutral/60"> <div className="input-group"> <div className={`btn-ghost btn-square btn pointer-events-none`}> <MagnifyingGlassSvg className={`!d-5`} /> @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> + <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} @@ -111,7 +111,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div - className={`form-control rounded-md border border-neutral/10 focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary focus-within:outline theme-dark:border-neutral/60`} + className={`form-control rounded-md border border-neutral/10 focus-within:outline focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary theme-dark:border-neutral/60`} > <div className={`input-group flex items-center`}> <button diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 88c66e4c3c..129ce91af5 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -112,7 +112,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ </h2> </div> {showResolutionButtons && ( - <div className={`pe-[3.35rem] flex items-center space-x-6`}> + <div className={`flex items-center space-x-6 pe-[3.35rem]`}> <Button className={ctw({ // loading: debouncedIsLoadingRejectEntity, diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index 201f5d71ad..22f6313dd1 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -84,6 +84,8 @@ export class DocumentChangedWebhookCaller { eventName: 'workflow.context.document.changed', apiVersion: 1, timestamp: new Date().toISOString(), + workflowCreatedAt: data.runtimeData.createdAt, + workflowResolvedAt: data.runtimeData.resolvedAt, workflowDefinitionId: data.runtimeData.workflowDefinitionId, workflowRuntimeId: data.runtimeData.id, ballerineEntityId: data.entityId, diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 57679159ce..79d4e8a969 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -470,14 +470,14 @@ export class WorkflowService { status: 'active', }, }, - resolvedAt: isResolved ? new Date() : null, + resolvedAt: isResolved ? new Date().toISOString() : null, }, }); } else { updatedResult = await this.workflowRuntimeDataRepository.updateById(workflowRuntimeId, { data: { ...data, - resolvedAt: isResolved ? new Date() : null, + resolvedAt: isResolved ? new Date().toISOString() : null, }, }); } From 76ca3ec48276dfd0aad03d2e9e0dda2f24f95851 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 20 Jun 2023 20:11:59 +0300 Subject: [PATCH 051/123] fix(docs): update astro (#565) * fix(docs): update astro * fixed tests --- pnpm-lock.yaml | 2360 +++++++++++++---- websites/docs/astro.config.mjs | 2 +- websites/docs/package.json | 14 +- .../components/LeftSidebar/LeftSidebar.astro | 8 +- 4 files changed, 1877 insertions(+), 507 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7672ed153f..b2d2a89843 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1415,7 +1415,7 @@ importers: version: 6.1.3 ts-jest: specifier: 29.1.0 - version: 29.1.0(@babel/core@7.21.3)(jest@29.5.0)(typescript@4.9.5) + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) ts-loader: specifier: ^9.2.3 version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) @@ -1435,14 +1435,17 @@ importers: specifier: ^4.13.1 version: 4.16.0 '@astrojs/mdx': - specifier: ^0.19.2 - version: 0.19.2(astro@1.9.2)(rollup@2.70.2) + specifier: 0.18.4 + version: 0.18.4(astro@2.6.6)(rollup@2.70.2) '@astrojs/react': - specifier: ^1.2.2 - version: 1.2.2(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.2.1 + version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.21.3)(solid-js@1.6.15)(vite@3.2.5) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15) + '@astrojs/tailwind': + specifier: ^4.0.0 + version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1462,10 +1465,13 @@ importers: specifier: ^18.0.0 version: 18.0.11 astro: - specifier: ^1.6.10 - version: 1.9.2(@types/node@18.15.10)(ts-node@10.9.1) + specifier: ^2.6.6 + version: 2.6.6(@types/node@18.15.10) + react: + specifier: ^18.2.0 + version: 18.2.0 react-dom: - specifier: ^18.1.0 + specifier: ^18.2.0 version: 18.2.0(react@18.2.0) solid-js: specifier: ^1.4.3 @@ -1502,8 +1508,8 @@ importers: specifier: ^2.8.0 version: 2.8.7 prettier-plugin-astro: - specifier: ^0.7.0 - version: 0.7.2 + specifier: ^0.10.0 + version: 0.10.0 packages: @@ -1743,22 +1749,27 @@ packages: js-yaml: 4.1.0 dev: false - /@astrojs/compiler@0.31.4: - resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==} - /@astrojs/compiler@0.32.0: resolution: {integrity: sha512-QL5qMGkfsC1/kDjJF4RRagz8/hACBUb19cHWrQ8AROphS42qXM6JhoO1Og5FohV3p2VfT5CdEJspn4uNsgZvmw==} dev: true - /@astrojs/language-server@0.28.3: - resolution: {integrity: sha512-fPovAX/X46eE2w03jNRMpQ7W9m2mAvNt4Ay65lD9wl1Z5vIQYxlg7Enp9qP225muTr4jSVB5QiLumFJmZMAaVA==} + /@astrojs/compiler@1.5.1: + resolution: {integrity: sha512-iIGKu/uzB8sJ5VveQf0eHrVPPFEcrvSlp4qShYMOuY2aMmK2RVXQlX9dUjtmBQ+NAokfIOb7fwCutvH+p13l+g==} + + /@astrojs/internal-helpers@0.1.0: + resolution: {integrity: sha512-OSwvoFkTqVowiyP+codQeQZWoq/HOwY32x17NxDglWoCx2sdyXzplDZoVV4/3odmSEY6/A+48WMl5qkjmP1CXw==} + dev: false + + /@astrojs/language-server@1.0.8: + resolution: {integrity: sha512-gssRxLGb8XnvKpqSzrDW5jdzdFnXD7eBXVkPCkkt2hv7Qzb+SAzv6hVgMok3jDCxpR1aeB+XNd9Qszj2h29iog==} hasBin: true dependencies: + '@astrojs/compiler': 1.5.1 + '@jridgewell/trace-mapping': 0.3.17 '@vscode/emmet-helper': 2.8.6 events: 3.3.0 prettier: 2.8.8 - prettier-plugin-astro: 0.7.2 - source-map: 0.7.4 + prettier-plugin-astro: 0.9.1 vscode-css-languageservice: 6.2.4 vscode-html-languageservice: 5.0.4 vscode-languageserver: 8.1.0 @@ -1768,44 +1779,13 @@ packages: vscode-uri: 3.0.7 dev: false - /@astrojs/markdown-remark@1.2.0: - resolution: {integrity: sha512-Cb+uhSuukyfERknfJ8K4iJLeKJaiZWi1BTwPS4fzw0bc9kGKe5VeTRzd2E25+vaMnRTk0tN/y6QfYEMMN3Q97g==} - dependencies: - '@astrojs/micromark-extension-mdx-jsx': 1.0.3 - '@astrojs/prism': 1.0.2 - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - github-slugger: 1.5.0 - hast-util-to-html: 8.0.4 - import-meta-resolve: 2.2.2 - mdast-util-from-markdown: 1.3.0 - mdast-util-mdx-expression: 1.3.2 - mdast-util-mdx-jsx: 1.2.0 - micromark-extension-mdx-expression: 1.0.4 - micromark-extension-mdx-md: 1.0.0 - micromark-util-combine-extensions: 1.0.0 - rehype-raw: 6.1.1 - rehype-stringify: 9.0.3 - remark-gfm: 3.0.1 - remark-parse: 10.0.1 - remark-rehype: 10.1.0 - remark-smartypants: 2.0.0 - shiki: 0.11.1 - unified: 10.1.2 - unist-util-map: 3.1.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@astrojs/markdown-remark@2.2.1(astro@1.9.2): + /@astrojs/markdown-remark@2.2.1(astro@2.6.6): resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==} peerDependencies: astro: ^2.5.0 dependencies: '@astrojs/prism': 2.1.2 - astro: 1.9.2(@types/node@18.15.10)(ts-node@10.9.1) + astro: 2.6.6(@types/node@18.15.10) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 rehype-raw: 6.1.1 @@ -1822,11 +1802,11 @@ packages: - supports-color dev: false - /@astrojs/mdx@0.19.2(astro@1.9.2)(rollup@2.70.2): - resolution: {integrity: sha512-xWI2TK2QvCFXhyadjVtidcOj7qHda2Fv3tUilhacFXF28vye/COluMirqgxEESMlUsV+8LI39f8P6ERxXADSmg==} + /@astrojs/mdx@0.18.4(astro@2.6.6)(rollup@2.70.2): + resolution: {integrity: sha512-yLlHF74oBtCCPnCY4LBios3OrXc97IXIBVOWuyXxmNwAYMA4xIfClN2YP9cFQJITDI/d80qrANzQLQInUNKlHA==} engines: {node: '>=16.12.0'} dependencies: - '@astrojs/markdown-remark': 2.2.1(astro@1.9.2) + '@astrojs/markdown-remark': 2.2.1(astro@2.6.6) '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 '@mdx-js/rollup': 2.3.0(rollup@2.70.2) @@ -1840,7 +1820,7 @@ packages: remark-frontmatter: 4.0.1 remark-gfm: 3.0.1 remark-smartypants: 2.0.0 - shiki: 0.14.1 + shiki: 0.11.1 source-map: 0.7.4 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -1850,27 +1830,6 @@ packages: - supports-color dev: false - /@astrojs/micromark-extension-mdx-jsx@1.0.3: - resolution: {integrity: sha512-O15+i2DGG0qb1R/1SYbFXgOKDGbYdV8iJMtuboVb1S9YFQfMOJxaCMco0bhXQI7PmZcQ4pZWIjT5oZ64dXUtRA==} - dependencies: - '@types/acorn': 4.0.6 - estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - vfile-message: 3.1.4 - dev: false - - /@astrojs/prism@1.0.2: - resolution: {integrity: sha512-o3cUVoAuALDqdN5puNlsN2eO4Yi1kDh68YO8V7o6U4Ts+J/mMayzlJ7JsgYAmob0xrf/XnADVgu8khfMv/w3uA==} - engines: {node: ^14.18.0 || >=16.12.0} - dependencies: - prismjs: 1.29.0 - dev: false - /@astrojs/prism@2.1.2: resolution: {integrity: sha512-3antim1gb34689GHRQFJ88JEo93HuZKQBnmxDT5W/nxiNz1p/iRxnCTEhIbJhqMOTRbbo5h2ldm5qSxx+TMFQA==} engines: {node: '>=16.12.0'} @@ -1878,17 +1837,17 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@1.2.2(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ab9fYvzkC74J7N+M3DWQuZgwu7sYjW0aLO3sEAdCX/jZZz+0BhrqS8m9QjtGJyQK/niF4tgJjpPfadopxKc56g==} - engines: {node: ^14.18.0 || >=16.12.0} + /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nq5Zr8iWdwjSp5fh1NReaCplwsnL4w5PXAY5XWu1jE/frxEfF/ycGHrrhwWW0uJHX9G+kUtmQLR0GBhlR4FmAw==} + engines: {node: '>=16.12.0'} peerDependencies: '@types/react': ^17.0.50 || ^18.0.21 '@types/react-dom': ^17.0.17 || ^18.0.6 react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 dependencies: - '@babel/core': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) '@types/react': 17.0.53 '@types/react-dom': 18.0.11 react: 18.2.0 @@ -1897,23 +1856,37 @@ packages: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.21.3)(solid-js@1.6.15)(vite@3.2.5): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: solid-js: ^1.4.3 dependencies: - babel-preset-solid: 1.6.13(@babel/core@7.21.3) + babel-preset-solid: 1.6.13(@babel/core@7.22.5) solid-js: 1.6.15 - vitefu: 0.2.4(vite@3.2.5) + vitefu: 0.2.4(vite@4.2.1) transitivePeerDependencies: - '@babel/core' - - vite dev: false - /@astrojs/telemetry@1.0.1: - resolution: {integrity: sha512-SJVfZHp00f8VZsT1fsx1+6acJGUNt/84xZytV5znPzzNE8RXjlE0rv03llgTsEeUHYZc6uJah91jNojS7RldFg==} - engines: {node: ^14.18.0 || >=16.12.0} + /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1): + resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} + peerDependencies: + astro: ^2.6.5 + tailwindcss: ^3.0.24 + dependencies: + astro: 2.6.6(@types/node@18.15.10) + autoprefixer: 10.4.14(postcss@8.4.24) + postcss: 8.4.24 + postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + transitivePeerDependencies: + - ts-node + dev: false + + /@astrojs/telemetry@2.1.1: + resolution: {integrity: sha512-4pRhyeQr0MLB5PKYgkdu+YE8sSpMbHL8dUuslBWBIdgcYjtD1SufPMBI8pgXJ+xlwrQJHKKfK2X1KonHYuOS9A==} + engines: {node: '>=16.12.0'} dependencies: ci-info: 3.8.0 debug: 4.3.4(supports-color@8.1.1) @@ -1921,17 +1894,16 @@ packages: dset: 3.1.2 is-docker: 3.0.0 is-wsl: 2.2.0 - node-fetch: 3.3.1 + undici: 5.22.1 which-pm-runs: 1.1.0 transitivePeerDependencies: - supports-color dev: false - /@astrojs/webapi@1.1.1: - resolution: {integrity: sha512-yeUvP27PoiBK/WCxyQzC4HLYZo4Hg6dzRd/dTsL50WGlAQVCwWcqzVJrIZKvzNDNaW/fIXutZTmdj6nec0PIGg==} + /@astrojs/webapi@2.2.0: + resolution: {integrity: sha512-mHAOApWyjqSe5AQMOUD9rsZJqbMQqe3Wosb1a40JV6Okvyxj1G6GTlthwYadWCymq/lbgwh0PLiY8Fr4eFxtuQ==} dependencies: - global-agent: 3.0.0 - node-fetch: 3.3.1 + undici: 5.22.1 dev: false /@aw-web-design/x-default-browser@1.4.88: @@ -2841,9 +2813,20 @@ packages: dependencies: '@babel/highlight': 7.18.6 + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + /@babel/compat-data@7.21.0: resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + engines: {node: '>=6.9.0'} /@babel/core@7.17.9: resolution: {integrity: sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==} @@ -2889,12 +2872,44 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true + + /@babel/core@7.22.5: + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color /@babel/generator@7.21.3: resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 @@ -2903,14 +2918,14 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 dev: true /@babel/helper-compilation-targets@7.20.7(@babel/core@7.17.9): @@ -2939,6 +2954,62 @@ packages: browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.17.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.3 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} @@ -2948,13 +3019,13 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -2967,13 +3038,32 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3000,13 +3090,24 @@ packages: regexpu-core: 5.3.2 dev: true + /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.3.2 + dev: true + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.17.9): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -3022,7 +3123,23 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.20.2 + debug: 4.3.4(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.22.5): + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -3036,11 +3153,15 @@ packages: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 dev: true /@babel/helper-function-name@7.21.0: @@ -3048,19 +3169,32 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 /@babel/helper-member-expression-to-functions@7.21.0: resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 dev: true /@babel/helper-module-imports@7.18.6: @@ -3069,6 +3203,12 @@ packages: dependencies: '@babel/types': 7.21.3 + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-module-transforms@7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} @@ -3083,12 +3223,28 @@ packages: '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true + + /@babel/helper-module-transforms@7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 dev: true /@babel/helper-plugin-utils@7.20.2: @@ -3105,7 +3261,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3118,9 +3274,24 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3129,12 +3300,12 @@ packages: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3143,41 +3314,67 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 dev: true /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + + /@babel/helper-split-export-declaration@7.22.5: + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3191,12 +3388,31 @@ packages: '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true + + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -3205,10 +3421,17 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.17.9): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.17.9): + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3227,6 +3450,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} @@ -3251,6 +3484,18 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) dev: true + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} @@ -3273,7 +3518,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) @@ -3281,6 +3526,21 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -3307,6 +3567,19 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} @@ -3335,6 +3608,20 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} @@ -3357,6 +3644,17 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} @@ -3379,6 +3677,17 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} @@ -3401,6 +3710,17 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} @@ -3423,6 +3743,17 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -3445,6 +3776,17 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -3467,6 +3809,17 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} @@ -3495,6 +3848,20 @@ packages: '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} @@ -3517,6 +3884,17 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -3541,6 +3919,18 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) dev: true + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -3567,6 +3957,19 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} @@ -3597,6 +4000,21 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} @@ -3619,6 +4037,17 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.9): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -3637,12 +4066,21 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3664,6 +4102,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -3684,6 +4131,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -3702,6 +4159,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -3720,13 +4186,22 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.21.3): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3740,12 +4215,22 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.3): + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.22.5): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3767,13 +4252,22 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.21.3): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.9): @@ -3794,6 +4288,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -3812,6 +4315,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -3830,6 +4342,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -3848,6 +4369,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -3866,6 +4396,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -3884,6 +4423,15 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -3904,6 +4452,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.9): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} @@ -3924,6 +4482,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.17.9): resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} @@ -3934,13 +4502,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.21.3): + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.22.5): resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3964,6 +4532,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} @@ -3985,13 +4563,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} @@ -4012,6 +4604,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} @@ -4032,6 +4634,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} @@ -4072,6 +4684,26 @@ packages: - supports-color dev: true + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} @@ -4094,6 +4726,17 @@ packages: '@babel/template': 7.20.7 dev: true + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 + dev: true + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.17.9): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} @@ -4114,6 +4757,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.5): + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} @@ -4136,6 +4789,17 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} @@ -4156,6 +4820,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} @@ -4178,15 +4852,26 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.5) dev: true /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.17.9): @@ -4209,6 +4894,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} @@ -4221,15 +4916,27 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.22.5): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-function-name': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4253,6 +4960,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} @@ -4273,6 +4990,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.17.9): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} @@ -4299,6 +5026,19 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.22.5): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.17.9): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} @@ -4320,9 +5060,23 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.22.5): + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -4349,10 +5103,25 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.22.5): + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -4383,6 +5152,19 @@ packages: - supports-color dev: true + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.17.9): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} @@ -4405,6 +5187,17 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.22.5): + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} @@ -4425,6 +5218,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} @@ -4451,6 +5254,19 @@ packages: - supports-color dev: true + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.17.9): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} @@ -4471,6 +5287,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.22.5): + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} @@ -4491,38 +5317,48 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.3): + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.22.5): resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/types': 7.22.5 /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} @@ -4546,6 +5382,17 @@ packages: regenerator-transform: 0.15.1 dev: true + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.22.5): + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + regenerator-transform: 0.15.1 + dev: true + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} @@ -4566,6 +5413,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} @@ -4586,6 +5443,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.17.9): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} @@ -4608,6 +5475,17 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: true + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -4628,6 +5506,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -4648,6 +5536,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} @@ -4668,6 +5566,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.5): + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.17.9): resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} @@ -4683,17 +5591,17 @@ packages: - supports-color dev: true - /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.3): + /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.22.5): resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true @@ -4718,6 +5626,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.22.5): + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.17.9): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} @@ -4740,6 +5658,17 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 + dev: true + /@babel/preset-env@7.16.11(@babel/core@7.17.9): resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} engines: {node: '>=6.9.0'} @@ -4901,7 +5830,7 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) @@ -4911,16 +5840,102 @@ packages: - supports-color dev: true - /@babel/preset-flow@7.18.6(@babel/core@7.21.3): - resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} + /@babel/preset-env@7.20.2(@babel/core@7.22.5): + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) + core-js-compat: 3.29.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-flow@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.5) dev: true /@babel/preset-modules@0.1.5(@babel/core@7.17.9): @@ -4949,6 +5964,19 @@ packages: esutils: 2.0.3 dev: true + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) + '@babel/types': 7.21.3 + esutils: 2.0.3 + dev: true + /@babel/preset-typescript@7.16.7(@babel/core@7.17.9): resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} @@ -4963,27 +5991,27 @@ packages: - supports-color dev: true - /@babel/preset-typescript@7.16.7(@babel/core@7.21.3): + /@babel/preset-typescript@7.16.7(@babel/core@7.22.5): resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /@babel/register@7.21.0(@babel/core@7.21.3): + /@babel/register@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -5009,18 +6037,43 @@ packages: '@babel/parser': 7.21.3 '@babel/types': 7.21.3 + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + /@babel/traverse@7.21.3: resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/traverse@7.22.5: + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: @@ -5034,6 +6087,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + /@balena/dockerignore@1.0.2: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true @@ -5542,6 +6603,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-arm@0.15.18: resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} @@ -5567,6 +6637,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -5584,6 +6663,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -5601,6 +6689,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -5618,6 +6715,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -5635,6 +6741,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -5652,6 +6767,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm64@0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -5669,6 +6793,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-arm@0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -5686,6 +6819,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -5703,6 +6845,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-loong64@0.15.18: resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -5728,6 +6879,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -5745,6 +6905,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -5762,6 +6931,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -5779,6 +6957,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -5796,6 +6983,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} @@ -5813,6 +7009,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -5830,6 +7035,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -5847,6 +7061,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -5864,6 +7087,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -5881,6 +7113,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -5898,6 +7139,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -5915,6 +7165,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.22.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6533,7 +7792,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -6556,7 +7815,7 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 @@ -7398,22 +8657,6 @@ packages: resolution: {integrity: sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw==} requiresBuild: true - /@proload/core@0.3.3: - resolution: {integrity: sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ==} - dependencies: - deepmerge: 4.3.1 - escalade: 3.1.1 - dev: false - - /@proload/plugin-tsm@0.2.1(@proload/core@0.3.3): - resolution: {integrity: sha512-Ex1sL2BxU+g8MHdAdq9SZKz+pU34o8Zcl9PHWo2WaG9hrnlZme607PU6gnpoAYsDBpHX327+eu60wWUk+d/b+A==} - peerDependencies: - '@proload/core': ^0.3.2 - dependencies: - '@proload/core': 0.3.3 - tsm: 2.3.0 - dev: false - /@radix-ui/number@1.0.0: resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==} dependencies: @@ -8712,8 +9955,8 @@ packages: '@storybook/mdx1-csf': optional: true dependencies: - '@babel/core': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) '@jest/transform': 29.5.0 '@mdx-js/react': 2.3.0(react@18.2.0) '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) @@ -9078,11 +10321,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.36: - resolution: {integrity: sha512-KMMxBvufpHDySLnN7D72J6xxnKUlmVsUTVqcHpVBLMTWmZMaBRKaOHXIUnacr2cj0YTZ0mwldyhzDWNfOPdcnw==} + /@storybook/channel-postmessage@7.1.0-alpha.37: + resolution: {integrity: sha512-uRFLzRDLI2E40CRNgoNpXoaKZlqvWNeIiG0i7y9TzajmHkm0oRIYTv90goYTTrr2jD6jiW/7aR23W7XIEbVhKw==} dependencies: - '@storybook/channels': 7.1.0-alpha.36 - '@storybook/client-logger': 7.1.0-alpha.36 + '@storybook/channels': 7.1.0-alpha.37 + '@storybook/client-logger': 7.1.0-alpha.37 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -9106,11 +10349,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.36: - resolution: {integrity: sha512-uP7HliEcfF3po/IDDPOWZ4xWc8v6TQZLnMLuZOlJLJNEQpaJJIw2YUuP85OLb6IZaPNUlvsq47d9d2/vOq4txQ==} + /@storybook/channels@7.1.0-alpha.37: + resolution: {integrity: sha512-/igU/cCGkeOUrJGw/UCtHn5nJUp0vjPQ5pAR1yCdpOu3zhXERPiCz4i//1uyWCZJSIZfBWxdvXVqo5TuOW4RDA==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.36 - '@storybook/core-events': 7.1.0-alpha.36 + '@storybook/client-logger': 7.1.0-alpha.37 + '@storybook/core-events': 7.1.0-alpha.37 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -9121,8 +10364,8 @@ packages: resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==} hasBin: true dependencies: - '@babel/core': 7.21.3 - '@babel/preset-env': 7.20.2(@babel/core@7.21.3) + '@babel/core': 7.22.5 + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) '@ndelangen/get-tarball': 3.0.7 '@storybook/codemod': 7.0.0-rc.10 '@storybook/core-common': 7.0.0-rc.10 @@ -9179,8 +10422,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.36: - resolution: {integrity: sha512-yzDNyiNroygmC4j1eL9MdApAo6SIvv0876eGVw/3o2H2IwQp1s3QP8AHTflz5db5s5HtTU6JpfYlzk3Ag95ARQ==} + /@storybook/client-logger@7.1.0-alpha.37: + resolution: {integrity: sha512-DobCJKNheaJdGBK00k3ps5Zq+jCkCMEiuGdS28nILMFgwQx3bXzAZb7QixwxGpWHS0WhH4QTG0Dlkvl9uFMBzg==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -9284,8 +10527,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.36: - resolution: {integrity: sha512-PPjJjMt5hqvRLxYa+KQRyzx1N3kiVVVacX36vXFrTBsvdH5Pdxx/hN/C9yVHX17wNO3Z4s9b9rfDyPkN5ZgrVA==} + /@storybook/core-events@7.1.0-alpha.37: + resolution: {integrity: sha512-r2LEHGKXVwK5TThsDj4TaDlsm65k2ZHxmYW5w6SgWbNo09HbFzHzDW0hOOwJxxqn6lyKpOU9ejnGRpWmucehNA==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -9396,7 +10639,7 @@ packages: /@storybook/docs-tools@7.0.0-rc.10: resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==} dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@storybook/core-common': 7.0.0-rc.10 '@storybook/preview-api': 7.0.0-rc.10 '@storybook/types': 7.0.0-rc.10 @@ -9421,14 +10664,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.36: - resolution: {integrity: sha512-tNCcbL4AiKJXC/D65fpzQrBj6N+11ZrSNSCxeyWZ2+cC/ZMpAJBbJf2cdBzmsuXUTxsW4g9kRkQUrPC1p92DQQ==} + /@storybook/instrumenter@7.1.0-alpha.37: + resolution: {integrity: sha512-fCqge7NRdbRgcOlOeKb4cJFxZiyl8oK8e9hSvQGGWXQ8m0vx6TnB+429u7ZFz6PdbFf9xS3uWkMLOInrD5K7Rg==} dependencies: - '@storybook/channels': 7.1.0-alpha.36 - '@storybook/client-logger': 7.1.0-alpha.36 - '@storybook/core-events': 7.1.0-alpha.36 + '@storybook/channels': 7.1.0-alpha.37 + '@storybook/client-logger': 7.1.0-alpha.37 + '@storybook/core-events': 7.1.0-alpha.37 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.36 + '@storybook/preview-api': 7.1.0-alpha.37 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -9497,16 +10740,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.36: - resolution: {integrity: sha512-MnfoDUSkuIMcNw5K9YJYXqBSbPqwQw9gwz35/KTpotqP+2bG9UNiGh+6WoPr7soGpMAoPfdnXA6wD+n1BadibQ==} + /@storybook/preview-api@7.1.0-alpha.37: + resolution: {integrity: sha512-9yugeG9Z2THyX6Z9XsTU15JE0vzjKy0J8saUpmNNMQqGUxobWg0hOrJCV/kcayUcb8zJ7LUvriCFg0yxl+09rg==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.36 - '@storybook/channels': 7.1.0-alpha.36 - '@storybook/client-logger': 7.1.0-alpha.36 - '@storybook/core-events': 7.1.0-alpha.36 + '@storybook/channel-postmessage': 7.1.0-alpha.37 + '@storybook/channels': 7.1.0-alpha.37 + '@storybook/client-logger': 7.1.0-alpha.37 + '@storybook/core-events': 7.1.0-alpha.37 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.36 + '@storybook/types': 7.1.0-alpha.37 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -9654,8 +10897,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.36 - '@storybook/instrumenter': 7.1.0-alpha.36 + '@storybook/client-logger': 7.1.0-alpha.37 + '@storybook/instrumenter': 7.1.0-alpha.37 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -9698,10 +10941,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.36: - resolution: {integrity: sha512-fvY4jVe0McXa3DBBWc9EfXFDqdblDsY3IxH5p2m2s0RK5jv/QzMEb6MP4AZHwUyeLPoil4G7PYFkMakNMWHlgw==} + /@storybook/types@7.1.0-alpha.37: + resolution: {integrity: sha512-vups9inmWJnSYqgSZMrAzN3kUgdkjNApAliTX3ebu7rYMC8QjF2MLl0aqHsDFEDpq+IJZStDxDDkdvQP2fLPBQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.36 + '@storybook/channels': 7.1.0-alpha.37 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -9933,7 +11176,7 @@ packages: resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@babel/runtime': 7.21.0 '@types/aria-query': 5.0.1 aria-query: 5.1.3 @@ -10168,12 +11411,6 @@ packages: '@types/json-schema': 7.0.11 dev: true - /@types/estree-jsx@0.0.1: - resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} - dependencies: - '@types/estree': 1.0.0 - dev: false - /@types/estree-jsx@1.0.0: resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} dependencies: @@ -10246,6 +11483,7 @@ packages: /@types/html-escaper@3.0.0: resolution: {integrity: sha512-OcJcvP3Yk8mjYwf/IdXZtTE1tb/u0WF0qa29ER07ZHCYUBZXSN29Z1mBS+/96+kNMGTFUAbSz9X+pHmHpZrTCw==} + dev: true /@types/is-ci@3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} @@ -10937,9 +12175,9 @@ packages: peerDependencies: vite: ^4.1.0-beta.0 dependencies: - '@babel/core': 7.21.3 - '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.3) + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 vite: 4.2.1(@types/node@18.15.10) @@ -11689,6 +12927,7 @@ packages: engines: {node: '>=4'} dependencies: tslib: 2.5.2 + dev: true /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} @@ -11729,62 +12968,61 @@ packages: - supports-color dev: true - /astro@1.9.2(@types/node@18.15.10)(ts-node@10.9.1): - resolution: {integrity: sha512-L+Ma0eR0Aa6QZg7RF0lEs+106Ye1/zukvtq3KtsYIogAojltlwllwU9X5CwMBzFwA55NxpNp4gSRh5US/xb+8Q==} - engines: {node: ^14.18.0 || >=16.12.0, npm: '>=6.14.0'} + /astro@2.6.6(@types/node@18.15.10): + resolution: {integrity: sha512-npeTXVaSOWKYYF6Znj6Yfxfq+WIFZ9u/Q+vtFP3nXbl7/XimvE+LbmWoK+hPFBOXC/KRLHxqQSltXJX5ALFmFg==} + engines: {node: '>=16.12.0', npm: '>=6.14.0'} hasBin: true + peerDependencies: + sharp: '>=0.31.0' + peerDependenciesMeta: + sharp: + optional: true dependencies: - '@astrojs/compiler': 0.31.4 - '@astrojs/language-server': 0.28.3 - '@astrojs/markdown-remark': 1.2.0 - '@astrojs/telemetry': 1.0.1 - '@astrojs/webapi': 1.1.1 - '@babel/core': 7.21.3 + '@astrojs/compiler': 1.5.1 + '@astrojs/internal-helpers': 0.1.0 + '@astrojs/language-server': 1.0.8 + '@astrojs/markdown-remark': 2.2.1(astro@2.6.6) + '@astrojs/telemetry': 2.1.1 + '@astrojs/webapi': 2.2.0 + '@babel/core': 7.22.5 '@babel/generator': 7.21.3 '@babel/parser': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - '@proload/core': 0.3.3 - '@proload/plugin-tsm': 0.2.1(@proload/core@0.3.3) + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 - '@types/html-escaper': 3.0.0 '@types/yargs-parser': 21.0.0 acorn: 8.8.2 boxen: 6.2.1 + chokidar: 3.5.3 ci-info: 3.8.0 common-ancestor-path: 1.0.1 cookie: 0.5.0 debug: 4.3.4(supports-color@8.1.1) deepmerge-ts: 4.3.0 - devalue: 4.3.0 + devalue: 4.3.2 diff: 5.1.0 es-module-lexer: 1.2.0 - estree-walker: 3.0.3 + esbuild: 0.17.19 + estree-walker: 3.0.0 execa: 6.1.0 fast-glob: 3.2.12 github-slugger: 2.0.0 gray-matter: 4.0.3 - html-entities: 2.3.3 html-escaper: 3.0.3 - import-meta-resolve: 2.2.2 + js-yaml: 4.1.0 kleur: 4.1.5 magic-string: 0.27.0 mime: 3.0.0 ora: 6.3.0 - path-browserify: 1.0.1 + p-limit: 4.0.0 path-to-regexp: 6.2.1 - postcss: 8.4.21 - postcss-load-config: 3.1.4(postcss@8.4.21)(ts-node@10.9.1) preferred-pm: 3.0.3 prompts: 2.4.2 - recast: 0.20.5 rehype: 12.0.1 - resolve: 1.22.1 - rollup: 2.79.1 semver: 7.3.8 - shiki: 0.11.1 - sirv: 2.0.2 + server-destroy: 1.0.1 + shiki: 0.14.1 slash: 4.0.0 string-width: 5.1.2 strip-ansi: 7.0.1 @@ -11793,8 +13031,8 @@ packages: typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 3.2.5(@types/node@18.15.10) - vitefu: 0.2.4(vite@3.2.5) + vite: 4.3.9(@types/node@18.15.10) + vitefu: 0.2.4(vite@4.3.9) yargs-parser: 21.1.1 zod: 3.21.4 transitivePeerDependencies: @@ -11805,7 +13043,6 @@ packages: - sugarss - supports-color - terser - - ts-node dev: false /astrojs-compiler-sync@0.3.2(@astrojs/compiler@0.32.0): @@ -11854,6 +13091,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /autoprefixer@10.4.14(postcss@8.4.24): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001470 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: false + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -11890,12 +13143,12 @@ packages: transitivePeerDependencies: - debug - /babel-core@7.0.0-bridge.0(@babel/core@7.21.3): + /babel-core@7.0.0-bridge.0(@babel/core@7.22.5): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 dev: true /babel-eslint@10.1.0(eslint@8.22.0): @@ -11916,18 +13169,18 @@ packages: - supports-color dev: false - /babel-jest@27.5.1(@babel/core@7.21.3): + /babel-jest@27.5.1(@babel/core@7.22.5): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.21.3) + babel-preset-jest: 27.5.1(@babel/core@7.22.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -11935,17 +13188,17 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.21.3): + /babel-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.3) + babel-preset-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -11970,8 +13223,8 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.3 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -11980,21 +13233,21 @@ packages: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.3 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-jsx-dom-expressions@0.35.19(@babel/core@7.21.3): + /babel-plugin-jsx-dom-expressions@0.35.19(@babel/core@7.22.5): resolution: {integrity: sha512-Y1Qg6Yt5XaRfGewxmF0ac6bnqo2xdsIdPd1J6/El4E+7m5Ej76jcHYeHWJsoPbVmbZXc5TGenwZMP9ueHjja/g==} peerDependencies: '@babel/core': ^7.20.12 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/types': 7.22.5 html-entities: 2.3.3 validate-html-nesting: 1.2.1 dev: false @@ -12025,6 +13278,19 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.22.5): + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-corejs3@0.5.3(@babel/core@7.17.9): resolution: {integrity: sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==} peerDependencies: @@ -12049,6 +13315,18 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.22.5): + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + core-js-compat: 3.29.1 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.17.9): resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: @@ -12071,55 +13349,66 @@ packages: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.3): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.22.5): + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true - /babel-preset-jest@27.5.1(@babel/core@7.21.3): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + dev: true + + /babel-preset-jest@27.5.1(@babel/core@7.22.5): resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.21.3): + /babel-preset-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-solid@1.6.13(@babel/core@7.21.3): + /babel-preset-solid@1.6.13(@babel/core@7.22.5): resolution: {integrity: sha512-W78rLK4xv48k2Jb/VFynu42oCQufcDYFz6gmhMYslKy/PJCfNxdp85QCg1wTcrmCoPQK2TcHMVcL8nVvvTBHxQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 - babel-plugin-jsx-dom-expressions: 0.35.19(@babel/core@7.21.3) + '@babel/core': 7.22.5 + babel-plugin-jsx-dom-expressions: 0.35.19(@babel/core@7.22.5) dev: false /backo2@1.0.2: @@ -12263,10 +13552,6 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true - /boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - dev: false - /bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} @@ -13358,11 +14643,6 @@ packages: engines: {node: '>=8'} dev: true - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: false - /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -13523,6 +14803,7 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + dev: true /defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} @@ -13597,10 +14878,6 @@ packages: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false - /detect-package-manager@2.0.1: resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} engines: {node: '>=12'} @@ -13627,8 +14904,8 @@ packages: defined: 1.0.1 minimist: 1.2.8 - /devalue@4.3.0: - resolution: {integrity: sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==} + /devalue@4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false /didyoumean@1.2.2: @@ -14021,10 +15298,6 @@ packages: next-tick: 1.1.0 dev: true - /es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - dev: false - /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: @@ -14320,6 +15593,36 @@ packages: '@esbuild/win32-ia32': 0.17.14 '@esbuild/win32-x64': 0.17.14 + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + dev: false + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -14897,7 +16200,7 @@ packages: engines: {node: '>=8.3.0'} dependencies: '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 c8: 7.13.0 transitivePeerDependencies: - supports-color @@ -14943,6 +16246,10 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /estree-walker@3.0.0: + resolution: {integrity: sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==} + dev: false + /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: @@ -15263,14 +16570,6 @@ packages: svelte: 3.57.0 dev: false - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: false - /fetch-retry@5.0.4: resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==} dev: true @@ -15469,7 +16768,7 @@ packages: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 @@ -15516,13 +16815,6 @@ packages: engines: {node: '>=0.4.x'} dev: false - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: false - /formidable@1.2.6: resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' @@ -15534,7 +16826,6 @@ packages: /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true /framer-motion@8.5.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5IDx5bxkjWHWUF3CVJoSyUVOtrbAxtzYBBowRE2uYI/6VYhkEBD+rbTHEGuUmbGHRj6YqqSfoG7Aa1cLyWCrBA==} @@ -15856,18 +17147,6 @@ packages: path-scurry: 1.6.3 dev: true - /global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.3.8 - serialize-error: 7.0.1 - dev: false - /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -15917,6 +17196,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 + dev: true /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -16058,6 +17338,7 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 + dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -16989,7 +18270,7 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.22.5 '@babel/parser': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 @@ -17184,10 +18465,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.21.3) + babel-jest: 27.5.1(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -17228,11 +18509,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.15.10 - babel-jest: 29.5.0(@babel/core@7.21.3) + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -17483,7 +18764,7 @@ packages: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -17498,7 +18779,7 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -17756,16 +19037,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.3 - '@babel/generator': 7.21.3 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3) - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -17786,18 +19067,18 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.3 - '@babel/generator': 7.21.3 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.3) - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -18001,17 +19282,17 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/parser': 7.21.3 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) - '@babel/preset-env': 7.20.2(@babel/core@7.21.3) - '@babel/preset-flow': 7.18.6(@babel/core@7.21.3) - '@babel/preset-typescript': 7.16.7(@babel/core@7.21.3) - '@babel/register': 7.21.0(@babel/core@7.21.3) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.3) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) + '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) + '@babel/register': 7.21.0(@babel/core@7.22.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) chalk: 4.1.2 flow-parser: 0.202.1 graceful-fs: 4.2.11 @@ -18169,10 +19450,6 @@ packages: /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false - /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -18693,13 +19970,6 @@ packages: remove-accents: 0.4.2 dev: false - /matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 4.0.0 - dev: false - /mdast-util-definitions@4.0.0: resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} dependencies: @@ -18817,19 +20087,6 @@ packages: - supports-color dev: false - /mdast-util-mdx-jsx@1.2.0: - resolution: {integrity: sha512-5+ot/kfxYd3ChgEMwsMUO71oAfYjyRI3pADEK4I7xTmWLGQ8Y7ghm1CG36zUoUvDPxMlIYwQV/9DYHAUWdG4dA==} - dependencies: - '@types/estree-jsx': 0.0.1 - '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.5.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.3 - unist-util-remove-position: 4.0.2 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - dev: false - /mdast-util-mdx-jsx@2.1.2: resolution: {integrity: sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==} dependencies: @@ -19670,11 +20927,6 @@ packages: minimatch: 3.1.2 dev: true - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: false - /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: @@ -19712,15 +20964,6 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: false - /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true @@ -19774,7 +21017,6 @@ packages: /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - dev: true /notation@1.3.6: resolution: {integrity: sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==} @@ -19886,6 +21128,7 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + dev: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} @@ -20092,7 +21335,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: yocto-queue: 1.0.0 - dev: true /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} @@ -20163,7 +21405,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -20239,6 +21481,7 @@ packages: /path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} @@ -20409,6 +21652,18 @@ packages: read-cache: 1.0.0 resolve: 1.22.1 + /postcss-import@14.1.0(postcss@8.4.24): + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: false + /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -20418,6 +21673,16 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.21 + /postcss-js@4.0.1(postcss@8.4.24): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.24 + dev: false + /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -20435,6 +21700,42 @@ packages: ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 1.10.2 + /postcss-load-config@3.1.4(postcss@8.4.24)(ts-node@10.9.1): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.24 + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + yaml: 1.10.2 + dev: false + + /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.24 + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + yaml: 2.3.1 + dev: false + /postcss-nested@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} @@ -20444,6 +21745,16 @@ packages: postcss: 8.4.21 postcss-selector-parser: 6.0.11 + /postcss-nested@6.0.0(postcss@8.4.24): + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.11 + dev: false + /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -20462,6 +21773,14 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + /preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} engines: {node: '>=10'} @@ -20480,14 +21799,24 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-astro@0.7.2: - resolution: {integrity: sha512-mmifnkG160BtC727gqoimoxnZT/dwr8ASxpoGGl6EHevhfblSOeu+pwH1LAm5Qu1MynizktztFujHHaijLCkww==} + /prettier-plugin-astro@0.10.0: + resolution: {integrity: sha512-dPzop0gKZyVGpTDQmfy+e7FKXC9JT3mlpfYA2diOVz+Ui+QR1U4G/s+OesKl2Hib2JJOtAYJs/l+ovgT0ljlFA==} + engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} + dependencies: + '@astrojs/compiler': 1.5.1 + prettier: 2.8.8 + sass-formatter: 0.7.6 + dev: true + + /prettier-plugin-astro@0.9.1: + resolution: {integrity: sha512-pYZXSbdq0eElvzoIMArzv1SBn1NUXzopjlcnt6Ql8VW32PjC12NovwBjXJ6rh8qQLi7vF8jNqAbraKW03UPfag==} engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} dependencies: - '@astrojs/compiler': 0.31.4 + '@astrojs/compiler': 1.5.1 prettier: 2.8.8 sass-formatter: 0.7.6 synckit: 0.8.5 + dev: false /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.57.0): resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} @@ -20835,7 +22164,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/generator': 7.21.3 ast-types: 0.14.2 commander: 2.20.3 @@ -21107,16 +22436,6 @@ packages: dependencies: picomatch: 2.3.1 - /recast@0.20.5: - resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==} - engines: {node: '>= 4'} - dependencies: - ast-types: 0.14.2 - esprima: 4.0.1 - source-map: 0.6.1 - tslib: 2.5.2 - dev: false - /recast@0.21.5: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} @@ -21534,18 +22853,6 @@ packages: glob: 9.3.2 dev: true - /roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.3 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.2 - dev: false - /rollup-plugin-dts@4.2.2(rollup@2.70.2)(typescript@4.9.5): resolution: {integrity: sha512-A3g6Rogyko/PXeKoUlkjxkP++8UDVpgA7C+Tdl77Xj4fgEaIjPSnxRmR53EzvoYy97VMVwLAOcWJudaVAuxneQ==} engines: {node: '>=v12.22.11'} @@ -21557,7 +22864,7 @@ packages: rollup: 2.70.2 typescript: 4.9.5 optionalDependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 dev: true /rollup-plugin-size@0.2.2: @@ -21641,6 +22948,14 @@ packages: optionalDependencies: fsevents: 2.3.2 + /rollup@3.25.1: + resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: false + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -21757,6 +23072,7 @@ packages: /semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + dev: true /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} @@ -21828,13 +23144,6 @@ packages: transitivePeerDependencies: - supports-color - /serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - dependencies: - type-fest: 0.13.1 - dev: false - /serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -21881,6 +23190,10 @@ packages: transitivePeerDependencies: - supports-color + /server-destroy@1.0.1: + resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -22108,6 +23421,7 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: true /source-map@0.7.3: resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} @@ -22174,10 +23488,6 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - /sprintf-js@1.1.2: - resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} - dev: false - /ssh-remote-port-forward@1.0.4: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} dependencies: @@ -22809,6 +24119,40 @@ packages: transitivePeerDependencies: - ts-node + /tailwindcss@3.2.7(postcss@8.4.24)(ts-node@10.9.1): + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-import: 14.1.0(postcss@8.4.24) + postcss-js: 4.0.1(postcss@8.4.24) + postcss-load-config: 3.1.4(postcss@8.4.24)(ts-node@10.9.1) + postcss-nested: 6.0.0(postcss@8.4.24) + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: false + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -23203,7 +24547,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.21.3)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -23224,7 +24568,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) @@ -23362,14 +24706,6 @@ packages: /tslib@2.5.2: resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} - /tsm@2.3.0: - resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - esbuild: 0.15.18 - dev: false - /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} @@ -23560,6 +24896,13 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici@5.22.1: + resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: false + /unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} dev: true @@ -23622,12 +24965,6 @@ packages: dependencies: '@types/unist': 2.0.6 - /unist-util-map@3.1.3: - resolution: {integrity: sha512-4/mDauoxqZ6geK97lJ6n2kDk6JK88Vh+hWMSJqyaaP/7eqN1dDhjcjnNxKNm3YU6Sw7PVJtcFMUbnmHvYzb6Vg==} - dependencies: - '@types/unist': 2.0.6 - dev: false - /unist-util-modify-children@3.1.1: resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==} dependencies: @@ -24075,7 +25412,7 @@ packages: dependencies: '@types/node': 18.15.10 esbuild: 0.15.18 - postcss: 8.4.21 + postcss: 8.4.24 resolve: 1.22.1 rollup: 2.79.1 optionalDependencies: @@ -24148,15 +25485,37 @@ packages: optionalDependencies: fsevents: 2.3.2 - /vitefu@0.2.4(vite@3.2.5): - resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} + /vite@4.3.9(@types/node@18.15.10): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true peerDependencies: - vite: ^3.0.0 || ^4.0.0 + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 peerDependenciesMeta: - vite: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: optional: true dependencies: - vite: 3.2.5(@types/node@18.15.10) + '@types/node': 18.15.10 + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + optionalDependencies: + fsevents: 2.3.2 dev: false /vitefu@0.2.4(vite@4.2.1): @@ -24168,7 +25527,17 @@ packages: optional: true dependencies: vite: 4.2.1(@types/node@18.15.10) - dev: true + + /vitefu@0.2.4(vite@4.3.9): + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 4.3.9(@types/node@18.15.10) + dev: false /vitest@0.24.5(jsdom@20.0.3): resolution: {integrity: sha512-zw6JhPUHtLILQDe5Q39b/SzoITkG+R7hcFjuthp4xsi6zpmfQPOZcHodZ+3bqoWl4EdGK/p1fuMiEwdxgbGLOA==} @@ -24470,11 +25839,6 @@ packages: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: false - /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -24842,6 +26206,11 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: false + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -24924,7 +26293,6 @@ packages: /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - dev: true /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} diff --git a/websites/docs/astro.config.mjs b/websites/docs/astro.config.mjs index 94eaa0cae2..c076f3b697 100644 --- a/websites/docs/astro.config.mjs +++ b/websites/docs/astro.config.mjs @@ -14,7 +14,7 @@ export default defineConfig({ solidJs(), mdx(), ], - site: `https://ballerine.io`, + site: `https://ballerine.com`, markdown: { shikiConfig: { wrap: true, diff --git a/websites/docs/package.json b/websites/docs/package.json index 0e7d77d3f3..5cc117f9a9 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -1,5 +1,5 @@ { - "name": "@ballerine/docs", + "name": "@ballerine/docs-site", "type": "module", "version": "0.4.1", "private": true, @@ -19,17 +19,19 @@ }, "dependencies": { "@algolia/client-search": "^4.13.1", - "@astrojs/mdx": "^0.19.2", - "@astrojs/react": "^1.2.2", + "@astrojs/mdx": "0.18.4", + "@astrojs/react": "^2.2.1", "@astrojs/solid-js": "^1.2.3", + "@astrojs/tailwind": "^4.0.0", "@ballerine/common": "0.5.3", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", "@types/react": "^17.0.45", "@types/react-dom": "^18.0.0", - "astro": "^1.6.10", - "react-dom": "^18.1.0", + "astro": "^2.6.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", "solid-js": "^1.4.3" }, "devDependencies": { @@ -42,6 +44,6 @@ "eslint-plugin-unused-imports": "^2.0.0", "html-escaper": "^3.0.3", "prettier": "^2.8.0", - "prettier-plugin-astro": "^0.7.0" + "prettier-plugin-astro": "^0.10.0" } } diff --git a/websites/docs/src/components/LeftSidebar/LeftSidebar.astro b/websites/docs/src/components/LeftSidebar/LeftSidebar.astro index ad2f1241dc..79c5818a6b 100644 --- a/websites/docs/src/components/LeftSidebar/LeftSidebar.astro +++ b/websites/docs/src/components/LeftSidebar/LeftSidebar.astro @@ -3,7 +3,7 @@ import { getLanguageFromURL } from '../../languages'; import { SIDEBAR } from '../../config'; import SidebarToggleTabGroup from '../SidebarToggleTabGroup/SidebarToggleTabGroup'; import SidebarContent from '../SidebarContent/SidebarContent.astro'; -import { ETab } from '../../types'; +import { Tab } from '../../types'; type Props = { currentPage: string; @@ -16,7 +16,7 @@ const currentPageMatch = currentPage.endsWith(`/`) const langCode = getLanguageFromURL(currentPage); const sidebar = SIDEBAR[langCode]; const [, , tab] = currentPage.split(`/`); -const activeTab: ETab = tab as ETab; +const activeTab: Tab = tab as Tab; --- <nav aria-labelledby="grid-left"> @@ -31,13 +31,13 @@ const activeTab: ETab = tab as ETab; /> <ul class="nav-groups"> <SidebarContent - type={ETab.LEARN} + type={Tab.LEARN} defaultActiveTab={activeTab} sidebarSections={sidebar.learn} currentPageMatch={currentPageMatch} /> <SidebarContent - type={ETab.API} + type={Tab.API} defaultActiveTab={activeTab} sidebarSections={sidebar.api} currentPageMatch={currentPageMatch} From 0eda114408d7e3a6823dcdff3c0986a0b62c72f5 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Wed, 21 Jun 2023 00:16:12 +0300 Subject: [PATCH 052/123] refactor(*): GET /workflows per entity instead of query params (#558) * refactor(*): gET /workflows now uses query instead of param for entity id and type * refactor(workflows-service): now using an endpoint per entity instead of using query params * refactor(workflows-service): refactored new endpoints to be DRY * fix(workflows-service): added missing nestjs module dependencies * refactor(workflows-service): removed redundant usage of the @UserData decorator * fix(tests): fixed broken tests * fix(ci): trying to fix tests * fix(workflows-service): added missing prisma service dependency * fix(tests): refactored the endpoint the internal unit test uses --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- examples/headless-example/package.json | 2 +- .../src/components/App.svelte | 5 ++-- .../services/ballerine-backoffice.service.ts | 4 +-- pnpm-lock.yaml | 12 ++------- .../business/business.controller.external.ts | 23 ++++++++++++++++ .../src/business/business.module.ts | 23 +++++++++++++++- .../end-user.controller.external.intg.test.ts | 27 +++++++++++++++++-- .../end-user/end-user.controller.external.ts | 23 ++++++++++++++++ .../src/end-user/end-user.module.ts | 23 +++++++++++++++- .../src/workflow/utils/make-full-workflow.ts | 9 +++++++ .../workflow/workflow.controller.external.ts | 26 +++++------------- .../workflow.controller.external.unit.test.ts | 6 ++--- .../src/workflow/workflow.service.ts | 6 +++++ 13 files changed, 148 insertions(+), 41 deletions(-) create mode 100644 services/workflows-service/src/workflow/utils/make-full-workflow.ts diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 1539ed3400..3db0cbaf99 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -28,7 +28,7 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/common": "0.5.2", + "@ballerine/common": "0.5.3", "@ballerine/workflow-browser-sdk": "^0.4.3", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", diff --git a/examples/headless-example/src/components/App.svelte b/examples/headless-example/src/components/App.svelte index 0ffd3c8e69..fcfe349455 100644 --- a/examples/headless-example/src/components/App.svelte +++ b/examples/headless-example/src/components/App.svelte @@ -61,8 +61,9 @@ }, enabled: typeof id === 'string' && id.length > 0, }); - const entityType = - import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? 'end-user' : ('business' as const); + const entityType = ( + import.meta.env.VITE_EXAMPLE_TYPE === 'kyc' ? 'end-users' : 'businesses' + ) as const; const createWorkflowsQuery = ( options: CreateQueryOptions<Awaited<ReturnType<typeof fetchWorkflows>>> = {}, ) => diff --git a/examples/headless-example/src/services/ballerine-backoffice.service.ts b/examples/headless-example/src/services/ballerine-backoffice.service.ts index c856647044..0fe0fec3ab 100644 --- a/examples/headless-example/src/services/ballerine-backoffice.service.ts +++ b/examples/headless-example/src/services/ballerine-backoffice.service.ts @@ -15,7 +15,7 @@ export class BallerineBackOfficeService { entityType, entityId, }: { - entityType: 'end-user' | 'business'; + entityType: 'end-users' | 'businesses'; entityId: string; }) => fetchJson< @@ -29,7 +29,7 @@ export class BallerineBackOfficeService { status: string; }; }> - >(`${this.baseUrl}/workflows/${entityType}/${entityId}`); + >(`${this.baseUrl}/${entityType}/${entityId}/workflows`); fetchIntent = async () => fetchJson<Array<Record<string, unknown>>>(`${this.baseUrl}/workflows/intent`, { method: 'POST', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b2d2a89843..29768ecbdd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -298,8 +298,8 @@ importers: examples/headless-example: dependencies: '@ballerine/common': - specifier: 0.5.2 - version: 0.5.2 + specifier: 0.5.3 + version: link:../../packages/common '@ballerine/workflow-browser-sdk': specifier: ^0.4.3 version: link:../../sdks/workflow-browser-sdk @@ -6099,14 +6099,6 @@ packages: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true - /@ballerine/common@0.5.2: - resolution: {integrity: sha512-RD+fw92CiF/FbYqqpWrRKZq++ncRP3EMnTD9Xvd6jUPedSlik6HVF5EXWhEHSpMeYK0622tvVxyYqAOhDlUFKw==} - engines: {node: '>=12'} - dependencies: - ajv: 8.12.0 - json-schema-to-zod: 0.6.3 - dev: false - /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true diff --git a/services/workflows-service/src/business/business.controller.external.ts b/services/workflows-service/src/business/business.controller.external.ts index c1378cf275..2b28b85183 100644 --- a/services/workflows-service/src/business/business.controller.external.ts +++ b/services/workflows-service/src/business/business.controller.external.ts @@ -1,5 +1,6 @@ import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import * as common from '@nestjs/common'; +import { Param } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { plainToClass } from 'class-transformer'; import { Request } from 'express'; @@ -12,12 +13,17 @@ import { BusinessService } from './business.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import { BusinessCreateDto } from './dtos/business-create'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; +import { WorkflowDefinitionModel } from '@/workflow/workflow-definition.model'; +import { WorkflowDefinitionFindManyArgs } from '@/workflow/dtos/workflow-definition-find-many-args'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { makeFullWorkflow } from '@/workflow/utils/make-full-workflow'; @swagger.ApiTags('external/businesses') @common.Controller('external/businesses') export class BusinessControllerExternal { constructor( protected readonly service: BusinessService, + protected readonly workflowService: WorkflowService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -73,4 +79,21 @@ export class BusinessControllerExternal { throw err; } } + + // curl -v http://localhost:3000/api/v1/external/businesses/:businessId/workflows + @common.Get('/:businessId/workflows') + @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @common.HttpCode(200) + @ApiNestedQuery(WorkflowDefinitionFindManyArgs) + @UseKeyAuthInDevGuard() + async listWorkflowRuntimeDataByBusinessId(@Param('businessId') businessId: string) { + const workflowRuntimeDataWithDefinition = + await this.workflowService.listFullWorkflowDataByUserId({ + entityId: businessId, + entity: 'business', + }); + + return makeFullWorkflow(workflowRuntimeDataWithDefinition); + } } diff --git a/services/workflows-service/src/business/business.module.ts b/services/workflows-service/src/business/business.module.ts index 7ccec2d237..07c0dd8027 100644 --- a/services/workflows-service/src/business/business.module.ts +++ b/services/workflows-service/src/business/business.module.ts @@ -5,9 +5,30 @@ import { BusinessControllerInternal } from './business.controller.internal'; import { BusinessControllerExternal } from './business.controller.external'; import { FilterService } from '@/filter/filter.service'; import { FilterRepository } from '@/filter/filter.repository'; +import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; +import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { FileRepository } from '@/storage/storage.repository'; +import { FileService } from '@/providers/file/file.service'; +import { StorageService } from '@/storage/storage.service'; +import { WorkflowEventEmitterService } from '@/workflow/workflow-event-emitter.service'; +import { EndUserRepository } from '@/end-user/end-user.repository'; @Module({ controllers: [BusinessControllerInternal, BusinessControllerExternal], - providers: [BusinessRepository, BusinessService, FilterRepository, FilterService], + providers: [ + BusinessRepository, + BusinessService, + FilterRepository, + FilterService, + FileRepository, + FileService, + StorageService, + EndUserRepository, + WorkflowEventEmitterService, + WorkflowDefinitionRepository, + WorkflowRuntimeDataRepository, + WorkflowService, + ], }) export class BusinessModule {} diff --git a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts index 612a375e9d..1cef3fee54 100644 --- a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts +++ b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts @@ -7,9 +7,18 @@ import { faker } from '@faker-js/faker'; import { EndUserService } from '@/end-user/end-user.service'; import { PrismaModule } from 'nestjs-prisma'; import { EndUserRepository } from '@/end-user/end-user.repository'; -import { PrismaService } from '@/prisma/prisma.service'; import { FilterService } from '@/filter/filter.service'; import { FilterRepository } from '@/filter/filter.repository'; +import { FileRepository } from '@/storage/storage.repository'; +import { FileService } from '@/providers/file/file.service'; +import { StorageService } from '@/storage/storage.service'; +import { WorkflowEventEmitterService } from '@/workflow/workflow-event-emitter.service'; +import { BusinessRepository } from '@/business/business.repository'; +import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; +import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { PrismaService } from '@/prisma/prisma.service'; describe('#EndUserControllerExternal', () => { let app: INestApplication; @@ -18,7 +27,21 @@ describe('#EndUserControllerExternal', () => { afterEach(tearDownDatabase); beforeAll(async () => { - const servicesProviders = [EndUserRepository, PrismaService, FilterService, FilterRepository]; + const servicesProviders = [ + EndUserRepository, + FilterService, + FilterRepository, + FileRepository, + FileService, + StorageService, + WorkflowEventEmitterService, + BusinessRepository, + WorkflowDefinitionRepository, + WorkflowRuntimeDataRepository, + WorkflowService, + EventEmitter2, + PrismaService, + ]; endUserService = (await fetchServiceFromModule(EndUserService, servicesProviders, [ PrismaModule, ])) as unknown as EndUserService; diff --git a/services/workflows-service/src/end-user/end-user.controller.external.ts b/services/workflows-service/src/end-user/end-user.controller.external.ts index d42444d234..b73deaf756 100644 --- a/services/workflows-service/src/end-user/end-user.controller.external.ts +++ b/services/workflows-service/src/end-user/end-user.controller.external.ts @@ -1,6 +1,7 @@ import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { faker } from '@faker-js/faker'; import * as common from '@nestjs/common'; +import { Param } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { plainToClass } from 'class-transformer'; import { Request } from 'express'; @@ -13,12 +14,17 @@ import { EndUserModel } from './end-user.model'; import { EndUserService } from './end-user.service'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; +import { WorkflowDefinitionModel } from '@/workflow/workflow-definition.model'; +import { WorkflowDefinitionFindManyArgs } from '@/workflow/dtos/workflow-definition-find-many-args'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { makeFullWorkflow } from '@/workflow/utils/make-full-workflow'; @swagger.ApiTags('external/end-users') @common.Controller('external/end-users') export class EndUserControllerExternal { constructor( protected readonly service: EndUserService, + protected readonly workflowService: WorkflowService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -75,4 +81,21 @@ export class EndUserControllerExternal { throw err; } } + + // curl -v http://localhost:3000/api/v1/external/end-users/:endUserId/workflows + @common.Get('/:endUserId/workflows') + @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @common.HttpCode(200) + @ApiNestedQuery(WorkflowDefinitionFindManyArgs) + @UseKeyAuthInDevGuard() + async listWorkflowRuntimeDataByEndUserId(@Param('endUserId') endUserId: string) { + const workflowRuntimeDataWithDefinition = + await this.workflowService.listFullWorkflowDataByUserId({ + entityId: endUserId, + entity: 'endUser', + }); + + return makeFullWorkflow(workflowRuntimeDataWithDefinition); + } } diff --git a/services/workflows-service/src/end-user/end-user.module.ts b/services/workflows-service/src/end-user/end-user.module.ts index 84204c3e6c..8f3ce76245 100644 --- a/services/workflows-service/src/end-user/end-user.module.ts +++ b/services/workflows-service/src/end-user/end-user.module.ts @@ -5,9 +5,30 @@ import { EndUserRepository } from './end-user.repository'; import { EndUserService } from './end-user.service'; import { FilterService } from '@/filter/filter.service'; import { FilterRepository } from '@/filter/filter.repository'; +import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; +import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { BusinessRepository } from '@/business/business.repository'; +import { StorageService } from '@/storage/storage.service'; +import { FileService } from '@/providers/file/file.service'; +import { FileRepository } from '@/storage/storage.repository'; +import { WorkflowEventEmitterService } from '@/workflow/workflow-event-emitter.service'; @Module({ controllers: [EndUserControllerInternal, EndUserControllerExternal], - providers: [EndUserRepository, EndUserService, FilterService, FilterRepository], + providers: [ + EndUserRepository, + EndUserService, + FilterService, + FilterRepository, + FileRepository, + FileService, + StorageService, + WorkflowEventEmitterService, + BusinessRepository, + WorkflowDefinitionRepository, + WorkflowRuntimeDataRepository, + WorkflowService, + ], }) export class EndUserModule {} diff --git a/services/workflows-service/src/workflow/utils/make-full-workflow.ts b/services/workflows-service/src/workflow/utils/make-full-workflow.ts new file mode 100644 index 0000000000..4cf99124b9 --- /dev/null +++ b/services/workflows-service/src/workflow/utils/make-full-workflow.ts @@ -0,0 +1,9 @@ +import { WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; + +export const makeFullWorkflow = ( + data: Array<WorkflowRuntimeData & { workflowDefinition: WorkflowDefinition }>, +) => + data?.map(({ workflowDefinition, ...workflowRuntimeData }) => ({ + workflowRuntimeData, + workflowDefinition, + })); diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 080e010d7c..6b10dee559 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -5,7 +5,7 @@ import { UserInfo } from '@/user/user-info'; import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import * as common from '@nestjs/common'; -import { NotFoundException, Param, Res, UseFilters } from '@nestjs/common'; +import { NotFoundException, Res } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { WorkflowRuntimeData } from '@prisma/client'; import * as nestAccessControl from 'nest-access-control'; @@ -15,7 +15,7 @@ import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find- import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { WorkflowDefinitionWhereUniqueInput } from './dtos/workflow-where-unique-input'; -import { RunnableWorkflowData, TEntityType } from './types'; +import { RunnableWorkflowData } from './types'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { IntentResponse, WorkflowService } from './workflow.service'; import { EventEmitter2 } from '@nestjs/event-emitter'; @@ -23,7 +23,7 @@ import { Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; -import { camelCase } from 'lodash'; +import { makeFullWorkflow } from '@/workflow/utils/make-full-workflow'; @swagger.ApiBearerAuth() @swagger.ApiTags('external/workflows') @@ -37,27 +37,15 @@ export class WorkflowControllerExternal { ) {} // GET /workflows - @common.Get('/:entityType/:entityId') + @common.Get('/') @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) @common.HttpCode(200) @ApiNestedQuery(WorkflowDefinitionFindManyArgs) - @UseKeyAuthInDevGuard() - async listWorkflowRuntimeDataByUserId( - @Param('entityType') entityType: 'end-user' | 'business', - @Param('entityId') entityId: string, - ) { - const completeWorkflowData = await this.service.listFullWorkflowDataByUserId({ - entityId, - // Expecting kebab-case from the url - entity: camelCase(entityType) as TEntityType, - }); - const response = completeWorkflowData.map(({ workflowDefinition, ...rest }) => ({ - workflowRuntimeData: rest, - workflowDefinition, - })); + async listWorkflowRuntimeData() { + const workflowRuntimeDataWithDefinition = await this.service.listFullWorkflowData(); - return response; + return makeFullWorkflow(workflowRuntimeDataWithDefinition); } @common.Get('/:id') diff --git a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts index b91fe71d88..7cbebc95dc 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts @@ -36,7 +36,7 @@ describe('Workflow (external)', () => { beforeEach(async () => { wfService = { - listFullWorkflowDataByUserId: jest.fn() as unknown, + listFullWorkflowData: jest.fn() as unknown, getWorkflowRuntimeDataById: jest.fn() as unknown, getWorkflowDefinitionById: jest.fn() as unknown, } as WorkflowService; @@ -69,7 +69,7 @@ describe('Workflow (external)', () => { test('GET /workflows will return a two-key object containing "definition" and "runtime data" ', async () => { const wfService = moduleRef.get<WorkflowService>(WorkflowService); - (wfService.listFullWorkflowDataByUserId as jest.Mock).mockReturnValue( + (wfService.listFullWorkflowData as jest.Mock).mockReturnValue( Promise.resolve([ { workflowDefinition: { id: 'a' }, @@ -79,7 +79,7 @@ describe('Workflow (external)', () => { ); await request(app.getHttpServer()) - .get('/external/workflows/end-user/123') + .get('/external/workflows') .expect(HttpStatus.OK) .expect([ { diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 79d4e8a969..2b65bda949 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -325,6 +325,12 @@ export class WorkflowService { }); } + async listFullWorkflowData() { + return await this.workflowRuntimeDataRepository.findMany({ + include: { workflowDefinition: true }, + }); + } + async listWorkflowDefinitions(args: WorkflowDefinitionFindManyArgs) { const select = { id: true, From 90ace1cf2893bca39e8f56901694387145e6bca7 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 21 Jun 2023 15:54:35 +0300 Subject: [PATCH 053/123] fix(webhooks): fix resolved ata (#574) * fix(webhooks): fix resolved ata * fixed test * fixed test --- .../atoms/AssignButton/AssignButton.tsx | 2 +- .../components/organisms/Modal/Modal.tsx | 2 +- .../pages/Entities/components/Cases/Cases.tsx | 2 +- .../Entity/components/Case/Case.Actions.tsx | 2 +- services/workflows-service/scripts/seed.ts | 2 +- .../events/document-changed-webhook-caller.ts | 18 +++++++++--------- .../workflow/workflow-event-emitter.service.ts | 7 ++----- .../src/workflow/workflow.service.ts | 4 ++-- .../src/workflow/workflow.service.unit.test.ts | 4 ++++ 9 files changed, 22 insertions(+), 21 deletions(-) diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index fe73954468..ce7d8cae80 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -56,7 +56,7 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ <DropdownMenuContent className={`min-w-[16rem]`} align={'start'}> {isUnassignEnabled ? ( <DropdownMenuItem - className={`border-b-2 text-cyan-950`} + className={`text-cyan-950 border-b-2`} onClick={() => onAssigneeSelect(null)} > Unassign diff --git a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx index 073b5225d2..152336a065 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx @@ -41,7 +41,7 @@ export const Modal: FunctionComponent<IModalProps> = ({ <Dialog.Content className={ctw(`modal-box w-full max-w-7xl`, className)} {...props}> <div className={`flex justify-end`}> <Dialog.Close - className={`btn-ghost btn-square btn-sm btn mb-4 focus:outline-primary`} + className={`btn-ghost btn-sm btn-square btn mb-4 focus:outline-primary`} aria-label={`Close`} > <XMarkSvg /> diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 63c041bbb7..e6262a14a8 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -115,7 +115,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ > <div className={`input-group flex items-center`}> <button - className={`btn-ghost btn-square btn-sm btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} + className={`btn-ghost btn-sm btn-square btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} onClick={onSortDirToggle} ref={sortRef} > diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 129ce91af5..88c66e4c3c 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -112,7 +112,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ </h2> </div> {showResolutionButtons && ( - <div className={`flex items-center space-x-6 pe-[3.35rem]`}> + <div className={`pe-[3.35rem] flex items-center space-x-6`}> <Button className={ctw({ // loading: debouncedIsLoadingRejectEntity, diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index a9c7a6d78c..4cb4d508f7 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -387,7 +387,7 @@ async function seed(bcryptSalt: Salt) { config: { completedWhenTasksResolved: true, workflowLevelResolution: false, - allowMultipleWorkflows: true, + allowMultipleActiveWorkflows: true, }, contextSchema: { type: 'json-schema', diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index 22f6313dd1..b47c0eed21 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -38,8 +38,8 @@ export class DocumentChangedWebhookCaller { } async handleWorkflowEvent(data: WorkflowEventRawData) { - const oldDocuments = data.runtimeData.context['documents'] || []; - const newDocuments = data.context?.['documents'] || []; + const oldDocuments = data.oldRuntimeData.context['documents'] || []; + const newDocuments = data.updatedRuntimeData.context?.['documents'] || []; const newDocumentsByIdentifier = newDocuments.reduce((accumulator: any, doc: any) => { const id = getDocumentId(doc, false); @@ -66,11 +66,11 @@ export class DocumentChangedWebhookCaller { const id = randomUUID(); const environment = this.configService.get<string>('NODE_ENV'); const url = - getDynamicWebhookUrl(data.runtimeData?.config) || + getDynamicWebhookUrl(data.updatedRuntimeData?.config) || this.configService.get<string>('WEBHOOK_URL')!; const authSecret = this.configService.get<string>('WEBHOOK_SECRET'); - data.context.documents.forEach((doc: any) => { + data.updatedRuntimeData.context.documents.forEach((doc: any) => { delete doc.propertiesSchema; }); @@ -84,14 +84,14 @@ export class DocumentChangedWebhookCaller { eventName: 'workflow.context.document.changed', apiVersion: 1, timestamp: new Date().toISOString(), - workflowCreatedAt: data.runtimeData.createdAt, - workflowResolvedAt: data.runtimeData.resolvedAt, - workflowDefinitionId: data.runtimeData.workflowDefinitionId, - workflowRuntimeId: data.runtimeData.id, + workflowCreatedAt: data.updatedRuntimeData.createdAt, + workflowResolvedAt: data.updatedRuntimeData.resolvedAt, + workflowDefinitionId: data.updatedRuntimeData.workflowDefinitionId, + workflowRuntimeId: data.updatedRuntimeData.id, ballerineEntityId: data.entityId, correlationId: data.correlationId, environment, - data: data.context, + data: data.updatedRuntimeData.context, }, { headers: { diff --git a/services/workflows-service/src/workflow/workflow-event-emitter.service.ts b/services/workflows-service/src/workflow/workflow-event-emitter.service.ts index 25b3a832b5..4ae251cfff 100644 --- a/services/workflows-service/src/workflow/workflow-event-emitter.service.ts +++ b/services/workflows-service/src/workflow/workflow-event-emitter.service.ts @@ -3,12 +3,9 @@ import { Injectable } from '@nestjs/common'; import { WorkflowRuntimeData } from '@prisma/client'; export interface WorkflowEventRawData { - runtimeData: WorkflowRuntimeData; + oldRuntimeData: WorkflowRuntimeData; + updatedRuntimeData: WorkflowRuntimeData; state: string; - context: { - documents: any[]; - entity: any; - }; entityId: string; correlationId: string; } diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 2b65bda949..57a8bbdd1f 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -490,9 +490,9 @@ export class WorkflowService { if (contextHasChanged) { this.workflowEventEmitter.emit('workflow.context.changed', { - runtimeData, + oldRuntimeData: runtimeData, + updatedRuntimeData: updatedResult, state: currentState as string, - context: mergedContext, entityId: (runtimeData.businessId || runtimeData.endUserId) as string, correlationId: correlationId, }); diff --git a/services/workflows-service/src/workflow/workflow.service.unit.test.ts b/services/workflows-service/src/workflow/workflow.service.unit.test.ts index 84c75a33b1..c817aaa574 100644 --- a/services/workflows-service/src/workflow/workflow.service.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.service.unit.test.ts @@ -218,6 +218,8 @@ describe('WorkflowService', () => { id: expect.stringMatching(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/), eventName: 'workflow.context.document.changed', workflowDefinitionId: '2', + workflowCreatedAt: undefined, + workflowResolvedAt: null, ballerineEntityId: undefined, correlationId: '', apiVersion: 1, @@ -263,6 +265,8 @@ describe('WorkflowService', () => { id: expect.stringMatching(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/), eventName: 'workflow.context.document.changed', ballerineEntityId: undefined, + workflowResolvedAt: null, + workflowCreatedAt: undefined, correlationId: '', apiVersion: 1, timestamp: expect.stringMatching(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/), From 520a44d5a9871b250b44ac172ac5f9592b200f6f Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Wed, 21 Jun 2023 21:45:27 +0300 Subject: [PATCH 054/123] refactor(backoffice-v2): merged re-submit and reject into a single dialog (#578) --- .../components/CallToAction/CallToAction.tsx | 226 +++++------------- .../useCallToActionLogic.tsx | 126 ++++++++++ 2 files changed, 186 insertions(+), 166 deletions(-) create mode 100644 apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx index c1f98ab22e..e2f0641fe9 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx @@ -1,195 +1,89 @@ -import React, { FunctionComponent, useCallback, useState } from 'react'; +import React, { FunctionComponent } from 'react'; import { Dialog } from '../../../../common/components/organisms/Dialog/Dialog'; -import { DropdownMenu } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu'; -import { DropdownMenuTrigger } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu.Trigger'; import { Button } from '../../../../common/components/atoms/Button/Button'; import { ctw } from '../../../../common/utils/ctw/ctw'; -import { DropdownMenuContent } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu.Content'; -import { DropdownMenuLabel } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu.Label'; -import { DropdownMenuSeparator } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu.Separator'; -import { DialogTrigger } from '../../../../common/components/organisms/Dialog/Dialog.Trigger'; -import { DropdownMenuItem } from '../../../../common/components/molecules/DropdownMenu/DropdownMenu.Item'; -import { AlertTriangle, RotateCcw } from 'lucide-react'; import { DialogContent } from '../../../../common/components/organisms/Dialog/Dialog.Content'; -import { DialogHeader } from '../../../../common/components/organisms/Dialog/Dialog.Header'; -import { DialogTitle } from '../../../../common/components/organisms/Dialog/Dialog.Title'; -import { DialogDescription } from '../../../../common/components/organisms/Dialog/Dialog.Description'; import { Select } from '../../../../common/components/atoms/Select/Select'; import { DialogFooter } from '../../../../common/components/organisms/Dialog/Dialog.Footer'; import { DialogClose } from '@radix-ui/react-dialog'; -import { useParams } from 'react-router-dom'; import { ICallToActionProps } from './interfaces'; -import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; -import { useCaseState } from '../Case/hooks/useCaseState/useCaseState'; -import { useUpdateWorkflowByIdMutation } from '../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; -import toast from 'react-hot-toast'; import { SelectItem } from '../../../../common/components/atoms/Select/Select.Item'; import { SelectContent } from '../../../../common/components/atoms/Select/Select.Content'; import { SelectTrigger } from '../../../../common/components/atoms/Select/Select.Trigger'; import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; -import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; -import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; import { Input } from '../../../../common/components/atoms/Input/Input'; +import { DialogTrigger } from '../../../../common/components/organisms/Dialog/Dialog.Trigger'; +import { useCallToActionLogic } from './hooks/useCallToActionLogic/useCallToActionLogic'; export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, data }) => { - const { entityId } = useParams(); - const [revisionReason, setRevisionReason] = useState(''); - const filterId = useFilterId(); - const { data: workflow } = useWorkflowQuery({ workflowId: entityId, filterId }); - const onRevisionReasonChange = useCallback( - (value: string) => setRevisionReason(value), - [setRevisionReason], - ); - const { data: session } = useAuthenticatedUserQuery(); - const caseState = useCaseState(session?.user, workflow); - const revisionReasons = - workflow.workflowDefinition.contextSchema?.schema?.properties?.documents?.items?.properties?.decision?.properties?.revisionReason?.anyOf?.find( - ({ enum: enum_ }) => !!enum_, - )?.enum; - const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = - useUpdateWorkflowByIdMutation({ - workflowId: workflow.id, - }); - const onMutateUpdateWorkflowById = - ( - payload: - | { - id: string; - approvalStatus: 'rejected' | 'approved'; - } - | { - id: string; - approvalStatus: 'revision'; - revisionReason: string; - }, - ) => - () => { - if (!payload?.id) { - toast.error('Invalid task id'); - - return; - } - - const action = ( - { - approved: 'approve_document', - rejected: 'reject_document', - revision: 'ask_resubmit_document', - } as const - )[payload.approvalStatus]; - - const context = { - documents: workflow.context.documents?.map(document => { - if (document?.id !== payload?.id) return document; - - switch (payload?.approvalStatus) { - case 'approved': - return { - ...document, - decision: { - revisionReason: null, - rejectionReason: null, - status: payload?.approvalStatus, - }, - }; - case 'rejected': - return { - ...document, - decision: { - revisionReason: null, - // Change when rejection reason is implemented. - rejectionReason: document?.decision?.rejectionReason ?? '', - status: payload?.approvalStatus, - }, - }; - case 'revision': - return { - ...document, - decision: { - revisionReason: payload?.revisionReason, - rejectionReason: null, - status: payload?.approvalStatus, - }, - }; - default: - return document; - } - }), - }; - return mutateUpdateWorkflowById({ - context, - action, - }); - }; + const { + onMutateUpdateWorkflowById, + isLoadingUpdateWorkflowById, + caseState, + action, + actions, + onActionChange, + reasons, + reason, + onReasonChange, + } = useCallToActionLogic(); return value === 'Reject' ? ( <Dialog> - <DropdownMenu> - <DropdownMenuTrigger asChild> - <Button - variant={`destructive`} - className={ctw({ - // loading: debouncedIsLoadingRejectEntity, - })} - // disabled={isLoading || !canReject} - disabled={!caseState.actionButtonsEnabled || data?.disabled} - > - {value} - </Button> - </DropdownMenuTrigger> - <DropdownMenuContent className={`min-w-[16rem]`} align={`end`}> - <DropdownMenuLabel>{value}</DropdownMenuLabel> - <DropdownMenuSeparator /> - <DialogTrigger asChild> - <DropdownMenuItem className={`cursor-pointer gap-x-2`}> - <RotateCcw size={18} /> - Ask to re-submit - </DropdownMenuItem> - </DialogTrigger> - <DropdownMenuItem - className={`cursor-pointer gap-x-2 text-red-500`} - onClick={onMutateUpdateWorkflowById({ - id: data?.id, - approvalStatus: 'rejected', - })} - > - <AlertTriangle className={`text-red-500`} size={18} /> - Block - </DropdownMenuItem> - </DropdownMenuContent> - </DropdownMenu> + <DialogTrigger asChild> + <Button + variant={`destructive`} + className={ctw({ + // loading: debouncedIsLoadingRejectEntity, + })} + // disabled={isLoading || !canReject} + disabled={!caseState.actionButtonsEnabled || data?.disabled} + > + {value} + </Button> + </DialogTrigger> <DialogContent> - <DialogHeader> - <DialogTitle>Request document re-submission</DialogTitle> - <DialogDescription> - This action will send a request to the user to re-submit their document. State the - reason for requesting a document re-submission. - </DialogDescription> - </DialogHeader> - {!revisionReasons?.length ? ( - <Input - placeholder={`Re-submission reason`} - onChange={event => onRevisionReasonChange(event.target.value)} - /> - ) : ( - <Select onValueChange={onRevisionReasonChange}> + <div> + <h4 className={`mb-1 font-bold`}>Action</h4> + <Select onValueChange={onActionChange} value={action}> <SelectTrigger className="w-full"> - <SelectValue placeholder="Re-submission reason" /> + <SelectValue /> </SelectTrigger> <SelectContent> - {revisionReasons?.map(reason => { - const reasonWithSpace = reason.replace(/_/g, ' ').toLowerCase(); - const capitalizedReason = - reasonWithSpace.charAt(0).toUpperCase() + reasonWithSpace.slice(1); - + {actions?.map(({ label, value }) => { return ( - <SelectItem key={reason} value={reason}> - {capitalizedReason} + <SelectItem key={action} value={value}> + {label} </SelectItem> ); })} </SelectContent> </Select> + </div> + {!reasons?.length ? ( + <Input placeholder={`Reason`} onChange={event => onReasonChange(event.target.value)} /> + ) : ( + <div> + <h4 className={`mb-1 font-bold`}>Reason</h4> + <Select onValueChange={onReasonChange} value={reason}> + <SelectTrigger className="w-full"> + <SelectValue /> + </SelectTrigger> + <SelectContent> + {reasons?.map(reason => { + const reasonWithSpace = reason.replace(/_/g, ' ').toLowerCase(); + const capitalizedReason = + reasonWithSpace.charAt(0).toUpperCase() + reasonWithSpace.slice(1); + + return ( + <SelectItem key={`${action}${reason}`} value={reason} className={`capitalize`}> + {capitalizedReason} + </SelectItem> + ); + })} + </SelectContent> + </Select> + </div> )} <DialogFooter> <DialogClose asChild> @@ -204,8 +98,8 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat // disabled={!resubmissionReason} onClick={onMutateUpdateWorkflowById({ id: data?.id, - approvalStatus: 'revision', - revisionReason, + approvalStatus: action, + reason, })} > Confirm diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx new file mode 100644 index 0000000000..3e0b02f066 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx @@ -0,0 +1,126 @@ +import { useParams } from 'react-router-dom'; +import { useFilterId } from '../../../../../../common/hooks/useFilterId/useFilterId'; +import { useWorkflowQuery } from '../../../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; +import { useAuthenticatedUserQuery } from '../../../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; +import { useCaseState } from '../../../Case/hooks/useCaseState/useCaseState'; +import { useUpdateWorkflowByIdMutation } from '../../../../../../domains/workflows/hooks/mutations/useUpdateWorkflowByIdMutation/useUpdateWorkflowByIdMutation'; +import toast from 'react-hot-toast'; +import { useCallback, useState } from 'react'; + +export const useCallToActionLogic = () => { + const { entityId } = useParams(); + const filterId = useFilterId(); + const { data: workflow } = useWorkflowQuery({ workflowId: entityId, filterId }); + const { data: session } = useAuthenticatedUserQuery(); + const caseState = useCaseState(session?.user, workflow); + const { mutate: mutateUpdateWorkflowById, isLoading: isLoadingUpdateWorkflowById } = + useUpdateWorkflowByIdMutation({ + workflowId: workflow.id, + }); + const onMutateUpdateWorkflowById = + ( + payload: + | { + id: string; + approvalStatus: 'approved'; + } + | { + id: string; + approvalStatus: 'revision' | 'rejected'; + reason: string; + }, + ) => + () => { + if (!payload?.id) { + toast.error('Invalid task id'); + + return; + } + + const action = ( + { + approved: 'approve_document', + rejected: 'reject_document', + revision: 'ask_resubmit_document', + } as const + )[payload.approvalStatus]; + + const context = { + documents: workflow.context.documents?.map(document => { + if (document?.id !== payload?.id) return document; + + switch (payload?.approvalStatus) { + case 'approved': + return { + ...document, + decision: { + revisionReason: null, + rejectionReason: null, + status: payload?.approvalStatus, + }, + }; + case 'rejected': + return { + ...document, + decision: { + revisionReason: null, + // Change when rejection reason is implemented. + rejectionReason: payload?.reason, + status: payload?.approvalStatus, + }, + }; + case 'revision': + return { + ...document, + decision: { + revisionReason: payload?.reason, + rejectionReason: null, + status: payload?.approvalStatus, + }, + }; + default: + return document; + } + }), + }; + return mutateUpdateWorkflowById({ + context, + action, + }); + }; + const revisionReasons = + workflow.workflowDefinition.contextSchema?.schema?.properties?.documents?.items?.properties?.decision?.properties?.revisionReason?.anyOf?.find( + ({ enum: enum_ }) => !!enum_, + )?.enum; + const rejectionReasons = + workflow.workflowDefinition.contextSchema?.schema?.properties?.documents?.items?.properties?.decision?.properties?.rejectionReason?.anyOf?.find( + ({ enum: enum_ }) => !!enum_, + )?.enum; + const actions = [ + { + label: 'Revision', + value: 'revision', + }, + { + label: 'Reject', + value: 'rejected', + }, + ] as const; + const [action, setAction] = useState<(typeof actions)[number]['value']>(actions[0].value); + const reasons = action === 'revision' ? revisionReasons : rejectionReasons; + const [reason, setReason] = useState(reasons?.[0] ?? ''); + const onReasonChange = useCallback((value: string) => setReason(value), [setReason]); + const onActionChange = useCallback((value: typeof action) => setAction(value), [setAction]); + + return { + onMutateUpdateWorkflowById, + isLoadingUpdateWorkflowById, + caseState, + action, + actions, + reasons, + reason, + onReasonChange, + onActionChange, + }; +}; From b13e054e9c10cfdf6c17d5c8ff95f58c06eb0eff Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Wed, 21 Jun 2023 21:45:55 +0300 Subject: [PATCH 055/123] feat(backoffice-v2): added rotate button to selected image (#576) --- .../Entity/components/Case/Case.Documents.tsx | 47 ++++++++++++++----- .../Case/hooks/useDocuments/useDocuments.tsx | 6 +++ 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx index 5988cf2e33..46859046ee 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx @@ -6,6 +6,7 @@ import { CheckSvg, XMarkSvg } from '../../../../common/components/atoms/icons'; import { useDocuments } from './hooks/useDocuments/useDocuments'; import { ctw } from '../../../../common/utils/ctw/ctw'; import ReactCrop from 'react-image-crop'; +import { FileText } from 'lucide-react'; /** * @description To be used by {@link Case}, and be wrapped by {@link Case.Content}. Displays a single entity's documents using {@link ImageViewer}. Displays documents[0].imageUrl if no document was selected yet. @@ -30,6 +31,8 @@ export const Documents: FunctionComponent<IDocumentsProps> = ({ documents, isLoa isLoadingOCR, selectedImage, onSelectImage, + documentRotation, + onRotateDocument, } = useDocuments(documents); return ( @@ -39,24 +42,42 @@ export const Documents: FunctionComponent<IDocumentsProps> = ({ documents, isLoa className={` d-full relative max-w-[441px] items-center rounded-md`} > - <ReactCrop - crop={crop} - onChange={onCrop} - disabled={!isCropping || selectedImage?.fileType === 'pdf'} - className={ctw({ - 'd-full [&>div]:d-full': selectedImage?.fileType === 'pdf', + <div + className={ctw('max-w-[441px] overflow-x-auto', { + 'd-full': selectedImage?.fileType === 'pdf', })} > - <ImageViewer.SelectedImage - key={initialImage?.imageUrl} - initialImage={initialImage} - ref={selectedImageRef} - isLoading={isLoading} - /> - </ReactCrop> + <ReactCrop + crop={crop} + onChange={onCrop} + disabled={!isCropping || selectedImage?.fileType === 'pdf'} + className={ctw({ + 'd-full [&>div]:d-full': selectedImage?.fileType === 'pdf', + 'rotate-90': documentRotation === 90, + 'rotate-180': documentRotation === 180, + 'rotate-270': documentRotation === 270, + })} + > + <ImageViewer.SelectedImage + key={initialImage?.imageUrl} + initialImage={initialImage} + ref={selectedImageRef} + isLoading={isLoading} + /> + </ReactCrop> + </div> <div className={`absolute z-50 flex space-x-2 bottom-right-6`}> {selectedImage?.fileType !== 'pdf' && ( <> + <button + type={`button`} + className={ctw( + `btn-ghost btn-sm btn-circle btn bg-base-300/70 text-[0.688rem] focus:outline-primary`, + )} + onClick={onRotateDocument} + > + <FileText className={`rotate-90 p-0.5`} /> + </button> <button className={ctw( 'btn-ghost btn-sm btn-circle btn bg-base-300/70 focus:outline-primary', diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx index 5ca1a500f3..e9d50c46dc 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx @@ -70,6 +70,10 @@ export const useDocuments = (documents: IDocumentsProps['documents']) => { }, [], ); + const [documentRotation, setDocumentRotation] = useState(0); + const onRotateDocument = useCallback(() => { + setDocumentRotation(prevState => (prevState >= 360 ? 0 : prevState + 90)); + }, []); return { crop, @@ -83,5 +87,7 @@ export const useDocuments = (documents: IDocumentsProps['documents']) => { isLoadingOCR, selectedImage, onSelectImage, + documentRotation, + onRotateDocument, }; }; From 2e940091214ccebf99c6388ab703bc39a2631761 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 22 Jun 2023 10:54:02 +0300 Subject: [PATCH 056/123] feat(backoffice-v2): added a content block to display plugin output (#581) --- .../src/domains/workflows/fetchers.ts | 2 + .../EditableDetails/EditableDetails.tsx | 4 +- .../Entity/components/Heading/Heading.tsx | 11 +++- .../Entity/components/Heading/interfaces.ts | 1 + .../NestedComponent/NestedComponent.tsx | 53 +++++++++++++++++++ .../components/NestedComponent/interfaces.ts | 10 ++++ .../NestedDetails/NestedDetails.tsx | 13 +++++ .../components/NestedDetails/interfaces.ts | 9 ++++ .../Entity/hooks/useEntity/components.tsx | 2 + .../Entity/hooks/useEntity/useEntity.tsx | 33 ++++++++++-- 10 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 apps/backoffice-v2/src/pages/Entity/components/NestedComponent/NestedComponent.tsx create mode 100644 apps/backoffice-v2/src/pages/Entity/components/NestedComponent/interfaces.ts create mode 100644 apps/backoffice-v2/src/pages/Entity/components/NestedDetails/NestedDetails.tsx create mode 100644 apps/backoffice-v2/src/pages/Entity/components/NestedDetails/interfaces.ts diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index b846baedf5..c41c2ae333 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -5,6 +5,7 @@ import { ObjectWithIdSchema } from '../../lib/zod/utils/object-with-id/object-wi import { Method, States } from '../../common/enums'; import { IWorkflowId } from './interfaces'; import qs from 'qs'; +import { zPropertyKey } from '../../lib/zod/utils/z-property-key/z-property-key'; export const fetchWorkflows = async (params: { filterId: string; @@ -63,6 +64,7 @@ export const WorkflowByIdSchema = z.object({ parentMachine: ObjectWithIdSchema.extend({ status: z.union([z.literal('active'), z.literal('failed'), z.literal('completed')]), }).optional(), + pluginOutput: z.record(zPropertyKey, z.any()).optional(), }), entity: ObjectWithIdSchema.extend({ name: z.string(), diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 84016203c7..c0d40af6f5 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -114,7 +114,9 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className={`flex h-full flex-col`}> - <legend className={`sr-only`}>{title}</legend> + <legend className={ctw({ 'sr-only': id !== 'visible-title' }, 'mb-2 font-bold')}> + {title} + </legend> <div className={ctw(`grid grid-cols-2 gap-4`, { 'grid-cols-3': id === 'entity-details', diff --git a/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx b/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx index 9c5fd41bf3..3d2cd6c40b 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx @@ -1,6 +1,13 @@ import React, { FunctionComponent } from 'react'; import { IHeadingProps } from './interfaces'; +import { ctw } from '../../../../common/utils/ctw/ctw'; -export const Heading: FunctionComponent<IHeadingProps> = ({ value }) => ( - <h2 className={`ml-2 mt-6 p-2 text-2xl font-bold`}>{value}</h2> +export const Heading: FunctionComponent<IHeadingProps> = ({ id, value }) => ( + <h2 + className={ctw(`ml-2 mt-6 p-2 text-2xl font-bold`, { + 'text-lg text-slate-400': id === 'nested-details-heading', + })} + > + {value} + </h2> ); diff --git a/apps/backoffice-v2/src/pages/Entity/components/Heading/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/Heading/interfaces.ts index bf42255efd..37341b10fb 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Heading/interfaces.ts +++ b/apps/backoffice-v2/src/pages/Entity/components/Heading/interfaces.ts @@ -1,3 +1,4 @@ export interface IHeadingProps { + id?: string; value: string; } diff --git a/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/NestedComponent.tsx b/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/NestedComponent.tsx new file mode 100644 index 0000000000..6190844548 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/NestedComponent.tsx @@ -0,0 +1,53 @@ +import { FunctionComponentWithChildren } from '../../../../common/types'; +import { ctw } from '../../../../common/utils/ctw/ctw'; +import { convertSnakeCaseToTitleCase } from '../../hooks/useEntity/utils'; +import { isObject } from '@ballerine/common'; +import { FunctionComponent } from 'react'; +import { INestedComponentProps } from './interfaces'; + +export const NestedComponent: FunctionComponent<INestedComponentProps> = ({ + id, + value, + isNested = false, +}) => { + if (!value?.data?.length) return; + + const Container: FunctionComponentWithChildren = ({ children }) => { + if (!isNested) return <>{children}</>; + + return <div className={`mb-4 grid grid-cols-2 gap-4`}>{children}</div>; + }; + + return ( + <Container> + {value?.data?.map(({ title, value }) => { + return ( + <div key={title}> + <h4 + className={ctw(`mb-1 text-lg font-bold`, { + 'text-2xl': !isNested, + 'text-slate-400': isNested, + })} + > + {convertSnakeCaseToTitleCase(title)} + </h4> + {isObject(value) && ( + <NestedComponent + isNested + id={id} + value={{ + data: Object.entries(value)?.map(([title, value]) => ({ + title, + value, + })), + }} + /> + )} + {Array.isArray(value) && <p>{value.join(', ')}</p>} + {!isObject(value) && !Array.isArray(value) && <p>{value}</p>} + </div> + ); + })} + </Container> + ); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/interfaces.ts new file mode 100644 index 0000000000..661108273f --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/NestedComponent/interfaces.ts @@ -0,0 +1,10 @@ +export interface INestedComponentProps { + id?: string; + value: { + data: Array<{ + title: string; + value: unknown; + }>; + }; + isNested?: boolean; +} diff --git a/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/NestedDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/NestedDetails.tsx new file mode 100644 index 0000000000..e9bd22b379 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/NestedDetails.tsx @@ -0,0 +1,13 @@ +import { NestedComponent } from '../NestedComponent/NestedComponent'; +import { FunctionComponent } from 'react'; +import { INestedDetailsProps } from './interfaces'; + +export const NestedDetails: FunctionComponent<INestedDetailsProps> = ({ id, value }) => { + if (!value?.data?.length) return; + + return ( + <div className={`ml-3`}> + <NestedComponent id={id} value={value} /> + </div> + ); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/interfaces.ts new file mode 100644 index 0000000000..53f310e114 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/NestedDetails/interfaces.ts @@ -0,0 +1,9 @@ +export interface INestedDetailsProps { + id?: string; + value: { + data: Array<{ + title: string; + value: unknown; + }>; + }; +} diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx index 903fc456b8..e29722222c 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx @@ -5,6 +5,7 @@ import { CallToAction } from '../../components/CallToAction/CallToAction'; import { FaceComparison } from '../../components/FaceComparison/FaceComparison'; import { Details } from '../../components/Details/Details'; import { MultiDocuments } from '../../components/MultiDocuments/MultiDocuments'; +import { NestedDetails } from '../../components/NestedDetails/NestedDetails'; export const components = { heading: Heading, @@ -13,5 +14,6 @@ export const components = { callToAction: CallToAction, faceComparison: FaceComparison, details: Details, + nestedDetails: NestedDetails, multiDocuments: MultiDocuments, }; diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index fdaf986e53..eaf1139494 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -9,12 +9,13 @@ import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/us import { composePickableCategoryType, convertSnakeCaseToTitleCase, - isExistingSchemaForDocument, extractCountryCodeFromWorkflow, - omitPropsFromObject, getIsEditable, + isExistingSchemaForDocument, + omitPropsFromObject, } from './utils'; import { getDocumentsByCountry } from '@ballerine/common'; + export const useEntity = () => { const { entityId } = useParams(); const filterId = useFilterId(); @@ -42,10 +43,34 @@ export const useEntity = () => { base64?.replace(/application\/octet-stream/gi, fileType); const { data: session } = useAuthenticatedUserQuery(); const caseState = useCaseState(session?.user, workflow); - const contextEntity = workflow.context.entity; - const contextDocuments = workflow.context.documents; + const { + documents: contextDocuments, + entity: contextEntity, + pluginOutput, + } = workflow?.context ?? {}; + const pluginOutputKeys = Object.keys(pluginOutput ?? {}); const tasks = contextEntity ? [ + ...(Object.keys(pluginOutput ?? {}).length === 0 + ? [] + : pluginOutputKeys + ?.filter(key => !!Object.keys(pluginOutput[key] ?? {})?.length) + ?.map(key => [ + { + id: 'nested-details-heading', + type: 'heading', + value: convertSnakeCaseToTitleCase(key), + }, + { + type: 'nestedDetails', + value: { + data: Object.entries(pluginOutput[key] ?? {})?.map(([title, value]) => ({ + title, + value, + })), + }, + }, + ])), ...(contextDocuments?.map( ( { id, type: docType, category, issuer, properties, propertiesSchema, decision }, From f6df3fd0327364afa3f0f3117a8cce5133628796 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:34:55 +0300 Subject: [PATCH 057/123] Updated pluginOutput to pluginsOutput (#582) * feat(backoffice-v2): added a content block to display plugin output * refactor(useentity): replaced instances of pluginOutput with pluginsOutput --- apps/backoffice-v2/src/domains/workflows/fetchers.ts | 2 +- .../src/pages/Entity/hooks/useEntity/useEntity.tsx | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index c41c2ae333..daa858e7e1 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -64,7 +64,7 @@ export const WorkflowByIdSchema = z.object({ parentMachine: ObjectWithIdSchema.extend({ status: z.union([z.literal('active'), z.literal('failed'), z.literal('completed')]), }).optional(), - pluginOutput: z.record(zPropertyKey, z.any()).optional(), + pluginsOutput: z.record(zPropertyKey, z.any()).optional(), }), entity: ObjectWithIdSchema.extend({ name: z.string(), diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index eaf1139494..45bd7fc1bf 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -46,15 +46,15 @@ export const useEntity = () => { const { documents: contextDocuments, entity: contextEntity, - pluginOutput, + pluginsOutput, } = workflow?.context ?? {}; - const pluginOutputKeys = Object.keys(pluginOutput ?? {}); + const pluginsOutputKeys = Object.keys(pluginsOutput ?? {}); const tasks = contextEntity ? [ - ...(Object.keys(pluginOutput ?? {}).length === 0 + ...(Object.keys(pluginsOutput ?? {}).length === 0 ? [] - : pluginOutputKeys - ?.filter(key => !!Object.keys(pluginOutput[key] ?? {})?.length) + : pluginsOutputKeys + ?.filter(key => !!Object.keys(pluginsOutput[key] ?? {})?.length) ?.map(key => [ { id: 'nested-details-heading', @@ -64,7 +64,7 @@ export const useEntity = () => { { type: 'nestedDetails', value: { - data: Object.entries(pluginOutput[key] ?? {})?.map(([title, value]) => ({ + data: Object.entries(pluginsOutput[key] ?? {})?.map(([title, value]) => ({ title, value, })), From 2f5be2061ea564a539defb6278c84de74ee47bbe Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:35:14 +0300 Subject: [PATCH 058/123] Backoffice - Zoom document images (#575) * feat(backoffice-v2): added the ability to zoom, pan, pinch on the selected image * feat(backoffice-v2): now disabling ocr when doc is rotated or transformed --- apps/backoffice-v2/package.json | 1 + .../Entity/components/Case/Case.Documents.tsx | 96 ++++++++++++------- .../Case/hooks/useDocuments/useDocuments.tsx | 16 +++- pnpm-lock.yaml | 93 +++++++++++------- 4 files changed, 137 insertions(+), 69 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 04ebbbbcfb..1e5a2bf133 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -84,6 +84,7 @@ "react-i18next": "^12.1.4", "react-image-crop": "^10.0.9", "react-router-dom": "^6.11.2", + "react-zoom-pan-pinch": "^3.0.8", "tailwind-merge": "^1.10.0", "tailwindcss-animate": "^1.0.5", "tesseract.js": "^4.0.1", diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx index 46859046ee..eb088008be 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Documents.tsx @@ -6,6 +6,7 @@ import { CheckSvg, XMarkSvg } from '../../../../common/components/atoms/icons'; import { useDocuments } from './hooks/useDocuments/useDocuments'; import { ctw } from '../../../../common/utils/ctw/ctw'; import ReactCrop from 'react-image-crop'; +import { TransformComponent, TransformWrapper } from 'react-zoom-pan-pinch'; import { FileText } from 'lucide-react'; /** @@ -33,39 +34,56 @@ export const Documents: FunctionComponent<IDocumentsProps> = ({ documents, isLoa onSelectImage, documentRotation, onRotateDocument, + onTransformed, + isRotatedOrTransformed, } = useDocuments(documents); return ( <ImageViewer selectedImage={selectedImage} onSelectImage={onSelectImage}> <div className={`flex min-h-[600px] w-full flex-col items-center`}> <div - className={` - d-full relative max-w-[441px] items-center rounded-md`} + className={ctw( + ` + d-full relative flex justify-center rounded-md`, + )} > - <div - className={ctw('max-w-[441px] overflow-x-auto', { - 'd-full': selectedImage?.fileType === 'pdf', - })} - > - <ReactCrop - crop={crop} - onChange={onCrop} - disabled={!isCropping || selectedImage?.fileType === 'pdf'} - className={ctw({ - 'd-full [&>div]:d-full': selectedImage?.fileType === 'pdf', - 'rotate-90': documentRotation === 90, - 'rotate-180': documentRotation === 180, - 'rotate-270': documentRotation === 270, + <TransformWrapper onTransformed={onTransformed}> + <TransformComponent + wrapperClass={`max-w-[441px]`} + contentClass={ctw(`overflow-x-auto`, { + 'hover:cursor-move': selectedImage?.fileType !== 'pdf', })} + wrapperStyle={{ + width: '100%', + height: '100%', + }} + contentStyle={{ + width: '100%', + height: '100%', + }} > - <ImageViewer.SelectedImage - key={initialImage?.imageUrl} - initialImage={initialImage} - ref={selectedImageRef} - isLoading={isLoading} - /> - </ReactCrop> - </div> + <ReactCrop + crop={crop} + onChange={onCrop} + disabled={ + !isCropping || selectedImage?.fileType === 'pdf' || isRotatedOrTransformed + } + className={ctw({ + 'd-full [&>div]:d-full': selectedImage?.fileType === 'pdf', + 'rotate-90': documentRotation === 90, + 'rotate-180': documentRotation === 180, + 'rotate-[270deg]': documentRotation === 270, + })} + > + <ImageViewer.SelectedImage + key={initialImage?.imageUrl} + initialImage={initialImage} + ref={selectedImageRef} + isLoading={isLoading} + /> + </ReactCrop> + </TransformComponent> + </TransformWrapper> <div className={`absolute z-50 flex space-x-2 bottom-right-6`}> {selectedImage?.fileType !== 'pdf' && ( <> @@ -89,18 +107,26 @@ export const Documents: FunctionComponent<IDocumentsProps> = ({ documents, isLoa > <XMarkSvg className={`p-0.5`} /> </button> - <button - type={`button`} - className={ctw( - `btn-ghost btn-sm btn-circle btn bg-base-300/70 text-[0.688rem] focus:outline-primary`, - { loading: isLoadingOCR }, - )} - onClick={onOcr} - disabled={isLoading} + <div + title={ + isRotatedOrTransformed + ? `Cannot OCR rotated, zoomed, panned, or pinched documents` + : undefined + } > - {isCropping && !isLoadingOCR && <CheckSvg className={`p-0.5`} />} - {!isCropping && !isLoadingOCR && <span className={`p-0.5`}>OCR</span>} - </button> + <button + type={`button`} + className={ctw( + `btn-ghost btn-sm btn-circle btn bg-base-300/70 text-[0.688rem] focus:outline-primary`, + { loading: isLoadingOCR }, + )} + onClick={onOcr} + disabled={isLoading || isRotatedOrTransformed} + > + {isCropping && !isLoadingOCR && <CheckSvg className={`p-0.5`} />} + {!isCropping && !isLoadingOCR && <span className={`p-0.5`}>OCR</span>} + </button> + </div> </> )} <ImageViewer.ZoomButton disabled={isLoading} /> diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx index e9d50c46dc..5e4918ad1b 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useDocuments/useDocuments.tsx @@ -6,6 +6,7 @@ import { createArrayOfNumbers } from '../../../../../../common/utils/create-arra import toast from 'react-hot-toast'; import { t } from 'i18next'; import { useToggle } from '../../../../../../common/hooks/useToggle/useToggle'; +import { ReactZoomPanPinchContentRef } from 'react-zoom-pan-pinch'; export const useDocuments = (documents: IDocumentsProps['documents']) => { const initialImage = documents?.[0]; @@ -72,8 +73,19 @@ export const useDocuments = (documents: IDocumentsProps['documents']) => { ); const [documentRotation, setDocumentRotation] = useState(0); const onRotateDocument = useCallback(() => { - setDocumentRotation(prevState => (prevState >= 360 ? 0 : prevState + 90)); + setDocumentRotation(prevState => (prevState >= 270 ? 0 : prevState + 90)); }, []); + const [isTransformed, setIsTransformed] = useState(false); + const isRotatedOrTransformed = documentRotation !== 0 || isTransformed; + const onTransformed = useCallback( + ( + ref: ReactZoomPanPinchContentRef, + state: ReactZoomPanPinchContentRef['instance']['transformState'], + ) => { + setIsTransformed(state?.scale !== 1 || state?.positionX !== 0 || state?.positionY !== 0); + }, + [], + ); return { crop, @@ -89,5 +101,7 @@ export const useDocuments = (documents: IDocumentsProps['documents']) => { onSelectImage, documentRotation, onRotateDocument, + isRotatedOrTransformed, + onTransformed, }; }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 29768ecbdd..813da3a24b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,6 +164,9 @@ importers: react-router-dom: specifier: ^6.11.2 version: 6.11.2(react-dom@18.2.0)(react@18.2.0) + react-zoom-pan-pinch: + specifier: ^3.0.8 + version: 3.0.8(react-dom@18.2.0)(react@18.2.0) tailwind-merge: specifier: ^1.10.0 version: 1.10.0 @@ -1442,7 +1445,7 @@ importers: version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5) '@astrojs/tailwind': specifier: ^4.0.0 version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) @@ -1856,7 +1859,7 @@ packages: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: @@ -1864,9 +1867,10 @@ packages: dependencies: babel-preset-solid: 1.6.13(@babel/core@7.22.5) solid-js: 1.6.15 - vitefu: 0.2.4(vite@4.2.1) + vitefu: 0.2.4(vite@3.2.5) transitivePeerDependencies: - '@babel/core' + - vite dev: false /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1): @@ -10313,11 +10317,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.37: - resolution: {integrity: sha512-uRFLzRDLI2E40CRNgoNpXoaKZlqvWNeIiG0i7y9TzajmHkm0oRIYTv90goYTTrr2jD6jiW/7aR23W7XIEbVhKw==} + /@storybook/channel-postmessage@7.1.0-alpha.38: + resolution: {integrity: sha512-oN5mGQIKoEIc3faKaenic6aIU70JTWigjfmtC/qLHd45RZt7NQj6A2psM4kpW8mv0pjpBqEiXlThDdavkYfjdA==} dependencies: - '@storybook/channels': 7.1.0-alpha.37 - '@storybook/client-logger': 7.1.0-alpha.37 + '@storybook/channels': 7.1.0-alpha.38 + '@storybook/client-logger': 7.1.0-alpha.38 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -10341,11 +10345,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.37: - resolution: {integrity: sha512-/igU/cCGkeOUrJGw/UCtHn5nJUp0vjPQ5pAR1yCdpOu3zhXERPiCz4i//1uyWCZJSIZfBWxdvXVqo5TuOW4RDA==} + /@storybook/channels@7.1.0-alpha.38: + resolution: {integrity: sha512-+pFC8Y0pUCfRpGJPquFgDiu0yqa1ndjnvdwyR3jKRPpOz7B1L+RaNLVZ+wL31CAACR4meGuGnyPBfXtcLH5Jdw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.37 - '@storybook/core-events': 7.1.0-alpha.37 + '@storybook/client-logger': 7.1.0-alpha.38 + '@storybook/core-events': 7.1.0-alpha.38 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -10414,8 +10418,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.37: - resolution: {integrity: sha512-DobCJKNheaJdGBK00k3ps5Zq+jCkCMEiuGdS28nILMFgwQx3bXzAZb7QixwxGpWHS0WhH4QTG0Dlkvl9uFMBzg==} + /@storybook/client-logger@7.1.0-alpha.38: + resolution: {integrity: sha512-wyS/8zr0noWwwvTxYsbRQv/31oqI+osKegk/d7WNqD51MwMFIcxZt2GuOzPH7VD8deIbjDQ1k09IrteqTX53sA==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -10519,8 +10523,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.37: - resolution: {integrity: sha512-r2LEHGKXVwK5TThsDj4TaDlsm65k2ZHxmYW5w6SgWbNo09HbFzHzDW0hOOwJxxqn6lyKpOU9ejnGRpWmucehNA==} + /@storybook/core-events@7.1.0-alpha.38: + resolution: {integrity: sha512-MS+9i6QPIs3g+5Q4222RHKMuV8i1hlvD9GtenzmWc9qhvZsJkkrsMSNn2fVliXiH7cKMz4PPDeuWDjBfl73i0g==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -10656,14 +10660,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.37: - resolution: {integrity: sha512-fCqge7NRdbRgcOlOeKb4cJFxZiyl8oK8e9hSvQGGWXQ8m0vx6TnB+429u7ZFz6PdbFf9xS3uWkMLOInrD5K7Rg==} + /@storybook/instrumenter@7.1.0-alpha.38: + resolution: {integrity: sha512-Fg48ozfs4pgOMJJRKBNyNNos0wfGrprSAd38MaNSF+yk0giVAYFgWwMcmC6Qdzk63TDdeSUAWMBd/75ex+KkoQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.37 - '@storybook/client-logger': 7.1.0-alpha.37 - '@storybook/core-events': 7.1.0-alpha.37 + '@storybook/channels': 7.1.0-alpha.38 + '@storybook/client-logger': 7.1.0-alpha.38 + '@storybook/core-events': 7.1.0-alpha.38 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.37 + '@storybook/preview-api': 7.1.0-alpha.38 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -10732,16 +10736,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.37: - resolution: {integrity: sha512-9yugeG9Z2THyX6Z9XsTU15JE0vzjKy0J8saUpmNNMQqGUxobWg0hOrJCV/kcayUcb8zJ7LUvriCFg0yxl+09rg==} + /@storybook/preview-api@7.1.0-alpha.38: + resolution: {integrity: sha512-46AkRftX0PRo0soZiVpuMvYbiSd4GIneTdUEECM/oHTrLG+QL62sd5+LHogCbxiiSQjCP1FF/pNy4KJMSG4nlA==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.37 - '@storybook/channels': 7.1.0-alpha.37 - '@storybook/client-logger': 7.1.0-alpha.37 - '@storybook/core-events': 7.1.0-alpha.37 + '@storybook/channel-postmessage': 7.1.0-alpha.38 + '@storybook/channels': 7.1.0-alpha.38 + '@storybook/client-logger': 7.1.0-alpha.38 + '@storybook/core-events': 7.1.0-alpha.38 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.37 + '@storybook/types': 7.1.0-alpha.38 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -10889,8 +10893,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.37 - '@storybook/instrumenter': 7.1.0-alpha.37 + '@storybook/client-logger': 7.1.0-alpha.38 + '@storybook/instrumenter': 7.1.0-alpha.38 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -10933,10 +10937,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.37: - resolution: {integrity: sha512-vups9inmWJnSYqgSZMrAzN3kUgdkjNApAliTX3ebu7rYMC8QjF2MLl0aqHsDFEDpq+IJZStDxDDkdvQP2fLPBQ==} + /@storybook/types@7.1.0-alpha.38: + resolution: {integrity: sha512-zJBHLUDw94zErsz2lNjlGFWeYuaEa4ZYC/fi3n+d0zvQaIZM+kWc+9tPgO9oLL3cgyMcNhryLJwaGYgtxqQw0g==} dependencies: - '@storybook/channels': 7.1.0-alpha.37 + '@storybook/channels': 7.1.0-alpha.38 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -22357,6 +22361,17 @@ packages: tslib: 2.5.2 dev: false + /react-zoom-pan-pinch@3.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-z6O5SV5X+XBo/LLO59PgzNE2WT+tp8lw1w3M0y138jCXViwHWKK1MqorICbmSVSOOD5Fa2o6pcg1ppJj9vzqJA==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -25510,6 +25525,17 @@ packages: fsevents: 2.3.2 dev: false + /vitefu@0.2.4(vite@3.2.5): + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 3.2.5(@types/node@18.15.10) + dev: false + /vitefu@0.2.4(vite@4.2.1): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -25519,6 +25545,7 @@ packages: optional: true dependencies: vite: 4.2.1(@types/node@18.15.10) + dev: true /vitefu@0.2.4(vite@4.3.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} From c8817d98ad447326a9903b33370222d88a01f774 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 22 Jun 2023 18:59:54 +0300 Subject: [PATCH 059/123] Backoffice - feedback updates (#583) * refactor(backoffice-v2): renamed reject dialog fields * refactor(backoffice-v2): now tasks with a decision are no longer editable --- .../hooks/useCallToActionLogic/useCallToActionLogic.tsx | 4 ++-- .../src/pages/Entity/hooks/useEntity/useEntity.tsx | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx index 3e0b02f066..062a862655 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx @@ -98,11 +98,11 @@ export const useCallToActionLogic = () => { )?.enum; const actions = [ { - label: 'Revision', + label: 'Ask to re-submit', value: 'revision', }, { - label: 'Reject', + label: 'Block', value: 'rejected', }, ] as const; diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 45bd7fc1bf..33164c4129 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -140,13 +140,18 @@ export const useEntity = () => { { type, format, pattern, isEditable = true, dropdownOptions, value }, ]) => { const fieldValue = value || (properties?.[title] ?? ''); + const isEditableDecision = isDoneWithRevision || !decision?.status; + return { title, value: fieldValue, type, format, pattern, - isEditable: caseState.writeEnabled && getIsEditable(isEditable, title), + isEditable: + isEditableDecision && + caseState.writeEnabled && + getIsEditable(isEditable, title), dropdownOptions, }; }, From 6a82f2d920c2750e11ab07849d7ad2827c11b61f Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 22 Jun 2023 19:02:33 +0300 Subject: [PATCH 060/123] Backoffice - Entity address + map block (#584) * feat(backoffice-v2): added a map cell * feat(map): divided the map block to columns with the address visible * feat(backoffice-v2): now travesing the plugins output for an address for the map component * refactor(backoffice-v2): added jsdocs to getAddressDeep and renamed remaining components instance --- apps/backoffice-v2/package.json | 3 ++ .../atoms/ErrorAlert/ErrorAlert.tsx | 17 +++++++ .../atoms/RouteError/RouteError.tsx | 15 +----- .../common/components/molecules/Map/Map.tsx | 23 +++++++++ .../components/molecules/Map/interfaces.ts | 7 +++ .../src/common/utils/fetcher/fetcher.ts | 2 +- .../src/pages/Entity/Entity.page.tsx | 4 +- .../Entity/components/Container/Container.tsx | 6 +-- .../Entity/components/Heading/Heading.tsx | 1 + .../Entity/components/MapCell/MapCell.tsx | 22 +++++++++ .../hooks/useNominatimQuery/fetcher.ts | 32 +++++++++++++ .../useNominatimQuery/useNominatimQuery.tsx | 32 +++++++++++++ .../Entity/components/MapCell/interfaces.ts | 8 ++++ .../useEntity/{components.tsx => cells.tsx} | 4 +- .../Entity/hooks/useEntity/useEntity.tsx | 46 ++++++++++++++++-- .../get-address-deep/get-address-deep.ts | 36 ++++++++++++++ .../src/pages/Root/Root.error.tsx | 13 ++--- .../src/pages/SignIn/SignIn.page.tsx | 11 +---- pnpm-lock.yaml | 48 +++++++++++++++++++ 19 files changed, 288 insertions(+), 42 deletions(-) create mode 100644 apps/backoffice-v2/src/common/components/atoms/ErrorAlert/ErrorAlert.tsx create mode 100644 apps/backoffice-v2/src/common/components/molecules/Map/Map.tsx create mode 100644 apps/backoffice-v2/src/common/components/molecules/Map/interfaces.ts create mode 100644 apps/backoffice-v2/src/pages/Entity/components/MapCell/MapCell.tsx create mode 100644 apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/fetcher.ts create mode 100644 apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/useNominatimQuery.tsx create mode 100644 apps/backoffice-v2/src/pages/Entity/components/MapCell/interfaces.ts rename apps/backoffice-v2/src/pages/Entity/hooks/useEntity/{components.tsx => cells.tsx} (88%) create mode 100644 apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils/get-address-deep/get-address-deep.ts diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 1e5a2bf133..73d3db2dcd 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -73,6 +73,7 @@ "i18next": "^22.4.9", "i18next-browser-languagedetector": "^7.0.1", "i18next-http-backend": "^2.1.1", + "leaflet": "^1.9.4", "lucide-react": "^0.144.0", "match-sorter": "^6.3.1", "msw": "^1.0.0", @@ -83,6 +84,7 @@ "react-hot-toast": "^2.4.0", "react-i18next": "^12.1.4", "react-image-crop": "^10.0.9", + "react-leaflet": "^4.2.1", "react-router-dom": "^6.11.2", "react-zoom-pan-pinch": "^3.0.8", "tailwind-merge": "^1.10.0", @@ -105,6 +107,7 @@ "@tanstack/react-query-devtools": "4.22.0", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", + "@types/leaflet": "^1.9.3", "@types/node": "^18.11.13", "@types/qs": "^6.9.7", "@types/react": "^18.0.14", diff --git a/apps/backoffice-v2/src/common/components/atoms/ErrorAlert/ErrorAlert.tsx b/apps/backoffice-v2/src/common/components/atoms/ErrorAlert/ErrorAlert.tsx new file mode 100644 index 0000000000..62a9a79c27 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/atoms/ErrorAlert/ErrorAlert.tsx @@ -0,0 +1,17 @@ +import { FunctionComponentWithChildren } from '../../../types'; +import { Alert } from '../Alert/Alert'; +import { AlertCircle } from 'lucide-react'; +import { AlertTitle } from '../Alert/Alert.Title'; +import { AlertDescription } from '../Alert/Alert.Description'; + +export const ErrorAlert: FunctionComponentWithChildren = ({ children }) => { + return ( + <div className={`mt-3 p-1`}> + <Alert variant={`destructive`} className={`w-full max-w-lg`}> + <AlertCircle className="h-4 w-4" /> + <AlertTitle>Error</AlertTitle> + <AlertDescription>{children}</AlertDescription> + </Alert> + </div> + ); +}; diff --git a/apps/backoffice-v2/src/common/components/atoms/RouteError/RouteError.tsx b/apps/backoffice-v2/src/common/components/atoms/RouteError/RouteError.tsx index 58bdbec9d4..7eaa4dc25f 100644 --- a/apps/backoffice-v2/src/common/components/atoms/RouteError/RouteError.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/RouteError/RouteError.tsx @@ -1,22 +1,11 @@ -import { Alert } from '../Alert/Alert'; -import { AlertCircle } from 'lucide-react'; -import { AlertTitle } from '../Alert/Alert.Title'; -import { AlertDescription } from '../Alert/Alert.Description'; import { useRouteError } from 'react-router-dom'; import { isErrorWithMessage } from '@ballerine/common'; +import { ErrorAlert } from '../ErrorAlert/ErrorAlert'; export const RouteError = () => { const error = useRouteError(); return ( - <div className={`mt-3 p-1`}> - <Alert variant={`destructive`} className={`w-full max-w-lg`}> - <AlertCircle className="h-4 w-4" /> - <AlertTitle>Error</AlertTitle> - <AlertDescription> - {isErrorWithMessage(error) ? error.message : 'Something went wrong.'} - </AlertDescription> - </Alert> - </div> + <ErrorAlert>{isErrorWithMessage(error) ? error.message : 'Something went wrong.'}</ErrorAlert> ); }; diff --git a/apps/backoffice-v2/src/common/components/molecules/Map/Map.tsx b/apps/backoffice-v2/src/common/components/molecules/Map/Map.tsx new file mode 100644 index 0000000000..0f7f2d9d0c --- /dev/null +++ b/apps/backoffice-v2/src/common/components/molecules/Map/Map.tsx @@ -0,0 +1,23 @@ +import { FunctionComponent } from 'react'; +import { LatLngTuple } from 'leaflet'; +import { AlertDescription } from '../../atoms/Alert/Alert.Description'; +import { MapContainer, Marker, Popup, TileLayer } from 'react-leaflet'; +import { IMapProps } from './interfaces'; + +export const Map: FunctionComponent<IMapProps> = ({ latitude, longitude, popupContent }) => { + const position: LatLngTuple = [latitude, longitude]; + + if (!latitude || !longitude) { + return <AlertDescription>Invalid coordinates.</AlertDescription>; + } + + return ( + <MapContainer center={position} zoom={13} className={`mt-6 h-[600px] rounded-md`}> + <TileLayer + attribution='© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a> © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors' + url={`https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png`} + /> + <Marker position={position}>{popupContent && <Popup>{popupContent}</Popup>}</Marker> + </MapContainer> + ); +}; diff --git a/apps/backoffice-v2/src/common/components/molecules/Map/interfaces.ts b/apps/backoffice-v2/src/common/components/molecules/Map/interfaces.ts new file mode 100644 index 0000000000..448c30ff17 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/molecules/Map/interfaces.ts @@ -0,0 +1,7 @@ +import { ReactNode } from 'react'; + +export interface IMapProps { + latitude: number; + longitude: number; + popupContent?: ReactNode; +} diff --git a/apps/backoffice-v2/src/common/utils/fetcher/fetcher.ts b/apps/backoffice-v2/src/common/utils/fetcher/fetcher.ts index dc73346580..dbacf36be3 100644 --- a/apps/backoffice-v2/src/common/utils/fetcher/fetcher.ts +++ b/apps/backoffice-v2/src/common/utils/fetcher/fetcher.ts @@ -56,7 +56,7 @@ export const fetcher: IFetcher = async ({ const [data, jsonError] = isBlob ? await handlePromise(res.blob()) - : res.headers.get('content-length') > '0' + : !res.headers.get('content-length') || res.headers.get('content-length') > '0' ? await handlePromise(res.json()) : [undefined, undefined]; diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx index ccfe3f0e43..b5746ddb2c 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx +++ b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx @@ -5,7 +5,7 @@ import { Card } from '../../common/components/atoms/Card/Card'; import { CardContent } from '../../common/components/atoms/Card/Card.Content'; export const Entity = () => { - const { workflow, selectedEntity, tasks, components, isLoading } = useEntity(); + const { workflow, selectedEntity, tasks, cells, isLoading } = useEntity(); // Selected entity return ( @@ -31,7 +31,7 @@ export const Entity = () => { })} > {task?.map((field, index) => { - const Cell = components[field?.type]; + const Cell = cells[field?.type]; return <Cell key={index} {...field} />; })} diff --git a/apps/backoffice-v2/src/pages/Entity/components/Container/Container.tsx b/apps/backoffice-v2/src/pages/Entity/components/Container/Container.tsx index 3a4b6f1d96..e209f5605f 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Container/Container.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Container/Container.tsx @@ -1,7 +1,7 @@ import React, { FunctionComponent } from 'react'; import { ctw } from '../../../../common/utils/ctw/ctw'; import { IContainerProps } from './interfaces'; -import { components } from '../../hooks/useEntity/components'; +import { cells } from '../../hooks/useEntity/cells'; export const Container: FunctionComponent<IContainerProps> = ({ value, id }) => { return ( @@ -10,12 +10,12 @@ export const Container: FunctionComponent<IContainerProps> = ({ value, id }) => 'm-2 mt-6 flex justify-end space-x-2 rounded p-2 text-slate-50': id === 'actions', rounded: id === 'alerts', 'col-span-full': id === 'alerts' || id === 'header', - 'grid grid-cols-2': id === 'header', + 'grid grid-cols-2': id === 'header' || id === 'map-container', 'm-2 flex flex-col space-y-2 p-2': id === 'alerts', })} > {value?.map((cell, index) => { - const Cell = components[cell?.type]; + const Cell = cells[cell?.type]; return <Cell key={index} {...cell} />; })} diff --git a/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx b/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx index 3d2cd6c40b..fa5662349d 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Heading/Heading.tsx @@ -6,6 +6,7 @@ export const Heading: FunctionComponent<IHeadingProps> = ({ id, value }) => ( <h2 className={ctw(`ml-2 mt-6 p-2 text-2xl font-bold`, { 'text-lg text-slate-400': id === 'nested-details-heading', + 'col-span-full': id === 'map-header', })} > {value} diff --git a/apps/backoffice-v2/src/pages/Entity/components/MapCell/MapCell.tsx b/apps/backoffice-v2/src/pages/Entity/components/MapCell/MapCell.tsx new file mode 100644 index 0000000000..3b927836cd --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/MapCell/MapCell.tsx @@ -0,0 +1,22 @@ +import { FunctionComponent } from 'react'; +import 'leaflet/dist/leaflet.css'; +import { useNominatimQuery } from './hooks/useNominatimQuery/useNominatimQuery'; +import { IMapCellProps } from './interfaces'; +import { Map } from '../../../../common/components/molecules/Map/Map'; +import { ErrorAlert } from '../../../../common/components/atoms/ErrorAlert/ErrorAlert'; + +export const MapCell: FunctionComponent<IMapCellProps> = ({ value }) => { + const { data } = useNominatimQuery(value); + + if (!data?.[0]?.lat || !data?.[0]?.lon) { + return <ErrorAlert>Invalid address.</ErrorAlert>; + } + + return ( + <Map + latitude={data?.[0]?.lat} + longitude={data?.[0]?.lon} + popupContent={`${value?.country}, ${value?.city}, ${value?.street}`} + /> + ); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/fetcher.ts b/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/fetcher.ts new file mode 100644 index 0000000000..6ada63c4e6 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/fetcher.ts @@ -0,0 +1,32 @@ +import { handlePromise } from '@ballerine/common'; +import { fetcher } from '../../../../../../common/utils/fetcher/fetcher'; +import { Method } from '../../../../../../common/enums'; +import { z } from 'zod'; +import { handleZodError } from '../../../../../../common/utils/handle-zod-error/handle-zod-error'; + +export const fetchNominatimSearch = async ({ + country, + city, + street, +}: { + country: string; + city: string; + street: string; +}) => { + const [coordinates, error] = await handlePromise( + fetcher({ + method: Method.GET, + url: `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent( + `${country} ${city} ${street}`, + )}&format=json`, + schema: z.array( + z.object({ + lat: z.coerce.number(), + lon: z.coerce.number(), + }), + ), + }), + ); + + return handleZodError(error, coordinates); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/useNominatimQuery.tsx b/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/useNominatimQuery.tsx new file mode 100644 index 0000000000..5b11e71123 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/MapCell/hooks/useNominatimQuery/useNominatimQuery.tsx @@ -0,0 +1,32 @@ +import { useQuery } from '@tanstack/react-query'; +import { isString } from '../../../../../../common/utils/is-string/is-string'; +import { fetchNominatimSearch } from './fetcher'; + +export const useNominatimQuery = ({ + country, + city, + street, +}: { + country: string; + city: string; + street: string; +}) => { + return useQuery({ + queryKey: ['nominatim', 'search', { country, city, street }], + queryFn: () => + fetchNominatimSearch({ + country, + city, + street, + }), + staleTime: Infinity, + refetchInterval: false, + enabled: + isString(country) && + !!country?.length && + isString(city) && + !!city?.length && + isString(street) && + !!street?.length, + }); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/components/MapCell/interfaces.ts b/apps/backoffice-v2/src/pages/Entity/components/MapCell/interfaces.ts new file mode 100644 index 0000000000..f07fead647 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/components/MapCell/interfaces.ts @@ -0,0 +1,8 @@ +export interface IMapCellProps { + id?: string; + value: { + country: string; + city: string; + street: string; + }; +} diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/cells.tsx similarity index 88% rename from apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx rename to apps/backoffice-v2/src/pages/Entity/hooks/useEntity/cells.tsx index e29722222c..083965e8a0 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/components.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/cells.tsx @@ -6,8 +6,9 @@ import { FaceComparison } from '../../components/FaceComparison/FaceComparison'; import { Details } from '../../components/Details/Details'; import { MultiDocuments } from '../../components/MultiDocuments/MultiDocuments'; import { NestedDetails } from '../../components/NestedDetails/NestedDetails'; +import { MapCell } from '../../components/MapCell/MapCell'; -export const components = { +export const cells = { heading: Heading, alert: Alert, container: Container, @@ -16,4 +17,5 @@ export const components = { details: Details, nestedDetails: NestedDetails, multiDocuments: MultiDocuments, + map: MapCell, }; diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 33164c4129..5d97e35b10 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -3,7 +3,7 @@ import { useStorageFilesQuery } from '../../../../domains/storage/hooks/queries/ import { useCaseState } from '../../components/Case/hooks/useCaseState/useCaseState'; import { useAuthenticatedUserQuery } from '../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { toStartCase } from '../../../../common/utils/to-start-case/to-start-case'; -import { components } from './components'; +import { cells } from './cells'; import { useFilterId } from '../../../../common/hooks/useFilterId/useFilterId'; import { useWorkflowQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowQuery/useWorkflowQuery'; import { @@ -15,6 +15,7 @@ import { omitPropsFromObject, } from './utils'; import { getDocumentsByCountry } from '@ballerine/common'; +import { getAddressDeep } from './utils/get-address-deep/get-address-deep'; export const useEntity = () => { const { entityId } = useParams(); @@ -49,6 +50,7 @@ export const useEntity = () => { pluginsOutput, } = workflow?.context ?? {}; const pluginsOutputKeys = Object.keys(pluginsOutput ?? {}); + const address = getAddressDeep(pluginsOutput); const tasks = contextEntity ? [ ...(Object.keys(pluginsOutput ?? {}).length === 0 @@ -178,7 +180,9 @@ export const useEntity = () => { data: contextDocuments?.[docIndex]?.pages?.map( ({ type, metadata, data }, pageIndex) => ({ - title: `${category} - ${docType}${ + title: `${convertSnakeCaseToTitleCase( + category, + )} - ${convertSnakeCaseToTitleCase(docType)}${ metadata?.side ? ` - ${metadata?.side}` : '' }`, imageUrl: @@ -196,6 +200,10 @@ export const useEntity = () => { Object.keys(contextEntity?.data ?? {}).length === 0 ? [] : [ + { + type: 'heading', + value: `${toStartCase(contextEntity?.type)} Information`, + }, { id: 'entity-details', type: 'details', @@ -203,7 +211,7 @@ export const useEntity = () => { title: `${toStartCase(contextEntity?.type)} Information`, data: [ ...Object.entries( - omitPropsFromObject(contextEntity?.data, 'additionalInfo') ?? {}, + omitPropsFromObject(contextEntity?.data, 'additionalInfo', 'address') ?? {}, ), ...Object.entries(contextEntity?.data?.additionalInfo ?? {}), ]?.map(([title, value]) => ({ @@ -215,12 +223,42 @@ export const useEntity = () => { }, }, ], + Object.keys(address ?? {})?.length === 0 + ? [] + : [ + { + id: 'map-container', + type: 'container', + value: [ + { + id: 'map-header', + type: 'heading', + value: `${toStartCase(contextEntity?.type)} Address`, + }, + { + type: 'details', + value: { + title: `${toStartCase(contextEntity?.type)} Address`, + data: Object.entries(address ?? {})?.map(([title, value]) => ({ + title, + value, + isEditable: false, + })), + }, + }, + { + type: 'map', + value: address, + }, + ], + }, + ], ] : []; return { selectedEntity, - components, + cells, tasks, workflow, isLoading, diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils/get-address-deep/get-address-deep.ts b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils/get-address-deep/get-address-deep.ts new file mode 100644 index 0000000000..1ab0b7b986 --- /dev/null +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils/get-address-deep/get-address-deep.ts @@ -0,0 +1,36 @@ +/** + * Traverses an object and returns the first address object found. + * @param value + */ +export const getAddressDeep = ( + value: unknown, +): + | { + country: string; + city: string; + street: string; + } + | undefined => { + if (!value || typeof value !== 'object') return; + + // Early return for Array type + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + const result = getAddressDeep(value[i]); + + if (result) return result; + } + + return; + } + + for (const key of Object.keys(value)) { + if (key === 'address') return value[key]; + + const result = getAddressDeep(value[key]); + + if (result) return result; + } + + return; +}; diff --git a/apps/backoffice-v2/src/pages/Root/Root.error.tsx b/apps/backoffice-v2/src/pages/Root/Root.error.tsx index 0a095637c2..67210ecd6b 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.error.tsx +++ b/apps/backoffice-v2/src/pages/Root/Root.error.tsx @@ -1,13 +1,10 @@ import { Button } from '../../common/components/atoms/Button/Button'; import { Link } from 'react-router-dom'; import { FunctionComponent } from 'react'; -import { AlertDescription } from '../../common/components/atoms/Alert/Alert.Description'; import { Providers } from '../../common/components/templates/Providers/Providers'; import { Toaster } from 'react-hot-toast'; import { Layout } from '../../common/components/templates/Layout/Layout'; -import { Alert } from '../../common/components/atoms/Alert/Alert'; -import { AlertCircle } from 'lucide-react'; -import { AlertTitle } from '../../common/components/atoms/Alert/Alert.Title'; +import { ErrorAlert } from '../../common/components/atoms/ErrorAlert/ErrorAlert'; export const RootError: FunctionComponent = () => { return ( @@ -24,10 +21,8 @@ export const RootError: FunctionComponent = () => { className={`col-span-full mx-auto mt-32 grid h-full w-full max-w-4xl grid-cols-2 flex-col`} > <div> - <Alert variant={`destructive`} className={`w-full max-w-lg`}> - <AlertCircle className="h-4 w-4" /> - <AlertTitle>Error</AlertTitle> - <AlertDescription>Something went wrong.</AlertDescription> + <ErrorAlert> + Something went wrong. <div className={`flex justify-end`}> <Button asChild className={`border-destructive`} variant={`outline`} size={`sm`}> <Link to={`/en`} replace> @@ -35,7 +30,7 @@ export const RootError: FunctionComponent = () => { </Link> </Button> </div> - </Alert> + </ErrorAlert> </div> </section> </Layout> diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 6bab0f2c6f..9ccfcd7645 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -6,10 +6,6 @@ import { Button } from '../../common/components/atoms/Button/Button'; import { Input } from '../../common/components/atoms/Input/Input'; import { Card } from '../../common/components/atoms/Card/Card'; import { BallerineLogo } from '../../common/components/atoms/icons'; -import { Alert } from '../../common/components/atoms/Alert/Alert'; -import { AlertCircle } from 'lucide-react'; -import { AlertDescription } from '../../common/components/atoms/Alert/Alert.Description'; -import { AlertTitle } from '../../common/components/atoms/Alert/Alert.Title'; import { useSignInMutation } from '../../domains/auth/hooks/mutations/useSignInMutation/useSignInMutation'; import { FunctionComponent, useCallback } from 'react'; import { useAuthContext } from '../../domains/auth/context/AuthProvider/hooks/useAuthContext/useAuthContext'; @@ -23,6 +19,7 @@ import { FormLabel } from '../../common/components/organisms/Form/Form.Label'; import { FormControl } from '../../common/components/organisms/Form/Form.Control'; import { FormMessage } from '../../common/components/organisms/Form/Form.Message'; import { env } from '../../common/env/env'; +import { ErrorAlert } from '../../common/components/atoms/ErrorAlert/ErrorAlert'; export const SignIn: FunctionComponent = () => { const SignInSchema = z.object({ @@ -72,11 +69,7 @@ export const SignIn: FunctionComponent = () => { <CardHeader className={`mb-2 text-center text-4xl font-bold`}>Sign In</CardHeader> <CardContent> {isErrorWithCode(error) && error?.code === 401 && ( - <Alert className={`mb-8`} variant={`destructive`}> - <AlertCircle className="h-4 w-4" /> - <AlertTitle>Error</AlertTitle> - <AlertDescription>Invalid credentials</AlertDescription> - </Alert> + <ErrorAlert>Invalid credentials</ErrorAlert> )} <Form {...signInForm}> <form onSubmit={signInForm.handleSubmit(onSubmit)} className="space-y-8"> diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 813da3a24b..cb4ef7e574 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,6 +131,9 @@ importers: i18next-http-backend: specifier: ^2.1.1 version: 2.2.0 + leaflet: + specifier: ^1.9.4 + version: 1.9.4 lucide-react: specifier: ^0.144.0 version: 0.144.0(react@18.2.0) @@ -161,6 +164,9 @@ importers: react-image-crop: specifier: ^10.0.9 version: 10.0.9(react@18.2.0) + react-leaflet: + specifier: ^4.2.1 + version: 4.2.1(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0) react-router-dom: specifier: ^6.11.2 version: 6.11.2(react-dom@18.2.0)(react@18.2.0) @@ -222,6 +228,9 @@ importers: '@testing-library/react': specifier: ^13.3.0 version: 13.4.0(react-dom@18.2.0)(react@18.2.0) + '@types/leaflet': + specifier: ^1.9.3 + version: 1.9.3 '@types/node': specifier: ^18.11.13 version: 18.15.10 @@ -9536,6 +9545,18 @@ packages: '@babel/runtime': 7.21.0 dev: false + /@react-leaflet/core@2.1.0(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + leaflet: 1.9.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@remix-run/router@1.6.2: resolution: {integrity: sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==} engines: {node: '>=14'} @@ -11452,6 +11473,10 @@ packages: '@types/node': 18.15.10 dev: true + /@types/geojson@7946.0.10: + resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} + dev: true + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -11558,6 +11583,12 @@ packages: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true + /@types/leaflet@1.9.3: + resolution: {integrity: sha512-Caa1lYOgKVqDkDZVWkto2Z5JtVo09spEaUt2S69LiugbBpoqQu92HYFMGUbYezZbnBkyOxMNPXHSgRrRY5UyIA==} + dependencies: + '@types/geojson': 7946.0.10 + dev: true + /@types/lodash.keyby@4.6.7: resolution: {integrity: sha512-3qSHbbxLfXlARIKsaijZPb/5ZHDajv1vRg7OlAOuBNwN29PESS3sEOPfG1s2kzSuZnKtxtXZd1lvGj5JasN91w==} dependencies: @@ -19559,6 +19590,10 @@ packages: readable-stream: 2.3.8 dev: true + /leaflet@1.9.4: + resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} + dev: false + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -22272,6 +22307,19 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react-leaflet@4.2.1(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==} + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@react-leaflet/core': 2.1.0(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0) + leaflet: 1.9.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} From cff7e52732a8229b044f0b2ccab6f7efb5195b42 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 01:06:51 +0300 Subject: [PATCH 061/123] Docs site sturcutre changes (#580) * strucute changes * strucute changes * strucute changes * strucute changes * strucute changes * merged with dev * merged with dev * merged with dev * merged with dev * merged with dev * merged with dev * merged with dev --- pnpm-lock.yaml | 358 ++++++++++-------- .../.env.example | 0 .../.eslintignore | 0 .../.eslintrc.cjs | 0 .../.gitignore | 0 .../.prettierignore | 0 .../.prettierrc.cjs | 0 .../README.md | 0 .../jest.config.cjs | 0 .../package.json | 0 .../src/app.controller.test.ts | 0 .../src/app.controller.ts | 0 .../src/app.gateway.ts | 0 .../src/app.module.ts | 0 .../src/app.service.ts | 0 .../src/env.ts | 0 .../src/main.ts | 0 .../src/notifications/notify.controller.ts | 0 .../test/app.e2e-spec.ts | 0 .../test/jest-e2e.json | 0 .../tsconfig.build.json | 0 .../tsconfig.json | 0 .../tsconfig.test.json | 0 .../scripts/workflows/index.ts | 16 +- services/workflows-service/src/main.ts | 2 - websites/docs/package.json | 3 +- websites/docs/src/config.ts | 39 +- .../docs/src/pages/en/learn/deployment.md | 47 +++ websites/docs/src/pages/en/learn/gloassry.md | 91 +++++ .../docs/src/pages/en/learn/installation.md | 88 +++++ .../src/pages/en/learn/simple-kyb-guide.mdx | 299 +++++++++++++++ 31 files changed, 769 insertions(+), 174 deletions(-) rename services/{workflows-websocket-service => websocket-service}/.env.example (100%) rename services/{workflows-websocket-service => websocket-service}/.eslintignore (100%) rename services/{workflows-websocket-service => websocket-service}/.eslintrc.cjs (100%) rename services/{workflows-websocket-service => websocket-service}/.gitignore (100%) rename services/{workflows-websocket-service => websocket-service}/.prettierignore (100%) rename services/{workflows-websocket-service => websocket-service}/.prettierrc.cjs (100%) rename services/{workflows-websocket-service => websocket-service}/README.md (100%) rename services/{workflows-websocket-service => websocket-service}/jest.config.cjs (100%) rename services/{workflows-websocket-service => websocket-service}/package.json (100%) rename services/{workflows-websocket-service => websocket-service}/src/app.controller.test.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/app.controller.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/app.gateway.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/app.module.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/app.service.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/env.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/main.ts (100%) rename services/{workflows-websocket-service => websocket-service}/src/notifications/notify.controller.ts (100%) rename services/{workflows-websocket-service => websocket-service}/test/app.e2e-spec.ts (100%) rename services/{workflows-websocket-service => websocket-service}/test/jest-e2e.json (100%) rename services/{workflows-websocket-service => websocket-service}/tsconfig.build.json (100%) rename services/{workflows-websocket-service => websocket-service}/tsconfig.json (100%) rename services/{workflows-websocket-service => websocket-service}/tsconfig.test.json (100%) create mode 100644 websites/docs/src/pages/en/learn/deployment.md create mode 100644 websites/docs/src/pages/en/learn/gloassry.md create mode 100644 websites/docs/src/pages/en/learn/installation.md create mode 100644 websites/docs/src/pages/en/learn/simple-kyb-guide.mdx diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb4ef7e574..edd3a6a8d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: @@ -269,7 +273,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -1091,6 +1095,106 @@ importers: specifier: ^0.28.5 version: 0.28.5(jsdom@20.0.3) + services/websocket-service: + dependencies: + '@nestjs/common': + specifier: ^9.3.12 + version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': + specifier: ^9.3.12 + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': + specifier: ^9.3.12 + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) + '@nestjs/platform-ws': + specifier: ^9.4.2 + version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0) + '@nestjs/websockets': + specifier: ^9.4.2 + version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@t3-oss/env-core': + specifier: ^0.3.1 + version: 0.3.1(typescript@4.9.5)(zod@3.21.4) + '@types/ws': + specifier: ^8.5.4 + version: 8.5.4 + reflect-metadata: + specifier: ^0.1.13 + version: 0.1.13 + rxjs: + specifier: ^7.8.0 + version: 7.8.0 + ws: + specifier: ^8.13.0 + version: 8.13.0 + zod: + specifier: ^3.21.4 + version: 3.21.4 + devDependencies: + '@nestjs/cli': + specifier: ^9.3.0 + version: 9.3.0 + '@nestjs/schematics': + specifier: ^9.0.0 + version: 9.0.4(chokidar@3.5.3)(typescript@4.9.5) + '@nestjs/testing': + specifier: ^9.3.12 + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) + '@types/express': + specifier: 4.17.9 + version: 4.17.9 + '@types/jest': + specifier: ^26.0.19 + version: 26.0.24 + '@types/node': + specifier: ^18.14.6 + version: 18.15.10 + '@types/supertest': + specifier: 2.0.11 + version: 2.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^5.54.1 + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.54.1 + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + eslint: + specifier: ^8.35.0 + version: 8.36.0 + eslint-config-prettier: + specifier: ^8.7.0 + version: 8.8.0(eslint@8.36.0) + eslint-import-resolver-typescript: + specifier: ^3.5.3 + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) + eslint-plugin-import: + specifier: ^2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + jest: + specifier: 29.5.0 + version: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + prettier: + specifier: ^2.8.4 + version: 2.8.8 + supertest: + specifier: ^6.1.3 + version: 6.1.3 + ts-jest: + specifier: 29.1.0 + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) + ts-loader: + specifier: ^9.2.3 + version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + tsconfig-paths: + specifier: 4.2.0 + version: 4.2.0 + typescript: + specifier: ^4.9.3 + version: 4.9.5 + services/workflows-service: dependencies: '@aws-sdk/client-s3': @@ -1341,114 +1445,14 @@ importers: specifier: ^4.9.3 version: 4.9.5 - services/workflows-websocket-service: - dependencies: - '@nestjs/common': - specifier: ^9.3.12 - version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': - specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/platform-express': - specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) - '@nestjs/platform-ws': - specifier: ^9.4.2 - version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0) - '@nestjs/websockets': - specifier: ^9.4.2 - version: 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@t3-oss/env-core': - specifier: ^0.3.1 - version: 0.3.1(typescript@4.9.5)(zod@3.21.4) - '@types/ws': - specifier: ^8.5.4 - version: 8.5.4 - reflect-metadata: - specifier: ^0.1.13 - version: 0.1.13 - rxjs: - specifier: ^7.8.0 - version: 7.8.0 - ws: - specifier: ^8.13.0 - version: 8.13.0 - zod: - specifier: ^3.21.4 - version: 3.21.4 - devDependencies: - '@nestjs/cli': - specifier: ^9.3.0 - version: 9.3.0 - '@nestjs/schematics': - specifier: ^9.0.0 - version: 9.0.4(chokidar@3.5.3)(typescript@4.9.5) - '@nestjs/testing': - specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) - '@types/express': - specifier: 4.17.9 - version: 4.17.9 - '@types/jest': - specifier: ^26.0.19 - version: 26.0.24 - '@types/node': - specifier: ^18.14.6 - version: 18.15.10 - '@types/supertest': - specifier: 2.0.11 - version: 2.0.11 - '@typescript-eslint/eslint-plugin': - specifier: ^5.54.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/parser': - specifier: ^5.54.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) - eslint: - specifier: ^8.35.0 - version: 8.36.0 - eslint-config-prettier: - specifier: ^8.7.0 - version: 8.8.0(eslint@8.36.0) - eslint-import-resolver-typescript: - specifier: ^3.5.3 - version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) - eslint-plugin-import: - specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) - jest: - specifier: 29.5.0 - version: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) - prettier: - specifier: ^2.8.4 - version: 2.8.8 - supertest: - specifier: ^6.1.3 - version: 6.1.3 - ts-jest: - specifier: 29.1.0 - version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) - ts-loader: - specifier: ^9.2.3 - version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) - tsconfig-paths: - specifier: 4.2.0 - version: 4.2.0 - typescript: - specifier: ^4.9.3 - version: 4.9.5 - websites/docs: dependencies: '@algolia/client-search': specifier: ^4.13.1 version: 4.16.0 '@astrojs/mdx': - specifier: 0.18.4 - version: 0.18.4(astro@2.6.6)(rollup@2.70.2) + specifier: 0.19.7 + version: 0.19.7(astro@2.6.6) '@astrojs/react': specifier: ^2.2.1 version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) @@ -1485,6 +1489,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) + shiki: + specifier: ^0.14.2 + version: 0.14.2 solid-js: specifier: ^1.4.3 version: 1.6.15 @@ -1806,7 +1813,7 @@ packages: remark-parse: 10.0.1 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 - shiki: 0.14.1 + shiki: 0.14.2 unified: 10.1.2 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -1814,31 +1821,30 @@ packages: - supports-color dev: false - /@astrojs/mdx@0.18.4(astro@2.6.6)(rollup@2.70.2): - resolution: {integrity: sha512-yLlHF74oBtCCPnCY4LBios3OrXc97IXIBVOWuyXxmNwAYMA4xIfClN2YP9cFQJITDI/d80qrANzQLQInUNKlHA==} + /@astrojs/mdx@0.19.7(astro@2.6.6): + resolution: {integrity: sha512-mfEbBD7oi8yBHhcJucEjnrquREkJ3os+jioURP8BR2B8tOV2rV2j8trvmLUgfS+P/+HevGObxCTjcRYxn6T7eg==} engines: {node: '>=16.12.0'} dependencies: '@astrojs/markdown-remark': 2.2.1(astro@2.6.6) '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 - '@mdx-js/rollup': 2.3.0(rollup@2.70.2) acorn: 8.8.2 es-module-lexer: 1.2.0 estree-util-visit: 1.2.1 github-slugger: 1.5.0 gray-matter: 4.0.3 + hast-util-to-html: 8.0.4 kleur: 4.1.5 rehype-raw: 6.1.1 remark-frontmatter: 4.0.1 remark-gfm: 3.0.1 remark-smartypants: 2.0.0 - shiki: 0.11.1 + shiki: 0.14.2 source-map: 0.7.4 unist-util-visit: 4.1.2 vfile: 5.3.7 transitivePeerDependencies: - astro - - rollup - supports-color dev: false @@ -3287,7 +3293,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3302,7 +3308,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -4576,7 +4582,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) transitivePeerDependencies: @@ -4590,7 +4596,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) transitivePeerDependencies: @@ -4936,8 +4942,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4948,8 +4954,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5073,9 +5079,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.22.5 + '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5087,9 +5093,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.22.5 + '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5116,10 +5122,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true @@ -5131,10 +5137,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true @@ -8029,20 +8035,6 @@ packages: react: 18.2.0 dev: true - /@mdx-js/rollup@2.3.0(rollup@2.70.2): - resolution: {integrity: sha512-wLvRfJS/M4UmdqTd+WoaySEE7q4BIejYf1xAHXYvtT1du/1Tl/z2450Gg2+Hu7fh05KwRRiehiTP9Yc/Dtn0fA==} - peerDependencies: - rollup: '>=2' - dependencies: - '@mdx-js/mdx': 2.3.0 - '@rollup/pluginutils': 5.0.2(rollup@2.70.2) - rollup: 2.70.2 - source-map: 0.7.4 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color - dev: false - /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.10): resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} dependencies: @@ -13049,7 +13041,7 @@ packages: rehype: 12.0.1 semver: 7.3.8 server-destroy: 1.0.1 - shiki: 0.14.1 + shiki: 0.14.2 slash: 4.0.0 string-width: 5.1.2 strip-ansi: 7.0.1 @@ -13185,7 +13177,7 @@ packages: peerDependencies: eslint: '>= 4.12.1' dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@babel/parser': 7.21.3 '@babel/traverse': 7.21.3 '@babel/types': 7.21.3 @@ -15812,6 +15804,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -15908,6 +15929,39 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-n@15.6.1(eslint@8.36.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -23308,16 +23362,8 @@ packages: rechoir: 0.6.2 dev: true - /shiki@0.11.1: - resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==} - dependencies: - jsonc-parser: 3.2.0 - vscode-oniguruma: 1.7.0 - vscode-textmate: 6.0.0 - dev: false - - /shiki@0.14.1: - resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} + /shiki@0.14.2: + resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: ansi-sequence-parser: 1.1.0 jsonc-parser: 3.2.0 @@ -24904,7 +24950,7 @@ packages: lunr: 2.3.9 marked: 4.3.0 minimatch: 7.4.3 - shiki: 0.14.1 + shiki: 0.14.2 typescript: 4.9.5 dev: true @@ -25822,10 +25868,6 @@ packages: /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - /vscode-textmate@6.0.0: - resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==} - dev: false - /vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} diff --git a/services/workflows-websocket-service/.env.example b/services/websocket-service/.env.example similarity index 100% rename from services/workflows-websocket-service/.env.example rename to services/websocket-service/.env.example diff --git a/services/workflows-websocket-service/.eslintignore b/services/websocket-service/.eslintignore similarity index 100% rename from services/workflows-websocket-service/.eslintignore rename to services/websocket-service/.eslintignore diff --git a/services/workflows-websocket-service/.eslintrc.cjs b/services/websocket-service/.eslintrc.cjs similarity index 100% rename from services/workflows-websocket-service/.eslintrc.cjs rename to services/websocket-service/.eslintrc.cjs diff --git a/services/workflows-websocket-service/.gitignore b/services/websocket-service/.gitignore similarity index 100% rename from services/workflows-websocket-service/.gitignore rename to services/websocket-service/.gitignore diff --git a/services/workflows-websocket-service/.prettierignore b/services/websocket-service/.prettierignore similarity index 100% rename from services/workflows-websocket-service/.prettierignore rename to services/websocket-service/.prettierignore diff --git a/services/workflows-websocket-service/.prettierrc.cjs b/services/websocket-service/.prettierrc.cjs similarity index 100% rename from services/workflows-websocket-service/.prettierrc.cjs rename to services/websocket-service/.prettierrc.cjs diff --git a/services/workflows-websocket-service/README.md b/services/websocket-service/README.md similarity index 100% rename from services/workflows-websocket-service/README.md rename to services/websocket-service/README.md diff --git a/services/workflows-websocket-service/jest.config.cjs b/services/websocket-service/jest.config.cjs similarity index 100% rename from services/workflows-websocket-service/jest.config.cjs rename to services/websocket-service/jest.config.cjs diff --git a/services/workflows-websocket-service/package.json b/services/websocket-service/package.json similarity index 100% rename from services/workflows-websocket-service/package.json rename to services/websocket-service/package.json diff --git a/services/workflows-websocket-service/src/app.controller.test.ts b/services/websocket-service/src/app.controller.test.ts similarity index 100% rename from services/workflows-websocket-service/src/app.controller.test.ts rename to services/websocket-service/src/app.controller.test.ts diff --git a/services/workflows-websocket-service/src/app.controller.ts b/services/websocket-service/src/app.controller.ts similarity index 100% rename from services/workflows-websocket-service/src/app.controller.ts rename to services/websocket-service/src/app.controller.ts diff --git a/services/workflows-websocket-service/src/app.gateway.ts b/services/websocket-service/src/app.gateway.ts similarity index 100% rename from services/workflows-websocket-service/src/app.gateway.ts rename to services/websocket-service/src/app.gateway.ts diff --git a/services/workflows-websocket-service/src/app.module.ts b/services/websocket-service/src/app.module.ts similarity index 100% rename from services/workflows-websocket-service/src/app.module.ts rename to services/websocket-service/src/app.module.ts diff --git a/services/workflows-websocket-service/src/app.service.ts b/services/websocket-service/src/app.service.ts similarity index 100% rename from services/workflows-websocket-service/src/app.service.ts rename to services/websocket-service/src/app.service.ts diff --git a/services/workflows-websocket-service/src/env.ts b/services/websocket-service/src/env.ts similarity index 100% rename from services/workflows-websocket-service/src/env.ts rename to services/websocket-service/src/env.ts diff --git a/services/workflows-websocket-service/src/main.ts b/services/websocket-service/src/main.ts similarity index 100% rename from services/workflows-websocket-service/src/main.ts rename to services/websocket-service/src/main.ts diff --git a/services/workflows-websocket-service/src/notifications/notify.controller.ts b/services/websocket-service/src/notifications/notify.controller.ts similarity index 100% rename from services/workflows-websocket-service/src/notifications/notify.controller.ts rename to services/websocket-service/src/notifications/notify.controller.ts diff --git a/services/workflows-websocket-service/test/app.e2e-spec.ts b/services/websocket-service/test/app.e2e-spec.ts similarity index 100% rename from services/workflows-websocket-service/test/app.e2e-spec.ts rename to services/websocket-service/test/app.e2e-spec.ts diff --git a/services/workflows-websocket-service/test/jest-e2e.json b/services/websocket-service/test/jest-e2e.json similarity index 100% rename from services/workflows-websocket-service/test/jest-e2e.json rename to services/websocket-service/test/jest-e2e.json diff --git a/services/workflows-websocket-service/tsconfig.build.json b/services/websocket-service/tsconfig.build.json similarity index 100% rename from services/workflows-websocket-service/tsconfig.build.json rename to services/websocket-service/tsconfig.build.json diff --git a/services/workflows-websocket-service/tsconfig.json b/services/websocket-service/tsconfig.json similarity index 100% rename from services/workflows-websocket-service/tsconfig.json rename to services/websocket-service/tsconfig.json diff --git a/services/workflows-websocket-service/tsconfig.test.json b/services/websocket-service/tsconfig.test.json similarity index 100% rename from services/workflows-websocket-service/tsconfig.test.json rename to services/websocket-service/tsconfig.test.json diff --git a/services/workflows-service/scripts/workflows/index.ts b/services/workflows-service/scripts/workflows/index.ts index 2566a306f9..2a0cece527 100644 --- a/services/workflows-service/scripts/workflows/index.ts +++ b/services/workflows-service/scripts/workflows/index.ts @@ -24,9 +24,19 @@ export const kybWithExternalRequestWorkflowExample = { cond: { type: 'json-logic', rule: { - '==': [ - { var: 'context.entity.companyName' }, - { var: 'response.data.registered_name' }, + or: [ + { + '==': [ + { var: 'context.entity.companyName' }, + { var: 'response.data.registered_name' }, + ], + }, + { + '>=': [ + { var: 'context.external_request_example.data.name_fuzziness_score' }, + 0.8, + ], + }, ], }, }, diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 5bd12e5001..174c577c11 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -86,7 +86,6 @@ async function main() { defaultVersion: '1', }); - if (env.NODE_ENV === 'local') { const document = SwaggerModule.createDocument(app, swaggerDocumentOptions); /** check if there is Public decorator for each path (action) and its method (findMany / findOne) on each controller */ @@ -99,7 +98,6 @@ async function main() { }); SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); - } const { httpAdapter } = app.get(HttpAdapterHost); app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); diff --git a/websites/docs/package.json b/websites/docs/package.json index 5cc117f9a9..59eab95035 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@algolia/client-search": "^4.13.1", - "@astrojs/mdx": "0.18.4", + "@astrojs/mdx": "0.19.7", "@astrojs/react": "^2.2.1", "@astrojs/solid-js": "^1.2.3", "@astrojs/tailwind": "^4.0.0", @@ -32,6 +32,7 @@ "astro": "^2.6.6", "react": "^18.2.0", "react-dom": "^18.2.0", + "shiki": "^0.14.2", "solid-js": "^1.4.3" }, "devDependencies": { diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index bcd6590328..9bfaf73ce8 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -65,21 +65,37 @@ export const SIDEBAR: Sidebar = { learn: [ { group: `Getting started`, - sections: [{ text: `UI Flows`, link: `ui-flows` }], + sections: [ + { text: `Introduction`, link: `introduction` }, + { text: `Gloassry`, link: `gloassry` }, + { text: `Installation`, link: `installation` }, + { text: `Deployment`, link: `deployment` }, + ], }, { - group: `Start Here`, + group: `Guides`, sections: [ - { text: `Introduction`, link: `introduction` }, { - text: `Style Guidelines`, - link: `style-guidelines`, + text: `KYB Workflow with External Integrations`, + link: `simple-kyb-guide`, + }, + + { + text: `Creating a KYC UI Flow`, + link: `creating-a-kyc-flow-and-deploying-it`, }, - { text: `Contributing`, link: `contributing` }, ], }, { - group: `Basics`, + group: `Workflows`, + sections: [], + }, + { + group: `Case Managment`, + sections: [], + }, + { + group: `UI SDK's`, sections: [ { text: `SDK Events`, link: `sdk-events` }, { text: `SDK Backend Configuration`, link: `sdk-backend-configuration` }, @@ -97,15 +113,18 @@ export const SIDEBAR: Sidebar = { }, ], }, + { - group: `Guides`, + group: `Contributing`, sections: [ { - text: `Creating a KYC flow and deploying it`, - link: `creating-a-kyc-flow-and-deploying-it`, + text: `Style Guidelines`, + link: `style-guidelines`, }, + { text: `Contributing`, link: `contributing` }, ], }, + { group: `Examples`, sections: [ diff --git a/websites/docs/src/pages/en/learn/deployment.md b/websites/docs/src/pages/en/learn/deployment.md new file mode 100644 index 0000000000..a2e98c7b25 --- /dev/null +++ b/websites/docs/src/pages/en/learn/deployment.md @@ -0,0 +1,47 @@ +--- +title: Deployment +description: +layout: '../../../layouts/MainLayout.astro' +--- +## Deployment Guide + +### Docker Compose Deployment + +1. **Clone the project**: Use Git to clone the Ballerine repository to your local machine: + ```shell + git clone https://github.com/ballerine-io/ballerine.git && cd ballerine + ``` + +2. **Switch to the main branch**: After cloning, switch to the main branch (or the branch you wish to deploy): + ```shell + git checkout main + ``` + +3. **Run Docker Compose**: Now, you can start all services using Docker Compose: + ```shell + docker-compose up -d + ``` + +The application should now be running at the ports defined in your Docker Compose configuration. + +### Kubernetes Deployment (Helm) + +1. **Add the Ballerine Chart Repo**: Add the Helm chart repository that contains the Ballerine charts: + ```shell + helm repo add ballerine https://helm.ballerine.io + ``` + +2. **Update your Helm Repo**: Fetch the latest version of the Helm chart from the repo: + ```shell + helm repo update + ``` + +3. **Install the Ballerine Chart**: Now you can install the Ballerine Helm chart onto your Kubernetes cluster: + ```shell + helm install ballerine ballerine/ballerine + ``` + +By default, the application will be deployed on your default namespace. You can specify a different namespace by adding `-n <namespace>` at the end of the `helm install` command. + +Always refer to the official documentation of Ballerine for more specific configuration and deployment details. + diff --git a/websites/docs/src/pages/en/learn/gloassry.md b/websites/docs/src/pages/en/learn/gloassry.md new file mode 100644 index 0000000000..17d92e1fde --- /dev/null +++ b/websites/docs/src/pages/en/learn/gloassry.md @@ -0,0 +1,91 @@ +--- +title: Gloassry +description: This page provides a glossary of key terms and concepts related to the Ballerine project, offering brief explanations of the system components, processes, etc.. +layout: ../../../layouts/MainLayout.astro +--- +# Glossary + +- **Ballerine**: An open-source user risk decisioning infrastructure that helps companies automate their decisions for customer and business account-opening (KYC, KYB), underwriting, and transaction monitoring. + +- **KYC**: Know Your Customer. It is the process of verifying the identity of customers to ensure they are legitimate and not involved in illegal activities. + +- **KYB**: Know Your Business. Similar to KYC, it is the process of verifying the identity of businesses to ensure they are legitimate and comply with regulations. + +- **Rules & Workflow Engine**: A component of Ballerine that orchestrates and automates the different parts of the system using a flexible rules and workflow engine. + +- **Plugin System**: A component of Ballerine that integrates with third-party vendors, APIs, and data sources to enhance its functionality and capabilities. + +- **Back Office**: A case management dashboard in Ballerine that allows manual decision-making and review of user profiles and documents. + +- **Frontend Headless SDK**: Ballerine's software development kit that enables real-time modification of KYC/KYB frontend user journeys. + +- **User Flows UX/UI**: Community-driven building blocks in Ballerine that provide KYC/KYB/document collection flows and user interfaces for mobile and web applications. + +- **Rule Engine**: A component of Ballerine that leverages various rule types to ensure user compliance with risk policies. + +- **Workflow**: A sequence of steps and actions defined in Ballerine to automate and manage the user risk decisioning process. + +- **Community**: The active and engaged group of developers, users, and contributors who support and contribute to the development and improvement of Ballerine. + +- **Discord**: An online communication platform where the Ballerine community gathers to discuss and collaborate on the project. + +- **Slack**: Another online communication platform used by the Ballerine community for discussions, support, and collaboration. + +- **Issues**: The section on GitHub where users can report bugs, suggest new features, and participate in discussions related to Ballerine. + +- **Pull Request**: A way for developers to contribute to Ballerine by proposing changes to the codebase. + +- **CI**: Continuous Integration. It is a development practice where changes to the codebase are frequently integrated and tested to ensure early detection of issues. + +- **Release**: A specific version of Ballerine that is marked as a stable and official release. + +- **Roadmap**: A high-level plan or timeline that outlines the future development and features of Ballerine. + +- **Contributing**: The process of actively participating and contributing to the Ballerine project, such as providing feedback, reporting bugs, or submitting code changes. + +- **Open Source**: A development approach where the source code of a software project is made freely available for anyone to view, use, modify, and distribute. + +Please note that this glossary provides a brief explanation of key terms related to Ballerine and may not cover all possible definitions or variations of the terms. + + +## Glossary + +**1. Ballerine**: A case management system that allows businesses to optimize manual work, enhance teamwork, and monitor productivity. + +**2. Workflow**: A series of interconnected tasks in Ballerine that make up a process, like KYC (Know Your Customer) or document approval. + +**3. Case**: A specific instance of a workflow in Ballerine, representing a unique process for an individual enduser or business. + +**4. Task**: An individual operation or step within a workflow in Ballerine, such as document selection or review. + +**5. Event**: An occurrence in Ballerine that can initiate tasks, change the state of a case, or trigger workflows. + +**6. UI Component**: An element of the Ballerine user interface, designed to be versatile for various workflow needs. + +**7. State**: A snapshot of a case in Ballerine at a specific point in a workflow, helping track progression and manage tasks. + +**8. User**: An operator or employee managing and operating Ballerine for their organization, such as reviewing cases or making decisions. + +**9. Enduser**: The subject of a case in Ballerine, usually a customer or an individual entity undergoing the process outlined by a workflow. + +**10. Business**: A client entity in Ballerine, undergoing a series of tasks defined in the workflow, similar to an enduser but with potential for more complexity due to multiple associated individuals or documents. + +**11. Rules Engine**: A component of Ballerine that applies predefined business rules to automate decisions within workflows. + +**12. XState**: The library upon which Ballerine's workflows are built, providing state machine and statechart capabilities to model complex workflows. + +**13. Statecharts**: A method of modeling system behavior (workflows) in Ballerine, showing the interaction between states and transitions. + +**14. Document Review**: A task in Ballerine workflows where users review documents submitted by endusers or businesses. + +**15. Manual Review**: A process in Ballerine where users manually evaluate a case, potentially approving, rejecting, or asking for more information. + +**16. Selfie Review**: A task within certain Ballerine workflows where a selfie provided by an enduser is reviewed for validation purposes. + +**17. Final State**: The concluding state of a workflow in Ballerine, marking the completion of a case. + +**18. KYC (Know Your Customer)**: A type of workflow in Ballerine that verifies the identity of endusers, ensuring that they're real and legitimate entities. + +**19. KYB (Know Your Business)**: A type of workflow in Ballerine that verifies the legitimacy of a business, considering multiple UBOs, documents, and other collected information. + +**20. RBAC (Role-Based Access Control)**: A feature in Ballerine that limits system access to authorized users based on their roles within the organization. diff --git a/websites/docs/src/pages/en/learn/installation.md b/websites/docs/src/pages/en/learn/installation.md new file mode 100644 index 0000000000..9d6725aaad --- /dev/null +++ b/websites/docs/src/pages/en/learn/installation.md @@ -0,0 +1,88 @@ +--- +title: Ballerine Installation +description: his guide provides a step-by-step process for setting up and running the Ballerine stack on your local environment. +layout: '../../../layouts/MainLayout.astro' +--- + +## Installation Guide + +### Prerequisites +Before you can install and use Ballerine, you will need the following: + +1. **Node.js**: Ballerine requires Node.js. If not installed, download and install it from [here](https://nodejs.org/). + +2. **pnpm**: This is a fast, disk space efficient package manager for JavaScript. You can install it globally with the following command: + ``` + npm install -g pnpm + ``` + +### Installation Steps + +1. **Clone the project**: Use Git to clone the Ballerine repository to your local machine: + ```shell + git clone https://github.com/ballerine-io/ballerine.git && cd ballerine + ``` + +2. **Switch to the dev branch**: After cloning, switch to the development branch: + ```shell + git checkout dev + ``` + +3. **Install dependencies**: Use pnpm to install all the required dependencies: + ```shell + pnpm install + ``` + +4. **Initialize the monorepo**: The project is set up as a monorepo. Initialize it using the following command: + ```shell + pnpm run monorepo:init + ``` + +5. **Start the API example**: To start the example API, use the following command: + ```shell + pnpm run api-manual-review-example + ``` + +After performing these steps, the backoffice should be running on http://localhost:5137/, and the workflow service will be accepting calls at http://localhost:3000/. + +The default username and password for the backoffice are: + +- Username: admin@admin.com +- Password: admin + + + + +v2 + +To set up a local environment, follow these steps: + +1. #### Install prerequisites: + - Node.js (Minimum version 18) (you can install node via NVM: [Install NVM](https://github.com/nvm-sh/nvm)) + - Latest PNPM version (Minimum version 8.0) ([Install PNPM](https://pnpm.io/installation)) + - Docker and docker compose ([Docker](https://docs.docker.com/desktop), [Docker Compose](https://docs.docker.com/compose/install)) + +2. #### Clone and install the project: + 1. Clone the project: + ```sh + git clone https://github.com/ballerine-io/ballerine.git + ``` + 2. Install npm depenencies: + ```sh + pnpm install + ``` + 3. Initialize monorepo: + ```sh + pnpm monorepo:init + ``` + +3. #### Run the example + ```sh + pnpm kyc-manual-review-example + ``` + +Once the process is complete, _2 tabs_ will open in your browser: + +1. http://localhost:5173/ - for the _document collection flow_ +2. http://localhost:5137/ - for the _backffice_ +(It's recommended to have them positioned side-by-side). \ No newline at end of file diff --git a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx new file mode 100644 index 0000000000..f29ad36d84 --- /dev/null +++ b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx @@ -0,0 +1,299 @@ +--- +title: Simple KYB Workflow +description: Learn how to create a KYC flow, customize its UI, and deploy it +layout: ../../../layouts/MainLayout.astro +--- + +This guide will walk you through implementing a Know Your Business (KYB) workflow using Ballerine's system. We'll start with a simple onboarding workflow for a company, then show you how to adjust it for automatic approval. + + +## Preparing Your Environment + +Before we proceed with the workflow execution, we need to set up our environment. + +Please follow the [installation guide](LINK_TO_INSTALLATION_GUIDE) to install all the project dependencies. This guide will walk you through all the necessary steps to get your system ready for running the Ballerine projects. + +Once you've installed all the dependencies, run the following command to start both the workflow service and the backoffice (case management project): + +```bash +pnpm api-flow-example +``` + +The `api-flow-example` is a script that runs two essential services: + +1. **Workflow service**: Handles the main business logic for workflows, from execution to transitioning between different states. + +2. **Backoffice**: Acts as the case management system where you can manually review cases, approve or reject them based on the information provided. It will run at [http://localhost:5137/](http://localhost:5137/). To log in, use the following credentials: + + * **Username:** admin@admin.com + * **Password:** admin + +With your environment set up and both services running, you're ready to implement and run the KYB workflow. Let's proceed to the next section. + +## Workflow Definition + +The workflow we're going to use is predefined, meaning it is already inserted into the database during the seeding process. + +This workflow is defined using a statechart definition implemented under the hood with [XState](https://xstate.js.org/docs/). If you're unfamiliar with state machines or XState, we recommend reviewing the XState documentation for a detailed explanation. + +Here is the complete workflow definition: +(See the full file on GitHub [add link]) + +```json +{ + "id": "dynamic_external_request_example", + "name": "dynamic_external_request_example", + "version": 1, + "definitionType": "statechart-json", + "definition": { + "id": "kyb_example_v1", + "initial": "idle", + "states": { + "idle": { + "on": { + "start": "check_business_details" + } + }, + "check_business_details": { ... }, + "manual_review": { ... }, + "auto_approve": { ... }, + "auto_reject": { ... }, + "reject": { ... }, + "approve": { ... }, + "revision": { ... } + } + }, + "extensions": { ... } +} + +``` + +Here is the workflow vizualztion in xState visualizer: + + +Let's break down some crucial parts: + +1. **State Machine Definition**: The core of our workflow is a state machine that defines various states and the conditions for transitions between them. This definition is based on the XState library. + +```json +"definition": { + "id": 'kyb_example_v1', + "predictableActionArguments": true, + "initial": 'idle', + ... +}, +``` + +2. **Check Business Details State**: This state is responsible for making an external call to enrich business data and calculate a fuzziness score for the company name. + +```json +"check_business_details": { + ... +{ + "target": "auto_approve", + "cond": { + "type": "json-logic", + "rule": { + "or": [ + { + "==": [ + { "var": "context.entity.companyName" }, + { "var": "response.data.registered_name" }, + ], + }, + { + ">=": [ + { "var": "context.external_request_example.data.name_fuzziness_score" }, + 0.8, + ], + }, + ], + }, + }, +} + + ... +}, +``` + +3. **API Plugins**: API plugins allow the workflow to interact with external services. For example, 'business_data_vendor' plugin fetches business data from an external URL. + +```json +"apiPlugins": [ + { + "name": 'business_data_vendor', + "url": 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/{api_url}.json', + ... + }, + ... +] +``` + +## Running the KYB Workflow + +### Creating a New Workflow Instance + +To create a new workflow instance, execute the following `curl` command: + +```bash +curl -X POST --location 'http://localhost:3000/api/v1/external/workflows/run' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer secret' \ +--data '{ + "workflowId": "dynamic_external_request_example", + "context": { + "entity": { + "id": "company_id_22113243", + "data": { + "companyName": "ABC Company", + "registrationNumber": "123456789", + "legalForm": "Business Services", + "countryOfIncorporation": "United States", + "dateOfIncorporation": "2003-05-12T14:36:24.173Z", + "address": "123 Main Street", + "phoneNumber": "+1 (555) 123-4567", + "email": "info@abccompany.com", + "website": "http://www.abccompany.com", + "industry": "Innovative Solutions", + "taxIdentificationNumber": "987654321012", + "vatNumber": "123456789", + "numberOfEmployees": 250, + "businessPurpose": "Cutting-edge Technology", + "approvalState": "NEW", + "additionalInfo": { + "customParam": "customValue" + } + }, + "type": "business" + }, + "documents": [ + { + "category": "proof_of_address", + "type": "water_bill", + "issuer": { + "country": "GH" + }, + "pages": [ + { + "provider": "http", + "uri": "https://www.africau.edu/images/default/sample.pdf", + "metadata": { + "side": "front", + "pageNumber": "1" + }, + "type": "pdf" + } + ], + "properties": { + "docNumber": "1234", + "userAddress": "Turkey, buhgdawe" + }, + "version": "1", + "issuingVersion": 1 + } + ], + "api_config": { + "url": "business_test_eu", + "special_header": "very_special" + } + } +}' +``` + +This command creates a new workflow instance, which upon successful execution, provides you with a response containing `workflowDefinitionId`, `workflowRuntimeId`, and `ballerineEntityId`. +An example of the response: + +```json +{ + "workflowDefinitionId":"dynamic_external_request_example", + "workflowRuntimeId":"[TAKE THIS VALUE TO THE THE FOLLOWING REQUEST]", + "ballerineEntityId":"clj6uxa650006ruhvbcfvvhgh" +} +``` + +### Sending Event to a Workflow + +To initiate the workflow, send the `start` event. This action triggers the data enrichment process. + +```bash +curl -X POST 'http://localhost:3000/api/v1/external/workflows/[WORKFLOW RUNTIME ID HERE]/send-event' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer secret' \ +--data '{"name": "start"}' + +``` + +## What Happens Next? + +After you send the `start` event to the workflow, the system moves the workflow to the `check_business_details` state. In this state, it triggers the `external_request_example` plugin, which makes a GET request to an external URL to enrich the business data. The plugin also calculates a fuzziness score between the registered business name and the one provided in the input. + +The workflow then evaluates several conditions based on the fuzziness score. Let's take a closer look at one of them: + +```json +{ + "target": "manual_review", + "cond": { + "type": "json-logic", + "options": { + "rule": { + ">": [ + { "var": "pluginsOutput.external_request_example.name_fuzziness_score" }, + 0.5 + ] + }, + "onFailed": { "manualReviewReason": "name not matching ... " } + } + } +} +``` +Here, the workflow checks whether the fuzziness score is above 0.5. If the score is above this threshold, the workflow moves to the `manual_review` state, and the reason for manual review is set to "name not matching ...". + +Should the workflow move to the `manual_review` state, you can then proceed to the backoffice (http://localhost:5137/) using your login credentials (admin@admin.com, admin). There, you will see the case awaiting your review. You have the power to either approve or reject it based on the information provided. Once you make your decision, the system will notify you of the outcome via a webhook event. + +Let's learn more about how to customize the workflow to suit your specific needs in the next section. +# Adjusting the Workflow + +Let's tweak the workflow for automatic approval and for sending updates to your backend on workflow completion. + +### Setting Up Webhooks + +Visit [Webhook.site](https://webhook.site) to get your webhook URLs. Replace the `url` field under the `finish_webhook` and `fail_webhook` plugins in your workflow definition with your webhook URLs. + +## Changing Approval Threshold + +By default, the rule we discussed in the Workflow Definition section will auto-approve the business if the fuzziness score is 0.8 or higher. However, you might want to adjust this threshold to be stricter or more lenient based on your needs. + +Let's make the fuzziness score threshold stricter. Change the second condition in the `API_CALL_SUCCESS` rule from 0.8 to 0.9: + +```json +{ + "target": "auto_approve", + "cond": { + "type": "json-logic", + "rule": { + "or": [ + { + "==": [ + { "var": "context.entity.companyName" }, + { "var": "response.data.registered_name" }, + ], + }, + { + ">=": [ + { "var": "context.external_request_example.data.name_fuzziness_score" }, + 0.9, + ], + }, + ], + }, + }, +} +``` + +With this change, the rule now reads: auto-approve the business if either the company name provided matches the registered name, or if the fuzziness score is 0.9 or higher. This makes the approval criteria more stringent, requiring a higher match level between the provided company name and the registered name. + +Remember to save the changes you've made to the workflow definition. Once the changes are saved, you'll need to restart the services to reflect these changes. Run the command `pnpm api-flow-example` again in your terminal. + +Now, when you send a start event to a new workflow instance, it will follow the updated approval criteria. If the new criteria are met, the workflow will proceed to auto-approval and a webhook will be sent to notify about this decision. This allows for quick notifications of automated decisions, improving the speed of your KYB process. + +In the next section, we'll guide you on how to set up a webhook and receive notifications about workflow state changes. From 8343bde11bc1ebb0a9e760cc27adedbe73153eb0 Mon Sep 17 00:00:00 2001 From: nitzanballerine <109664420+nitzanballerine@users.noreply.github.com> Date: Fri, 23 Jun 2023 07:11:05 +0300 Subject: [PATCH 062/123] Update simple-kyb-guide.mdx (#586) --- .../src/pages/en/learn/simple-kyb-guide.mdx | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx index f29ad36d84..b5224dbc58 100644 --- a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx +++ b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx @@ -4,14 +4,22 @@ description: Learn how to create a KYC flow, customize its UI, and deploy it layout: ../../../layouts/MainLayout.astro --- -This guide will walk you through implementing a Know Your Business (KYB) workflow using Ballerine's system. We'll start with a simple onboarding workflow for a company, then show you how to adjust it for automatic approval. +This guide will walk you through implementing a Know Your Business (KYB) workflow using Ballerine's system. + +The capabilities that will be showcased can be utilized to: +1. Create decisioning workflows. +2. Create and configure rules inside a workflow. +3. Use external sources as part of a workflow. + +We'll start with a simple onboarding workflow for a company, enriching it's data using an external source, and send it to a manual review in Ballerine's back office. Then, we'll show you how to adjust the rules for automatic approval, skipping the manual approval step. ## Preparing Your Environment Before we proceed with the workflow execution, we need to set up our environment. -Please follow the [installation guide](LINK_TO_INSTALLATION_GUIDE) to install all the project dependencies. This guide will walk you through all the necessary steps to get your system ready for running the Ballerine projects. +Please follow the [installation guide](LINK_TO_INSTALLATION_GUIDE) to install all the project dependencies. +This guide will walk you through all the necessary steps to get your system ready for running the Ballerine projects. Once you've installed all the dependencies, run the following command to start both the workflow service and the backoffice (case management project): @@ -23,18 +31,22 @@ The `api-flow-example` is a script that runs two essential services: 1. **Workflow service**: Handles the main business logic for workflows, from execution to transitioning between different states. -2. **Backoffice**: Acts as the case management system where you can manually review cases, approve or reject them based on the information provided. It will run at [http://localhost:5137/](http://localhost:5137/). To log in, use the following credentials: +2. **Backoffice**: Acts as the case management system where you can manually review cases, approve or reject them based on the information provided. +It will run at [http://localhost:5137/](http://localhost:5137/). +To log in, use the following credentials: * **Username:** admin@admin.com * **Password:** admin -With your environment set up and both services running, you're ready to implement and run the KYB workflow. Let's proceed to the next section. +With your environment set up and both services running, you're ready to implement and run the KYB workflow. +Let's proceed to the next section. ## Workflow Definition The workflow we're going to use is predefined, meaning it is already inserted into the database during the seeding process. -This workflow is defined using a statechart definition implemented under the hood with [XState](https://xstate.js.org/docs/). If you're unfamiliar with state machines or XState, we recommend reviewing the XState documentation for a detailed explanation. +This workflow is defined using a statechart definition implemented under the hood with [XState](https://xstate.js.org/docs/). +If you're unfamiliar with state machines or XState, we recommend reviewing the XState documentation for a detailed explanation. Here is the complete workflow definition: (See the full file on GitHub [add link]) @@ -73,7 +85,8 @@ Here is the workflow vizualztion in xState visualizer: Let's break down some crucial parts: -1. **State Machine Definition**: The core of our workflow is a state machine that defines various states and the conditions for transitions between them. This definition is based on the XState library. +1. **State Machine Definition**: The core of our workflow is a state machine that defines various states and the conditions for transitions between them. +This definition is based on the XState library. ```json "definition": { @@ -213,7 +226,8 @@ An example of the response: ### Sending Event to a Workflow -To initiate the workflow, send the `start` event. This action triggers the data enrichment process. +To initiate the workflow, send the `start` event. +This action triggers the data enrichment process. ```bash curl -X POST 'http://localhost:3000/api/v1/external/workflows/[WORKFLOW RUNTIME ID HERE]/send-event' \ @@ -225,9 +239,12 @@ curl -X POST 'http://localhost:3000/api/v1/external/workflows/[WORKFLOW RUNTIME ## What Happens Next? -After you send the `start` event to the workflow, the system moves the workflow to the `check_business_details` state. In this state, it triggers the `external_request_example` plugin, which makes a GET request to an external URL to enrich the business data. The plugin also calculates a fuzziness score between the registered business name and the one provided in the input. +After you send the `start` event to the workflow, the system moves the workflow to the `check_business_details` state. +In this state, it triggers the `external_request_example` plugin, which makes a GET request to an external URL to enrich the business data. +The plugin also calculates a fuzziness score between the registered business name and the one provided in the input. -The workflow then evaluates several conditions based on the fuzziness score. Let's take a closer look at one of them: +The workflow then evaluates several conditions based on the fuzziness score. +Let's take a closer look at one of them: ```json { @@ -246,9 +263,13 @@ The workflow then evaluates several conditions based on the fuzziness score. Let } } ``` -Here, the workflow checks whether the fuzziness score is above 0.5. If the score is above this threshold, the workflow moves to the `manual_review` state, and the reason for manual review is set to "name not matching ...". +Here, the workflow checks whether the fuzziness score is above 0.5. +If the score is above this threshold, the workflow moves to the `manual_review` state, and the reason for manual review is set to "name not matching ...". -Should the workflow move to the `manual_review` state, you can then proceed to the backoffice (http://localhost:5137/) using your login credentials (admin@admin.com, admin). There, you will see the case awaiting your review. You have the power to either approve or reject it based on the information provided. Once you make your decision, the system will notify you of the outcome via a webhook event. +In case the workflow move to the `manual_review` state, you can then proceed to the backoffice (http://localhost:5137/) using your login credentials (admin@admin.com, admin). +There, you will see the case awaiting your review. +You have the power to either approve or reject it based on the information provided. +Once you make your decision, the system will notify you of the outcome via a webhook event. Let's learn more about how to customize the workflow to suit your specific needs in the next section. # Adjusting the Workflow @@ -263,7 +284,8 @@ Visit [Webhook.site](https://webhook.site) to get your webhook URLs. Replace the By default, the rule we discussed in the Workflow Definition section will auto-approve the business if the fuzziness score is 0.8 or higher. However, you might want to adjust this threshold to be stricter or more lenient based on your needs. -Let's make the fuzziness score threshold stricter. Change the second condition in the `API_CALL_SUCCESS` rule from 0.8 to 0.9: +Let's make the fuzziness score threshold stricter. +Change the second condition in the `API_CALL_SUCCESS` rule from 0.8 to 0.9: ```json { @@ -290,9 +312,11 @@ Let's make the fuzziness score threshold stricter. Change the second condition i } ``` -With this change, the rule now reads: auto-approve the business if either the company name provided matches the registered name, or if the fuzziness score is 0.9 or higher. This makes the approval criteria more stringent, requiring a higher match level between the provided company name and the registered name. +With this change, the rule now reads: auto-approve the business if either the company name provided matches the registered name, or if the fuzziness score is 0.9 or higher. +This makes the approval criteria more stringent, requiring a higher match level between the provided company name and the registered name. -Remember to save the changes you've made to the workflow definition. Once the changes are saved, you'll need to restart the services to reflect these changes. Run the command `pnpm api-flow-example` again in your terminal. +Remember to save the changes you've made to the workflow definition. +Once the changes are saved, you'll need to restart the services to reflect these changes. Run the command `pnpm api-flow-example` again in your terminal. Now, when you send a start event to a new workflow instance, it will follow the updated approval criteria. If the new criteria are met, the workflow will proceed to auto-approval and a webhook will be sent to notify about this decision. This allows for quick notifications of automated decisions, improving the speed of your KYB process. From d6417e16f52c802088803c86e7a72a06f589c704 Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Fri, 23 Jun 2023 07:56:21 +0300 Subject: [PATCH 063/123] Tech/feat/dynamic workflows (#538) * opening branch * Blokh/feat/trans valid interface (#539) * feat(added transformation interface): add transformation and validation interfaces add transformation and validation interfaces for pre-transition and post transition actions * feat(added validator): added validator functionality add validator functionality * feat(fixed minor issues): fixed issues with schema validator fixed issue with schema validator * remove install * updated added types to common and refactored interfaces to abstract classes * fixed common - error with message * feat(ran format): ran format ran format * feat(updated base workers): updated base workfers for transform and validator * feat: support api plugins (#543) * add kyb w/ external request (#541) * feat(examples-kyb): kyb example w/ external request * feat(examples-kyb): kyb example w/ external request * feat: support api plugins * merged with trans and validator * refactor: pr fix * style: cleanup --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: blokh <danielblokhi@gmail.com> * workflow core rules cap (#542) * workflow rules draft 1 * event works * feat(wf-rules): basic rules functionality * Blokh/feat/api plugin trans validator (#549) * feat: support api plugins * merged with trans and validator * refactor: pr fix * generate api plugin entity * feat(generate api plugin): generate api plugin * removed unused packages * removed unused packages * feat(merged with dynamic workflow): merged with dynamic workflow --------- Co-authored-by: yairp <yair.perman@gmail.com> * fixed tests * fixed tests * feat(added tests functionality): finalized dynamic api plugin (#557) * feat(added tests functionality): added multiple tests functionality added multiple tests, handled error, tested payload * wrapped describe * feat(finished test logic + code): finished test logic + code finished test logic + code * merged with feature branch * updated pluginsOutput as all extentions output * removed duplicated imports * fixed import * fixed iapiconfig mport * updated test issues * fixed lint issues * Blokh/feat/e 2 e test (#577) * fix(swagger): dont open swagger in dev/prod (#533) * add timestamps to workflow webhooks (#561) * feat(wrofkflow webhooks): add timestamps to wrokflow webhooks * feat(wh): add timestamps to workflows webhooks \ * fixed tests * fixed tests * generate webhook plugin * generate branch for api * fix(docs): update astro (#565) * fix(docs): update astro * fixed tests * merged with pull * finished with webhook plugin * fixed test * refactor(*): GET /workflows per entity instead of query params (#558) * refactor(*): gET /workflows now uses query instead of param for entity id and type * refactor(workflows-service): now using an endpoint per entity instead of using query params * refactor(workflows-service): refactored new endpoints to be DRY * fix(workflows-service): added missing nestjs module dependencies * refactor(workflows-service): removed redundant usage of the @UserData decorator * fix(tests): fixed broken tests * fix(ci): trying to fix tests * fix(workflows-service): added missing prisma service dependency * fix(tests): refactored the endpoint the internal unit test uses --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> * updated webhook url + logic in e2e * finalize e2e runner test full flow * generated e2e seed workflow * feat(updated seed for e2e test): updated seed for e2e test * fix(webhooks): fix resolved ata (#574) * fix(webhooks): fix resolved ata * fixed test * fixed test * added send-event endpoint * generation of extentions by workflow definition * added return on workflow node-sdk dependency * refactor(backoffice-v2): merged re-submit and reject into a single dialog (#578) * feat(backoffice-v2): added rotate button to selected image (#576) * finalize testing full flow * feat(backoffice-v2): added a content block to display plugin output (#581) --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> * feat(merged with dev): merged with dev * generated fetchObjectPlaceholderValue in api plugin * fixed lint * fixed some tests * ran foramt * removed weird test bug * removed test * merged with dev * added plugin logo * updated test schema * merged with dev * merged with dev * merged with dev * merged with dev * merged with dev * merged with dev --------- Co-authored-by: Yair Perman <yair.perman@gmail.com> Co-authored-by: Alon Peretz <Alonp99@gmail.com> Co-authored-by: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> --- .vscode/launch.json | 61 +- apps/backoffice-v2/package.json | 4 +- package.json | 2 +- packages/common/src/index.ts | 3 + .../common/src/types/any-record/any-record.ts | 1 + packages/common/src/types/any-record/index.ts | 1 + packages/common/src/types/index.ts | 1 + packages/common/src/utils/index.ts | 1 + .../src/utils/is-error-with-message/index.ts | 1 + packages/config/eslintrc.base.cjs | 5 +- packages/workflow-core/package.json | 6 + packages/workflow-core/rollup.config.ts | 35 +- packages/workflow-core/src/lib/index.ts | 6 +- .../external-plugin/api-plugin.test.ts | 166 ++++ .../lib/plugins/external-plugin/api-plugin.ts | 162 ++++ .../external-plugin/webhook-plugin.test.ts | 82 ++ .../plugins/external-plugin/webhook-plugin.ts | 33 + .../workflow-core/src/lib/plugins/types.ts | 30 + packages/workflow-core/src/lib/types.ts | 34 +- .../context-transformers/qj-transformer.ts | 19 + .../lib/utils/context-transformers/types.ts | 12 + .../json-schema-validator.ts | 28 + .../src/lib/utils/context-validator/types.ts | 15 + packages/workflow-core/src/lib/utils/types.ts | 7 + .../src/lib/workflow-runner.test.ts | 93 ++- .../workflow-core/src/lib/workflow-runner.ts | 109 ++- pnpm-lock.yaml | 724 ++++++++++++++++-- sdks/workflow-browser-sdk/package.json | 1 + sdks/workflow-browser-sdk/rollup.config.ts | 5 +- sdks/workflow-node-sdk/package.json | 1 + sdks/workflow-node-sdk/rollup.config.ts | 72 +- .../src/lib/workflow-node-sdk.ts | 2 +- services/workflows-service/scripts/seed.ts | 55 ++ .../workflows/e2e-dynamic-url-example.ts | 219 ++++++ ...use-key-auth-or-session-guard.decorator.ts | 4 + services/workflows-service/src/main.ts | 18 +- .../workflows-service/src/test/db-teardown.ts | 2 +- .../src/test/helpers/database-helper.ts | 2 +- .../workflow/workflow.controller.external.ts | 16 + .../src/workflow/workflow.service.ts | 3 +- websites/docs/src/config.ts | 2 +- .../docs/src/pages/en/learn/back-office.md | 2 +- 42 files changed, 1825 insertions(+), 220 deletions(-) create mode 100644 packages/common/src/types/any-record/any-record.ts create mode 100644 packages/common/src/types/any-record/index.ts create mode 100644 packages/common/src/types/index.ts create mode 100644 packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts create mode 100644 packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts create mode 100644 packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts create mode 100644 packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts create mode 100644 packages/workflow-core/src/lib/plugins/types.ts create mode 100644 packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts create mode 100644 packages/workflow-core/src/lib/utils/context-transformers/types.ts create mode 100644 packages/workflow-core/src/lib/utils/context-validator/json-schema-validator.ts create mode 100644 packages/workflow-core/src/lib/utils/context-validator/types.ts create mode 100644 packages/workflow-core/src/lib/utils/types.ts create mode 100644 services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts create mode 100644 services/workflows-service/src/common/decorators/use-key-auth-or-session-guard.decorator.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 48b0718767..90d30a5cd7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,29 +1,34 @@ { - // 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": [ - { - "name": "Attach", - "port": 9229, - "request": "attach", - "skipFiles": [ - "<node_internals>/**" - ], - "type": "node" - }, - { - "type": "node", - "request": "launch", - "name": "Launch Program", - "skipFiles": [ - "<node_internals>/**" - ], - "program": "${workspaceFolder}/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts", - "outFiles": [ - "${workspaceFolder}/**/*.js" - ] - } - ] -} \ No newline at end of file + // 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": [ + { + "name": "Attach", + "port": 9229, + "request": "attach", + "skipFiles": ["<node_internals>/**"], + "type": "node" + }, + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "skipFiles": ["<node_internals>/**"], + "program": "${workspaceFolder}/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts", + "outFiles": ["${workspaceFolder}/**/*.js"] + }, + { + "type": "node", + "request": "launch", + "name": "Debug Current Test File", + "autoAttachChildProcesses": true, + "skipFiles": ["<node_internals>/**", "**/node_modules/**"], + "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", + "args": ["run", "${relativeFile}"], + "smartStep": true, + "console": "integratedTerminal" + } + ] +} diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 73d3db2dcd..a6c13d0364 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -30,8 +30,8 @@ "not IE 11" ], "engines": { - "node": ">=14", - "yarn": ">=1.22.5" + "node": ">=18.0.0", + "pnpm": ">=8.0.0" }, "scripts": { "format": "prettier --plugin-search-dir=. --write .", diff --git a/package.json b/package.json index 8110c837c2..4a3321fc36 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "monorepo:init": "node ./scripts/init.js", "kyc-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyc concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", "kyb-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyb concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", - "api-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=false VITE_EXAMPLE_TYPE=kyb concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/backoffice-v2\"", + "api-flow-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=false VITE_EXAMPLE_TYPE=kyb concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/backoffice-v2\"", "branchlint": "branchlint -u -c --prefix \"$(git config --global user.name)\"", "format": "nx run-many --target=format", "format:check": "nx run-many --target=format:check --exclude=@ballerine/backoffice-v2", diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index d3a7893280..567907aa60 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -10,8 +10,11 @@ export { noNullish, sleep, uniqueArray, + type IErrorWithMessage, } from './utils'; +export { type AnyRecord } from './types'; + export { type DefaultContextSchema, type TDefaultSchemaDocumentPage, diff --git a/packages/common/src/types/any-record/any-record.ts b/packages/common/src/types/any-record/any-record.ts new file mode 100644 index 0000000000..6cabbc71bf --- /dev/null +++ b/packages/common/src/types/any-record/any-record.ts @@ -0,0 +1 @@ +export type AnyRecord = Record<PropertyKey, unknown>; diff --git a/packages/common/src/types/any-record/index.ts b/packages/common/src/types/any-record/index.ts new file mode 100644 index 0000000000..6845178874 --- /dev/null +++ b/packages/common/src/types/any-record/index.ts @@ -0,0 +1 @@ +export { AnyRecord } from './any-record'; diff --git a/packages/common/src/types/index.ts b/packages/common/src/types/index.ts new file mode 100644 index 0000000000..6845178874 --- /dev/null +++ b/packages/common/src/types/index.ts @@ -0,0 +1 @@ +export { AnyRecord } from './any-record'; diff --git a/packages/common/src/utils/index.ts b/packages/common/src/utils/index.ts index 31e6c55d6b..b293c4aaf0 100644 --- a/packages/common/src/utils/index.ts +++ b/packages/common/src/utils/index.ts @@ -9,3 +9,4 @@ export { isObject } from './is-object'; export { noNullish } from './no-nullish'; export { sleep } from './sleep'; export { uniqueArray } from './unique-array'; +export { type IErrorWithMessage } from './is-error-with-message'; diff --git a/packages/common/src/utils/is-error-with-message/index.ts b/packages/common/src/utils/is-error-with-message/index.ts index ec16ad5b03..b6718529c4 100644 --- a/packages/common/src/utils/is-error-with-message/index.ts +++ b/packages/common/src/utils/is-error-with-message/index.ts @@ -1 +1,2 @@ export { isErrorWithMessage } from './is-error-with-message'; +export { type IErrorWithMessage } from './interfaces'; diff --git a/packages/config/eslintrc.base.cjs b/packages/config/eslintrc.base.cjs index f6936a1aa1..6c9eac541e 100644 --- a/packages/config/eslintrc.base.cjs +++ b/packages/config/eslintrc.base.cjs @@ -17,9 +17,6 @@ module.exports = { rules: { 'no-unused-vars': 'off', // We use the unused-imports plugin instead 'unused-imports/no-unused-imports': 'error', - 'unused-imports/no-unused-vars': [ - 'warn', - { vars: 'all', args: 'after-used' }, - ], + 'unused-imports/no-unused-vars': ['warn', { vars: 'all', args: 'after-used' }], }, }; diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index d122d1bb35..3aafac5b5e 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -22,6 +22,7 @@ "watch": "tsc -w", "dev": "concurrently --kill-others \"pnpm build -w\" \"pnpm watch\"", "test": "vitest run", + "test:watch": "vitest", "test:unit": "vitest run" }, "engines": { @@ -29,7 +30,9 @@ }, "dependencies": { "@ballerine/common": "0.5.3", + "ajv": "^8.12.0", "json-logic-js": "^2.0.2", + "node-jq": "^2.3.5", "xstate": "^4.35.2" }, "devDependencies": { @@ -38,6 +41,7 @@ "@babel/preset-typescript": "7.16.7", "@rollup/plugin-babel": "5.3.1", "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "13.2.1", "@rollup/plugin-replace": "4.0.0", "@rollup/plugin-terser": "^0.4.0", @@ -57,6 +61,8 @@ "eslint-plugin-import": "^2.22.0", "eslint-plugin-unused-imports": "^2.0.0", "fs-extra": "^11.1.0", + "msw": "^1.2.2", + "node-fetch": "^3.3.1", "plugin-babel": "link:@types/@rollup/plugin-babel", "plugin-terser": "link:@types/@rollup/plugin-terser", "prettier": "^2.1.1", diff --git a/packages/workflow-core/rollup.config.ts b/packages/workflow-core/rollup.config.ts index fccb9ff4e8..1d6fe39d1f 100644 --- a/packages/workflow-core/rollup.config.ts +++ b/packages/workflow-core/rollup.config.ts @@ -10,6 +10,7 @@ import commonjs from '@rollup/plugin-commonjs'; import path from 'path'; import dts from 'rollup-plugin-dts'; import { readJsonSync } from 'fs-extra'; +import json from '@rollup/plugin-json'; type Options = { input: string; @@ -61,8 +62,7 @@ function buildConfigs(opts: { }): RollupOptions[] { const input = path.resolve('./', opts.entryFile); - const packageJson = - readJsonSync(path.resolve(process.cwd(), 'package.json')) ?? {}; + const packageJson = readJsonSync(path.resolve(process.cwd(), 'package.json')) ?? {}; const banner = createBanner(opts.name); @@ -100,7 +100,7 @@ function esm({ input, packageDir, external, banner }: Options): RollupOptions { banner, preserveModules: true, }, - plugins: [babelPlugin, nodeResolve({ extensions: ['.ts'] })], + plugins: [babelPlugin, json(), nodeResolve({ extensions: ['.ts'] })], }; } @@ -117,17 +117,11 @@ function cjs({ input, external, packageDir, banner }: Options): RollupOptions { exports: 'named', banner, }, - plugins: [babelPlugin, commonjs(), nodeResolve({ extensions: ['.ts'] })], + plugins: [babelPlugin, json(), commonjs(), nodeResolve({ extensions: ['.ts'] })], }; } -function umdDev({ - input, - umdExternal, - packageDir, - banner, - jsName, -}: Options): RollupOptions { +function umdDev({ input, umdExternal, packageDir, banner, jsName }: Options): RollupOptions { return { // UMD (Dev) external: umdExternal, @@ -142,19 +136,14 @@ function umdDev({ plugins: [ babelPlugin, commonjs(), + json(), nodeResolve({ extensions: ['.ts'] }), umdDevPlugin('development'), ], }; } -function umdProd({ - input, - umdExternal, - packageDir, - banner, - jsName, -}: Options): RollupOptions { +function umdProd({ input, umdExternal, packageDir, banner, jsName }: Options): RollupOptions { return { // UMD (Prod) external: umdExternal, @@ -169,6 +158,7 @@ function umdProd({ plugins: [ babelPlugin, commonjs(), + json(), nodeResolve({ extensions: ['.ts'] }), umdDevPlugin('production'), terser(), @@ -181,12 +171,7 @@ function umdProd({ }; } -function types({ - input, - packageDir, - external, - banner, -}: Options): RollupOptions { +function types({ input, packageDir, external, banner }: Options): RollupOptions { return { // TYPES external, @@ -196,7 +181,7 @@ function types({ file: `${packageDir}/dist/types/index.d.ts`, banner, }, - plugins: [dts()], + plugins: [dts(), json()], }; } diff --git a/packages/workflow-core/src/lib/index.ts b/packages/workflow-core/src/lib/index.ts index fb0f9818fc..553fe7f748 100644 --- a/packages/workflow-core/src/lib/index.ts +++ b/packages/workflow-core/src/lib/index.ts @@ -3,12 +3,12 @@ export { HttpError } from './errors'; export { Error, Errors, - StatePlugin, WorkflowEvent, WorkflowEventWithoutState, WorkflowOptions, WorkflowRunnerArgs, - PluginAction, - ExtensionRunOrder, WorkflowContext } from './types'; +export {StatePlugin} from "./plugins/types"; +export {PluginAction} from "./plugins/types"; +export {ExtensionRunOrder} from "./plugins/types"; diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts new file mode 100644 index 0000000000..0578ff7600 --- /dev/null +++ b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts @@ -0,0 +1,166 @@ +import { describe, expect, it } from 'vitest'; +import { WorkflowRunner } from '../../workflow-runner'; +import { IApiPluginParams } from './api-plugin'; +import { WorkflowRunnerArgs } from '../../types'; + +function createWorkflowRunner( + definition: WorkflowRunnerArgs['definition'], + apiPluginsSchemas: IApiPluginParams[], +) { + return new WorkflowRunner({ + definition, + extensions: { + apiPlugins: apiPluginsSchemas, + }, + workflowContext: { machineContext: { entity: { id: 'some_id' } } }, + }); +} + +describe('workflow-runner', () => { + describe('api plugins', () => { + const definition = { + initial: 'initial', + states: { + initial: { + on: { + CHECK_BUSINESS_SCORE: { + target: 'checkBusinessScore', + }, + }, + }, + checkBusinessScore: { + on: { + API_CALL_SUCCESS: 'checkBusinessScoreSuccess', + API_CALL_FAILURE: 'testManually', + }, + }, + checkBusinessScoreSuccess: { + type: 'final', + }, + testManually: { + type: 'final', + }, + }, + }; + + const apiPluginsSchemas = [ + { + name: 'ballerineEnrichment', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_us.json', + method: 'GET', + stateNames: ['checkBusinessScore'], + successAction: 'API_CALL_SUCCESS', + errorAction: 'API_CALL_FAILURE', + request: { + transform: { + transformer: 'jq', + mapping: '{data: .entity.id}', + }, + }, + response: { + transform: { transformer: 'jq', mapping: '{result: .}' }, + }, + }, + ]; + + describe('when api plugin tranforms and makes a request to an external api', () => { + const workflow = createWorkflowRunner(definition, apiPluginsSchemas); + it('it transitions to successAction and persist response to context', async () => { + await workflow.sendEvent('CHECK_BUSINESS_SCORE'); + + expect(workflow.state).toEqual('checkBusinessScoreSuccess'); + expect(workflow.context.pluginsOutput).toEqual({ + ballerineEnrichment: { + result: { + companyInfo: { + companyName: 'TestCorp Ltd', + industry: 'Software', + location: 'New York, USA', + country: 'US', + yearEstablished: 1995, + numberOfEmployees: 500, + ceo: 'John Doe', + products: ['Product A', 'Product B', 'Product C'], + website: 'www.testcorpltd.com', + }, + }, + }, + }); + }); + }); + + // describe('when api invalid jq transformation of request', () => { + // const apiPluginsSchemasCopy = structuredClone(apiPluginsSchemas); + // apiPluginsSchemasCopy[0].request.transform.mapping = 'dsa: .unknwonvalue.id}'; + // const workflow = createWorkflowRunner(definition, apiPluginsSchemasCopy); + // TODO: fix later + // it('it returns error for transformation and transition to testManually', async () => { + // await workflow.sendEvent('CHECK_BUSINESS_SCORE'); + // + // expect(workflow.state).toEqual('testManually'); + // expect(workflow.context.pluginsOutput).toEqual({ + // ballerineEnrichment: { + // error: + // 'Error transforming data: write EPIPE for transformer mapping: dsa: .unknwonvalue.id}', + // }, + // }); + // }); + // }); + + describe('when api plugin has schema', () => { + describe('when api request invalid for schema', () => { + const apiPluginsSchemasCopy = structuredClone(apiPluginsSchemas); + apiPluginsSchemasCopy[0].request.schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + business_name: { + type: 'string', + }, + registration_number: { + type: 'string', + }, + }, + required: ['business_name', 'registration_number'], + }; + const workflow = createWorkflowRunner(definition, apiPluginsSchemasCopy); + + it('it returns error for transformation and transition to testManually', async () => { + await workflow.sendEvent('CHECK_BUSINESS_SCORE'); + + expect(workflow.state).toEqual('testManually'); + expect(workflow.context.pluginsOutput).toEqual({ + ballerineEnrichment: { + error: + "must have required property 'business_name' | must have required property 'registration_number'", + }, + }); + }); + }); + + describe('when api request valid schema', () => { + const apiPluginsSchemasCopy = structuredClone(apiPluginsSchemas); + apiPluginsSchemasCopy[0].request.schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + data: { + type: 'string', + }, + }, + required: ['data'], + }; + const workflow = createWorkflowRunner(definition, apiPluginsSchemasCopy); + + it('it transitions to successAction and persist success (response) to context', async () => { + await workflow.sendEvent('CHECK_BUSINESS_SCORE'); + + expect(workflow.state).toEqual('checkBusinessScoreSuccess'); + expect(Object.keys(workflow.context.pluginsOutput.ballerineEnrichment)[0]).toEqual( + 'result', + ); + }); + }); + }); + }); +}); diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts new file mode 100644 index 0000000000..37bace299c --- /dev/null +++ b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts @@ -0,0 +1,162 @@ +import { TContext, TTransformers, TValidators } from '../../utils/types'; +import { AnyRecord, isErrorWithMessage } from '@ballerine/common'; +import * as process from "process"; + +export interface IApiPluginParams { + name: string; + stateNames: Array<string>; + url: string; + method: 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'GET'; + request: { transformer: TTransformers; schemaValidator?: TValidators }; + response?: { transformer: TTransformers; schemaValidator?: TValidators }; + headers?: HeadersInit; + successAction?: string; + errorAction?: string; +} +export class ApiPlugin { + name: string; + stateNames: Array<string>; + url: string; + method: IApiPluginParams['method']; + headers: IApiPluginParams['headers']; + request: IApiPluginParams['request']; + response?: IApiPluginParams['response']; + successAction?: string; + errorAction?: string; + + constructor(pluginParams: IApiPluginParams) { + this.name = pluginParams.name; + this.stateNames = pluginParams.stateNames; + this.url = pluginParams.url; + this.method = pluginParams.method; + this.headers = {'Content-Type': 'application/json', ...(pluginParams.headers || {})} as HeadersInit; + this.request = pluginParams.request; + this.response = pluginParams.response; + this.successAction = pluginParams.successAction; + this.errorAction = pluginParams.errorAction; + } + async callApi(context: TContext) { + try { + const requestPayload = await this.transformData(this.request.transformer, context); + const { isValidRequest, errorMessage } = await this.validateContent( + this.request.schemaValidator, + requestPayload, + 'Request', + ); + if (!isValidRequest) return this.returnErrorResponse(errorMessage!); + + const apiResponse = await this.makeApiRequest( + this.replaceValuePlaceholders(this.url, context), + this.method, + requestPayload, + this.composeRequestHeaders(this.headers!, context) + ); + + if (apiResponse.ok) { + const result = await apiResponse.json(); + const responseBody = await this.transformData( + this.response!.transformer, + result as AnyRecord, + ); + + const { isValidResponse, errorMessage } = await this.validateContent( + this.response!.schemaValidator, + responseBody, + 'Response', + ); + if (!isValidResponse) return this.returnErrorResponse(errorMessage!); + + return { callbackAction: this.successAction, responseBody }; + } else { + return this.returnErrorResponse('Request Failed: ' + apiResponse.statusText); + } + } catch (error) { + return this.returnErrorResponse(isErrorWithMessage(error) ? error.message : ''); + } + } + returnErrorResponse(errorMessage: string) { + return { callbackAction: this.errorAction, error: errorMessage }; + } + + async makeApiRequest( + url: string, + method: ApiPlugin['method'], + payload: AnyRecord, + headers: HeadersInit, + ) { + const requestParams = { + method: method, + headers: headers, + }; + + if (this.method.toUpperCase() === 'POST') { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + requestParams.body = JSON.stringify(payload); + } else if (this.method.toUpperCase() === 'GET' && payload) { + const queryParams = new URLSearchParams(payload as Record<string, string>).toString(); + url = `${url}?${queryParams}`; + } + + return await fetch(url, requestParams); + } + + async transformData(transformer: TTransformers, record: AnyRecord) { + try { + return (await transformer.transform(record, { input: 'json', output: 'json' })) as AnyRecord; + } catch (error) { + throw new Error( + `Error transforming data: ${ + isErrorWithMessage(error) ? error.message : '' + } for transformer mapping: ${transformer.mapping}`, + ); + } + } + + async validateContent<TValidationContext extends 'Request' | 'Response'>( + schemaValidator: TValidators | undefined, + transformedRequest: AnyRecord, + validationContext: TValidationContext, + ) { + const returnArgKey = `isValid${validationContext}`; + if (!schemaValidator) return { [returnArgKey]: true }; + + const { isValid, errorMessage } = await schemaValidator.validate(transformedRequest); + return { [returnArgKey]: isValid, errorMessage }; + } + + composeRequestHeaders(headers: HeadersInit, context: TContext) { + return Object.fromEntries(Object.entries(headers).map(header => [header[0], this.replaceValuePlaceholders(header[1], context)])); + } + replaceValuePlaceholders(content: string, context: TContext) { + const placeholders = content.match(/{(.*?)}/g); + if (!placeholders) return content; + + let replacedContent = content; + placeholders.forEach(placeholder => { + const variableKey = placeholder.replace(/{|}/g, ''); + const isPlaceholderSecret = variableKey.includes('secret.'); + const placeholderValue = isPlaceholderSecret ? + `${process.env[variableKey.replace('secret.','')]}`: + `${this.fetchObjectPlaceholderValue(context, variableKey)}`; + replacedContent = replacedContent.replace(placeholder, placeholderValue); + }); + + return replacedContent; + } + + fetchObjectPlaceholderValue(record: AnyRecord, path: string) { + let pathToValue = path.split('.'); + + return pathToValue.reduce((acc: unknown, pathKey: string) => { + if (typeof acc === 'object' && acc !== null && acc.hasOwnProperty(pathKey)) { + return (acc as AnyRecord)[pathKey]; + } else { + return undefined; + } + }, record as unknown); + } +} + + + diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts new file mode 100644 index 0000000000..3e8e4dc662 --- /dev/null +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts @@ -0,0 +1,82 @@ +import { beforeEach, afterEach, describe, expect, it, test } from 'vitest'; +import { WorkflowRunner } from '../../workflow-runner'; +import { WorkflowRunnerArgs } from '../../types'; +import {WebhookPlugin, WebhookPluginParams} from "./webhook-plugin"; +import {setupServer} from "msw/node"; +import {rest} from "msw"; + +function createWorkflowRunner( + definition: WorkflowRunnerArgs['definition'], + webhookPluginsSchemas: WebhookPluginParams[], +) { + return new WorkflowRunner({ + definition, + extensions: { + apiPlugins: webhookPluginsSchemas, + }, + workflowContext: { machineContext: { entity: { id: 'some_id' } } }, + }); +} + +describe('workflow-runner', () => { + describe('webhook plugins', () => { + const definition = { + initial: 'initial', + states: { + initial: { + on: { + ALL_GOOD: { + target: 'success', + }, + }, + }, + success: { + type: 'final', + }, + fail: { + type: 'final', + }, + }, + }; + + let webhookUrl = 'https://SomeTestUrl.com/ballerine/test/url/123'; + let webhookPluginsSchemas = [ + { + name: 'ballerineEnrichment', + url: webhookUrl, + method: 'GET', + stateNames: ['success', 'type'], + request: { + transform: { + transformer: 'jq', + mapping: '{id: .entity.id}' + }, + }, + }, + ]; + + describe('when webhook plugin hits state', () => { + const server = setupServer(); + + beforeEach(() => { + server.listen(); + }); + afterEach(() => { + server.close(); + }); + + let serverRequesUrl; + server.use( + rest.get(webhookUrl, (req, res, ctx) => { + serverRequesUrl = req.url.toString() + return res(ctx.json({result: 'someResult'})); + }), + ); + const workflow = createWorkflowRunner(definition, webhookPluginsSchemas); + it('it transitions to successAction and persist response to context', async () => { + await workflow.sendEvent('ALL_GOOD'); + expect(serverRequesUrl).toEqual("https://sometesturl.com/ballerine/test/url/123?id=some_id"); + }); + }); + }); +}); diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts new file mode 100644 index 0000000000..53bb438c97 --- /dev/null +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts @@ -0,0 +1,33 @@ +import {ApiPlugin, IApiPluginParams} from "./api-plugin"; +import {TContext} from "../../utils/types"; + +export interface WebhookPluginParams { + name: string; + stateNames: Array<string>; + url: string; + method: IApiPluginParams['method']; + headers: IApiPluginParams['headers']; + request: Omit<IApiPluginParams['request'], 'schemaValidator'>; +} + +export class WebhookPlugin extends ApiPlugin { + constructor(pluginParams: IApiPluginParams) { + super(pluginParams); + } + async callApi(context: TContext) { + const requestPayload = await this.transformData(this.request.transformer, context); + + try { + await this.makeApiRequest( + this.url, + this.method, + requestPayload, + this.headers, + ); + } catch (e) { + console.error(e) + } + + return {} + } +} diff --git a/packages/workflow-core/src/lib/plugins/types.ts b/packages/workflow-core/src/lib/plugins/types.ts new file mode 100644 index 0000000000..6a636baac9 --- /dev/null +++ b/packages/workflow-core/src/lib/plugins/types.ts @@ -0,0 +1,30 @@ +import { ApiPlugin } from './external-plugin/api-plugin'; + +export type PluginAction = { workflowId: string; context: any; event: any; state: any }; + +export type ExtensionRunOrder = 'pre' | 'post'; + +export interface WorkflowPlugin { + when: ExtensionRunOrder; + action: (options: PluginAction) => Promise<void>; +} + +export interface StatePlugin extends WorkflowPlugin { + /** + * The actions key to inject an action function into. + * E.g. { actions: { [plugin.name]: plugin.action } } + */ + name: string; + + /** + * Should the plugin be executed in a blocking manner or async + */ + isBlocking: boolean; + /** + * States already defined in the statechart + */ + stateNames: Array<string>; +} + +export type StatePlugins = StatePlugin[]; +export type ApiPlugins = ApiPlugin[]; diff --git a/packages/workflow-core/src/lib/types.ts b/packages/workflow-core/src/lib/types.ts index 99e495966b..fd66e760dd 100644 --- a/packages/workflow-core/src/lib/types.ts +++ b/packages/workflow-core/src/lib/types.ts @@ -1,4 +1,6 @@ import type { MachineConfig, MachineOptions } from 'xstate'; +import { ApiPlugins, StatePlugins } from './plugins/types'; +import { IApiPluginParams } from './plugins/external-plugin/api-plugin'; export type ObjectValues<TObject extends Record<any, any>> = TObject[keyof TObject]; @@ -8,32 +10,6 @@ export interface Workflow { getSnapshot: () => Record<PropertyKey, any>; } -export type PluginAction = { workflowId: string; context: any; event: any; state: any }; - -export type ExtensionRunOrder = 'pre' | 'post'; - -export interface WorkflowPlugin { - when: ExtensionRunOrder; - action: (options: PluginAction) => Promise<void>; -} - -export interface StatePlugin extends WorkflowPlugin { - /** - * The actions key to inject an action function into. - * E.g. { actions: { [plugin.name]: plugin.action } } - */ - name: string; - - /** - * Should the plugin be executed in a blocking manner or async - */ - isBlocking: boolean; - /** - * States already defined in the statechart - */ - stateNames: Array<string>; -} - export interface WorkflowEvent { type: string; state: string; @@ -42,9 +18,9 @@ export interface WorkflowEvent { } export interface WorkflowExtensions { - statePlugins: StatePlugins; + statePlugins?: StatePlugins; + apiPlugins?: ApiPlugins | IApiPluginParams[]; } - export interface WorkflowContext { id?: string; state?: any; @@ -70,8 +46,6 @@ export interface WorkflowRunnerArgs { export type WorkflowEventWithoutState = Omit<WorkflowEvent, 'state'>; -export type StatePlugins = StatePlugin[]; - export type TCreateWorkflow = (options: WorkflowOptions) => Workflow; export const Error = { diff --git a/packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts b/packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts new file mode 100644 index 0000000000..a3e1d865b4 --- /dev/null +++ b/packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts @@ -0,0 +1,19 @@ +import { run } from 'node-jq'; +import { BaseContextTransformer, TTransformationLogic } from './types'; +import { TContext } from '../types'; + +export class JQTransformer extends BaseContextTransformer { + name = 'jq-transformer'; + mapping: TTransformationLogic; + + constructor(mapping: TTransformationLogic) { + super(); + this.mapping = mapping; + } + + async transform(context: TContext, options: {}) { + const response = await run(this.mapping, context, options); + + return response; + } +} diff --git a/packages/workflow-core/src/lib/utils/context-transformers/types.ts b/packages/workflow-core/src/lib/utils/context-transformers/types.ts new file mode 100644 index 0000000000..efb813d88e --- /dev/null +++ b/packages/workflow-core/src/lib/utils/context-transformers/types.ts @@ -0,0 +1,12 @@ +import { TContext } from '../types'; + +export type TTransformationLogic = string; +export abstract class BaseContextTransformer { + abstract name: string; + type = 'context-transformer'; + + abstract transform( + context: TContext, + options: {}, + ): Promise<any>; +} diff --git a/packages/workflow-core/src/lib/utils/context-validator/json-schema-validator.ts b/packages/workflow-core/src/lib/utils/context-validator/json-schema-validator.ts new file mode 100644 index 0000000000..1c5f0b4e0f --- /dev/null +++ b/packages/workflow-core/src/lib/utils/context-validator/json-schema-validator.ts @@ -0,0 +1,28 @@ +import { BaseSchemaValidator, TSchemaValidatorResponse, TValidationLogic } from './types'; +import Ajv from 'ajv'; +import { AnyRecord } from '@ballerine/common'; + +export class JsonSchemaValidator extends BaseSchemaValidator { + name = 'json-schema-validator'; + schema: TValidationLogic; + + constructor(schema: TValidationLogic) { + super(); + this.schema = schema; + } + async validate( + data: AnyRecord, + options: AnyRecord = { allErrors: true }, + errorMessage?: string, + ): TSchemaValidatorResponse { + const validator = new Ajv(options); + const validationResult = validator.validate(this.schema, data); + + if (!validationResult) { + const validationErrorMessage = validator.errors?.map(error => error.message).join(' | '); + return { isValid: false, errorMessage: validationErrorMessage }; + } + + return { isValid: true }; + } +} diff --git a/packages/workflow-core/src/lib/utils/context-validator/types.ts b/packages/workflow-core/src/lib/utils/context-validator/types.ts new file mode 100644 index 0000000000..300d64efc7 --- /dev/null +++ b/packages/workflow-core/src/lib/utils/context-validator/types.ts @@ -0,0 +1,15 @@ +import { AnyRecord } from '@ballerine/common'; + +export type TSchemaValidatorResponse = Promise<{ isValid: boolean; errorMessage?: string }>; +export type TJsonSchema = AnyRecord; +export type TValidationLogic = TJsonSchema; +export abstract class BaseSchemaValidator { + abstract name: string; + type = 'schema-validator'; + + abstract validate( + data: AnyRecord, + options: AnyRecord, + errorMessage?: string, + ): TSchemaValidatorResponse; +} diff --git a/packages/workflow-core/src/lib/utils/types.ts b/packages/workflow-core/src/lib/utils/types.ts new file mode 100644 index 0000000000..6f611bd690 --- /dev/null +++ b/packages/workflow-core/src/lib/utils/types.ts @@ -0,0 +1,7 @@ +import { JQTransformer } from './context-transformers/qj-transformer'; +import { JsonSchemaValidator } from './context-validator/json-schema-validator'; +import { AnyRecord } from '@ballerine/common'; + +export type TContext = AnyRecord; +export type TTransformers = JQTransformer; +export type TValidators = JsonSchemaValidator; diff --git a/packages/workflow-core/src/lib/workflow-runner.test.ts b/packages/workflow-core/src/lib/workflow-runner.test.ts index acbdcf7135..9c8e3873f7 100644 --- a/packages/workflow-core/src/lib/workflow-runner.test.ts +++ b/packages/workflow-core/src/lib/workflow-runner.test.ts @@ -1,4 +1,6 @@ -import { beforeEach, describe, expect, it, test } from 'vitest'; +/* eslint-disable */ + +import { afterEach, describe, expect, it } from 'vitest'; import { WorkflowRunner } from './workflow-runner'; import { sleep } from '@ballerine/common'; @@ -182,9 +184,9 @@ describe('workflow-runner', () => { ]); }); - it('raises an exception if any of stateNames is not defined', async => { + it('raises an exception if any of stateNames is not defined', () => { expect(() => { - const workflow = new WorkflowRunner({ + new WorkflowRunner({ definition: TWO_STATES_MACHINE_DEFINITION, extensions: { statePlugins: [ @@ -218,7 +220,7 @@ describe('workflow-runner', () => { when: 'pre', isBlocking: true, stateNames: ['initial'], - action: async () => { + action: () => { throw new Error('some error'); }, }, @@ -333,3 +335,86 @@ describe('workflow-runner', () => { expect(done).toEqual(true); }); }); + +describe('Workflows with conditions', () => { + const createCondMachine = score => ({ + workflowContext: { + machineContext: { + external_request_example: { + data: { + name_fuzziness_score: 0.85, // or whatever value you want to assign + }, + }, + }, + }, + definition: { + initial: 'initial', + states: { + initial: { + on: { + EVENT: [ + { + target: 'final', + cond: { + type: 'json-logic', + options: { + rule: { + '>': [{ var: 'external_request_example.data.name_fuzziness_score' }, score], + }, + assignOnFailure: { manualReviewReason: 'name not matching ... ' }, + }, + }, + }, + ], + }, + }, + middle: { + on: { EVENT2: { target: 'final', cond: 'isTrue' } }, + }, + final: { + type: 'final', + }, + }, + }, + }); + it('should not proceed with transition if json logic condition falsy', async () => { + const workflow = createEventCollectingWorkflow(createCondMachine(0.9)); + await workflow.sendEvent({ type: 'EVENT' }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(workflow.events[0].state).toEqual('initial'); + }); + it('should proceed with transition if json logic condition truthy', async () => { + const workflowArgs = createCondMachine(0.5); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + const workflow = createEventCollectingWorkflow(workflowArgs); + await workflow.sendEvent({ type: 'EVENT' }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(workflow.events[0].state).toEqual('final'); + // expect(workflow.#__context).toContain({ manualReviewReason: 'name not matching ... ' }); + }); + it('should proceed with transition if json logic condition truthy, and default transition is set', async () => { + const workflowArgs = createCondMachine(0.5); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + workflowArgs.definition.states.initial.on.EVENT.push({ target: 'middle' }); + const workflow = createEventCollectingWorkflow(workflowArgs); + await workflow.sendEvent({ type: 'EVENT' }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(workflow.events[0].state).toEqual('final'); + // expect(workflow.#__context).toContain({ manualReviewReason: 'name not matching ... ' }); + }); + it('should not proceed with transition if json logic condition truthy, but transition to a default state THIS TEST SHOULD BE REVISIONED', async () => { + const workflowArgs = createCondMachine(0.9); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + workflowArgs.definition.states.initial.on.EVENT.push({ target: 'middle' }); + console.log(JSON.stringify(workflowArgs.definition, null, 2)); + + const workflow = createEventCollectingWorkflow(workflowArgs); + await workflow.sendEvent({ type: 'EVENT' }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(workflow.events[0].state).toEqual('initial'); + // expect(workflow.#__context).toContain({ manualReviewReason: 'name not matching ... ' }); + }); +}); diff --git a/packages/workflow-core/src/lib/workflow-runner.ts b/packages/workflow-core/src/lib/workflow-runner.ts index 0e7ad7848e..8cb989ee3f 100644 --- a/packages/workflow-core/src/lib/workflow-runner.ts +++ b/packages/workflow-core/src/lib/workflow-runner.ts @@ -2,17 +2,21 @@ import { uniqueArray } from '@ballerine/common'; import * as jsonLogic from 'json-logic-js'; import type { ActionFunction, MachineOptions, StateMachine } from 'xstate'; -import { createMachine, interpret } from 'xstate'; +import { createMachine, interpret, assign } from 'xstate'; import { HttpError } from './errors'; import type { ObjectValues, - StatePlugin, WorkflowEvent, WorkflowEventWithoutState, WorkflowExtensions, WorkflowRunnerArgs, } from './types'; import { Error as ErrorEnum } from './types'; +import { JQTransformer } from './utils/context-transformers/qj-transformer'; +import { JsonSchemaValidator } from './utils/context-validator/json-schema-validator'; +import { StatePlugin } from './plugins/types'; +import { ApiPlugin, IApiPluginParams } from './plugins/external-plugin/api-plugin'; +import { WebhookPlugin } from './plugins/external-plugin/webhook-plugin'; export class WorkflowRunner { #__subscription: Array<(event: WorkflowEvent) => void> = []; @@ -22,25 +26,31 @@ export class WorkflowRunner { #__callback: ((event: WorkflowEvent) => void) | null = null; #__extensions: WorkflowExtensions; #__debugMode: boolean; + events: any; public get workflow() { return this.#__workflow; } + public get context() { + return this.#__context; + } public get state() { return this.#__currentState; } constructor( { definition, workflowActions, workflowContext, extensions }: WorkflowRunnerArgs, - debugMode = true, + debugMode = false, ) { // global and state specific extensions - this.#__extensions = extensions ?? { - statePlugins: [], - }; + this.#__extensions = extensions ?? {}; + this.#__extensions.statePlugins ??= []; this.#__debugMode = debugMode; + this.#__extensions.apiPlugins = this.initiateApiPlugins(this.#__extensions.apiPlugins); + // this.#__defineApiPluginsStatesAsEntryActions(definition, apiPlugins); + this.#__workflow = this.#__extendedWorkflow({ definition, workflowActions, @@ -56,6 +66,52 @@ export class WorkflowRunner { this.#__currentState = workflowContext?.state ? workflowContext.state : definition.initial; } + initiateApiPlugins(apiPluginSchemas: IApiPluginParams[]) { + return apiPluginSchemas?.map(apiPluginSchema => { + const requestTransformerLogic = apiPluginSchema.request.transform; + const requestSchema = apiPluginSchema.request.schema; + const responseTransformerLogic = apiPluginSchema.response?.transform; + const responseSchema = apiPluginSchema.response?.schema; + const requestTransformer = this.fetchTransformer(requestTransformerLogic); + const responseTransformer = + responseTransformerLogic && this.fetchTransformer(responseTransformerLogic); + const requestValidator = this.fetchValidator('json-schema', requestSchema); + const responseValidator = this.fetchValidator('json-schema', responseSchema); + + let isApiPlugin = this.isApiPlugin(apiPluginSchema); + const apiPluginClass = isApiPlugin ? ApiPlugin : WebhookPlugin; + const apiPlugin = new apiPluginClass({ + name: apiPluginSchema.name, + stateNames: apiPluginSchema.stateNames, + url: apiPluginSchema.url, + method: apiPluginSchema.method, + headers: apiPluginSchema.headers, + request: { transformer: requestTransformer, schemaValidator: requestValidator }, + response: { transformer: responseTransformer, schemaValidator: responseValidator }, + successAction: apiPluginSchema.successAction, + errorAction: apiPluginSchema.errorAction, + }); + + return apiPlugin; + }); + } + + private isApiPlugin(apiPluginSchema: IApiPluginParams) { + return !!apiPluginSchema.successAction && !!apiPluginSchema.errorAction; + } + + fetchTransformer(transformer) { + if (transformer.transformer == 'jq') return new JQTransformer(transformer.mapping); + + throw new Error(`Transformer ${transformer.name} is not supported`); + } + fetchValidator(validatorName, schema) { + if (!schema) return; + if (validatorName === 'json-schema') return new JsonSchemaValidator(schema); + + throw new Error(`Validator ${validatorName} is not supported`); + } + #__handleAction({ type, plugin, @@ -131,7 +187,9 @@ export class WorkflowRunner { * * @see {@link WorfklowRunner.sendEvent} * */ - const nonBlockingPlugins = this.#__extensions.statePlugins.filter(plugin => !plugin.isBlocking); + const nonBlockingPlugins = this.#__extensions.statePlugins?.filter( + plugin => !plugin.isBlocking, + ); for (const statePlugin of nonBlockingPlugins) { const when = statePlugin.when === 'pre' ? 'entry' : 'exit'; @@ -163,12 +221,25 @@ export class WorkflowRunner { }; const guards: MachineOptions<any, any>['guards'] = { - 'json-rule': (ctx, { payload }, { cond }) => { - const data = { ...ctx, ...payload }; - return jsonLogic.apply( - cond.name, // Rule + 'json-logic': (ctx, event, metadata) => { + const data = { ...ctx, ...event.payload }; + // @ts-expect-error + const options = metadata.cond.options; + + const ruleResult = jsonLogic.apply( + options.rule, // Rule data, // Data ); + if (!ruleResult && options.assignOnFailure) { + this.#__callback?.({ + type: 'RULE_EVALUATION_FAILURE', + state: this.#__currentState, + payload: { + ...options, + }, + }); + } + return ruleResult; }, }; @@ -211,6 +282,7 @@ export class WorkflowRunner { plugin.when === 'pre' && plugin.stateNames.includes(this.#__currentState), ); + const snapshot = service.getSnapshot(); for (const prePlugin of prePlugins) { @@ -225,6 +297,21 @@ export class WorkflowRunner { this.#__context = service.getSnapshot().context; + if (this.#__extensions.apiPlugins) { + for (const apiPlugin of this.#__extensions.apiPlugins) { + if (!apiPlugin.stateNames.includes(this.#__currentState)) continue; + + const { callbackAction, responseBody, error } = await apiPlugin.callApi(this.#__context); + if (!this.isApiPlugin(apiPlugin)) continue; + + this.#__context.pluginsOutput = { + ...(this.#__context.pluginsOutput || {}), + ...{ [apiPlugin.name]: responseBody ? responseBody : { error: error } }, + }; + await this.sendEvent(callbackAction); + } + } + if (this.#__debugMode) { console.log('context:', this.#__context); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index edd3a6a8d5..65d2779379 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -622,9 +622,15 @@ importers: '@ballerine/common': specifier: 0.5.3 version: link:../common + ajv: + specifier: ^8.12.0 + version: 8.12.0 json-logic-js: specifier: ^2.0.2 version: 2.0.2 + node-jq: + specifier: ^2.3.5 + version: 2.3.5 xstate: specifier: ^4.35.2 version: 4.37.1 @@ -644,6 +650,9 @@ importers: '@rollup/plugin-commonjs': specifier: ^24.0.1 version: 24.0.1(rollup@2.70.2) + '@rollup/plugin-json': + specifier: ^6.0.0 + version: 6.0.0(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -701,6 +710,12 @@ importers: fs-extra: specifier: ^11.1.0 version: 11.1.1 + msw: + specifier: ^1.2.2 + version: 1.2.2(typescript@4.9.5) + node-fetch: + specifier: ^3.3.1 + version: 3.3.1 plugin-babel: specifier: link:@types/@rollup/plugin-babel version: link:@types/@rollup/plugin-babel @@ -886,6 +901,9 @@ importers: '@rollup/plugin-commonjs': specifier: ^24.0.1 version: 24.0.1(rollup@2.70.2) + '@rollup/plugin-json': + specifier: ^6.0.0 + version: 6.0.0(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -1013,6 +1031,9 @@ importers: '@rollup/plugin-commonjs': specifier: ^24.0.1 version: 24.0.1(rollup@2.70.2) + '@rollup/plugin-json': + specifier: ^6.0.0 + version: 6.0.0(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -9590,6 +9611,19 @@ packages: rollup: 2.70.2 dev: true + /@rollup/plugin-json@6.0.0(rollup@2.70.2): + resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.0.2(rollup@2.70.2) + rollup: 2.70.2 + dev: true + /@rollup/plugin-node-resolve@13.2.1(rollup@2.70.2): resolution: {integrity: sha512-btX7kzGvp1JwShQI9V6IM841YKNPYjKCvUbNrQ2EcVYbULtUd/GH6wZ/qdqH13j9pOHBER+EZXNN2L8RSJhVRA==} engines: {node: '>= 10.0.0'} @@ -10330,11 +10364,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.38: - resolution: {integrity: sha512-oN5mGQIKoEIc3faKaenic6aIU70JTWigjfmtC/qLHd45RZt7NQj6A2psM4kpW8mv0pjpBqEiXlThDdavkYfjdA==} + /@storybook/channel-postmessage@7.1.0-alpha.39: + resolution: {integrity: sha512-hio7NEmRJds9AX+4uqt9r/sFDZyCvgCL404coKN6QnkP43JmyreowJG4NzicvB+mvJNLUAviVey6auiPoWlY7A==} dependencies: - '@storybook/channels': 7.1.0-alpha.38 - '@storybook/client-logger': 7.1.0-alpha.38 + '@storybook/channels': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.39 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -10358,11 +10392,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.38: - resolution: {integrity: sha512-+pFC8Y0pUCfRpGJPquFgDiu0yqa1ndjnvdwyR3jKRPpOz7B1L+RaNLVZ+wL31CAACR4meGuGnyPBfXtcLH5Jdw==} + /@storybook/channels@7.1.0-alpha.39: + resolution: {integrity: sha512-VHJ+WXd4YAkuNiE5wpQhVDVsnqHKajGB2bAVfjtBwLF/VixDhTK/O/+FWGClJuU7btocnYlgOg7R2d/mRZdbHQ==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.38 - '@storybook/core-events': 7.1.0-alpha.38 + '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/core-events': 7.1.0-alpha.39 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -10431,8 +10465,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.38: - resolution: {integrity: sha512-wyS/8zr0noWwwvTxYsbRQv/31oqI+osKegk/d7WNqD51MwMFIcxZt2GuOzPH7VD8deIbjDQ1k09IrteqTX53sA==} + /@storybook/client-logger@7.1.0-alpha.39: + resolution: {integrity: sha512-x9QpVsCAlFuvzQzblIWV5E+ThB53cIBcyKFu2A9s9LiEO55hYz9G9FF9yGnwBMjQ0iZeqKuAtPy8TLj2wiugdQ==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -10536,8 +10570,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.38: - resolution: {integrity: sha512-MS+9i6QPIs3g+5Q4222RHKMuV8i1hlvD9GtenzmWc9qhvZsJkkrsMSNn2fVliXiH7cKMz4PPDeuWDjBfl73i0g==} + /@storybook/core-events@7.1.0-alpha.39: + resolution: {integrity: sha512-LVYHbCq6tlzYKSb+k9/iI5B6EoZ10W0oGFAo/YCxHVyRQJ3fOQNmgYvLmnVjZ1V87AULCFMDyzDBuMGpqqwd0w==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -10673,14 +10707,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.38: - resolution: {integrity: sha512-Fg48ozfs4pgOMJJRKBNyNNos0wfGrprSAd38MaNSF+yk0giVAYFgWwMcmC6Qdzk63TDdeSUAWMBd/75ex+KkoQ==} + /@storybook/instrumenter@7.1.0-alpha.39: + resolution: {integrity: sha512-zLOxqmt+oE4y8/K56zJdaDJmIzblqnylgTZfEVOZss0eW1A6vnTAv7C9mwsN4ZvHA0Q/tevLFcAET66GaoLGiQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.38 - '@storybook/client-logger': 7.1.0-alpha.38 - '@storybook/core-events': 7.1.0-alpha.38 + '@storybook/channels': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/core-events': 7.1.0-alpha.39 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.38 + '@storybook/preview-api': 7.1.0-alpha.39 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -10749,16 +10783,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.38: - resolution: {integrity: sha512-46AkRftX0PRo0soZiVpuMvYbiSd4GIneTdUEECM/oHTrLG+QL62sd5+LHogCbxiiSQjCP1FF/pNy4KJMSG4nlA==} + /@storybook/preview-api@7.1.0-alpha.39: + resolution: {integrity: sha512-lhTSV2s2AzqewjqRhcynMlHWf7ua2TgohXPy8eJ+l11HKV6ddISASEAGr0umK10OXpJweHPSR+VtyCMZG8tVpA==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.38 - '@storybook/channels': 7.1.0-alpha.38 - '@storybook/client-logger': 7.1.0-alpha.38 - '@storybook/core-events': 7.1.0-alpha.38 + '@storybook/channel-postmessage': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/core-events': 7.1.0-alpha.39 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.38 + '@storybook/types': 7.1.0-alpha.39 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -10906,8 +10940,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.38 - '@storybook/instrumenter': 7.1.0-alpha.38 + '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/instrumenter': 7.1.0-alpha.39 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -10950,10 +10984,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.38: - resolution: {integrity: sha512-zJBHLUDw94zErsz2lNjlGFWeYuaEa4ZYC/fi3n+d0zvQaIZM+kWc+9tPgO9oLL3cgyMcNhryLJwaGYgtxqQw0g==} + /@storybook/types@7.1.0-alpha.39: + resolution: {integrity: sha512-OgWFn62Affl+tJDCcg5o+DB0PG6EQOwk0NsvwYjbLdw9+PEMRs4HCHRaBuwRbeEx6R6++v8fT4XI9QT5Zo0xzg==} dependencies: - '@storybook/channels': 7.1.0-alpha.38 + '@storybook/channels': 7.1.0-alpha.39 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.1.1 @@ -11575,6 +11609,12 @@ packages: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 18.15.10 + dev: false + /@types/leaflet@1.9.3: resolution: {integrity: sha512-Caa1lYOgKVqDkDZVWkto2Z5JtVo09spEaUt2S69LiugbBpoqQu92HYFMGUbYezZbnBkyOxMNPXHSgRrRY5UyIA==} dependencies: @@ -11776,6 +11816,12 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: false + /@types/responselike@1.0.0: + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + dependencies: + '@types/node': 18.15.10 + dev: false + /@types/sass@1.45.0: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. @@ -13484,10 +13530,28 @@ packages: engines: {node: '>=0.6'} dev: true + /bin-build@3.0.0: + resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} + engines: {node: '>=4'} + dependencies: + decompress: 4.2.1 + download: 6.2.5 + execa: 0.7.0 + p-map-series: 1.0.0 + tempfile: 2.0.0 + dev: false + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: false + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -13677,14 +13741,28 @@ packages: node-int64: 0.4.0 dev: true + /buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: false + + /buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + dev: false + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true /buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: false + /buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: false + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -13824,6 +13902,16 @@ packages: /caniuse-lite@1.0.30001470: resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} + /caw@2.0.1: + resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} + engines: {node: '>=4'} + dependencies: + get-proxy: 2.1.0 + isurl: 1.0.0 + tunnel-agent: 0.6.0 + url-to-options: 1.0.1 + dev: false + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false @@ -14178,7 +14266,6 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} @@ -14311,6 +14398,13 @@ packages: tree-kill: 1.2.2 yargs: 17.7.1 + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: false + /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} @@ -14527,7 +14621,6 @@ packages: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -14662,6 +14755,11 @@ packages: engines: {node: '>=8'} dev: true + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + /data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -14754,6 +14852,66 @@ packages: character-entities: 2.0.2 dev: false + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: false + + /decompress-tar@4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + dev: false + + /decompress-tarbz2@4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + dev: false + + /decompress-targz@4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + dev: false + + /decompress-unzip@4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + dev: false + + /decompress@4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + dev: false + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true @@ -15086,11 +15244,32 @@ packages: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} + /download@6.2.5: + resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==} + engines: {node: '>=4'} + dependencies: + caw: 2.0.1 + content-disposition: 0.5.4 + decompress: 4.2.1 + ext-name: 5.0.0 + file-type: 5.2.0 + filenamify: 2.1.0 + get-stream: 3.0.0 + got: 7.1.0 + make-dir: 1.3.0 + p-event: 1.3.0 + pify: 3.0.0 + dev: false + /dset@3.1.2: resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} dev: false + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: false + /duplexer@0.1.1: resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} dev: true @@ -15179,7 +15358,6 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} @@ -16364,6 +16542,19 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + /execa@0.7.0: + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: false + /execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} @@ -16517,6 +16708,21 @@ packages: transitivePeerDependencies: - supports-color + /ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + dependencies: + mime-db: 1.52.0 + dev: false + + /ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + dev: false + /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: @@ -16639,7 +16845,6 @@ packages: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 - dev: true /felte@1.2.7(svelte@3.57.0): resolution: {integrity: sha512-VfCkYBODReCUrYeRMmJ9lRs7O/pC4PYKMTT7E2K6m9UzmTGpm3Ql3C518J3gUVVG5ZeEeSEifUaqmrAcaWB89w==} @@ -16651,6 +16856,14 @@ packages: svelte: 3.57.0 dev: false + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + /fetch-retry@5.0.4: resolution: {integrity: sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw==} dev: true @@ -16684,12 +16897,36 @@ packages: engines: {node: '>=0.10.0'} dev: false + /file-type@5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + dev: false + + /file-type@6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + dev: false + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 dev: true + /filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + dev: false + + /filenamify@2.1.0: + resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} + engines: {node: '>=4'} + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: false + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -16896,6 +17133,13 @@ packages: engines: {node: '>=0.4.x'} dev: false + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + /formidable@1.2.6: resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' @@ -16929,7 +17173,6 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -17083,6 +17326,13 @@ packages: engines: {node: '>=8'} dev: true + /get-proxy@2.1.0: + resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} + engines: {node: '>=4'} + dependencies: + npm-conf: 1.1.3 + dev: false + /get-stdin@6.0.0: resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} engines: {node: '>=4'} @@ -17093,6 +17343,19 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: false + + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: false + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -17320,6 +17583,28 @@ packages: dependencies: get-intrinsic: 1.2.0 + /got@7.1.0: + resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} + engines: {node: '>=4'} + dependencies: + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + is-plain-obj: 1.1.0 + is-retry-allowed: 1.2.0 + is-stream: 1.1.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + p-cancelable: 0.3.0 + p-timeout: 1.2.1 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 1.0.0 + url-to-options: 1.0.1 + dev: false + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -17426,10 +17711,20 @@ packages: engines: {node: '>= 0.4'} dev: true + /has-symbol-support-x@1.4.2: + resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + dev: false + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + /has-to-string-tag-x@1.4.1: + resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + dependencies: + has-symbol-support-x: 1.4.2 + dev: false + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} @@ -17823,7 +18118,6 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -18040,6 +18334,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /is-extglob@1.0.0: + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} + dev: false + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -18068,6 +18367,13 @@ packages: dependencies: has-tostringtag: 1.0.0 + /is-glob@2.0.1: + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 1.0.0 + dev: false + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -18092,6 +18398,13 @@ packages: engines: {node: '>=12'} dev: false + /is-invalid-path@0.1.0: + resolution: {integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-glob: 2.0.1 + dev: false + /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -18108,6 +18421,10 @@ packages: define-properties: 1.2.0 dev: true + /is-natural-number@4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + dev: false + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -18137,6 +18454,10 @@ packages: engines: {node: '>=8'} dev: true + /is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: false + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} @@ -18150,7 +18471,6 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: true /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} @@ -18201,6 +18521,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: false + /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true @@ -18211,6 +18536,11 @@ packages: call-bind: 1.0.2 dev: true + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: false + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -18280,6 +18610,13 @@ packages: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true + /is-valid-path@0.1.1: + resolution: {integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==} + engines: {node: '>=0.10.0'} + dependencies: + is-invalid-path: 0.1.0 + dev: false + /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -18388,6 +18725,14 @@ packages: istanbul-lib-report: 3.0.0 dev: true + /isurl@1.0.0: + resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} + engines: {node: '>= 4'} + dependencies: + has-to-string-tag-x: 1.4.1 + is-object: 1.0.2 + dev: false + /iterall@1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} dev: false @@ -19900,12 +20245,16 @@ packages: tslib: 2.5.2 dev: true + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: false + /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -19987,6 +20336,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: false + /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -20723,6 +21079,11 @@ packages: engines: {node: '>=12'} dev: false + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: false + /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: @@ -20884,6 +21245,42 @@ packages: - encoding - supports-color + /msw@1.2.2(typescript@4.9.5): + resolution: {integrity: sha512-GsW3PE/Es/a1tYThXcM8YHOZ1S1MtivcS3He/LQbbTCx3rbWJYCtWD5XXyJ53KlNPT7O1VI9sCW3xMtgFe8XpQ==} + engines: {node: '>=14'} + hasBin: true + requiresBuild: true + peerDependencies: + typescript: '>= 4.4.x <= 5.1.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@mswjs/cookies': 0.2.2 + '@mswjs/interceptors': 0.17.9 + '@open-draft/until': 1.0.3 + '@types/cookie': 0.4.1 + '@types/js-levenshtein': 1.1.1 + chalk: 4.1.1 + chokidar: 3.5.3 + cookie: 0.4.2 + graphql: 16.6.0 + headers-polyfill: 3.1.2 + inquirer: 8.2.5 + is-node-process: 1.2.0 + js-levenshtein: 1.1.6 + node-fetch: 2.6.9 + outvariant: 1.4.0 + path-to-regexp: 6.2.1 + strict-event-emitter: 0.4.6 + type-fest: 2.19.0 + typescript: 4.9.5 + yargs: 17.7.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /multer-s3@3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==} engines: {node: '>= 12.0.0'} @@ -21012,6 +21409,17 @@ packages: minimatch: 3.1.2 dev: true + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + + /node-downloader-helper@2.1.7: + resolution: {integrity: sha512-3dBuMF/XPy5WFi3XiiXaglafzoycRH5GjmRz1nAt2uI9D+TcBrc+n/AzH8bzLHR85Wsf6vZSZblzw+MiUS/WNQ==} + engines: {node: '>=14.18'} + hasBin: true + dev: false + /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: @@ -21049,6 +21457,15 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true @@ -21065,6 +21482,19 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true + /node-jq@2.3.5: + resolution: {integrity: sha512-V2qmX4oXvrITgxeR8WZTELVGFGx2auO+qvxs7Q4Isovh2UGkO1Fl3OACrxPZ2dgikJT5KbwYvK8PwGyc2hfRIg==} + engines: {npm: '>=6.0.0'} + requiresBuild: true + dependencies: + bin-build: 3.0.0 + is-valid-path: 0.1.1 + joi: 17.9.2 + node-downloader-helper: 2.1.7 + strip-final-newline: 2.0.0 + tempfile: 3.0.0 + dev: false + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} @@ -21107,6 +21537,21 @@ packages: resolution: {integrity: sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==} dev: false + /npm-conf@1.1.3: + resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} + engines: {node: '>=4'} + dependencies: + config-chain: 1.1.13 + pify: 3.0.0 + dev: false + + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: false + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -21396,6 +21841,18 @@ packages: /outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + /p-cancelable@0.3.0: + resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} + engines: {node: '>=4'} + dev: false + + /p-event@1.3.0: + resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==} + engines: {node: '>=4'} + dependencies: + p-timeout: 1.2.1 + dev: false + /p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -21403,6 +21860,11 @@ packages: p-map: 2.1.0 dev: true + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: false + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -21440,6 +21902,13 @@ packages: dependencies: p-limit: 3.1.0 + /p-map-series@1.0.0: + resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==} + engines: {node: '>=4'} + dependencies: + p-reduce: 1.0.0 + dev: false + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -21452,6 +21921,18 @@ packages: aggregate-error: 3.1.0 dev: true + /p-reduce@1.0.0: + resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==} + engines: {node: '>=4'} + dev: false + + /p-timeout@1.2.1: + resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==} + engines: {node: '>=4'} + dependencies: + p-finally: 1.0.0 + dev: false + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -21581,6 +22062,11 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: false + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -21644,7 +22130,6 @@ packages: /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -21665,10 +22150,27 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: false + + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: false + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -21884,6 +22386,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + /prepend-http@1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + dev: false + /prettier-plugin-astro@0.10.0: resolution: {integrity: sha512-dPzop0gKZyVGpTDQmfy+e7FKXC9JT3mlpfYA2diOVz+Ui+QR1U4G/s+OesKl2Hib2JJOtAYJs/l+ovgT0ljlFA==} engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} @@ -22078,6 +22585,10 @@ packages: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -22090,7 +22601,6 @@ packages: /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -23179,6 +23689,13 @@ packages: resolution: {integrity: sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==} dev: false + /seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: false + /semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} dev: true @@ -23332,7 +23849,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -23343,7 +23859,6 @@ packages: /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} @@ -23501,6 +24016,20 @@ packages: sourcemap-codec: 1.4.8 dev: true + /sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + dependencies: + sort-keys: 1.1.2 + dev: false + + /sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-obj: 1.1.0 + dev: false + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -23809,10 +24338,20 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + /strip-dirs@2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + dependencies: + is-natural-number: 4.0.1 + dev: false + + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: false + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -23842,6 +24381,13 @@ packages: acorn: 8.8.2 dev: true + /strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: false + /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -24277,6 +24823,19 @@ packages: tar-stream: 2.2.0 dev: true + /tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + dev: false + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -24318,10 +24877,14 @@ packages: memoizerific: 1.11.3 dev: true + /temp-dir@1.0.0: + resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} + engines: {node: '>=4'} + dev: false + /temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} - dev: true /temp@0.8.4: resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} @@ -24330,6 +24893,22 @@ packages: rimraf: 2.6.3 dev: true + /tempfile@2.0.0: + resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} + engines: {node: '>=4'} + dependencies: + temp-dir: 1.0.0 + uuid: 3.4.0 + dev: false + + /tempfile@3.0.0: + resolution: {integrity: sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==} + engines: {node: '>=8'} + dependencies: + temp-dir: 2.0.0 + uuid: 3.4.0 + dev: false + /tempy@1.0.1: resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} engines: {node: '>=10'} @@ -24494,6 +25073,11 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: false + /timers-ext@0.1.7: resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} dependencies: @@ -24546,6 +25130,10 @@ packages: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true + /to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: false + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -24610,6 +25198,13 @@ packages: engines: {node: '>=8'} dev: true + /trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: false + /trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} @@ -24836,6 +25431,12 @@ packages: yargs: 17.7.1 dev: true + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true @@ -24997,6 +25598,13 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: false + /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} engines: {node: '>=14.0'} @@ -25179,6 +25787,13 @@ packages: dependencies: punycode: 2.3.0 + /url-parse-lax@1.0.0: + resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} + engines: {node: '>=0.10.0'} + dependencies: + prepend-http: 1.0.4 + dev: false + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -25186,6 +25801,11 @@ packages: requires-port: 1.0.0 dev: true + /url-to-options@1.0.1: + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} + engines: {node: '>= 4'} + dev: false + /use-callback-ref@1.3.0(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} @@ -25278,6 +25898,12 @@ packages: resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} dev: true + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -25948,6 +26574,11 @@ packages: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -26116,7 +26747,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -26303,7 +26933,6 @@ packages: /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -26389,7 +27018,6 @@ packages: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 8469069075..ce9cfba005 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -40,6 +40,7 @@ "@babel/preset-typescript": "7.16.7", "@rollup/plugin-babel": "5.3.1", "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "13.2.1", "@rollup/plugin-replace": "4.0.0", "@rollup/plugin-terser": "^0.4.0", diff --git a/sdks/workflow-browser-sdk/rollup.config.ts b/sdks/workflow-browser-sdk/rollup.config.ts index d6644262cf..31b604e6f4 100644 --- a/sdks/workflow-browser-sdk/rollup.config.ts +++ b/sdks/workflow-browser-sdk/rollup.config.ts @@ -11,6 +11,7 @@ import { readJsonSync } from 'fs-extra'; import path from 'path'; import { RollupOptions } from 'rollup'; import dts from 'rollup-plugin-dts'; +import json from '@rollup/plugin-json'; import visualizer from 'rollup-plugin-visualizer'; // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -104,7 +105,7 @@ function esm({ input, packageDir, external, banner }: Options): RollupOptions { banner, preserveModules: true, }, - plugins: [babelPlugin, nodeResolve({ extensions: ['.ts'] })], + plugins: [babelPlugin, json(), nodeResolve({ extensions: ['.ts'] })], }; } @@ -138,6 +139,7 @@ function umdDev({ input, umdExternal, packageDir, banner, jsName }: Options): Ro banner, }, plugins: [ + json(), babelPlugin, commonjs(), nodeResolve({ extensions: ['.ts'] }), @@ -159,6 +161,7 @@ function umdProd({ input, umdExternal, packageDir, banner, jsName }: Options): R banner, }, plugins: [ + json(), babelPlugin, commonjs(), nodeResolve({ extensions: ['.ts'] }), diff --git a/sdks/workflow-node-sdk/package.json b/sdks/workflow-node-sdk/package.json index 327768fca2..a3174fb774 100644 --- a/sdks/workflow-node-sdk/package.json +++ b/sdks/workflow-node-sdk/package.json @@ -33,6 +33,7 @@ "@babel/preset-typescript": "7.16.7", "@rollup/plugin-babel": "5.3.1", "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "13.2.1", "@rollup/plugin-replace": "4.0.0", "@types/babel__core": "^7.20.0", diff --git a/sdks/workflow-node-sdk/rollup.config.ts b/sdks/workflow-node-sdk/rollup.config.ts index c3fdac43ba..cf608f2ae5 100644 --- a/sdks/workflow-node-sdk/rollup.config.ts +++ b/sdks/workflow-node-sdk/rollup.config.ts @@ -1,17 +1,18 @@ -import { RollupOptions } from 'rollup' -import babel from '@rollup/plugin-babel' -import { terser } from 'rollup-plugin-terser' +import { RollupOptions } from 'rollup'; +import babel from '@rollup/plugin-babel'; +import { terser } from 'rollup-plugin-terser'; // rollup-plugin-size doesn't have a types package. // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore -import size from 'rollup-plugin-size' -import visualizer from 'rollup-plugin-visualizer' -import replace from '@rollup/plugin-replace' -import nodeResolve from '@rollup/plugin-node-resolve' -import commonjs from '@rollup/plugin-commonjs' -import path from 'path' -import dts from 'rollup-plugin-dts' -import { readJsonSync } from 'fs-extra' +import size from 'rollup-plugin-size'; +import visualizer from 'rollup-plugin-visualizer'; +import replace from '@rollup/plugin-replace'; +import nodeResolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import path from 'path'; +import dts from 'rollup-plugin-dts'; +import { readJsonSync } from 'fs-extra'; +import json from '@rollup/plugin-json'; type Options = { input: string; @@ -33,7 +34,7 @@ const umdDevPlugin = (type: 'development' | 'production') => const babelPlugin = babel({ babelHelpers: 'bundled', exclude: /node_modules/, - extensions: ['.ts', ], + extensions: ['.ts'], }); export default function rollup(options: RollupOptions): RollupOptions[] { @@ -63,10 +64,7 @@ function buildConfigs(opts: { }): RollupOptions[] { const input = path.resolve('./', opts.entryFile); - const packageJson = - readJsonSync( - path.resolve(process.cwd(), 'package.json') - ) ?? {}; + const packageJson = readJsonSync(path.resolve(process.cwd(), 'package.json')) ?? {}; const banner = createBanner(opts.name); @@ -102,12 +100,9 @@ function esm({ input, packageDir, external, banner }: Options): RollupOptions { sourcemap: true, dir: `${packageDir}/dist/esm`, banner, - preserveModules: true + preserveModules: true, }, - plugins: [ - babelPlugin, - nodeResolve({ extensions: ['.ts', ] }), - ], + plugins: [json(), babelPlugin, nodeResolve({ extensions: ['.ts'] })], }; } @@ -124,21 +119,11 @@ function cjs({ input, external, packageDir, banner }: Options): RollupOptions { exports: 'named', banner, }, - plugins: [ - babelPlugin, - commonjs(), - nodeResolve({ extensions: ['.ts', ] }), - ], + plugins: [json(), babelPlugin, commonjs(), nodeResolve({ extensions: ['.ts'] })], }; } -function umdDev({ - input, - umdExternal, - packageDir, - banner, - jsName, -}: Options): RollupOptions { +function umdDev({ input, umdExternal, packageDir, banner, jsName }: Options): RollupOptions { return { // UMD (Dev) external: umdExternal, @@ -151,21 +136,16 @@ function umdDev({ banner, }, plugins: [ + json(), babelPlugin, commonjs(), - nodeResolve({ extensions: ['.ts', ] }), + nodeResolve({ extensions: ['.ts'] }), umdDevPlugin('development'), ], }; } -function umdProd({ - input, - umdExternal, - packageDir, - banner, - jsName, -}: Options): RollupOptions { +function umdProd({ input, umdExternal, packageDir, banner, jsName }: Options): RollupOptions { return { // UMD (Prod) external: umdExternal, @@ -178,9 +158,10 @@ function umdProd({ banner, }, plugins: [ + json(), babelPlugin, commonjs(), - nodeResolve({ extensions: ['.ts', ] }), + nodeResolve({ extensions: ['.ts'] }), umdDevPlugin('production'), terser(), size({}), @@ -192,12 +173,7 @@ function umdProd({ }; } -function types({ - input, - packageDir, - external, - banner, -}: Options): RollupOptions { +function types({ input, packageDir, external, banner }: Options): RollupOptions { return { // TYPES external, diff --git a/sdks/workflow-node-sdk/src/lib/workflow-node-sdk.ts b/sdks/workflow-node-sdk/src/lib/workflow-node-sdk.ts index b857b4818f..dc90f124a6 100644 --- a/sdks/workflow-node-sdk/src/lib/workflow-node-sdk.ts +++ b/sdks/workflow-node-sdk/src/lib/workflow-node-sdk.ts @@ -13,7 +13,7 @@ export class WorkflowNodeSDK { } async sendEvent(event: Parameters<TCreateWorkflowCoreReturn['sendEvent']>[0]) { - this.#__service.sendEvent(event); + return await this.#__service.sendEvent(event); } getSnapshot() { diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 4cb4d508f7..cc5bf24a15 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -14,6 +14,7 @@ import defaultContextSchema from '@ballerine/common/src/schemas/documents/defaul import { Salt } from '../src/auth/password/password.service'; import { env } from '../src/env'; import { generateUserNationalId } from './generate-user-national-id'; +import { generateDynamicDefinitionForE2eTest } from './workflows/e2e-dynamic-url-example'; if (require.main === module) { dotenv.config(); @@ -51,6 +52,7 @@ function generateAvatarImageUri(imageTemplate: string, countOfBusiness: number, async function seed(bcryptSalt: Salt) { console.info('Seeding database...'); const client = new PrismaClient(); + await generateDynamicDefinitionForE2eTest(client); const users = [ { email: 'agent1@ballerine.com', @@ -632,6 +634,59 @@ async function seed(bcryptSalt: Salt) { }, }); + await createFilter('Onboarding - Businesses with enriched data', 'businesses', { + select: { + id: true, + status: true, + assigneeId: true, + createdAt: true, + context: true, + workflowDefinition: { + select: { + id: true, + name: true, + contextSchema: true, + config: true, + }, + }, + business: { + select: { + id: true, + companyName: true, + registrationNumber: true, + legalForm: true, + countryOfIncorporation: true, + dateOfIncorporation: true, + address: true, + phoneNumber: true, + email: true, + website: true, + industry: true, + taxIdentificationNumber: true, + vatNumber: true, + shareholderStructure: true, + numberOfEmployees: true, + businessPurpose: true, + documents: true, + approvalState: true, + createdAt: true, + updatedAt: true, + }, + }, + assignee: { + select: { + id: true, + firstName: true, + lastName: true, + }, + }, + }, + where: { + workflowDefinitionId: 'dynamic_external_request_example', + businessId: { not: null }, + }, + }); + await createFilter('Onboarding - Individuals', 'individuals', { select: { id: true, diff --git a/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts new file mode 100644 index 0000000000..670657e03d --- /dev/null +++ b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts @@ -0,0 +1,219 @@ +import { PrismaClient } from '@prisma/client'; + +export const kybWithDynamicExternalRequestWorkflowExample = { + id: 'dynamic_external_request_example', + name: 'dynamic_external_request_example', + version: 1, + definitionType: 'statechart-json', + definition: { + id: 'kyb_example_v1', + predictableActionArguments: true, + initial: 'idle', + context: { + documents: [], + }, + states: { + idle: { + on: { + start: 'check_business_details', + }, + }, + check_business_details: { + on: { + API_CALL_SUCCESS: [ + { + target: 'auto_approve', + cond: { + type: 'json-logic', + options: { + rule: { + or: [ + { + '==': [ + { var: 'context.entity.companyName' }, + { var: 'response.data.registered_name' }, + ], + }, + // { + // '>=': [ + // { var: 'context.external_request_example.data.name_fuzziness_score' }, + // 0.91, + // ], + // }, + ], + }, + }, + }, + }, + { + target: 'manual_review', + cond: { + type: 'json-logic', + options: { + rule: { + '>': [{ var: 'pluginsOutput.business_data_vendor.name_fuzziness_score' }, 0.5], + }, + onFailed: { manualReviewReason: 'name not matching ... ' }, + }, + }, + }, + { + target: 'auto_reject', + cond: { + type: 'json-logic', + options: { + rule: { + '<': [ + { var: 'pluginsOutput.external_request_example.name_fuzziness_score' }, + 0.5, + ], + }, + onFailed: { manualReviewReason: 'Fuzzy fail and does not match' }, + }, + }, + }, + ], + API_CALL_ERROR: [ + { + target: 'manual_review', + cond: { + type: 'json-logic', + options: { + rule: { + '>=': [{ var: 'pluginsOutput.business_data_vendor.httpStatus' }, 400], + }, + }, + }, + }, + { + target: 'auto_reject', + }, + ], + }, + }, + manual_review: { + on: { + approve: 'approve', + reject: 'reject', + revision: 'revision', + }, + }, + auto_approve: { + type: 'final' as 'final', + }, + auto_reject: { + type: 'final' as 'final', + }, + reject: { + type: 'final' as 'final', + }, + approve: { + type: 'final' as 'final', + }, + revision: { + on: { + data_updated: 'check_business_details', + }, + }, + }, + }, + extensions: { + apiPlugins: [ + { + name: 'business_data_vendor', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_eu.json', + logo: 'https://uploads-ssl.webflow.com/62a3bad46800eb4715b2faf1/649435882f9b2819873035d7_companyVendorLogo.png', + method: 'GET', + stateNames: ['check_business_details'], + successAction: 'API_CALL_SUCCESS', + errorAction: 'API_CALL_ERROR', + request: { + transform: { + transformer: 'jq', + mapping: + '{ business_name: .entity .data .companyName, registration_number: .entity .data .registrationNumber}', + }, // JQ + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + business_name: { + type: 'string', + }, + registration_number: { + type: 'string', + }, + }, + required: ['business_name', 'registration_number'], + }, // Schema is OPTIONAL, but if provided, it will be used to validate the request body + }, + response: { + transform: { + transformer: 'jq', + mapping: '.', // JQ + }, + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + business_details: { + type: 'object', + properties: { + registered_name: { + type: 'string', + }, + registration_number: { + type: 'string', + }, + address: { + type: 'object', + }, + contact_number: { + type: 'string', + }, + }, + }, + name_fuzziness_score: { + type: 'number', + minimum: 0, + maximum: 1, + }, + }, + }, // OPTIONAL + }, + }, + { + name: 'finish_webhook', + url: 'https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8', + method: 'POST', + stateNames: ['auto_approve', 'approve', 'reject'], + headers: { + authorization: 'Bearer {secret.BUSINESS_DATA__VENDOR_API_KEY}', + }, + request: { + transform: { + transformer: 'jq', + mapping: '{success_result: .pluginsOutput .business_data_vendor}', + }, + }, + }, + { + name: 'fail_webhook', + url: 'https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8', + method: 'POST', + stateNames: ['auto_reject'], + request: { + transform: { + transformer: 'jq', + mapping: '{failing_result: .}', + }, + }, + }, + ], + }, +}; +export const generateDynamicDefinitionForE2eTest = async (prismaClient: PrismaClient) => { + return await prismaClient.workflowDefinition.create({ + data: kybWithDynamicExternalRequestWorkflowExample, + }); +}; diff --git a/services/workflows-service/src/common/decorators/use-key-auth-or-session-guard.decorator.ts b/services/workflows-service/src/common/decorators/use-key-auth-or-session-guard.decorator.ts new file mode 100644 index 0000000000..554827e7cd --- /dev/null +++ b/services/workflows-service/src/common/decorators/use-key-auth-or-session-guard.decorator.ts @@ -0,0 +1,4 @@ +import { applyDecorators, UseGuards } from '@nestjs/common'; +import { KeyAuthGuard } from '@/auth/key-auth.guard'; + +export const UseKeyAuthOrSessionGuard = () => applyDecorators(UseGuards(KeyAuthGuard)); diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 174c577c11..91460fd2da 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -86,18 +86,18 @@ async function main() { defaultVersion: '1', }); - const document = SwaggerModule.createDocument(app, swaggerDocumentOptions); + const document = SwaggerModule.createDocument(app, swaggerDocumentOptions); - /** check if there is Public decorator for each path (action) and its method (findMany / findOne) on each controller */ - Object.values(document.paths).forEach((path: PathItemObject) => { - Object.values(path).forEach((method: { security: string[] | unknown }) => { - if (Array.isArray(method.security) && method.security.includes('isPublic')) { - method.security = []; - } - }); + /** check if there is Public decorator for each path (action) and its method (findMany / findOne) on each controller */ + Object.values(document.paths).forEach((path: PathItemObject) => { + Object.values(path).forEach((method: { security: string[] | unknown }) => { + if (Array.isArray(method.security) && method.security.includes('isPublic')) { + method.security = []; + } }); + }); - SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); + SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); const { httpAdapter } = app.get(HttpAdapterHost); app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); diff --git a/services/workflows-service/src/test/db-teardown.ts b/services/workflows-service/src/test/db-teardown.ts index 3007ac3ef1..a3834a1b5a 100644 --- a/services/workflows-service/src/test/db-teardown.ts +++ b/services/workflows-service/src/test/db-teardown.ts @@ -1,7 +1,7 @@ import { TestGlobal } from '@/test/test-global'; export async function teardown() { - let globalThisTest = globalThis as TestGlobal; + const globalThisTest = globalThis as TestGlobal; if (!globalThisTest.__DB_CONTAINER__) return; diff --git a/services/workflows-service/src/test/helpers/database-helper.ts b/services/workflows-service/src/test/helpers/database-helper.ts index be72ccd624..885bd08ca9 100644 --- a/services/workflows-service/src/test/helpers/database-helper.ts +++ b/services/workflows-service/src/test/helpers/database-helper.ts @@ -9,7 +9,7 @@ const TEST_DATABASE_SCHEMA_NAME = z //should be implemented in BeforeEach hook export const cleanupDatabase = async () => { - let tableNames = await __getTables(databaseHelper); + const tableNames = await __getTables(databaseHelper); await __removeAllTableContent(databaseHelper, tableNames); }; diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 6b10dee559..96a4f1d3dc 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -147,6 +147,22 @@ export class WorkflowControllerExternal { }); } + // POST /event + @common.Post('/:id/send-event') + @swagger.ApiOkResponse() + @UseKeyAuthGuard() + @common.HttpCode(200) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + async sendEvent( + @UserData() _userInfo: UserInfo, + @common.Param('id') id: string, + @common.Body() data: WorkflowEventInput, + ): Promise<void> { + return await this.service.event({ + ...data, + id, + }); + } // curl -X GET -H "Content-Type: application/json" http://localhost:3000/api/v1/external/workflows/:id/context @common.Get('/:id/context') @UseKeyAuthGuard() diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 57a8bbdd1f..4bda0688f2 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -889,7 +889,7 @@ export class WorkflowService { ) { if (!Object.keys(workflowDefinition?.contextSchema ?? {}).length) return; - const validate = ajv.compile((workflowDefinition?.contextSchema as any)?.schema); // TODO: fix type + const validate = ajv.compile(workflowDefinition?.contextSchema?.schema); // TODO: fix type const isValid = validate(context); if (isValid) return; @@ -924,6 +924,7 @@ export class WorkflowService { machineContext: runtimeData.context, state: runtimeData.state, }, + extensions: workflow.extensions, }); await service.sendEvent({ diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index 9bfaf73ce8..52ce4b1a77 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -79,7 +79,7 @@ export const SIDEBAR: Sidebar = { text: `KYB Workflow with External Integrations`, link: `simple-kyb-guide`, }, - + { text: `Creating a KYC UI Flow`, link: `creating-a-kyc-flow-and-deploying-it`, diff --git a/websites/docs/src/pages/en/learn/back-office.md b/websites/docs/src/pages/en/learn/back-office.md index 57f36a4417..f69e828212 100644 --- a/websites/docs/src/pages/en/learn/back-office.md +++ b/websites/docs/src/pages/en/learn/back-office.md @@ -87,7 +87,7 @@ Open cases in the backoffice by sending API requests to the workflow service. ``` 6. Initilazie monorepo: ```sh - pnpm run api-manual-review-example + pnpm run api-flow-example ``` _Now the backoffice will run on http://localhost:5137/, and the workflow service will accept calls at http://localhost:3000/_ From 06746a11dab3ded7f3e2b63fe6a130177da643c8 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 07:57:49 +0300 Subject: [PATCH 064/123] update docs --- websites/docs/src/config.ts | 26 +++++++++++--- .../en/learn/interacting_with_workflows.md | 21 ++++++++++++ .../src/pages/en/learn/simple-kyb-guide.mdx | 4 +-- .../pages/en/learn/understanding_workflows.md | 19 +++++++++++ .../pages/en/learn/workflow_definitions.md | 34 +++++++++++++++++++ 5 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 websites/docs/src/pages/en/learn/interacting_with_workflows.md create mode 100644 websites/docs/src/pages/en/learn/understanding_workflows.md create mode 100644 websites/docs/src/pages/en/learn/workflow_definitions.md diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index 52ce4b1a77..95a462e4ae 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -79,7 +79,10 @@ export const SIDEBAR: Sidebar = { text: `KYB Workflow with External Integrations`, link: `simple-kyb-guide`, }, +<<<<<<< Updated upstream +======= +>>>>>>> Stashed changes { text: `Creating a KYC UI Flow`, link: `creating-a-kyc-flow-and-deploying-it`, @@ -88,12 +91,25 @@ export const SIDEBAR: Sidebar = { }, { group: `Workflows`, - sections: [], - }, - { - group: `Case Managment`, - sections: [], + sections: [ + { + text: `Understanding Workflows`, + link: `understanding_workflows`, + }, + { + text: `Workflow Definitions`, + link: `workflow_definitions`, + }, + { + text: `Interacting with Workflows`, + link: `interacting_with_workflows`, + }, + ], }, + // { + // group: `Case Managment`, + // sections: [], + // }, { group: `UI SDK's`, sections: [ diff --git a/websites/docs/src/pages/en/learn/interacting_with_workflows.md b/websites/docs/src/pages/en/learn/interacting_with_workflows.md new file mode 100644 index 0000000000..08ffa750e9 --- /dev/null +++ b/websites/docs/src/pages/en/learn/interacting_with_workflows.md @@ -0,0 +1,21 @@ +--- +title: SDK UI Flows +description: SDK UI flows documentation +layout: ../../../layouts/MainLayout.astro +--- + +# Interacting with Workflows + +Once a workflow is defined, you can create instances of it and interact with them in various ways. Each instance of a workflow is unique, with its own ID and context. + +## Workflow Instances + +A workflow instance represents an actual execution of a workflow with real data. The instance has its own state context, which is updated as it transitions through different states. This context includes any data that needs to be used or modified throughout the execution of the workflow. + +## Sending Events to Workflow Instances + +Workflow instances are event-driven. You interact with a workflow instance by sending events to it. These events could be user actions, system notifications, API responses, etc. + +When an event is sent to a workflow instance, + +--- diff --git a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx index b5224dbc58..68ae4eb4ab 100644 --- a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx +++ b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx @@ -18,7 +18,7 @@ We'll start with a simple onboarding workflow for a company, enriching it's data Before we proceed with the workflow execution, we need to set up our environment. -Please follow the [installation guide](LINK_TO_INSTALLATION_GUIDE) to install all the project dependencies. +Please follow the [installation guide](/en/learn/installation) to install all the project dependencies. This guide will walk you through all the necessary steps to get your system ready for running the Ballerine projects. Once you've installed all the dependencies, run the following command to start both the workflow service and the backoffice (case management project): @@ -49,7 +49,7 @@ This workflow is defined using a statechart definition implemented under the hoo If you're unfamiliar with state machines or XState, we recommend reviewing the XState documentation for a detailed explanation. Here is the complete workflow definition: -(See the full file on GitHub [add link]) +(See the full file on GitHub [Seed Workflow](https://github.com/ballerine-io/ballerine/blob/dev/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts)) ```json { diff --git a/websites/docs/src/pages/en/learn/understanding_workflows.md b/websites/docs/src/pages/en/learn/understanding_workflows.md new file mode 100644 index 0000000000..7de5f71407 --- /dev/null +++ b/websites/docs/src/pages/en/learn/understanding_workflows.md @@ -0,0 +1,19 @@ +--- +title: SDK UI Flows +description: SDK UI flows documentation +layout: ../../../layouts/MainLayout.astro +--- +# Understanding Workflows + +A workflow, in a broad sense, is a series of steps or a process that takes an input and produces an output. It's a sequence of tasks or procedures that lead to some desired outcome. However, in the context of our system, workflows are not just mere sequences but orchestrated, complex processes that involve dynamic decision-making and interactions. A good example is the "Know Your Business (KYB)" process, as explained in our [KYB guide](../guides/KYB_Workflow_Implementation_Guide.md). + +## What are Workflows in Our System? + +In our system, workflows are defined using a State Machine model, specifically statecharts, which is implemented using the [XState library](https://xstate.js.org/docs/). In the realm of state machines, a system can be in only one state at a time. From that state, certain actions or events can lead the system to transition to other states. + +Statecharts allow you to define complex behavior using states, sub-states, and transitions between states. It's a robust way to manage and visualize the different stages of a process and the conditions that lead to state changes. + +States and transitions in our workflows are predefined and loaded into the system during startup. They define the blueprints of different processes within our system. + + +--- diff --git a/websites/docs/src/pages/en/learn/workflow_definitions.md b/websites/docs/src/pages/en/learn/workflow_definitions.md new file mode 100644 index 0000000000..e8b0bab5c1 --- /dev/null +++ b/websites/docs/src/pages/en/learn/workflow_definitions.md @@ -0,0 +1,34 @@ +--- +title: SDK UI Flows +description: SDK UI flows documentation +layout: ../../../layouts/MainLayout.astro +--- + +# Workflow Definitions + +A workflow definition is a JSON object that specifies the structure and behavior of a workflow. It outlines the states, transitions, actions, and events that the workflow is comprised of. + +## Components of a Workflow Definition + +Let's explore the main components that make up a workflow definition: + +### States + +States represent different conditions that your system or process could be in. For example, 'idle', 'check_business_details', 'manual_review', and so on. States provide a snapshot of the system at any given time. + +### Transitions + +Transitions define the conditions that allow the system to move from one state to another. They are linked to actions or events and are expressed using 'on' in the statechart. Transitions determine the path of the process based on various conditions. + +### Actions + +Actions are side effects or operations that are carried out when transitioning from one state to another. These could include API calls, sending messages, updating the system state, etc. They represent the active parts of your workflows. + +### Events + +Events are the triggers that cause transitions to occur. In our workflows, events can be user actions or system events, such as API responses. Events are the stimuli to which the system responds by changing states. + +For a detailed understanding of how states and state configuration work in XState, please refer to the [XState documentation](https://xstate.js.org/docs/guides/states.html). + + +--- From cbb6b2902c6077c911d8e8b03dbbf2c1fcf69866 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 07:58:46 +0300 Subject: [PATCH 065/123] update docs --- websites/docs/src/config.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index 95a462e4ae..fb82734ae6 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -79,10 +79,6 @@ export const SIDEBAR: Sidebar = { text: `KYB Workflow with External Integrations`, link: `simple-kyb-guide`, }, -<<<<<<< Updated upstream - -======= ->>>>>>> Stashed changes { text: `Creating a KYC UI Flow`, link: `creating-a-kyc-flow-and-deploying-it`, From 2c8730ff6e3e878134c5d6deb9359a6d316f4326 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 08:37:01 +0300 Subject: [PATCH 066/123] adding helm, dev --- deploy/helm/.helmignore | 23 +++++ deploy/helm/Chart.yaml | 30 ++++++ deploy/helm/README.md | 91 +++++++++++++++++++ deploy/helm/example.values.yaml | 50 ++++++++++ .../templates/configmap.yaml | 31 +++++++ .../templates/deployment.yaml | 60 ++++++++++++ .../workflows-service/templates/service.yaml | 18 ++++ deploy/helm/templates/import.yaml | 5 + 8 files changed, 308 insertions(+) create mode 100644 deploy/helm/.helmignore create mode 100644 deploy/helm/Chart.yaml create mode 100644 deploy/helm/README.md create mode 100644 deploy/helm/example.values.yaml create mode 100644 deploy/helm/services/workflows-service/templates/configmap.yaml create mode 100644 deploy/helm/services/workflows-service/templates/deployment.yaml create mode 100644 deploy/helm/services/workflows-service/templates/service.yaml create mode 100644 deploy/helm/templates/import.yaml diff --git a/deploy/helm/.helmignore b/deploy/helm/.helmignore new file mode 100644 index 0000000000..0e8a0eb36f --- /dev/null +++ b/deploy/helm/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/deploy/helm/Chart.yaml b/deploy/helm/Chart.yaml new file mode 100644 index 0000000000..10cb54eb75 --- /dev/null +++ b/deploy/helm/Chart.yaml @@ -0,0 +1,30 @@ +apiVersion: v2 +name: helm +description: A Helm chart for ballerine + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.0.1 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "0.4.14" +dependencies: + - condition: postgresql.enabled + name: postgresql + version: 12.0.0 + appVersion: 15.0.0 + repository: https://charts.bitnami.com/bitnami \ No newline at end of file diff --git a/deploy/helm/README.md b/deploy/helm/README.md new file mode 100644 index 0000000000..69136f3004 --- /dev/null +++ b/deploy/helm/README.md @@ -0,0 +1,91 @@ +# Install ballerine using helm chart + +Ballerine is a collection of services like workflow-service, backendoffice. +In values.yaml we have sections to enable/disable them based on the necessity like below + +``` bash +workflowService: + enabled: true +``` + +## Prerequisites + +- kubernetes cluster +- [helm](https://helm.sh/docs/intro/install/) +- [kubectl](https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl) preferably 1.24 or less upto 1.23 + +### How to install + +Move to deploy directory + +```bash +cd deploy/helm +``` + +### Setup Postgresql + +#### Install postgresql along with ballerine + +- edit values.yaml + +```bash +## Postgres params +postgresql: + enabled: true + auth: + username: admin + password: admin + postgresPassword: admin + database: postgres +# Local dev purpose +# persistence: +# existingClaim: postgresql-pv-claim +# volumePermissions: +# enabled: true +``` + +#### How to use managed postgresql along with ballerine + +- edit values.yaml + +```bash +## Postgres params +postgresql: + enabled: false +. +. +. +. + applicationConfig: + BCRYPT_SALT: "10" + JWT_SECRET_KEY: "secret" + JWT_EXPIRATION: "10d" + DB_URL: "<Managed DB_URL with databasename>" + DB_USER: "<Managed DB_USER>" + DB_PASSWORD: "<Managed DB_PASSWORD>" + DB_PORT: "5432" +``` + +### Installing Ballerine helm chart + +``` bash +helm install ballerine . -n ballerine --create-namespace -f values.yaml +``` + +### Troubleshooting + +```bash +kubectl get pods -n ballerine +``` + +- Note the pod name of service you wish to trouble shoot + +```bash +kubectl logs <pod> -n ballerine +``` + +- Accessing the application + +```bash +kubectl port-forward svc/<service> -n ballerine 3000:3000 +``` diff --git a/deploy/helm/example.values.yaml b/deploy/helm/example.values.yaml new file mode 100644 index 0000000000..1b0e48ab26 --- /dev/null +++ b/deploy/helm/example.values.yaml @@ -0,0 +1,50 @@ +## Postgres params +postgresql: + enabled: true + auth: + username: admin + password: admin + postgresPassword: admin + database: postgres + # Local dev purpose + persistence: + existingClaim: postgresql-pv-claim + volumePermissions: + enabled: true + +workflowService: + enabled: true + replicas: 1 + strategyType: RollingUpdate + updateStrategy: + maxSurge: 1 + maxUnavailable: "0" + nameOverride: workflowservice + migration: true + service: + port: 3000 + type: ClusterIP + protocol: TCP + image: + registry: index.docker.io + repository: "" + pullPolicy: Always + tag: "latest" + applicationConfig: + BCRYPT_SALT: "10" + JWT_SECRET_KEY: "secret" + JWT_EXPIRATION: "10d" + DB_URL: "" + DB_USER: "" + DB_PASSWORD: "" + DB_PORT: "5432" + PORT: "3000" + COMPOSE_PROJECT_NAME: "ballerine-x" + SESSION_SECRET: "iGdnj4A0YOhj8dHJK7IWSvQKEZsG7P70FFehuddhFPjtg/bSkzFejYILk4Xue6Ilx9y3IAwzR8pV1gb4" + BACKOFFICE_CORS_ORIGIN: "http://localhost:5137" + HEADLESS_EXAMPLE_CORS_ORIGIN: "http://localhost:5173" + API_KEY: "secret" + NODE_ENV: "development" + SENTRY_DSN: "" + WEBHOOK_URL: "" + WEBHOOK_SECRET: "webhook_secret" diff --git a/deploy/helm/services/workflows-service/templates/configmap.yaml b/deploy/helm/services/workflows-service/templates/configmap.yaml new file mode 100644 index 0000000000..aa5eb44be3 --- /dev/null +++ b/deploy/helm/services/workflows-service/templates/configmap.yaml @@ -0,0 +1,31 @@ +{{- $name := .Release.Name }} +{{- $namespace:= .Release.Namespace }} +{{- $postgresqlUser := .Values.postgresql.auth.username -}} +{{- $postgresqlPassword := .Values.postgresql.auth.password -}} +{{- $postgresqlDatabase := .Values.postgresql.auth.database -}} +{{- if .Values.workflowService.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.workflowService.nameOverride }} + namespace: {{ .Release.Namespace | quote }} + labels: + app: {{ .Values.workflowService.nameOverride }} +data: + {{- range $key, $value := .Values.workflowService.applicationConfig }} + {{- if $.Values.postgresql.enabled }} + {{- if (eq "DB_URL" $key) }} + {{ $key }}: postgres://{{ $postgresqlUser }}:{{ $postgresqlPassword }}@{{ $name }}-postgresql.{{ $namespace }}.svc.cluster.local:5432/{{ $postgresqlDatabase }} + {{- end }} + {{- if (eq "DB_USER" $key) }} + {{ $key }}: {{ $postgresqlUser }} + {{- end }} + {{- if (eq "DB_PASSWORD" $key) }} + {{ $key }}: {{ $postgresqlPassword }} + {{- end }} + {{- end }} + {{- if $value }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/deploy/helm/services/workflows-service/templates/deployment.yaml b/deploy/helm/services/workflows-service/templates/deployment.yaml new file mode 100644 index 0000000000..beac436107 --- /dev/null +++ b/deploy/helm/services/workflows-service/templates/deployment.yaml @@ -0,0 +1,60 @@ +{{- if .Values.workflowService.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Values.workflowService.nameOverride }} + namespace: {{ .Release.Namespace | quote }} + labels: + app: {{ .Values.workflowService.nameOverride }} +spec: + replicas: {{ .Values.workflowService.replicas }} + {{- if .Values.workflowService.strategyType }} + strategy: + type: {{ .Values.workflowService.strategyType }} + {{- end }} + {{- if .Values.workflowService.updateStrategy }} + rollingUpdate: + {{- if .Values.workflowService.updateStrategy.maxSurge }} + maxSurge: {{ .Values.workflowService.updateStrategy.maxSurge}} + {{- end }} + {{- if .Values.workflowService.updateStrategy.maxUnavailable }} + maxUnavailable: {{ .Values.workflowService.updateStrategy.maxUnavailable }} + {{- end }} + {{- end }} + selector: + matchLabels: + app: {{ .Values.workflowService.nameOverride }} + template: + metadata: + labels: + app: {{ .Values.workflowService.nameOverride }} + spec: + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + initContainers: + {{- if .Values.postgresql.enabled }} + - name: psql-init-container + image: alpine:latest + command: ['sh', '-c', "apk add postgresql-client; until pg_isready -h {{ .Release.Name }}-postgresql.{{.Release.Namespace}}.svc.cluster.local; do echo waiting for postgresql; sleep 2; done"] + {{- end }} + {{- if .Values.workflowService.migration }} + - name: migration-init-container + image: {{ .Values.workflowService.image.registry }}/{{ .Values.workflowService.image.repository }}:{{ .Values.workflowService.image.tag }} + command: ['npm','run','db:init'] + envFrom: + - configMapRef: + name: {{ .Values.workflowService.nameOverride }} + {{- end }} + containers: + - name: {{ .Values.workflowService.nameOverride }} + image: "{{ .Values.workflowService.image.registry }}/{{ .Values.workflowService.image.repository }}:{{ .Values.workflowService.image.tag }}" + imagePullPolicy: {{ .Values.workflowService.image.pullPolicy }} + command: [ "dumb-init", "npm", "run", "prod" ] + envFrom: + - configMapRef: + name: {{ .Values.workflowService.nameOverride }} + imagePullSecrets: + - name: {{ .Values.workflowService.image.pullSecrets }} +{{- end }} \ No newline at end of file diff --git a/deploy/helm/services/workflows-service/templates/service.yaml b/deploy/helm/services/workflows-service/templates/service.yaml new file mode 100644 index 0000000000..20c609d3c8 --- /dev/null +++ b/deploy/helm/services/workflows-service/templates/service.yaml @@ -0,0 +1,18 @@ +{{- if .Values.workflowService.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.workflowService.nameOverride }} + namespace: {{ .Release.Namespace | quote }} + labels: + app: {{ .Values.workflowService.nameOverride }} +spec: + ports: + - name: {{ .Values.workflowService.nameOverride }} + port: {{ .Values.workflowService.service.port }} + protocol: {{ .Values.workflowService.service.protocol }} + targetPort: {{ .Values.workflowService.service.port }} + selector: + app: {{ .Values.workflowService.nameOverride }} + type: {{ .Values.workflowService.service.type }} +{{- end }} \ No newline at end of file diff --git a/deploy/helm/templates/import.yaml b/deploy/helm/templates/import.yaml new file mode 100644 index 0000000000..1d09e4031f --- /dev/null +++ b/deploy/helm/templates/import.yaml @@ -0,0 +1,5 @@ +{{- /* Import all "templates/*.yaml" files found in the repo */ -}} +{{ range $path, $_ := .Files.Glob "services/**/templates/*.yaml" }} +{{ tpl (print "# -> " $path "\n" ((print "--- \n # -> " $path "\n") | regexReplaceAll "---" ($.Files.Get $path))) $ }} +--- +{{ end }} \ No newline at end of file From 78d93b0ad8b75424824d527c68b8d41b73245303 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 08:38:59 +0300 Subject: [PATCH 067/123] update docs --- .../docs/src/pages/en/learn/deployment.md | 101 +++++++++++++++--- 1 file changed, 88 insertions(+), 13 deletions(-) diff --git a/websites/docs/src/pages/en/learn/deployment.md b/websites/docs/src/pages/en/learn/deployment.md index a2e98c7b25..a4c87cf94d 100644 --- a/websites/docs/src/pages/en/learn/deployment.md +++ b/websites/docs/src/pages/en/learn/deployment.md @@ -25,23 +25,98 @@ layout: '../../../layouts/MainLayout.astro' The application should now be running at the ports defined in your Docker Compose configuration. ### Kubernetes Deployment (Helm) +# Install ballerine using helm chart -1. **Add the Ballerine Chart Repo**: Add the Helm chart repository that contains the Ballerine charts: - ```shell - helm repo add ballerine https://helm.ballerine.io - ``` +Ballerine is a collection of services like workflow-service, backendoffice. +In values.yaml we have sections to enable/disable them based on the necessity like below -2. **Update your Helm Repo**: Fetch the latest version of the Helm chart from the repo: - ```shell - helm repo update - ``` +``` bash +workflowService: + enabled: true +``` -3. **Install the Ballerine Chart**: Now you can install the Ballerine Helm chart onto your Kubernetes cluster: - ```shell - helm install ballerine ballerine/ballerine - ``` +## Prerequisites + +- kubernetes cluster +- [helm](https://helm.sh/docs/intro/install/) +- [kubectl](https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl) preferably 1.24 or less upto 1.23 + +### How to install + +Move to deploy directory + +```bash +cd deploy/helm +``` + +### Setup Postgresql + +#### Install postgresql along with ballerine + +- edit values.yaml + +```bash +## Postgres params +postgresql: + enabled: true + auth: + username: admin + password: admin + postgresPassword: admin + database: postgres +# Local dev purpose +# persistence: +# existingClaim: postgresql-pv-claim +# volumePermissions: +# enabled: true +``` + +#### How to use managed postgresql along with ballerine + +- edit values.yaml + +```bash +## Postgres params +postgresql: + enabled: false +. +. +. +. + applicationConfig: + BCRYPT_SALT: "10" + JWT_SECRET_KEY: "secret" + JWT_EXPIRATION: "10d" + DB_URL: "<Managed DB_URL with databasename>" + DB_USER: "<Managed DB_USER>" + DB_PASSWORD: "<Managed DB_PASSWORD>" + DB_PORT: "5432" +``` + +### Installing Ballerine helm chart + +``` bash +helm install ballerine . -n ballerine --create-namespace -f values.yaml +``` + +### Troubleshooting + +```bash +kubectl get pods -n ballerine +``` + +- Note the pod name of service you wish to trouble shoot + +```bash +kubectl logs <pod> -n ballerine +``` + +- Accessing the application + +```bash +kubectl port-forward svc/<service> -n ballerine 3000:3000 +``` -By default, the application will be deployed on your default namespace. You can specify a different namespace by adding `-n <namespace>` at the end of the `helm install` command. Always refer to the official documentation of Ballerine for more specific configuration and deployment details. From 27ea2a5b1290973a43bcaed0811dce5c72f9f160 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Fri, 23 Jun 2023 23:05:30 +0300 Subject: [PATCH 068/123] update docs --- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 2 +- websites/docs/public/ballerine-logo.png | Bin 8941 -> 15690 bytes websites/docs/public/ballerine-logo1.png | Bin 0 -> 8478 bytes websites/docs/public/favicon.ico | Bin 6634 -> 7406 bytes .../docs/src/components/Header/Logo.astro | 138 ++------------- websites/docs/src/config.ts | 2 +- .../docs/src/pages/en/learn/introduction.md | 166 ++++++------------ .../src/pages/en/learn/simple-kyb-guide.mdx | 2 +- 9 files changed, 72 insertions(+), 240 deletions(-) create mode 100644 websites/docs/public/ballerine-logo1.png diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 17df8a690f..b9f27f702f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -oss@ballerine.io. +oss@ballerine.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b5c1e41749..1a540c76d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ We accept contributions in different sizes and varied difficulty, from documenta - Join our [Discord](https://discord.gg/e2rQE4YygA) or [Slack](https://join.slack.com/t/ballerine-oss/shared_invite/zt-1iu6otkok-OqBF3TrcpUmFd9oUjNs2iw) - Head to our [documentation](README.md) -- Contact us at [oss@ballerine.io](mailto:oss@ballerine.io) +- Contact us at [oss@ballerine.com](mailto:oss@ballerine.com) ## Prerequisites diff --git a/websites/docs/public/ballerine-logo.png b/websites/docs/public/ballerine-logo.png index 95f79a16acf2d4ff51dcdbb18bafc72a0acb8c69..159bd576d7964eaecbac6e193459243b91903531 100644 GIT binary patch literal 15690 zcmeHu_gj<67jJZ36%}1Uv4CKqD7|+<1x2MOtI|mjq?yor37{g1RF@ihQBWz779@}a zl-`RFAXF&<LJuvW-S-W`e(xV}?@v1q4<yrP&Y5#Qrx5s1OO5%+`6Cbrg!$fG)xRMS zCT|F2|DT5s0yXgAOm+z5`pJ8$Hy^w2o9@TyaOh*n!^TtMy{t1Ke4`<U+((!^kb;-y z+;0sm_z6Jt&5q<k=Brs_Yi=!8|B-v6{q$j!ne|#G{}=1iT&R=pQF#$$efSyv(=4=; zC-vb~cDVIoac^}ZeA811hPL$eHr^UpjsFu^no&eUvy{7Hl(#m2c_KGQC{<kBHeY=N zeiV4)q;rY)X}S~t_B;x!Z<(hQZV2pW4^BM*qYx=iXy-hI&g@R*_jJt>rvychDC3(u z6<?tdRo|ZY+<|88&0x}vH$uCOS*|UAY^+dxiLNxZ%OzUS&LQ{hPVsa6(?&1>A9*g$ ze7?vVcf6rxhJCM*twJ01bZz;A1}wuJM}Q^=bsyawrzaRcX2~A)RIkCjeoH3<PVr1U zmAbdFuiZLmV)ZiJ2Pa$~sR38788cnKvpaOif$okQh`xrP%7!q(P*cmkxx{V3-Bw6g zizBV1b7Z>|x?Q~VsbvU0>A5*aDRRSYLHGJ_q9q@13o4g>*%rP&2~JO0PTlBx!?N4K z&zI(igGO^=+^4Us8Q`G+5%%t62#t^AOhe~Z=<<5<tQhd`j)C-%zib5Kh3~5yzZA*a zJ4*R8`P(p?SN~IULm?*}EnPueT$UFx71<r`hhahH7^6iZHd6V_#T%-g{o9h;Zt}6p zAZhf3ru;C4`ayYj2*gjp+^_~Q=PuPOvz-$>x4BHW+`Ib}k?j%B%}vkERoOvB+xa3F z+zQCgI|aE8BU09v>4X!=5m`fdVHlda=+ts|w;4i@5xPLkCC04dC+~T5KRxNSH?78_ z^Ep4>;3rdsF36yXu6y++z0nPS7%FV7lyfPqj|l9|)De?&A$faYS!6bTetF9?XYXDh z7Grb1+1vOT<pHT-IL#9&yf>y%CBqv@Tb4=gTWBiXyLUeixw07<yZHGcBaPMlyPac; zizqG*R2kd&d2{UE<mDSSTXc4U)|!EE#=m<%R?)faxm81a599OxpN#~VOnTZ3ZiE1} z=2)WRzehSOoJ%yIipYSy|A(OA+0pC@G6To(1E+R(0ST~3r&ToxU9ce^-mMc=gyj;c z8)>Nds61H1zsE?`-!j`YoZqV`7Y)I<AYP(%_iFr74eFFN*7nYL7QehPQcNjw#^F!z z&JGEf=0g2nN1o3)ir;IU`kF8VFWLJl>YP3V|M-7>-Fu0C!(JBZYP)TI@`5~T|HIVB z`rGY@+iTjp?U1u&eE)8g|M0&{@?ZLQ$DjO%_U2DvdHF9Z-~VsGf4B4>YwW%zzyIFD ze^TQ=QThK>KWu<7aOk~(fdPM3R#tjZe*PkvP_wwWNI=eYc0Qpkjx|hBs;X|&=*yG| zxQ@>W#$&Y@E~YG}10Tz;<l*s9XqmehJ+AYODvV3nM=&!pGab$7CMv{Gc5F~yHyaz9 zsHUbSg2wEWVTNB~LPF%LSFhU840w_9V5gf7uRG3zYH`Z5=|@|ew#Vvh;ygn*`VBDj zq@FD5my5f5Hz_*An2EqxU?K=)7r)nSi2iRl+;#eL>-5|lY3d}{=%;l62K*89*Pzxv zMr*8|&##2q4dR8sEiwj+erD)y{^HV7!{+AZgIr#>In6lXoDz&yje38O5MQEf*d;pQ zW@hO>Cw~1(EA!dxWea0;2-XBq%Z;eGd-_ru%h(5|=ok^$yB!2@Hc03KaI{a&X_e5t zyDbce;5W(Y4b(l1x_#_}D!4NUBv_p>g%q1yFw2e+AsRZEOAG_C&S_a?Wf6cR=I@cT z#gExJIZ?ou9S}qi9|lj&U*@~*Gi-*g^+*5s@nff{Sd7tBLF(&Eczz(t+ThHYGh<6j z&XP|B2%#JD(b3U&F6rQT<-Hbu-PVV}xHi`dr>CbQH#awT#>+5)2RK{kuVZOxnT|%T zuPvAXgy_FI|GeO}X&SoH%5I?S8nR)et}9g288iSP5QfY$X%+7g(0-B}*D3&84?k;T zXNO*$7YLghYlztaNaq<eKA1I^!yzF=nIRS9UPB3S)so_d3XG-gBN(Ktpl{He>=u4j zR8&|U(T&ex=Zi`%00=}6uUX%qQBjJvj5P!1?g4k{x3AtAjW<Oj20`i<Sn&f^NZ|5Q zYisMJZU$#vWZ*`VaC+Qq)cn-M#HYp|Q&Uq`K{cv|#<7cxjotXcp!2~@^duBDErsqD z5Ed5pL@h;`2%?!7YcZJbY=Vs4Kx8h9mpQ!3LqSgNnu3DD$1Ei%E2GPlB?B`a<cYxL zCz_ps;l0n<ypZMY>2*LNan1|CBU)S-sbQS6e8l`ah|FK*=jCZ*@1K>D?CD*Yn)>40 zRs;W|9PvzHK(&zu+9s`h6^wq1Q=M7uRc&o;R^N%Oqhc30I3k4+l*6Kkz*1K?H?;_U z0&;zYOw2yPr4$LgFmRF9C<gnT4eq<zqPZZPA2ssVD|9Wjp=n#V0~)ZgVG`}g$&-Xy z^2UDqc9oBh?_)@3XJ=bicEncWM%jiD8>y>Hr-wxHnqRB!DnrpH42}bn7V>~t%|tZc z{3&lrVbmnFBv9#D;6Cxqk2#5niTMNqY$#7%5jC^eTkCR}7<A8>S-PMTaf^%XQ7)wf zA108e8_LuMo~X5Y4!rq;mm{38vPw$ADlvLl>hpl)`I|G|->;`Rzu{S-bZ&0$9kFU6 z8m88P%3t(4rb6n@nn`Y2Ada1#UUWZ)(TI!ZUU|oH;?0{k=@X!oF!_6j!P3<mBSkX< zCgqp{7G+7*Hpc1S&f|cGBATa>hA#6xbm$N-6>`Pq%79S|YmlbA4S2L61~a|TGd32o z=`4KGJ2`1>O%c;#I^XWpEQSSGtG9O!cqZBh-OCBw-BXSs^-H&aVSe{^UQ4hr>7z^F zCkvrRY1pq)eWKhe_m`H3e;k@)Qv6#4T6WcVR9>7i^BiPY`pyXd+zJg%5`_uR)=*u2 zM^0IpOLJ>KXN*#AP3|Nxarp;^=sI?b$Ub0v<%>QRi=8_4De#W~K32~Gf-el9`_Xy# zC5P+M;A@A(Mlznx6i>>_OWh<AE3)Fs-yP2PfEE)62J?P`hE&AdHF4mf=i{y@9*>EM z`Ir^Q`xs=E9~T)^{R{D^_Hx}yD1}1#Qx5^ML{J!)a@^nG3((MDm}jDY0(T8GGGX$2 z<pHt*EszL04)}dzEdRQx#3eyk3?N=885$3*Gd_*3+ik5Y##&+47C9}wY6MLjW&k-u zrBcN|r>Cd4flL41_RR^F8|IX<mSp9adpv9RH=<lTJoJG#c!$tTv|g9G8?VZF#ihHq zm&Lo{WrJlkso0J$ZYoAO;^8r1jud9bBMH+<%K}-rx4V0dy2|=;%wi++L9)CZ(Pgm3 zVqpxa6)qcMcKB?l#?<}b_z6m?A8lyJ<kZV%r+RK+l840%MX)BL`2iF)fG(&nwi~Q} zbAqdWeB44LRcC*Ju*TY#hLsi9eQdDr&E%HkunZ)i!!|r}Y%l-vhl;@P9LB7bpens_ zh8L9b<$thvnD5uq$tWJZvo$$6X_cnVZj3=6t01n$)tVZ4*y-r#+|h;-S3fWOstVe# z$Vo$3t<!+<5Ygj|6KQ-3B#7@5WHlbZdC6$|FM~orXFqRs%r$wNA3+)(?3P}bH<E^L zJm<hceoEc#pwctAe>l>HQ`vV*QTuFU_$MKfUz1kBb;FnVT&(Q~Lz=bz1#a)giE3s7 z*7o$;WJl(A#LUc0$S<@oy_b{W^0~nv_jS*!8@;`~{KnmE_DWbSn&-;2K0~HXykbDK zj1(pUz=zu#xC18a?Cc+daw9UV_|T=@;Ddsk-Oo6ML{VYk(kD!DgR37Cp^Hdth?lXu z(?ZBmRnyhgeNFqC$P0EBJwO2ELTvs4XkeoF@|Qpy-kbI}l;E>@HG_9dE;%tVDp%{l zgQL_A9?bgI=8g+vXB&Q>?@dGsF|&I1uMCQBe(Cuoy6@~ND4u^>ACBmWoAd-h4Z0=i z`g-wpQq9^jh1gaSYkst$Dq{6|$3Z8-(amj_UnT?F9EXB@j*W8EQtYWxwbbTQ1Vzha zwQa{imn&#})2?x;ESh@>jU%2ql5yKJ7uc)dLB{zWy>Eqkd94o!9n;m(IWkh`8hY8^ zvq|8%RR)E}wk}RJw3x#UB`9Nyh&3^7w^64`#D<oU0g-SPX+s_0cC5?u^7dAw!XE;t zgZg1sA&G@chWx{35p{ZfeSNII)XnTooDCP8wW~-hgh<Y)>^3wsWW6BMB$X})4G<(& zE7s_up+)jCms`Z%o8*S=7X@}UKK#a9Kl=C2a#5~b+7^H$w#7n$2ewTk=h{_n57~Mk zpUWSo8yP1gCN8hYuB@*57DiD`qtQKdI(?#Km4`gl)zuaD@#9AYUkj3xyO&pKr_;2l zot@pU<e1g3LHdb5Ji-9t*WiyoxLos7Fi8zc0ie~U)d;30hG5rD9iE@JpRS3grspJN z*+A1V%GA-((E)-C*@Hyf$|xJKNhV3Qgc#Y;%cP|jeH6!AtQ+zLcYff)Szivp_fEj< zo|Bua<;{wv6_kke)i4uPkC&k0<CkT0eMAJdabfX21<n$|Ucp&GO0UqEeNBRc1iT8G zl+<9X4S>kDFlo*s4>KH$1Wo5V{h<Zl@R|y?lPr+!^UueSa8@-<#{pL{irGRgxs&%D zyV^jQ{vmXbx2@jp{psrzASMAH)(w$-p7!OYUxCH9>sP}{ZMu+K3t_$*ORJKkr(<x; zYW>PT5w;#O0zC%7wE7j84dy`*B2d;wF7(8S6KaN$nvbAwHWCs<A`l*K$$(&D!`5|q z0VN0X5uPr0e9;L;@VVYSV?p&Cb-ET7Q)(XHfH0E_8Q~*YjTcDO)G1=FH?}nA$!D3R z$jRjAEH}i6*i-@Hul%RtHGt%;+N5rQIAsY+d>YdeC7%sFEiJA3m6er=>S;T|rZnBt z-d;2|zR-h1O-=1Jt-fg;!}7Prqn81IH2z!zl^IK*NqsnJ+XRJfm!0T%=fe39+&2`* zaYDs`8r$e0utIku;5h?vi{~VoMl$8JNOuZsMrk1Sw5@>oj03_@0qF|tq8!OkTF(E( z$8jlnTOkX+q2n8oo7V%&Sws|lx5@wr+jM<PydS<LUUl`+^WM96#hOO=!fc>7f1p#z ziZ9b^vOPA**HK@Y-~lWc$(pClftOxeskE2f2~@Q_eM+XI%i<(*499i<ZET&F@fH^- z&So!z+AF2V;<;K(_Xji+tm7LhZYDEsO@O4$b1?qnhIa>UT;S%D7$)P6V=FA(8eX2= zDse**J@t<>4hX5lL8HF%81^(7QuRgsYs4RWgv8|>vfOlX!o`j|ko?0{<Yid8iV|Of zaLnx_C^%aU24!punoJEl@Fnp%Tm}7RztAHiBjQH`8)I>Ok#-ot>GNKiaIEgF!UNJO z;Y^QE^OXom!+B<H-eKlpy;^cb8DBE9zJv{&b6>lpO2MUSXo#>O><{4jY<xg_qxF{U z)GAKu(Mz<49WyQbfMVcz7Sb~wd~ARQYdl%!pP;moI;C9y{m9DwOb0SgKjV3ZT78Cw z^~l>vFAkhQPQgN78#R!NF4!~=rXob-9y8q`pSwLK+f24fu5l#Je6+ljtVZ+A1oRsl zu-e3ZP}Y}MI;Ojxf1wt`1S`PTk^Esy1uSQlkW@vPO6vI&Lerl$Lxc1m(Cc&(I<TqA zVK&`o1L6kOD?^i&ka0BWZ_FLI*_f7Gj|Q>@tU{NIq~3BLy57*Bo;(Ar;Jo8a<!vV~ zMIM04yz&!f%^7z|myyXXXd02s=y}HS);?8OE~#MIGRA#DspIX@&niMU)vq}8mSqUZ zsRfA4X~Tx~ZHTvt4!~^m9kg;8Iq<0w<0gaL-oh0wFHLrcKR{U(U@%?l(!tbV-q=RK zdU$Mxt~{v{+xTO;^X%JhgZFQi@^~CWh*jPh@jt;At;>Lm)tJ1zHd08ZzcxXuYKlc2 z5H`^s4LUwdKJ>n74M{QYrpIV&gp+5)$dE(5)Ww_DFvqf40LTEqG%SNvTA<>2=*UJf zKKH2{pN9A^VU$Ua`8)H$<S@Be*4gpCTADp|!>Tz1rm~E|D!Bm%SOf7=d2D`_377c3 zYch|0nai*TU<FApqu866hAzwa#n&XEOT-dxq@&r}0(k+g=fzw%p>~-7Fj*VX`o5K1 zh&?aalyiM-Y>c4E+dwPK&lf*(O*1wgt(1Gk!;Uo{Fo2b1UkDRX-Z0iUm&EUpHQOsQ zBysK%E%LV(_yV8-7pHp)+8mO|eU(2t;(p3Fdki#DIyCwl4>XlYcN~sfbi-^S8uEH- zT*M3|$Q$40<dcY_<0bD~wsUfFw3L;}0WB`TA+T#t_k^_mi5$T4;6kneD}_<mr;4|N zDeRw=v9X=-_ch7nwl%<V3!}v2eQ9_c4#$P8Ytb_>pljdvaLzg?$9eq33A^jZ>3Sa9 z>&~vOD`rR}GCMhOPC;ItE+*t5SfC{AXsbo1E)KZ9hfietT8u8wI2w(&xL)7l#knpo zdpJF6ZY!HRfn)Q?mK*2uXf$pd(JO1B(P&`+u<=TE+cF%8S3;}Vv}`LuUnz!_Zuvgz zs|l|etolZLx~Fy;u;x#eO@wy8XUpZ_ZRZEvoC+w+eb!ad1f^;cG)P|+X7k<ewqDVs z!p4+@&m_zC(n*=V<yZ@((N7ldF}*2MUtdCunP}>Rmnj%tByRmUUdek+w9^C=bm;($ z3CD{(hD2g`D&f?)x!KvRiOV%kuo~5vi_+w^!cg_ywFTjM#0U@|pQw#iM<U`23ksa( zR&E;?x5iaRyAifF0n@yAD`8_`IfO*m@WH5ht<D-xst{+=V?z*x*b#2ndaH{%?oQ|r zgiNn1<)=kyJ3iEMHpU6pAQmY!m45-jHQO8DW(1lh)PF{#!Z!14+t$Jn#VDI2e4Ru~ z!-A;s57-3urlM@L+2yd0GZ=i&`F0E#KPhC``a?IFLa_BA!*6W)$>Z=C_OBhmsk1@2 z^GqYQM+NC+Vm^kCtLG*64Xv-vsh^>FIU2b{b&J<L<)R0lEisH)y?#?2Hn-YDkZ^d& zj=cRNLS9~eYSTrJTP}=xz9@>gf`98}6v0U`4$a(9zLT7%dqw*xJIx3N7-zr^M6WS` z*J^!Jtwzd(=|5{JGY3$yU78(b2LY{fmU56fJ3E`xA-}lsKuhbsZb@6e8l)1z4N+89 zw!2>OF>KW{q1*9qxg?33?<Ob3dxYj_lDq~yv)1fu&YK*l$4ct{fo>FmBhvyFNvcGr z^oDKAJ|16768u+o3p21h8w33Mc`Z9!5$}+!22GV-Px_KIDnR4;c^Te@5K1XVyTLg@ z$ySn&Kb=#~mE{;_0mSaNe<fIJ%GM7mgxJ4KCceky!7$Mj@uJB~Hh&~XMMa6LcO3Cz zyA2aFiaGpM%zD0arLT6O)osJ`5s7M>WS9i7!$b5SXzcZ+Q$lL{Ac><H>#Z1PjcF<C zrD!2hr$;m*`5)g0OHnzOO06=ym-C{!(i-4N5DS*T6OMvKiS;h=Ww4$BF+%|@IvHzK z`sbi5T|SAHB|NuY$cG;DuJ=;Tx|<oIh*#p}7yeSFguL?t@Z%*83|h7%g>2%OtVljx z57s3l$alIvblkCFfFgE=2%YU*zBBsakt%P9Q^vIy&49&(dMq(U!PMO^8BVx(MO*I- zjrtP(X3RbA+4nw8xs?KO^Q^FYZgRXVcY@dPW0r1#&AcH(q*^CyR#|(3@IqrD`lzO= z+@x8;op7(12gypB=IRZ%+g8blUs!Kw^R1YXiM6$F8it`bY2pt>5!OlIQeyoX4v%k- zOe2IZsl^X{Xb71QCf(fPC-DvxNsY+P#s_!R=(sb5(-Uq~!K4gFa6X$@5R}B|U1S}p zMh;>RiWj_PzkHH?^Lgp!)6gD$)hjmWqJnq$%CD>Hkv}u_1MaJYUP_<Y{_)lVfC0Zv zR|OZ`z8+p#Ys^u2I$EfV#j9UB5zeyunz>2G-PnbxJyzpofQDDRvuQut(Fi!KOQ4x! za1+00o(pulw>qK3VjFO;O=Zpaf7ieLMJ4W(oNCA6LW|SLqL52wY~(v>1JVcjfYWL0 zXz8DY%v!ywQYAfoYD53ne8yHoM{3Px=<ajzm#dveyC=>gd7{se$9-ak;L#Q8F?S<K zLQ{pw`nQEJ)upf|a+W9vV|-XZ7-OI5@h2Z(W3W~|EGgLr+*9qhZ7*AjtHB->R5KmN z2B`G(KG!k)upknM$5wjEbyfF7XRCL&u14FOIN80V*4my3S@7v_M_RZr+xq~smhX6Q zGtwx`W1wm*;(2B(PWCG8Lug65xVlRB=A%UbufqwS2V9Tv($dmL3Wzn4=r@X9E7^ro z6bL+FByr)e0hZNUNccVIe%;_^cqRC;1CdS4>j(4z;{xYmptt3f7GG3Uq}5TG?_ywz z#uq<qh|G6b5*rKZp<qLX(`<VV0fQkLgA4~#Mhg0x6aabCqx`Z1Ygu}o1Ix~%@+EC! zr2<urMzr+m{n6fbq#LtUL1$j~z(XrA6~@hBsxTx+&BLQL3VqF(Z{S=zZs6IUW8>a0 zqm_!G^-Zl7M=NvNZWO#8ku*gEUhMqhVwpOwb8t$1>C&dW1Rf0|L<_T7*AqK39~|xD zBib7ZwRfg*s+fWq1-uL|+K`s9UA8R(5t&-|7!AU3#Oqjlz>+N0;6G`22IG<tmdmQo zd1M)Tz`P(7vK}{4^Xs6HG1}>`Aa@_<{>x_pi@)X`1G*(*wVrt_Pdz#JPE{MkDwWp& z=Z(3OQ$gYTztS2gi0`_IN!Pt}GR)(AS8dp=4SLGP48FcyP{Uwf=dvyI)joR&Z0a{V zd%5&jTz%hJmgy};lCjW)v*<w60iYNyjMX5ZT>5@I=r}%u)%YuZ%p-<a;g9waGWhvV zcNRre@ohsxL;hVyTaF7Cz>s|GPsaVvE&$#It<;~x!^2nK#w|B(DUSE|_kXr?izTlB zEZ6+vPRz`@hHhM#^&3~?X4C;axfRR2kR+ko>oF8tQi}c6r%!SNJvdQ5RtjqL_OUh2 zznx>9E|YF3$N+0tF<j^6I7bQb;m3wd4*)&;5bzjWUyjeA>7x)!<4y4>)vL%VXwzV4 z^yGc2*i36K{BXF_Q#P@i%`)^T%1si{1qe!9D#pE<Sky<|OV}>}Ow0CqN08{+hPs9v zVyS+nUS*AVLDUfU+}=Xc02pJH)-7m?E)xc3ZgYuaEhs7}ky|ES2ekNzKt*dImsztE zE1pi|d0v;t6!b;?tJIuO2Jqm1hd4N$?d>08?@vcv6zKSl4S+G#Vv38^PU>$pdp8kU z_`U0;HIUWNOKV@$V?MiuIA9j0<!L!#H6F<aqL<L>R_lN!*&oDDzD=5dvz-K^7>(~3 zuD?Swb8|8H>6w{Lxj=ykD;B#=&p)KMldcMG3k^oZ3Jm)C_(1W<b!mEBAQUAiNr^9> z8^E!T9=ITrXPFshB~~3+0zggmGjeVjMPsHg^dH6W^?`V7b=vyU<Rj}V$q^;IfCehR zyaQkV5ZAu)D2IMbjYYGwa9I!f3h@6rIy*lOxGIyso*-L2!y?CHF#SXJQ9l*|>$>~Z z!^5M;+MpZlC^SKF8FDS@D#VTRh8r6iI%%3*8tb!Cz}ds$@FjAoM&|*5voDD<Vi<Xf z<KM2x1OU(Mp_xdANJKV3;#QJJ_+OR@5P`uCDf<0mu{IB6q^0k3v0RcnlYwr)gvvo} zitEzqEgeY|)7&>D(edv9EAhq*!!Qlzk<lwi95!=ubQF(^>>xXHPlaE+XgI=iyjD65 z`RAkeBhQU&ibYC42XbH$KVk`23_riaS&)Z@0B85elclP(sm1LpJ;L%Qvq68eUtAC9 zar4VFhkw&pwPp|g$sOV1s3O-=au8!%YHU0G;5=@0&9<vBAt@<z6DN1DfLWi*;TCVC zxj-ie2^B8UjIp4V&}bwQX@B533Vnc#Yj)TG@bhQHQ#WdNtr;>{Ta?;nMCgTPQhUO~ zWjYixk+$6PO>$sL4U!?nMKP+k0bv7Ot2<lrUNPs!FJa@6%N4{K#{^!_bN_JYMrf?n zd&S>-fNJi16HnS4(`#A60{ufdb$xW81=#@X&_4D4nq{LJ*Bo+yU{oN1%0XYGU=E9l zJq=9-437N;;VqLKB%3jVH5!$y+!CUsM72|pSv(i%<Y8%<3GCwrjB&LZ+zxkbgDv32 zw<TIWLyh;#=jj^vs>&d>XxM9F;VJNLdTe&AGD*WteKh8(0E}-_AzyPeOBX$>XtAhQ z@aLqUnLa0)<A=U6`l*~qK8uez-E^z@o|3MUadQdiA8jL&ayyvH;|M^i;jRs6TJkxW zJr1eKasH)7+r7WU(C%Lvm?^66KQCR<NPBs2`TAIp=O}JYzV6d|tE@o7v>rAQ)`3MQ zTj=&84geJwkWC+o9bOiA3qSKT!qmOeuPu3>b8h|ZQ@bPpY&MlRczDoaoUSNSdJ2Fz z7;TzUrn<2t4};-t2ZCNHXBf!G;2y{6qC;1y-S`FR9wl_n+#uo1RI9l<I>E`9@49xT zQ6|fVdA(tBhFHIluO;t|UVNy2t>vm@MkudiV|`^VUXnCv0Y?C5nwVllAfj1P3VV`l z53@Xcc0{wQ%naRkKzbOyFlHnNcr=X<|H+9)FzGh9+IwVUj+pC+yGY)A#>^5vwgJrG zm;2lMG66r__ER=L<Zny|{1!U3lGXUfTZ7BtHG-+S5~tBYl}KK`>rkex=S+$cb)Uj) zR!leoKZS;csWXe8>-+#_6=E5@)v7Nc1pg#s$a?n~ww+3DQ6tG57YeVJMjFS?OCg#t zsmMCX_*BiV2ImVk!%I8{noCbqOyW~`41ZN*BW!JTP9k~yoo#{XTB8^e3d((>wy7(% z@-WjCmQ-$4z>&$WsarqCtVx{VU}a@q@K|`{bZljlbIhIdes?$(`H4)tTu(_fdp_~P zIP^isAym<ZZ*6O_Tcg}G2#Hbz7-j&jzRQIg_aQ1drcN#J66li)#<-uSYjz@LepZc* znLl-BQ8uSkalGpI=j+pf2z=by-DxR9kABwt<5Gxw(@`U=<Clp2shT$t+&`V00O6Bz zf<f7gUlS8n&W|J(h>{quhNkvPBU-7%6Tug{K2TofPI0*_9XRZrlOBoZqE*8J9rBld z6^^+l>vp$RLYq{T_x+gWLEJM^_#njTr1%aOTWrMcbb+(Iq)o#+`>DDPu={{HM#|o! zNcQ-q$n*nRpp%;6LauLbZ=YCQT-FU#i;E(RP>ASsw0>X>+i-w2aT3}DuMp*4s%PHR zKlFx)on;FUyCKb)`n67)R?ZTObigzIbY*dX9NXY952!zJkrK`(v-~T4Jjr2!%}%z? zn`JYXiFFC=CANSp|NU|sHCPcPllt{Q6pDOJR;53GO6*>rqo=3*JKJ%&VSe%xR%vcJ zN@p#K96Msm*3oblHn45<U~#KOexqLOeXCfF|24Z~+N@Rbpib7~#yEol{9J=-!Rp*# zOfF{wcVenyOFZeVg@JlO$V9m9IG<Im+5N~)@~JZ3rTdRvb*DR5$VmFq=fXB~tZ{rz zuLcJK&epLOH!m>Pv9Pf4nD5fKQFl)dO+s>-$}zF{jV!k5&=pop$&(Eserg!8_F|5$ zY;sDUql}<!p(5)_;673oNXv9>;DaAZPEm1Mv0tF$KFfvc2T?jvfmX#fn{v!DX74Q2 z+p^Ew^^#p0JOTKWMYL;YvXIN=LkUM8{xVZZz|`C(Cijf@HBn^I_F{$;<1U_nB(hTP z7hdFGAvgY_jfy>>yE_Gs;}Tt##`HGMiIb&bov|h{#FQ++@x#_Zb2;O|DJQdNgn$FM zyIhbFh%*VmU@)FN$3-Gk#>MIaJb99=y9z8@wpcPHQ%QhJ=PI;T9A%L=dfhJcg})pi zrf^cN)}gNf!Lsck`1Abr@84LEW8Ss(Qj59nLgZV`A>J-Iz>S+g8IND|N}ynKON+X0 znDy`E&uuM6EJq^z-laesy*s+q8T2s%;E@8#8%PF!9<irKUnEaA!z&Q<OhF)=BCKEr zz^7YjpAmtvKt#O*Nd73nV)<2KYWj4iqsW_!W9p2z2jqUNfT0+_eL%8-Aea^a1P^^_ zb|}~7+5XasgAYCW01E?G33afyzqkVWGa&AxJMs9hfXhd%f`}9!6KK=@{^gPf0Iqrl z285BcwS^I@-+K=u0jUsBaDf;1M3-UP%ditZgM-^!tBWnZTTX>zBfx$26?-&}tj!Or z&|0=PTH0e2Gq=~mwm+F3RR@=YWH65D_W}Uf_cG1KT7YoJb=i{$gM6Ej*;!j4>`HK1 zuM>84bw!MUS`||Mb|-G0p!x`Sk{@#_wE@H9g3T-0qd<f!J@6T7wzC+aTT)!C3-*Rw zWZe3(`)QxS;H47x8W<J@433X>sEMdnN>jWH?!nUY(FKAxEuS&qh6)3-r*J3LcLgKs zE71`V5!xFr4i4Jb+7T}x#%D#TRfTo@Q<Ko$pcBd%(zjy?J<K@i-5=@4A5ox$q)Wad zEY1M|v|=B-m$@1o4Q2-V`sXy4;w(m8sABJS==d#!A$D)-18x&CnQR`-;=KtNh|_Vm z`<4ZMr|+&ZT-u_tgLq`TIzr0Ml))Sj&czSF(&gnGK&C;>ooPmvM7it^<?O}#1xWJ3 zA|f$0L%)8Rp7Pqn=5RAMy0K#@9poGCFhjXUSz7>*?)QY%3@^P&c%0C2Wgt4iroA5x zW(?qP#*C3BM!uy`FGfnhRqdY(3l6lI;=y`4-BbTm&v(#aIW{^9?g-cuw@)cl88l;$ z^(`(s$|)$YBXfF6-RA1Iw(vq6AWK86s-nT0dwj`IQ3){c%aH4?OO)Pc@Or>-1S~ba z9ZpOEP&&}-lU9Z|kg5^`cs9kI13N%Y7-Vq54G{)y9}5iY@>&2%Ng2m9Zvkm0?f}XK z7lEXRF!aQin0X*I$V_rUfRL1l=y$ibH%U9g=<sMKD<+kDqdsozCmLWUM<CSqu8g5v zfs+*Oq%_@CS64R&9G<6qaqbIgt939iUk9)oFYl1TV#o4N4<CZNxVW5pk&~Sr{POF@ zx{5fC0tA85%PGJ$EJ+CvPB0cN;04X*A#L@wsMCSpSsbOrh)rN@0a))Z#(Ioi5dMXo z>jb|&{B!3qgP(8kFb)lVgg~Mgf#RLdk8d%=2;<8`rvC=)WN-a<OTZ2M#~S~=hySDo z=u_P(|GkI*_wOO_0PKJNJ*f1zP6Y|@^CqCFwh1_eYTNX8-yz-~B_kJ)R}0*jY#(-Z zPRNGn-Ku}=e_`nK(DcRGc711OjP6j~k-v;5zJ;}M9DFKw#fv)xh&+;GEF>Su8<hLb zGQbZ2LDkZPU!&!J(-=r^!u`EQ2fVPqOK^V?)4w_)>{Zkbb^}|(Dm%Gh7AR!~{sk-i z#1!~h@zGD~cW?qwQy$xi8gq7`8iLJ?BC10i`zYjX{Cjnv&TJW9rcnwSH#;S`U0DUk zn|Q)j{K;+=M3mQM{F{-60#_2l3(lxFE3gv5z7~Ol*~mMknr!SPrtf8sLj6y#hc(X= z&BTnota7gG_A7Va=)>tJ&r3D*We@C)mdzIL&$6}a;`0_tFPH-yU^~U{m0XZkPgZQ7 zqg7G~n3uOxj!!Cg;NDFNy~!01+O2~OJ#043nSP=n&5<iEvo~@1r42i*u2{eQHx5NG z(6&=nW&~}od7X|>z)J>M)DuCE=T7N<BTp5VK7~)}U#NP3B8U&}q#}cj>+|vj-AnVi zOt74w#(Tf}Lm*$(gRC;VY<_0WKQR~n@my`U!OvLVBB>_eNoY=~j=ZaH?f<m&dqmLY zOH`0YU{!Od^u~XWU~)GTRg65oqCeTqFK|IboVq(1#N;qQgSlbrC0!i_{JWOvw+D8c zQexz(j`1Q0iQz0@1L>%>J>r(H)I)N~d1H`V8(#0CDJui>hTTCB6T^>QPvrGn5R*!* zcmrzV?bxNgajm+BE7*5l?stc?9@6*tYl3{!9Q`ZxH9GBG#?q6$&XD5IBS~<M(u@Ur zmt*sLr-vkc5^sZthj#u23~1)C)MB7TaCtwS$;Zsn4=MV`C@SMEjX{mNd$gK2H?SCZ zHejJtb%QsL{mD4-f3DeEpAE%jmI8PIRdSq-bk!sR5PZJpch6(u52WG~#fFa5xTv6= zjohN-S~$$d|D9Me(E@r~q91PQTGYNE{X}y8>ThHVZYUG@&&xjlZ!O<-vyN2l;A5bA zXn{YAebBr)t>@)8nKxIxi@r488_(>N+Fi0dHp-FcF&<-eALiv&`(2lKZ~RT8OzOto z%>=7m(5#~%B`NGDo(sN4=hFBGa|W_@heNu<<l{_<E|NTG`8&^oU!z?L)`}14nB$>H wXigF%+nUieCE1+MWqf1`_w3{$gU)W^Ajbb<?RTFAX|VO)Z7tQ@TP8364<$sFr~m)} literal 8941 zcmeHNc{r5o`ya9;lw+$1NtA62gE0)s))XmOvyL$s%)$&KYgD983x({dY>7hltdUTJ zvNN`1m&QKg_l`Q}bgtj`x_;NWuJ7-^^N!_xpXa_m&wYRH<$2!gn#gl!4Y@fFa)Ll0 zZsaLFQxJ%09=OMHumOKJKh=bRK&&)>Gb^$wiXu+*Cb(cdG2-M)M2tAb59<N~`Sqn+ z;(R|#aeZ%-DQ7wIfxU(IR8r?5@_OZ(`jq6oDQt$X=cc0I$<^r__cv$S?6zvo&rPQn zCU8aVF%%2BJ64<5J+fM9|GkQ8I6*VhUJ*LbW_UF(ytpzr;Z@&8*LL97E{jIKZO6A= zG^gM|$Of9Kb--WBz41t$u4ecfbXNO}eh}B1hjkoRr&ydK?UNR@y6$pLl1*p-N<~y# zb%lg~?WCt(uX_cNaLb<OCFwl&w$O6b%mF{`l8oo{vE9ty%#()p)|btWxo>-aU^g2| z)k^y$dal{^B^;sKmnq&7K*xk+Z>q>pCPN;S_0#mk=&l1+uOFMVYj+Q!==RDMBX;}T zF9|Le*VA{8NoBw;*o1m`A6E$9UD+1eSu@T0ar9z$ec5ytOR4Xi%F}K;8s5^5n14Z# z*+TCnsCx?PsOHAh(YK*KBZYgcuPk1U?+JKJahOKTm0Fa!D!&sE(9N#1LcCg=x2~es z4oM5RS4PTFo(&7N?^Ydvy-n5#XNoFMefaIra0!j(Ma1dcHMwtcgNwzt%E%~h``C$! zQ2hS4ZVpqXDx$kMcr#pJSKdtuWPN&LKAo<2QI;7CdOHFyI?Kml=E4a>R;n<m8o0U# zK3Wz%Z8WJc8S#K=H$IF@S$rInLtzVfDGVDQC{-?eQLyM3CuL`)XLkEox$2z0wZ6G= zM7he$8>tKz)pzW-*xJVr>qgvy3_vnp7mRr{f>x1*@3qQ|;^Da4Q+t-IgBGLHTe_@7 z`Q;yq9Zo|*>I$W@?jzKXs>mB|uzm8Ctso2)`1FhRQ_lxDexKT8b6-Aj3;(25C&-Yy z@+m=TI*L#00h6LkC9@Y|-{lWv#foPuXW7fH^r~=J*Rn{jI|?p~v#|tNjM`CO$S$2+ z5?`$*%Jyjw8&u!4RsRsgSC;BU=PZI@+y<{#7JOw{c7Ln&%7mn(-7ue7ygA(vpuzOc zAl=t5oXjx_0SkM8$Mz2#)_r7lM(pmGnPFM;d)wR!XEQCGRyaQ-MS0go8e(bl0moO1 zTX$athH>wLKlpq)i|b*S^;K?^&jAP*c5u;kdwTW`ZvFYLkWUkrL3<aDx;Wbi_fTq1 z4a=O_HLvl_O=Z$*&eP}H-5Xt8FP{Zfq??=<`ue-?=>tza4qJVMsZRTaz48F%oW~vZ zt$1Glt>5-Ta?W87n;6Hh60r>|>$OpNImf17Yw1Pp`*4W|s<X@1-LP}Q)LB9*<{HlW z(Lo;LC-zS*n(${lvI@_By<Vmvb6vhfAyLQCeot|iv!Y*ZS1e1f#^fE5ld5&M?j6g; zIlDB9?YHN6g#k&mj_M|87}i*Jgf71AK1$3qXJJoNb4JVIl5|-o*lj0vZ=dgWx_MTW zbm6`4rN=Q57I91J?51h8<K=<qTBFFCvx0Y<aF>&=4rX50zok^<E&VK!Y4D`?tdFEN zRQ5r31sjy}$?XRxg9~r+5=w;H^CE~ndV$kxgDcXyDkr0)%>9lS^JW?=KT5O<IO*7B zurYCQyetFXtwZkKr;xkQ6)#vU8qS({Vl#GbAYNT3>Z6Un$rWZ8?78}#*xZ4Fm0nSv z=~r2>tG{twPGagW0^=ScCCZ8p*DDV&eP?~&t`iNOObT7^y_)7P%#+kS)WpeAvcZCY zt6E%_DSldTIPBbHc4#ZKMr2GbQjMiN^yLv9C2ju1=HLbw@Q~rjEq0|GQzQP}Hv1^Y zaAEFuIbQ4|<V(dzXjQ563$Wu@wVCS*xhl4tqK=8(&GyLFO;mc_|0JqM*~wLag&W^2 zz<WT{FLE};dp-Bko}#Vg>$z0g*N}b(;Yast6CQ~De!Cv8cdj8rLEKAU0v!5Vfz<QI z`8m!S?vV2@EFNlIp7q={T9Ledl55kAd1Nq>xPN$m&V1siOxPw)t~g7Gy>i3*;M-=t zHeQ+D9{xx-8XR75*fLpEDP=VL<Xw*Gc_HI(e9sQEDqTN#?IH6aso=WF?-dC)FJ^|k zwvMk0FL~n*GF>BKfc@YqR#*2NQdjqn_761uq@XCosn<Fp4GtI59|=VH?(^a>O_sZU z1LiJp<J{qooVoA^wi~R*2crdr3~P&qhZ~(f)izjLvRj_mw+Zqhdz+G@e%p@YzgX`_ z9JoVS6{ReI((IiQK0$cg{2Pqkpq=1_GHmwkSAwr9a-DaHg-9cJ``vyXu(swe^x1mo z%a%x`dzaH?6Uh`zxb@*7@sy!w`;%59Uq2JissB=sma@CM7BzFDg^)z!*`ulKnGsE^ zM>#>LZ%zvrhGp}b@EV#KX9gagD`>uSv(Vyc!31J`&lT$+O#BQqVqc>~toVtmVKO(4 zrG*{Kg&!A;ekn%#x)&ZCY0Fu5!*Se7=fFYd#=TqY)fGkF_xSLpifrVno|Q(9eLbuP zRr<HIis#<!9u8s4TZ*l=Wp~j+J}-LtmiI#mx2<gn6tlN<fQc=ItM~q)CX)+qKVM!| z-pJtESI%1AJus9&hXsL5KbnuS!C))~wELCwi}QIaLtBW>*#-8<EbkY^ZFD1GoA$#3 z+p(3g5gbjxDWIGQP8bD091+;AK_E?SKOze4fgy`KVO+6zgv3HcwS+j<86jb*VytLP z)Wx`APx*UeF8H4{L;HK6)tx1@wKz5X-~a#)Lq>`F;XLsqxF14d2Nw?9Glszu;yWT_ z4}^r3@i}o_f;UDSssL3`l-Kve`YK6iaf)ktJG;P5^$dPO08a=BH!_(B2ZJdTiULJh zf#B^5hN!EngB6v)N=ov8ggogIo{aL7$CHjQAbw!zVMu6iERl>Q;Kdo3C?|ps86hD7 z%!~hFAC72j{3kq~^pgdE53nDK2!<#qf^j(TuNow>zApgs)1d#TK{5kQHDFT=iQwan z#_0QE@Z=-ELO7%U)F=9Qd+xa7j0R&oF*rb!1gr}A+mePz<8yy%Feq@v;)pw10NH<& zBx7CvBI|FqF=lq$`PC3W{ZHJ#N&n&djxZo)Yz)^UpnVwTA@vXvjP>Ep1T@wezH_VU z0)eQbP*8a_G{i+7>a32EcY>l_<W(?=5H%%b6^IiQ^9vLbPa>o6Xbb}i09U{QI8JIX zh!RT8MP5}Mtt=0PDyaYvDr)j-PA<;ssxTF(6Uylq2orBCkd-LUU#((5IRj8oC1od! zIt(qZ>ZAgZhho&#<zebjw7fFZ1+4^Fq^|Dr!y0Ea+<@SXLjmE$;!v&_FcI&%vj&53 z_=$5!goKiU;$I`@JW*s9Kmj3PgvI;#{WW2R#bGXxQ4BUAs;V$Gh%!tS27^FhipqZp zSzx?LKqfLUA&LshN;@-*u)qOl0Af*$JOu!D#sOd8y51NRnc!_kAb27q7$%7`H2<77 z2Fl49MMmkN$QS@rQAr67fxsbZW=asavKsIstEdE5{6(JNjCHy6e@QcnM_ltq$WLKO z!1|YVhJIAk1&r5^ryq}=*qu@m7vCugI12s41ro{^<Gf=hfc0Yv?S{g;Vu0@PGhP1} z$Nq;@aDl;;)nO1-c~w=kk~|awg~~grs5t|VP<4!oijs=63+(UcB!UZ>g7U_ka0Pe- zxB}91hb!@8JApd>cWH_nh7kpTFnI_>{!hZ7u%Cp1e>x0i^o&0|)&&1APBeD}erYm* z-j6Y$c>%o;{AV-#$r+>V{6AhlWAXpE0s#H*BL9frf9d*{u7AY9KN9{oyZ)u?A2INc zg#XR1{~BGKf4xp&@W3gE0=z7Zf7q1;ylAmGoiWq{Z8JU(D>Lr_BfE*GtVtly9zMn| z6DT2RKQPEnMjGq0Pwe64JF2L=l2;78y}2UwPMG=i%?%Pfg;#?b7uzEFk!K9woaU!J z={YOge4V}fQ3unE=kcb?pDZR=`fatXalM?X4}FrQZx;4i7h`Y{M{nC??kzs%tLT~k z7}s-7!yvI}OIf^kR6F2<yu_{&d)cN)C)viHNZYL_<C`DnLbL8WBBzh_=5xMsxC}~w z5Av?EelJ^Cm=Bg_0!;jGUN2tkpJg7lw1g+`Nrsb_qpUQ05m2SYbt8Cn&sk?1N%iRI zI@C71MGvJGiV&mZ@g&b*XEVvY4t>*00@ZR4U*MWSOXqp22l)o-%BA?9Gp&@oBl#Tl z)=T7*Kv=*89bvu}fB$|--BvrUGB-d&<0Qc<b~|Y0m=1AQslNTC<<Yz&&x6+V;P)yn zL|d8;idZNgok|c`ahSEHbk|npo=HWwF|(*$PIOa@ogJ!JsH65rdfKGDjy>;|bF@iO zvhnzaQ`}aCTkmhyva@2rsD)<k*v}z%5ZwC)Koe76c?0M-*$q<T_@8cI6n4*afXgqe zo6w@8gDP{|R&jP4ngJr>rA+VIsdFI<y+@uO-LmR<WP&110k($Fdb-jBdT4-?4-EpU z5FH_-<1yON<B4rT1IIh#Te5pXrNyXKv)RVNHujI0YwFAz6+nV1miCoP9|Lu5j;7)G zc{&eeZqixPgjTD!XC39%#mzw+c#wjKwpZEehnn>2gx$EuZ@ltPx5Q~|+l{>Pb6cp| z1J3Ly)5u~2=*g-pE^Oi9`8~+a^dXFxbB!{!Akr9AYH3y6de(UXu{52YnZ?178y&7m z&z#d+QT|*$>OEpNulk}FPKX;3g#|(vRr*^M(q$Mv1eR28t~JSqWKCIru)T(B54imV z+1T!b?3Toc7-EqJklp6X_!l>(_lgx&8(=P9YiI%7F)I0fzj<H^a)y%By=0cr{pe7w za`K@x<)~A-1D;E^F;CJ)B0pue*$2S{O@dE!I3c$VYIQsslYXuld-}@?i!tE_Cle4o z2XcRl>S{xkX?DMY`F@EuWOK3M!7bND%eZZQSLl*OyuJz2zp40n$^5`_i1tgqUb;I6 z;Ye~TdqjjZ{Ai_q%;jsLY2J=Z`+t`f>sS&QO=Y3UeaVtOYByuu9q2|KqKoG4>q~v{ ztfnV)%Y3h%1oyW5ahunMv?MK!Ee-)@fOP%ashe&juaY@fAy3qo@-Apl$ZG1#IgW(o zyzu-h8EWhAUHeMnZ>7jKu<tJ9sCUYyW}IZORs+PqX>r_NjoNrpI;E(tibC;pu%OLd zl(%qv=^8}KNzek%Pj7Q*L{&z}FkB5wi;ASX!iRgMY>tyh%G?Ym-wVnrX1ZbxEhAdX z?Yb17kfo}x{}AnTeWP|tNd_^P^NvOK9*~oy;C-hg3noKUf>bu1ai%t+`@3zj`GFYU zg+jgOf{_O4q`spIRJS|O&H4i7$D~1fse1&|_I2_VLvCPk5XE%L*3A#b7t_*TBRM!Z z$x)@Aip%I+ml7BR+s{eBUf(@(oM0UadCCfu$Kc9WJu`FB=QbVOCdg)==h%(aOL*GW zC@yx$-(s`ROR{sxIcsO}`^YZ~&jh=U4ifF7c_X1*t*(hc%m>f)c?l6RofGdx6^Dym zIDUDUO&sedS?DgM=X%L0PSUujL}gRb&Hu{)Q@^h-RxV}MwEbCRjHtco-NL#pUKxfB zlIa;>{zUl~+Ngw-@xWpVakwKD`4k*Xh>eId($@$xqHr>#jz^Vx5xnkNl-E@dMd3m` zbcJ_5HjQU(hrBn(W3-T3YAwQVmL%odZx4r<GVFM0lJ_+>F|Xgt%r#-?&X<DZw6w@i z-|18;dOzoV4V`0@nqgRTNr}p<PA67{9S!m0_nN>d=`-f-^>PMi^qlVJEBWKQG$^Ut zCxF(}=#@dxkVWWZ5o;8e({GK$W&QTz#aAnnVb#;=B#H$+Xv+MvMbCC99j_$>hY_)> zt#)6;;`o(*Z@%~HeteNU!Mf@uV4SeoZlK%nV`y?r7d^daO;@UV>--f{Hgc^r%X~== zfgbQ=4~vnc6}i`6)4$nyB-~as;*rxd^5qyXa2OJ#_eO}h^q;v>2&=hipQ*iZYQoNV zD<6J`i%^;I%HH@=rT27Yvt3nmWxt}C>;7-p4d{bLeOJ4)t(^4Wjk=*2gkUZA2d`bn zu)fLDBNzFHMUmyuSlqJT(S>(+48QSL=J~?rCt{V6YQ@V#G?6rJIV0O7wgH29GCseb z=p!<CztO{@;<J%yo~s=#Eux!>(D4C<3F}0XrNolXyge(uF1MYRKjSN6Y>lFxb0EwV zny~@imfoZm9G;nOPgID_E=WnjthdhfSA3($$$r(sFad>0LsGuP=1IG%`u|2<YZ0)q zc~(;~ivwbKPB&GvQ$V<Ah;|-bD%6z<)E<d_!!p;deQ5t<5k_rt7Pix9r|rDn+xgx) z;b0ZwO&yA<?sj4|$Y!+92lA!H3w|;9wXPC+_;g#+p^&SmK|qbD*%7WSJe<J?;9rk5 zv~5+54cGK^>b{QWdCJ7tGpM{m)hP+9p>^QBuZ5?`Rb?UDlcFoC03b2yJwB}XE8HQ2 zni4&}KV0PX2U}^#%HB5@1{tY%QvLF^JI75z`xE=}*ekeon;MI+v3G5`bhgJoY&9Cc z5(jo&I8dgzSZ1ZUd^h=Ruz{(L>35^XdG8(s(amx80CHQ;oWUpS$ct?|jVN54nWcjB znIW30{7T^3H7ZA?H8zN`P9PxMHm6r?98LAIT^(NbmFV}MUTVDKOBq~;$1n*hgg1w> zKC*SSRWh4Lnv4tQ<c^IjQ?_Y9XY>I2-uJ{OyQkv9yK@#rv=Y{2Vi-G;fE9|$ic~M@ zO+kK{e}GGSIAy%G+-<qE{LEv^5P2^qR+iKf4;D1>0rsYSF^s5Tpb05nW!i0a+M0oL z-Gg}njVqr`Y*5>*NHtsEHBn@WGSJ%29bkkpZ_IwQ+Dez$ovwVTdyx2HDZ>}B-aDs4 zUWztTgDSNnF$}NEhI#0QN4r;D17`KQo??zwC?DJa%gzFde)RBgX)TkVQpJHn?p6aw zn)ZvPSlP9xmUk&=UDPE8{1z#^YPz$WfnWJp-aYz=_rljx6Qm-~BOP7Dyx48NS-s+z zW+48TmBKRA4)D;aIfqLTy07`#)kQ=;D$y_9-kIbCHaInRjusucl;BCh5Xmb~87iE8 z{RfA#(~jg7^7W<{2L)yKFW=!ZA%Fa4r)F#tz9VwF_7L`ZPBA;VD;ch_mDPVO!a&Mh zT{@*Cc8$-B6{rKV4+prDInSEZkKRDNg#}GKok5y9Eq=TbKC)59vTo2xy0(KO)7N*9 zYJu`MMaL??yL}`?F6H9bMDYBAXg;MUa#pD^s`0a7lR#_PE(T;rk;~$YjOM=j1~jZP z`c<Qe{g5s0FtFomLlui{Iwa!6(5Iu}z>(`bFC!B2rQHf!Rqh&Xb`H4G0bpaJ%)_^@ zkfpk1RxKmH7<ZD2ln=u7^%>z1khd6i^7D5$E$K{Etsl*vueB=3SrQ^NM(>>+@Y#y+ zm8dBAkX#WnbFrU%-<?rbLjGMU)sJNEjL4zfHm1K(lP{rx6I<|B|B(>-cpi-kP)C>S z{!(NPb0qp#^=v*jW47vf;KpPn&W3K9Pp)X)j*txD4vGEUm&K$%QaDOaqF<uPa*Wzm z$~(uAve{Y^Ja=A(QK7c}qb6-)HyiFbJj=If?Jf;0t4{SR3o*A0c(QotDM-$fD`wZ8 zQ{4#-)O&Q=fU+iSVAiayd_wmsqlUB2w{1)?6}FS~i|kNZV(PN9^r_;ZF2rmQgP_Mi z;^#R~H}^*413430&YTV&ix+Uf=Q9iS(t(EK$fNo_c<rb_c+0IsKY`Ot<s!&#QEJuZ zl)xNU)Gi=T)IIW<;~pJKQ<F4?t9jMDa<jYr#0cnwYHGNbJTDrV!h~xymzRsRGOb%l zZRx^lT<R{5zl_dHYtv(ZlWuiG3L8*bYA0Nw<flL+vSs)R-lYkra)B4W&+2SHolgPE zcu&BAwNLdy12xRcp+Vn=<bxK)&bU8lbkC49PPmn_Xe^u?<j_|-{`sMGs`CQl;A}J8 z@cnVyq2TwyCyUy`C-|A^j{%_t;QyD|^MKRDJ?R}~!?C!0(v(p!66yD4&)~}oYw_y} z8W~du?z~iaHCU7}wG6a-6~_(~!%34iibG+^>VjC%3De48uiCyRy^~0lgdwv4o7Z>b zTGW2SdT4eJ6(4i4u39xJ)Ow$?3vjBWDW5NH+tJVY(UDj6+Ai0=Kc0)y*DiQgvp<0G er4`^RJ+LLF54G0ej-TIo#X;(y)yq5S81_GC$`pYB diff --git a/websites/docs/public/ballerine-logo1.png b/websites/docs/public/ballerine-logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5cc9deacc539cb5f7213641fbdd6bedb5b3a24 GIT binary patch literal 8478 zcmV+(A>rPMP)<h;3K|Lk000e1NJLTq007DW007De1^@s6<YnKe000a<X+uL$Nkc;* zP;zf(X>4Tx07!|IR|i;A$rhell8}(l0tiS6y$K>UfRqqg0O{RENCJcsV<4#5kwpd9 zf{F!f=&Fcfr`ZuZi(>DK1r=poEZCJdDWL1V^1YL9?)~%6ng5(QcWxN~)Q@w;;#^b% zfILxwBsL^~k(`psAUy>L{851sFy->{#jNP)2mo#H{C9hI9r{AM;vm!dXa9dSO}-$X z2LKWcaXLSrmk03y0Pt#_SW*B0QO283DG<vrY(QHA6NGqy3}-5EwG5{#@E*BOd@LK{ zHULzpT&^S&0JTeyXB6@>p@v!?#7-i<Py~QF17hF2yh(hB(;&8iK4OSv`ponnbTa>@ znLeb+<z^0H#a!g35-7|U=W?h0pXK=9mX|9Xj9~>EHA@m2E1NT{+s&Lw;WA8xxL1@O z83nNx#2<uwxj)1xB}*EbpzucxdHHNuGoTBx6Q3Ix4zVG`!J^#A2qmAMAq?g~3|9y` zRan4@hgc8d1%mvbIHk`<$)s3iEVLm*!e%M?vs{Tht}NDlX-)!5ssB1lz)|XBYDHP` zNf1*YwkQ-PMnbFxv15KtT)5I_bWs*Na?nR2jg{qZ0dcHA6cV7&#|kqf!LdsJvb_Ak z`C=Qhgq%nv-dB(nAF8Mi*2d$?^M`Z6E(t`egh3raesaX%T=;^(AjRCVX97_|oKok5 zxF8@_F&3wYbEB31xS1d~M8=yz?3!N~ryPqX7Qh9m(8n{x1<~<}Jn^DzZdkM;AABi@ z0BjHl7(fbJI+z5qfv}^uu^0YR^aKMgkbq1e01irKa72>4M+A>?pa}d4kpScmjSG<X z3P2&`zYejAqXWp0_ZG@W<bWp-=YepL3;#>yqeMf|62W802>%hC3mXsSn+uz)|KIb2 z?01F*nFu8#9gN6OAM_*!5d(>##9*Q=Zh-sZ-gpE&`ordoGjY$sd3^ULJRx)v9ulq* zx(K%>3X3H_WjO|PLH%H5Ez*Ci1#Sg3-S7b12dYD5To*S04!A3f!@~VwWH-pNm3hmm z!uU!1Z!`GeYAF54PGpokjO<Ug`FW(8otoQ_imcW@)<=<R`cS>uLp?voXa7)rK0Js2 z?1?SF_G4$T6WBTIFxChd*fFdLYsZer@X+ddEMHxN(PHKK<Uk$aKjIBuSy?6Xo$8!= zoW3af3ItPS&uGA&B%US_W@Z&ISn!P?U~oh{#}N!?CubJ`WbYTn<Lga~{Jnwbwtwg5 z{Q-c_v4MesL*KcuV*u>+fVY41cg}_hUmdCdoNeYwC4~wOmmLW3DWMMUG<{$U%z+J@ zk27!w-oPIOfiMsS;z0_S0JG16>s$h+fEi#eC<WzUDOd^Cf(>9Z*ba7qeV`E>1}DI2 zZ~<Hb*T5aPdb+_2&<Eau&j^B$5E?>9^br%p60t{|5hmh`1R)VfERuqxA(@B>ks>pY zc}O`@fviO~A+^X}q!~GZoI^U1TgU^X2YHQrLNSzzYNJM|6*>}SqAWBVjYr3$ndoG+ z2rWSuqpQ&xbSK(?o<J|4*U&EX1=^1ROcm3`Ofd(HiLtRLEEUVZB-kvh46DRyuzIWo zUgs-V7uJh?#ECc^XW$NS1&87ZI1itU&%zhsYw_)P1Kx&T!5`p#_%{NLU`Vhhco8^+ zWI`rk3ZaxxN!Us_NH_)WrEbDIB9W*|v?hAMdohKWO`J|#L|jMQO*~HQBt9bclSm|e zl0C_X6h-2a3P`1-HKd)SW2DQZZqf%8RTUEzXO&=;R27j*u}Y=N4wa)SmsOssd?ss< zEy-TwC^DZsjl6`sh1^2ENbV+orf5>EDL#~VN;YLKWi_Rqa*A@7@<vrv)lAh>HAYpa zI!AT2>K@gzst;5@QnjddR5o=SRZ3k<-9|l5y+wUPqtUEr{<KtD0c|m@mUfbMpY}nG zuI8x5QRA!4R;yBLP`j-5Qk|@Bsm@ZLpkAb2slH$RqI$0eS;I<$t-;lprBS8PtZ_r5 zUz4smN;66`Pjivx4$X6#&$LKdR$4(?e613#%~~h59?>znIh{@C(dW^(&`;63wTar+ z+8pg{?Q-p1+8x?`I$AoeI*B?{b*glZ=yd5~x>mXz-CW%zy8Cpm>wX$$G>kP&Fl^zl z`eB!cz1JJA=dUNwE7RMpcTMk;K0`l9KSzI=exv?91KhyQAjV*d!Fq#J2ED_zhkFm_ z4KEwMZ}@FP)X>f_)^NJvX2W*Fej{U}5F@eC8l#g&y~eu6{>ItHD~yjC_n6R4d`*NV zD@=}=JZI=ISd3i8YDOEQ&(zQ~)KqG^$+W}tvzfJ7f?2WIZnJyl6mzC|hWQHfR`Wg! z6N@nxGc4*XZd;NqnU-0Wt1Qo0zPGZrO0t@7)oAt1TF;teU1VKneb<I&<7YG3rpD%~ zEzy=~n`67q_L3cH=Vq5>S7mq69<_J37uv70?;JrG;W<JyqGrSm2dV?hq0phu;en&B zV}xU|W258CkrpFUM=l$AX5=>~H>X^uElzhvX^jdSRXnO?)N5xuXP$GF^Hmp`OR&pq zmnN52uJ*11*Y&P9-RN#(+~&Krx_x!`aF@8(yZ3llc%*q$d)#1ZGozV{m}fl+o&lb- zJr8?+^m6wq@Y?6~m$!p=j`t4lXQQo03r24l{m946hwHP+r^}b&o94UGx69AekLy?C z_t4+mpYOlb|0&CsmCf48dKuspAPG1a@Sg3(p2<EQhy{iOmIZbMX$2(&tqr;#Y!;ju zTo>FI;ubPJ<aj6{G(2=!=nak$hsUYq^o4nZ%?xV`r-sLcuMK|~VHY8ZXc>c!2^+I~ z%-u-KNKs^C6o}$PEswevZ5=&1`cMopCOW1n=1J_R*cq{B;^=V`<95Woiw}rj5`QPb zCPA9eny8*QF0nT8eNtdjMN(Jt$mE&H7g7vTgegs_q}0UJt*QNEgT}5L+da;0T<N&$ z<E_U}9e-|u!GzoiM<%LI<WAh5Mo3Fa+mZH#8^x{R_NQ~wtJC{<Y~Cu~3%);p1;0n& zBd8EO&G5;n$at3Nles*zC(AFZGOJg}7OoY($_~xmko`U<DrZ~HKyFg*?mU&ew7h1K zmMBNmHpzI>)JdIUdvU3_YqHnmm6Q7<;gYTSNdEZzrUGsFA>S^wk^UlmQ0QA&Rrp~_ z;*|YUHK&TEwokL0ws6|hqTr(6rsLCj(_3el&X_yn!A#c7O|y_$>9bmAo6jzp-90B{ z&i1*KxjA!xFLo-fD1JLHX<kc-QOTT=N56#pQdg>0Dk;4&-+TUs1^5Etf{ukQ3)d|C zR>m(oU+z?1S^i}aZ_)W*NBz3`*MY?ui#wLMFIm5oxKy<C`ZB*|+bc9HiYgv0AG5q+ z1!G0oinl8#t~^)iTDf5rWtDVQ*XoGXO=~RHEM4<uZPwarRRLAIs|~9cR=;1zUw3)E z|N8n3MjOgEeA+17cym+8riL1;n##?@&4rtvY)Ra5<~QbVwOb9gmT&#KO|-3Rd+heM zT94Y=9fmuW)S-3Kx}Kfmc3#>QxT~q&p?=eD-QDGTz#i$I=X=xkUf&nKuXR6jfBgZ= z1JwuV2g@3ehG`9bjaiLdO({*C&0)>0E#55$4>=y%cG&cA)e)T|OO8^GmK+^8R&=cY zxcGSQiOds^S|_&NIhlO&YFkWO$EomBXHN&8K6!?9=Ga-Evxm=loohbNJl}Z1{X#># zTl>M^-F`pV;oi}3(c@y%CC^JOoufOCUiQ0u;!5C^(^olHFI<bf)_FbQ`pp~TZgkz` z-+Xo}_tvZ1g||Q7nRAzLx9pzAy~_KB_iO&J{bP5Rd)JW%fe+dr#y!0Ai1+Bl<NU{8 zx=WtWo>V?Hd0P9-`Pt!~;GRp*$3E|VA%5|>xAafVKdWEbygcxi|6lEW$$j0gB(DZu zFM6Z@X4_lWx2^rr{rBJHz5D#W?1TP??H`#R&wNVy^z`$TFQhN4zuJCn`4;}|?m*ta zfS4=c%0C4#*wBm&0A6ncfR+LP9q!L4V-@>9xgm-@s~my<gcW;4xw!*S55M1Idg0g2 z4FL9Rf!i;ruRacdXc_?Vo&a@m8ES)jHTk|$W<<CT*ckmaJue;n8&m8#f5`jiGmxpe zf}hX-0v8Q@R)Z)Rd;kCxoJmAMRCodHojZ0FNfL%H(`}3g?Ty#c3J@!h<c-(h%~%3+ zEMNsRD*#r|;I&8h3Xr_<kXFFO9IM3&H1S=OqEys7BC9g9BF@QM@2t!}<IjkE)xEQs zCP(tvfrP{B?LFBNTpWSa5V({CZLh<bY)>VeOBf}0M%)b%o=SKuVNZgKBakZsTS@p! z38xaa63pa<#PpYhD-VuAK|1hB^72eVuk=}zJ&EDHgoECg{02uLUj(+2^kWHZ8|80} zXTP32k<CX5PLd9g{8AAJ>`5-r^@nY_`Jv?kBzY_0?=9E;v?EX&0_gg`By1&INVp|U zM1fVm-@3~W9D(&9fc|eK+#*Z8jj|^<V1n*RaB&3Iiom60{DFjR0H973dI9#rMc+CC zD@Nd4@(x*cQgywa${Bn#7e~Mm*lhkGAYe#N0V7zHJ=y;tfvt-p;0Sz002gdu!e!_l zK9Yky2`-L+Bk&CY+Un0Z3>L-PCf~sEJx8F5z*Y|SA<BUSdb(U30Y{)2fn!{+qvmUV z))8<7t`RtZD2EP*Bj5;hB5(vz_BwCzi;jRJaNmjIO5h0eBXEz#{8j&beupElZUnF> zE{=dB(1U;zr3WCt><EB>6UFtw5g34g6J-EMev2dEL~$K(1O_1BL>T~*-{J^3QCtTc zfdL3OQ3inIw>Sb$6xRVqU;qL?4!Fl}nGu0|_wH>D4i0wV{{8!#a7+^R_V#Y2<nr=z zL)dP&yY0or#pe9{e0R*&#SQ_V!eWQz<d}|*jyAvi^2>%TB(V?(bb5Na`SZ^|cU#Eh zqC<eWULIz~KuB@*>eZ{OzyA8`Y7Y7E;ltJA$B(bXLU~zFD{CjooD~JiiqbA65c9X+ ze!CJk&IvP)Fiw;?hyp=AefqQ%KN{cbgc+s#qi*(EXk0CHg^QIMLF%k|@#2NMWc}sp zM2TThXbZf5|Guu1$sR*ytX>Q(3W?K+VqK6qSdliy(!pSjM<MY!Q7j7*Hzs$%x_D#% zJ6?Qu!fTX%fAu?za&xu%$P8IzOy|3NT2?BV#pOiN78tef$B!TTbT7;6CnqOPmai43 z6GcN5NJ8yfvfxf?Fe>C(C(6`<Tmwl$1@P?Iv$d1Oi86&Kv`I?0B!MJhyK*<oi86&K zIgOD7Mb~bb{<7i*z7u6EQA+3no=O_5=o%+h`ZRlC$ryR~@Zm<R$(Tnb-^-ekv$M0^ z8WX0?*VmXx8|h}f3TsznpmTRT`Go@?WcvQ`@$taB%eigsjkLk}pQG{4%wihOQ)_Kz z1-yOxHhTMMg^hc6y`;_?L>6Y-#uDO2$%m$8$bB(qEYn`0;uw;SLhc!+B!y&la>0tr z6@?>M5Nm?e%j(x(e~p&*`nw7~cA^X^+!$TKbGk3F+{V}>A5u0m-Qz^*0~!~`QXt(@ z-K?))zqZWEZnb6~euZ3jqVyG{r8Ob0rG0yAS8OF##fj2I6iaK80!cz%Ey+SVE5uvy z)``+pxF~^zq(qXCUrRS^1y;q05)`Mtr5#}<sVb6HMZlDvI(~&6J5kyS)N0%WH>d3# zOP{B`Wbth=;+Q%}x-<p@-|s|e1InTiPaJLWr*fWdY6~g+;}lMmCWXaSvXESq$HE2s z<Bva*uN0cfdf+)HN)u2PwQLU7B;?(qV!-_h@fEmrqBIq%MGc#aH3|8*SogowKx)WC ztgZh)iXhu0Qs7Oe2cP5X@iL2d@ck*=$d~W6B9=)TMUu}uQ5uQ`l1L9u!<FHuShJCv z$he9+$*hYhQJg3Zr7B&f4QI!lvZ$TMy-|O6)8eqPv1%>x*!RtKzZ0baX^X<n(V_qa zD=IZ&QORiDAM05sN&~W5w~Hma)Xq6deYx@2Jb;}Rzp?L}<9;Vf1Ij=D{By(E;io=- z{yhBV#O~A*h3q&{5-ZeL$<Y>c&i|KaVF^ogzuclkV4H=qMM&15D03$HpbSpD$%)bc zoYtZ=MCqq8N5F~FP=HR922fUh%83#|0o;9w0P4a~{<!e_lYG6_qTIcEcf(YU(5MaD zdS+?MR09NCnq+Nht*3o$$9E*d%=mPvARyE0D@XJ12Ex!)OII`7xdt#9Y?aB8s!Z?i z?=MbxRR$U!c8k&g%F?H()d}?phL8o)Fg=ECjNUb^H3hpE=~}u>cz?-j2qxvtV!_rN zaj+DCsr*8!N%?Fldy92AP4O0R&WTbl#5t7Q`W;rJ(S9c&r^RaZa_>2IqSOJhR^qwi z(|qt-yLb!2*6}Rl*ojgv$hj3e*88a4$E>o%h0_Y(3ajH;!m*E|NGX;obO?xb*$81a zLYUrc);kY+A85FNPKHvY$QnQjYjVD{wQ8!*_gNT=?*vHq@?_jKWfuEcA4h4Z{zTCm z&X#kEahgYu9^Lw@JFE|uM<a9#|Mb&OnkbTe)?Ke;izZ&eAO(YpxMl1k@&~TFt>#C& zI#ToQ*w3zVz!6_O_~X>BxqU6gN-1c!fWw<NZw9qt`ra!a!0Wpu>+41Olu{zM@+BkA zSN!dD(|303U7D%3F;Y*LSf^W<*UKRD<J$_Ad1k&Vs4jw36_5Ku-f8r@j6<Ma*#s<0 z*%s}3;Z{`ra4ED_VUAO&bCg;$ZFu3`yLX1Mr59DPjrmuvUTvh7yJ@WUK@U+}rXjF~ zc3yE71%;PCwb?aN#}qrgKVh)U!m<zt0VN_d326<%;#*=(@0jBpodKmwQA9!M==MbE z#|qB|(GrDe@bbU(A-cg^(g0yX;Pa%Z6NpNn^xiHCuo$ACWMf>dy7pFyqWvzH^sLpR zA9M^sS#v@NLb_;cLA=Am!%3Auh%3gHwn>}CjPbrD<GktZkwj#>&wmJNr26-9GOnVD z>MG_R>IiABNM8y)bEF|>of(t%A{z5F+^4uYZMBou_0oQ6vMpVl$J#JZ$a32!PoCVe zK3&hnxc2hp%NWrn8)w$F0)vPa!Ws@Kp<U4a2m9PLt+dH@R>lH{p>dQxZW45%vd!1s z5-T#aTzl`U5=Cn4-ut_5Sn4m@<|GX7swh$M``Nl)QcxRQE-U%+<;zV}TGxvPc(rrj zCgR9DG^%mS9z1vuy@7plauPW==|!JqZGh>w6s(98%`QlntUBrxYFs`P(KNSBow@4> zu;>A^6>Rf!y`DaOYE{-Z@l+L?eXY<tm4fn+7wtOuHY^}v6}J@f8!-)e5ru-W?i#JO zPXf?w$}#kO)k1|hm)vSQDBAM9qDFmQL_w)71=2OuidvTiw`WOWG`$;FNt>@G>{HBZ zQ~s6b@*xTeZ7FRe0Z^^Gvc%U&qyu5M=7w6H0obMrAcjR=i3^qwQ7o-V7fB$BcBDV% z=zLqvSnuFKf$5m2-yef4D{#T`Ad00mX;Yx8LSYd!f<>yv7kj_05^1aLW00lrUa&lf z(xwPglzB*jYQMpYg2pCCh`(=k0;I()3-^buHCeFIP45Zs%Y2(YQ2^gcs*@kP3XWbY zt<0e`eIyBaXv?=XS=!#yg>@#^(kF_A(xNb9{Ai0o$ENmyrBVzf33+dG!AOrqUU>(? zd*-MhEO8tdSNcTJHmpMdQhN>rWmnj{l2`o197~ZYB%@P?``VU&t*cp0OrcgKeWFlH zX=O^`Y2Q2Loo$L-Jx?2Js&v)%^<J~7?<mo#BtI#V)qPU9q9@aZ$%3M^qa#Rh<({}n zyD!U(&dl`#VmVqLWqpfwLMV|_US02LO+exoTFtSfd+}=)F2Ph6NW0Q;NblMhjA=_~ ztsKvHz0(43EK%Qky3&y1wd5^|v?~NRomAJLkBKRKm1WE`)qAziSL4Exh-;*_uGIEj zn9BH($*M`-gEvr;bk;DE(M7Lo{pK+}UG=<5VNb5XyBf~*_w*fGSdwacqpwqgna>uY z!M+cZxvwX0Q3Mc`TwGjCeja~)%DV8W&ow2KTG_&qG{xO^4hwAY<wvX_mZcO~)M5yT zo$qI~S0ffZPsA}srnZUdSj1R&Gqml1)v*xkc3K^y8IQXab;g7=5=KiDE2SMm7Sf8_ zVu9J1!Nf5NJ;o)}c4m;SC1z1u;NK8O*+j9hC;>ETS(K+f1s`9W_t2&Z_fFjs2l2&{ zzV=Bq-4<;XDvxTM8Ske}6s^*XsX@mU;uxhH5;uyewV+)Dn^I|L@h3gjI1Rxv!aZpd zMQi@&p6))SfUqL+MVT%gS6`b#67pg(u2M)lC2gW;*M+2Bqs6u&<X_WHz#3>}DoLkQ zI<cNfzI)hW&`uikf?rx93b>n!BCgGb{a8XbuVy+4(|EK~d18KIHWqG8@h08aVz5ms zbctFtv;{mhR-}U-Ez%TQXkS>Qc@6IG0G#xNKj0;*0<%ymrs~H|XIK1l5(EOat!nH_ zW7{=tJ7wtDP22kuIiEgJEY_o-Jk;cKgH9WSo;M4!lZPQ<NfPkVOzRKnO~s-s%0GRg zFlcBcbC4xi4~wqVvH8YLvQ|n9_m@rqg_5T5Z2Cl@;4N!p#wx4}4$A=vmmo(V6C{bD zj9{e|$QC1QGsc-dQ2@iDo48)sxI`%USg=tXtQ=z>5W|wh^)wDWj@<=2G#zdCO~H9= zxx~Ex&UNInNn1oYH)08*C6XDlbc0s^zwz$fyEn66!%SGxk(xYz{(K`9Nz`Ns0aWoH zA0L~nb5SKi`S9o(Ro=JAGum#-w%RV&^SF?6xingga<?eS4>(pU0dX%()^u0n%yl0N zNG)wKAe$=&bEZ2hqTm|6dGlsYe3E<@7(f#6aG4K*McgRK-sJbzr@3q0f?S@*)mqAh z(PFezx;1)MeKsqL66%gej~=bg1;dK)-;B6ia|<0ATCw;Hk~R(6=O@?f^5VswwHPhd z){=8PkM&%-Hs<|Wu^t3nK=+nYc5P<0bC9%!AM<&}X2_owBa7!5qtS{*Iu?#2U!nk< zMImaH!18$rLY`8pfwi*@u!;*SxyAeQCJF^mf@MjOAVImcGY^*d_py+6!)^XV0Su;< z&?}Uiq)ZTSwP*{b;zBA(QwC82S#lY@$DKieQgX4H6p8t8T3Na?qA6b!&Xq%yka;F7 zrf6M)^~gnWu+mx~&!Jp0-<C&|P#`G~2EsD)ITvyS?AWqwKr2|zYMdGGmrImTDEQe{ zt0emr2V&r^;8sy1hcx82wQBQGS>=}Zru1er&0Z3(7HJP`q-Ng;aW?nw-`{9PoEd2* zFjCIcd?qKdU&079K#MimNH?__^Zot(BIcy6iYWC`hd5!KNgz%2(>h<ie7RA4CLltB z>b4$VDaT?>OxFHTaWHwa6e+?qN?~|Dj4-h1>B2=V#qGM*Emtrn**6`q`l|`rY9-;C z<?LZ80G9{|;Br~COGui<9}z{!;^Zh--A0*=T7eJJUXwXl8^~fIr8MFL7H&}j5-Z<I zyTptntev6LqckbXmz2Ws{EWoF@-HW7n}}5^u?$?X)=Vyo(f8^gth8}TB*~SxQ6~5Y z`1APkY#Ce0^-CzYThfI)0fFX6aJOiilqyBm08&`y`C`5nbC;UdXE64Vi_0Md-{qrf z2`u(=oX<8wPwW+H#LLZ<Io7*}`ti6jvC?1>FJz`2VJ(_}^|Hv<3~@M7`am8^lAwI4 zHfR}4Y_f(S-BY*Z7c13=W9HYLC|w1}G>j>NLZ-5^4=aMp7)x?-IlIbvz%?gI7f4z+ zh3A>(-}R1I*Qn)j1!Gu|K)O<Uxf;sEiP8YdPO&Z4iwA|GMxU#(I|o6?*9zJt)e6pu z(nb^%!CLrqPpnzBxInQjNWg=9te{=uL}?>O^?b|^Rp1WMrHs|mC>-RVEflj2637v@ zsdiRW%g%b=2OI^_HW8w1PEJnRE}Ncb(2{U*ad9(%S)VT@q}YVO3Qck4ZvN=VG%+2K zk*2kNNxy1de7`bKNloqY4S_XU5~(wGobcJh9kpk!Q&T#!H2Kn+EeW7GQ94wIHQ$7_ z%i2jo`8!d1Sim2Nmhxqlo~$-r#;WqaERbdG;_Z@3yF`@XJ3OY2&VTdn^W0n6ILUYA zUekr|6{B`TUj(bTPB$!#*)>Q?({B>eMJLM8!hkF>$5v7xA(erA<7^d`-_UZuzR!s= z60qIKdWqHrS4%VaITpvv?suY0DX@~P%bfGjreK}OGfosuK|q)}r;k{=XWkYWrTe39 zcHgz3R}7-jGnR`x20@q}?{3y8-5+(c6QzYH!74$RR4t4XM5XJhhn+Yr#0hN}lyhl; zxDePah)UO04?9s>h!QMJaLeZUBcnh{$bowWVXJBJ{b~B{)9gia<`kyJ^G8O9hli>^ zGODMUX*SGDJ3Bku$lq1_l#@C@%3~*r5<t!4;tK7^!k-vP&A;JKj5x<WTS8UBd@HsD z)~>K+J{DV-cnCOA;$iDC7leS%9xkXbJuC4LaH7P+)?+RR0Vhg9h3Q#|hkz3$9=0BH zK?pce3Mx#`N<0LdDDklMm<vL{iBeEudRF2g;6#ast;bvt0#1~I3e&R^4*`gB883Q| z*%2rLflDV!5#{Kah>XA%qMS#5iAV1U<c`2+h;o*DE<F8?Kx70?-J(QB*rP83fm5d0 zBcCMfvE$+hI0Cm2*vip976p0tb>qK|fFn>t;3dbwqOg<>t8#lu9e21m0_#O!D_K95 zu<P{#2F6m}u;bzgI082az=<tK!J@E_e3Wpo+w&hsVBH98CHwmUg3v|@$B$$O>*C@F ztQi3~fXj6wKiuqn-QkA+NqAU0?}v`Snh^N6WcI(+4A+UmwQ~udB{*3?!)0v<Jdq6l zUe9zBQMd=PTuAt*guhF0aRf?7;8HU99|>=pGJ2=!WaZqR?0=BJ*2NJh6#)zb?elG0 z2J4Oa`h7gOFX6ca_FWu-k`Ta(yp-@j!d617^jVbZgL`stB;kdGJqa$3K&}XECE@QR zyp{l2dSwhzs*xSY!I6YR347P!o@`wlfz%Ly2!wM9XV=?P*^ZL`1M*d~!4vtPsQ>@~ M07*qoM6N<$g4*Ob-~a#s literal 0 HcmV?d00001 diff --git a/websites/docs/public/favicon.ico b/websites/docs/public/favicon.ico index 0a8fae6f1ffe76c866ab29237b9cdcde49f9e5fd..90cf4eda8e4158e7442b03e37d5ad34a5ba479e5 100644 GIT binary patch literal 7406 zcmeHMXH*r*68;DhM55#z6%kRQsK62=qoA@T42U3Mz_fs{An48t3W5o9+NY?it}80K z<{XbX=Wxt9=lHq?=6b;k?m7GZ?0M8V_x4m*)y#Bt_wD+=3&=qMZQ6jfD)?Ok@Bm<G zS*@!8S6H8xR+XOA2q-WB?3oV>K`i@FoFJ-Ijqok^_4?q!gP1U30t^fcaQ*sqq@<+4 z$;k=t-o3+?En6^p^k@VI20~R;6{k*}!i*U+(5FuyJb3T`D_5>W+qP}7ckf;l6%|28 zM+cWLUq*`-E%5T?ORQhN9=^W5P*haJ(W6Jvqel;zn3&-9?b}$kY#9a*9t;;37kv8k z2|IS|Kxk+v)Ya8-?%X-dnKK8mv9YkVwZ)SsPq1dq8jKh*0;Q#;ShQ#nl9Q9ss#Pnz zeft)hH*dzMQKO)uqJrturz0jN1{M|;xPSjXh7TVO4-XHF8#fNx+S<5u=@R1O<6&=a zj~6dqASWjW3JMB1a^wh%jg4{Z)-9x^rNP<R86Q7>#P;pm5fT!DvuDp@_Uzf{-@iX> zY;5rO@nfuBy&9RBnK*FZ07^<qP+ne+q@*M`Iy&Obn>X0BX%q7E^AQjb0A*!mn46o! z-Q69#ckf0-L<E~REnK{K5zU)7$MfgUv2NWu$ji&)@ZrOlG-(oyjEr#e=1rugrm{8A z1|L3rz_xAM5F8u~H8nL@TU+DNqemD&emtV0qM)m*i>p_!V&TGtNK8z`>({TbapOkh z<>kTO-ycd!N;rP}IC}N!1v4`<+`W4jLx&E9o0}WHeEEW1yLKTwJRF*unwU3l9^&HS z(5zWAJbU&GYuB!Yx3@Rs<m7PZ&><Ka8sf%{8{jw&ty{Oo`}gm$b?a6%Zrm8BPoKuj znKSY5;X_nZR3JS)9iE<^*tc&Vii?X885xPDO`GD%l`B}VU;zdV8UzOi2fTXq3L7?T zfS;cq8Z~N!W5<r6tgH+@d-jB>sVVN<xr61)mt)9~A#ind#plnTv2*86goTAcLqh}S z&!5NKxpOgKzyR3U+2QHar^w36f|r-q*9G5j)sTUIkOAX9MtSx>1;_rqTTES@>0NGJ zkveRS-(Mx)53yQdz*kF!_vkg>3mES$dQ&?kdii$(<e686qJ^uY{I9+g(bBB`fJv#m zW(R#^=42PPD1-$R4yiZ5u63&%|7wr<!<~8F*{5Fr8b-Cm3Z6Hq^Np71o3@+fV;eVB z5|pIF^C5K9$&xtrK=#5F&gL#%^u<>i%X*?krDo7C0hA9xDir5-t}_0m$n%4AYdThG zNvlL}YAc$UE}{O|Ql9@!<{bRVhBh#B!MZMMO|mGW=x0h~o&IWuJfG@F_bi#;Usw{# zO<6!bo9>b6^rTvnRLS#|?7<~N`>ui7vT5uIQ(TQPxSZ#UV`}-5n*STi^n4(v(znnK z=w8MGCbsY|WKAy_?uhNm^A1Kp1Z&zeht4WI->l<m2cFl|mgNsxXvOI<J$ZfxM-Fjw zDmE+(V4cl{M12#}_Ya=8cJK2$&wJ+!#x^O9`!RPts$yhFf~z&puh(GtD2)}&UL$BL zgs}QYws<-5eEDc|o-ecW&z--roz4{I&R00f_GY~kBFfiW&R_$KvWPbs#->k@@V0dZ zsErAlH?Z1`nvgjo*_b-j>CX(~g-s~L^pFdh@57$5v_Aih%s)#ra@2sbZvELZ=)0cn z;M{rww2OE?dos7sY^w0nGma%W?d$gWHc*L;H``6pKbfhEzN(Ub$;I*kY`qVas2*&4 z71sA7m#f7xGE4L?h-VY<qo~Pj?NfO^*|y5$){9M9#yFXNVrP0NOXkEsmm8P3DNWB} zw^yz2by!qywj%h{O0EB7|3Oo{NI|?)9c@WopfFukUp7C~;r6w=WU&n!gCIrI>s~xx z1CVY%Q!lc}bEJB2SvyzCQF0lRZ#BDndV)l6xM;}0zas;5cw4fMFZ)Pvsv=WFk;18j zQM+~PRs*LJMisFs;Znk+A|CDBxw8b15*8J4=#(i_1Podi{v_;K8+Uf-&;k1T`U2i0 ztXUgp62{!KXO9G5O5@7z-Mb5zQpA!?nlz~wOSW&{UV<m}^z?A;+BE@F*2a=2PMpBB zY10HudGFpmtXQ$)8*C|!D}8)?1Z+vTvNom^@#L8^X9PUCYSk)aWMp9f{{7$JN@+|f z;>oE~r%Es-;mE?mLJ5w%aN&Z0B}E*Wot-Vgk<ro75*)c?$r1re5{@M7Xk}$3!Hv>* zk+33RL=hi~*pP6chzSb{3It3@_^-0EvH|~z`>CP*#~E<yY?|tAKT&3#%x>P?JIjz! zBEv1TyUKc0tRKfIMGuJNxDeh+hC_;pp<ipWl!@J9xYA}a>=|mA4%F==AI+HztL@Oq zQr@`x=&A?vN?dKI6X4?LoMWCS7e-HZXu=t}*0@23AGqS29_-~q##=Fi9oJG<+O8AF zX?d57YX55_XE=eCGD)1~SZTXLZ!Xjpu_Im6S`>5fy0-D0*I;S8ZcA<`eBu>*Vys@V zVY0S47bI<lN))GPpccuol5j+yU(#$i&sx|bc_3%wo8z3xqQ>%394Dt!BOWSEi(_(~ z2O1BG4NDlp(oBvu#340Yl`|}GN%Sn{l$5w}9cx&bqNDK>8$OeP;U3wXqKtYikIQjs z7nh*yfFC)>4z=TfpE<`a8Nvkka$2lLuPy31G(IL>-MKc^FjLwm*o_OcrjCflT)XPZ zSK5xg&Rim2l;0|vGf%5ws8$BM_u!mMBa1o5yjtlI9r~K&umScf93v~7^<@P2*Ked8 zTZi@kvYYA@MzIUEilk1Fs!dq&A`v=|i1Q>ad-CMT0&htiFY($52?+v6NoP6n*u<d{ zuT1AGooU3w5^qVh263pw856foygYHv#8nf=d-CK-ffJ@Pkm{Vpix&&LH}T|DFAyh6 zoHlXh#Mu%TPTV<hx8m6z6ci-z?8Gq>f8DWTM}c#vT8X%9ss-pj0pePTx22kB>C&YF zk34JEEP<CN{x>%_SNLCmY5}T&`t|E4@Yr;oQ%%NplfeJee+E>q5T{E#Jn`Jb`4fju zoHOyf#OIG0Ge-Cif%tghup6Wy1OM_21l8aP!UAnIy`_jM6{U`9uGZpN65h;=9lP32 z?QN<C9jt1lYOaN7*Cv8))Ge}|N#m}q+d8%qbR8du=89n!ZTvk=tNabsJpzmrtewTP zMOn_*vZ+^uzI&A!u#va+vkU7KBI<C_bAz_4P*n(hQN|h;p}tbZN0eHNE(Q{Jc41%r LZqj}Klk5KiTR-W~ literal 6634 zcmb`LTS!}X9LG=Bj;<gR3JwNRN7=&|l(C1x7-c?`!Pv`SgVBdQY%hcDr2{vrtjyG2 z)Oe}!ZlW=X8e8cYE34F&wrR9UO^ml1Z^`i%Ycw$zqq&-#|9*e<-yTnM{>N&SZ~vFy z`F=nDf6m3zFw7zNJ#m_We?MTx-e;Ki7>4->bOQ7%2+!~5C!o0dQ=r8#;#S<bwIsj& zGh5P>xu2ZZ@wltIvNmr%MX1C4QhGB=bed75)09}#8J2xb_iqIn9)J2exl+fj>5S|y zCZEsm>z~3p%n@H*Poq?(RDG%V&R5)xe%L48@7@*Go8!xsJ?EtI#p<E9C#$F(c>55i z??<bR4{nQPi_LrG-ML%`?6v)13byu6h%wU5huTc;gEEQVuQc|iV+iNm)!kVsy%qLq zc{A#;B2V>$%R-KD>{s?aLT$i&gNom<a%@Q#^}dhlElDY63ig27L9ekke{<i6aF1lX zSbFd5b{@_Yk<N--^84S-7yozCt2Fj)b`FRi%gadMb2otACM<sISD6M7<kA#rw<P$U zK<$&9h~65bc}Q)w!Pw6Cl76()mOwgKKSe7wkGsk7q;*x^Js#5!q-Z`|3+eh-iHEfK zymK8kV2Uf%W<!`kJp6V^@i>2*EAEeX+Bm)k_g56gG8z-tHZ+!)(8nLgI&83KaV}~b zeB~Vb)%^~ngL#TPwMGk{BkZr~tX`TQ*A`13p5^<(?Y6L#XTId&_k54AA5>drr81Vv z`@ZG-;`(6@X<@%2O6i6W|M+zMkaoZ)<|p&~{n}++864yyt+>J(TQVJsKNr`Jrf3;R zH@xfoJ}-On4bs9KMSi8l%V!Ato+|TYnjhEV`jK7N^RmKJj5NTd$Wzz<OvoZ*ceODq z)-l4-{J0j<4F-t^x8C!Qt|QF|a6#IgmW+4WWrg`3-$VMYO4Eno_My!eeu0la@2R(H zi4V7{zx8TS>nNgWUf#Rw-H9zSo$@NJ{mFK^k7RCkJVU6<bd1mS<@Mbpb+I;@|0EGE zFhwJOnWKqfYl>6C=OVFIe%;?PG|Xq>ejv~MFaMad{UUe{6~ld20oQyrTnqKURSEX0 zfjwaf)|2QM<M2Hr<oYj|dXO59r>O{-#lS2FrUIDtz{Fgd2WnjFGvuusDikvDIGArS zAoUnzP=vYHfLRVq1@JIeiPuW;KrJdC+DOO5b87|Gr$}vw42muR^BOSAfLDdNz*J%; z#j{fj$!v48KeoOj<Od6E14um%85CUt<~88SF&CJ1z*J%;#lx$G3I}IVA$p6?Udtcq zmGsMicNKVY&~;$e0#ms+Cdm#I3>x`d-|x1&s0A`;Dg@qD;K_kk395zTn<PBKJoN-} zD~3x6+m|=^H)@#xuDD|P!>RCv!D#r;;b^32G#ab2$2XhDIi#MX`h=M=-2_M8@4R`# zH&HYA`BLqS)l*yZ3-ZCV@7@c=meZ?^c5_0recY}LejcyyX&8Hi_w274dx)B`Ph76D zkuvi6q-)_heSEETJV47JwYY9Ng)^4x?6;9>8lD5<TB;cRCml~X7gSGqX*r~}P%-k$ zQq5Qu8H=?mHTF><Bi$HvxsJuPj+9sqnO|+1oP1tB{v}d6;Jy%7plQ;Vj+1U~xo)zJ zmW69!jU$S^sTL=2#T8afOTOojHQ+s`T3BjcT;te!UyEzl6phQNoM`6Ccn-;yYQtJb zf|iH(i8F#~$2tf5rO8!cza_;Zb*a3RirwO_)KB-MfJ;+Q<%p16sdl~9k)UO5wr+D5 zD`q}PHnUVNt}j$f7D+J|OYLVj)$~0?wd{*`%MBfyOv0XNiotoAEt?Yko(Nx4A?-|r zmVs+Q4I3uwUv6~tZ^HE>r8uxxn%I$<D>J*Uv-vXn59?ZILduWp?gpoca2?f-teD1$ z5-`6PVg810Cbh1eNk+8no;)}=-t0tkCC<+Y7q=djb9^t%gB;^iv#&gZ@ZYEnEt@<@ zF3pQSqd7VIHGi+9zfkEs7gO*3bE9#DwWUV3hj7xhvz3ng7~Eq*-$BOS7N<KMOE~AM zbp8?1y&1Mw$-0F3wDDBo)JcD<Gqm4*#xyK)*RY*52Cc@HOrG~QJHrWhX6<DSm<RWU zlPzIS(Q@}%a}?S?UaFqz_BA^LYZ_-F49`0(xQ~--8aC!p&dj>5vsD8n1Jv&$F^|hc z$s|(<%1OqUqoBjdAae-BB<C3BBIpd3fnl-@?}9R!Y+0r(Tb5(Uc%fWF2D2quHj~R_ zGhcu{1A%Wx7oo*}!|^zKNBIA0N8s2aOs)(x$80Oe$Z|nBv6spWGKQmbjNy=hF)$1> b2R<xVV+MS=l?}mX;DLV;$(SUXJDmI<cU1GR diff --git a/websites/docs/src/components/Header/Logo.astro b/websites/docs/src/components/Header/Logo.astro index 4fcf1d8908..6202acdd9c 100644 --- a/websites/docs/src/components/Header/Logo.astro +++ b/websites/docs/src/components/Header/Logo.astro @@ -5,131 +5,15 @@ type Props = { const { size } = Astro.props as Props; --- -<svg - width={size} - height={size} - viewBox="0 0 29.536709 52.331005" - fill="none" - xmlns="http://www.w3.org/2000/svg" -> - <title>Logo</title> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="url(#paint0_linear_926_2922)" - id="path95" - clip-path="url(#clipPath473)" - style="fill:url(#paint0_linear_926_2922)" - transform="translate(-0.462891,-0.13574204)"></path> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="url(#paint1_linear_926_2922)" - id="path97" - clip-path="url(#clipPath469)" - style="fill:url(#paint1_linear_926_2922)" - transform="translate(-0.462891,-0.13574204)"></path> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="url(#paint2_linear_926_2922)" - id="path99" - clip-path="url(#clipPath465)" - style="fill:url(#paint2_linear_926_2922)" - transform="translate(-0.462891,-0.13574204)"></path> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="url(#paint3_linear_926_2922)" - style="mix-blend-mode:color;fill:url(#paint3_linear_926_2922)" - id="path101" - clip-path="url(#clipPath461)" - transform="translate(-0.462891,-0.13574204)"></path> - <defs id="defs129"> - <linearGradient - id="paint0_linear_926_2922" - x1="15.2415" - y1="26.305901" - x2="5.1407099" - y2="26.305901" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#DADADA" id="stop107"></stop> - <stop offset="0.598958" stop-color="#C2C2C2" id="stop109"></stop> - <stop offset="0.599058" stop-color="#DADADA" id="stop111"></stop> - </linearGradient> - <linearGradient - id="paint1_linear_926_2922" - x1="11.3101" - y1="20.9228" - x2="11.2496" - y2="21.346201" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#DADADA" id="stop114"></stop> - <stop offset="1" stop-color="#DADADA" stop-opacity="0" id="stop116"></stop> - </linearGradient> - <linearGradient - id="paint2_linear_926_2922" - x1="11.7335" - y1="30.055901" - x2="11.673" - y2="29.7535" - gradientUnits="userSpaceOnUse" - > - <stop stop-color="#DADADA" id="stop119"></stop> - <stop offset="1" stop-color="#DEDEDE" stop-opacity="0" id="stop121"></stop> - </linearGradient> - <linearGradient - id="paint3_linear_926_2922" - x1="15.2313" - y1="0.13574199" - x2="15.2313" - y2="52.466801" - gradientUnits="userSpaceOnUse" - > - <stop offset="0.15625" stop-color="#FF00E5" id="stop124"></stop> - <stop offset="1" stop-color="#7000FF" id="stop126"></stop> - </linearGradient> - <clipPath clipPathUnits="userSpaceOnUse" id="clipPath461"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="#5200ff" - fill-opacity="0.2" - id="path463"></path> - </clipPath> - <clipPath clipPathUnits="userSpaceOnUse" id="clipPath465"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="#5200ff" - fill-opacity="0.2" - id="path467"></path> - </clipPath> - <clipPath clipPathUnits="userSpaceOnUse" id="clipPath469"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="#5200ff" - fill-opacity="0.2" - id="path471"></path> - </clipPath> - <clipPath clipPathUnits="userSpaceOnUse" id="clipPath473"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="m 0.604457,21.2253 v -1.754 L 0.783188,17.3265 C 0.985753,14.8957 1.50376,12.5016 2.32415,10.2045 L 2.43348,9.8984 C 4.81082,3.24186 11.5869,-0.782381 18.5694,0.315392 l 0.3145,0.049441 C 25.284,1.37104 29.9996,6.88592 29.9996,13.3647 c 0,5.1951 -2.4083,9.8277 -6.1694,12.8422 -0.2185,0.1752 -0.2532,0.4969 -0.0775,0.715 2.6424,3.2799 3.9484,7.6461 3.1642,12.1984 -1.1185,6.4924 -6.2852,11.5427 -12.8034,12.4999 L 8.42571,52.4555 C 8.01008,52.5165 7.59771,52.3258 7.37507,51.9696 2.87349,44.7671 0.511154,36.4337 0.56326,27.9403 L 0.462891,24.5828 Z M 17.2355,8.79989 17.55,8.84933 c 2.223,0.34949 3.8609,2.26507 3.8609,4.51537 0,4.3413 -3.5193,7.8606 -7.8606,7.8606 H 9.67704 c -0.26723,0 -0.48387,-0.2166 -0.48387,-0.4839 V 19.8285 L 9.34223,18.0398 C 9.48292,16.3515 9.8427,14.6887 10.4125,13.0932 l 0.1093,-0.3061 C 11.511,10.0175 14.3303,8.34314 17.2355,8.79989 Z M 11.8612,29.814 H 9.19317 c -0.00368,0 -0.00662,0.0031 -0.00646,0.0068 0.19992,4.5079 1.23989,8.9293 3.05599,13.0391 0.0872,0.1972 0.2959,0.3108 0.5092,0.2795 l 0.1137,-0.0167 c 2.8359,-0.4165 5.0979,-2.6199 5.5873,-5.4605 0.7072,-4.1055 -2.4574,-7.8482 -6.5917,-7.8482 z" - fill="#5200ff" - fill-opacity="0.2" - id="path475"></path> - </clipPath> +<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> + <rect width="40" height="40" rx="3.76471" fill="black"/> + <g clip-path="url(#clip0_2893_10083)"> + <path fill-rule="evenodd" clip-rule="evenodd" d="M13.8199 21.2926C13.9411 22.1339 14.671 22.7385 15.5052 22.7385C15.5869 22.7385 15.6687 22.7329 15.7504 22.7217C16.6832 22.588 17.3315 21.7328 17.1962 20.8107C17.0081 19.5157 16.8787 18.2787 16.8075 17.085C17.2534 17.0133 17.7229 16.9774 18.2123 16.9774C21.6985 16.9774 25.0946 18.7408 26.6615 21.3622L26.6925 21.4124C27.5042 22.666 27.8057 23.733 27.8057 25.3432C27.8057 28.5719 24.5394 31.7645 21.0842 31.9149C19.0409 32.004 17.3837 30.9789 16.5805 30.3604C15.8393 29.7893 14.7656 29.9203 14.1878 30.6557C13.6101 31.3912 13.7425 32.4526 14.4866 33.0236C15.6077 33.8868 17.8861 35.2927 20.8291 35.2941C20.9602 35.294 21.0912 35.2912 21.2251 35.2857C26.4502 35.0601 31.2102 30.3214 31.2102 25.3432C31.2102 23.0839 30.7368 21.4235 29.5784 19.6211C29.2952 19.1502 28.9745 18.7008 28.6206 18.2752C29.5807 16.8185 30.1574 15.3228 30.1574 12.9993C30.1574 8.42495 26.3753 4.70589 21.7674 4.70589C17.1595 4.70589 13.4056 8.39988 13.3802 12.9519C13.2393 15.565 13.383 18.2923 13.8199 21.2926ZM26.0506 15.9695C26.5211 15.1358 26.7473 14.3006 26.7473 12.9993C26.7473 10.2859 24.5152 8.07951 21.7702 8.07951C19.0252 8.07951 16.7932 10.2859 16.7932 12.9993V13.0912C16.782 13.2894 16.7726 13.4885 16.7651 13.6885C17.2345 13.634 17.7166 13.6065 18.2095 13.6065C21.0652 13.6065 23.8278 14.4732 26.0506 15.9695ZM13.4295 28.2934C9.93199 28.2934 7.29408 25.7333 7.29408 22.3401C7.29408 21.0559 7.76473 19.7521 8.69476 18.4651L8.72858 18.4205C8.8385 18.2645 8.95968 18.1113 9.08932 17.9581C9.17184 17.8586 9.42421 17.5587 9.82703 17.1627C9.84186 17.1403 9.85821 17.1175 9.87614 17.0945C10.4482 16.5624 11.0936 16.1835 11.6798 15.9885C12.1251 15.8408 12.6916 15.8269 12.7311 16.4092C12.742 16.5756 12.7545 16.7481 12.767 16.9197C12.8013 17.3925 12.8351 17.8591 12.8354 18.1765C12.8587 18.644 12.6858 19.1188 12.3191 19.4707C11.975 19.8005 11.7708 20.0445 11.7398 20.0816L11.7357 20.0864L11.6962 20.1338C11.6314 20.2062 11.575 20.2786 11.5271 20.3483L11.4708 20.4291L11.4678 20.4332C11.276 20.6991 10.7042 21.4921 10.7042 22.3429C10.7042 23.8612 11.8231 24.9226 13.4295 24.9226C15.2163 24.9226 18.6602 24.4379 21.6391 21.1868L21.6589 21.1673L22.1129 20.6879V20.6854L23.1641 19.5376C23.3219 19.3816 23.7221 19.3677 23.911 19.5376C24.1454 19.7483 24.5762 20.2102 24.9154 21.0177C25.2401 21.6339 25.1554 22.4117 24.6462 22.9502L24.1615 23.4628C20.3033 27.6666 15.7827 28.2962 13.4323 28.2962L13.4295 28.2934Z" fill="white"/> + </g> + <defs> + <clipPath id="clip0_2893_10083"> + <rect width="23.9216" height="30.5882" fill="white" transform="translate(7.29395 4.70593)"/> + </clipPath> </defs> -</svg> + </svg> + diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index fb82734ae6..c71390437e 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -41,7 +41,7 @@ export const GITHUB_REPO_URL = `https://github.com/ballerine-io/ballerine/`; export const TWITTER_URL = `https://twitter.com/ballerine_io`; -export const EMAIL_ADDRESS = `oss@ballerine.io`; +export const EMAIL_ADDRESS = `oss@ballerine.com`; // See "Algolia" section of the README for more information. export const ALGOLIA = { diff --git a/websites/docs/src/pages/en/learn/introduction.md b/websites/docs/src/pages/en/learn/introduction.md index e52de0b096..36299807b0 100644 --- a/websites/docs/src/pages/en/learn/introduction.md +++ b/websites/docs/src/pages/en/learn/introduction.md @@ -1,15 +1,16 @@ --- -title: Introduction description: Docs intro layout: ../../../layouts/MainLayout.astro --- <div align="center"> +</br> -<a href="https://ballerine.io" title="Ballerine - Open-source Infrastructure for Identity and Risk management."> +<a href="https://ballerine.com" title="Ballerine - Open-source Infrastructure for Identity and Risk management."> <img src="/ballerine-logo.png" alt="Ballerine's website"> - <span class="ballerine-span">Ballerine</span> </a> +</br> +</br> # Open-source Infrastructure for User Identity and Risk Management @@ -29,132 +30,79 @@ layout: ../../../layouts/MainLayout.astro ### Description -Ballerine helps any company verify its customers’ identity while providing an amazing user experience by composing verification processes for any vertical and geography using modular building blocks, components, and 3rd party integrations. +Ballerine is an open-source user risk decisioning infrastructure that helps companies automate their decisions for customer and business account-opening (KYC, KYB), underwriting, and transaction monitoring, using a flexible rules & workflow engine, 3rd party plugin system, manual review back office, and document & information collection frontend flows. -### What can you find in this project? +## Our vision for this project -- KYC/KYB flows and UI in Mobile & web SDK - ✓ Open Source! -- Case management dashboard for users approval/rejection - 🎉 Final stages of Open Sourcing! -- Identity & risk vendors orchestration - ⏳ Almost done -- No-code rule engine to control Frontend and backend flows - 🚧 WIP +Watch a brief video expalining what we're building. -[See Detailed Roadmap](#roadmap) - -Join our mailing list so you know whenever we release something (like liveliness or the case management back office). +[Watch now](https://youtu.be/0SppYSZOatw) <br/> -<a href="https://www.ballerine.io/mailing-list" title="Ballerine - Request Access"> - <img width="160px" src="https://blrn-staging-assets.s3.eu-central-1.amazonaws.com/email-updates.png" alt="Ballerine's Early Access"> +<a href="https://youtu.be/0SppYSZOatw" title="Ballerine Demo"> + <img src="https://uploads-ssl.webflow.com/62a3bad46800eb4715b2faf1/646cb35bbee1708f66aa223a_vision%20thumbnail.png" alt="Demo video"> </a> ---- -## Why Open Source KYC/KYB & Risk stack? +## Features +View each component's current state in the [roadmap](#roadmap) below. +#### Released - 🎉 +- [**Back office**](https://github.com/ballerine-io/ballerine/blob/main/websites/docs/src/pages/en/learn/back-office.md) - Case management dashboard for manual decision-making. -The goal is to allow any company to manage user identity and risk in a way that suits them and their unique changing needs. -Main Open Source benefits: +- **Workflow engine** - Orchestrates and automates the different system's parts. -- **Future proof** - modular and extendable building blocks. -- **Global** - Multiple vendors accessible in one UI and case management dashboard. -- **White label** - Customizable UX and UI. -- **Community** - Use what others have built, contribute yourself, and leverage community maintenance. +#### In Development/testing - 🔨 +- **Plugin system** - Integrates with 3rd-party vendors, APIs, and data sources. -<details> +- **Rule engine** - Leverage various rule types to ensure user compliance with your risk policy. -<summary> -See some examples of what you can do with it -</summary> +#### Planned on roadmap - 📌 +- **Frontend headless SDK**- Real-time modification of KYC/KYB frontend user journeys. -- Use different vendors for different audiences - all modules are 100% vendor agnostic. -- Create your own low-cost KYC with AWS Rekognition, Google vision, and other ML tools. -- Collect documents in a KYB flow. -- Implement and modify a case management for user approval/rejection. -- And more. +#### Community driven building blocks - 🌍 +- [**User flows UX/UI**](https://github.com/ballerine-io/ballerine/blob/main/websites/docs/src/pages/en/learn/kit.md) - KYC/KYB/Document collection flows and UI via mobile & web SDK. -If you currently don't have a commercial agreement with KYC vendors, you can use some of the vendors we already integrated with (Identity verification, AML check, etc.), to quickly start processing user's KYC requests. To do so please contact us at oss@ballerine.io. -</details> +## Why Open Source? -## Roadmap +We believe in enabling companies to manage user identity and risk according to their unique and evolving requirements. Ballerine empowers you to create decisioning processes that are right for you. It is flexible, future-proof, easy to implement, secure, and supported by a robust community. -Click below to tell us what we should work on next by creating feature requests or upvoting existing one. +#### Explore What You Can Do With Ballerine -</br> -<a href="https://ballerine.canny.io/" title="Ballerine - feature requests"> - <img width="180px" src="https://blrn-staging-assets.s3.eu-central-1.amazonaws.com/vote%20features.png" alt="Ballerine - feature requests"> -</a> +- **Dynamic Experience:** Adaptive user journeys that modify in real-time based on the user's risk. +- **Data Ownership:** Self-host on-premise to keep sensitive data within your infrastructure. +- **Global Orchestration:** Add/change vendors and data sources to cater to users from multiple countries. +- **Cost Reduction:** Retain control over vendor relationships, costs, and communication. +- And More. + +## Try Ballerine Now -#### General - -- [ ] Documentation Portal -- [ ] Roadmap Community Voting System - -#### Onboarding Suite (KYC/KYB/General Document Collection) - -_Please use the voting system if you think we should prioritize higher a specific chunk_ - -- [ ] SDKs _(WIP)_ - - [x] ~~Open sourcing Web SDK~~ - - [x] ~~UI Customization~~ - - [x] ~~Flow Customization~~ - - [x] ~~Document collection~~ - - [x] ~~Selfie~~ - - [x] ~~KYC/B Templates~~ - - [x] ~~Vendor/Backend Agnostic~~ - - [ ] Web liveliness step - - [x] Open-sourcing Android SDK - - [x] ~~Webview Integration~~ - - [x] ~~Native Camera Option~~ - - [ ] Native liveliness _(WIP)_ - - [ ] Open sourcing iOS SDK _(WIP)_ - - [x] ~~Webview Integration~~ - - [x] ~~Native Camera Option~~ -- [ ] Backoffice - - [ ] Open Sourcing Case Management - - [x] User Approval Queues - - [ ] Operator Collaborations - - [x] Backend Agnostic - - [x] Vendor Agnostic - - [ ] Transaction Approval Queues -- [ ] Dashboard - - [ ] Data pipelines (Orchestrator) _(WIP)_ - - [ ] Plugin System - - Integrations - - [x] Veriff - - [x] AWS Rekognition - - [x] Face Match API - - [x] Document Classification - - [ ] Google Vision - - [ ] Document Classification - - [x] Vision OCR - - [ ] No-Code Flow Builder - -#### Risk Suite - -_Please use the voting system if you think we should prioritize higher a specific chunk_ - -- [ ] SDKs _(WIP)_ - - [x] ~~Open sourcing Web SDK~~ - - [ ] Behavior data for fraud detection _(WIP)_ - - [ ] Risk-Based KYC/Step-up KYC Templates _(WIP)_ - - [x] Open-sourcing Android SDK - - [ ] Behavior data for fraud detection _(WIP)_ - - [ ] Open sourcing iOS SDK _(WIP)_ - - [x] ~~Webview Integration~~ - - [x] ~~Native Camera Option~~ -- [ ] Backoffice - - [ ] Open Sourcing Case Management - - [ ] Operator Collaborations - - [ ] Transaction Approval Queues -- [ ] Dashboard - - [ ] Data pipelines (Orchestrator) _(WIP)_ - - Integrations - - [ ] AWS - - Fraud Detection - - [ ] Account Take Over - - [ ] Rule/Risk Engine _(WIP)_ +**In the following example you can test a simple form of the following infrastructure capabilities** +1. Document collection flow controlled by our **Headless SDK**. +2. A manual review case management **Back Office**. +3. Live communication between the parts using a **Workflow Engine**, that also defines the process steps. +4. A simple JSON containing **Risk Rules** that are checked during the flow. + +**Parts of the system you might look for but are not in THIS demo:** +- Advanced Back Office - To try it out go to our [Case management back office page](https://github.com/ballerine-io/ballerine/blob/main/websites/docs/src/pages/en/learn/back-office.md). +- KYC/KYB UI flows - To try it out go to our [Community driven building blocks page](https://github.com/ballerine-io/ballerine/blob/main/websites/docs/src/pages/en/learn/kit.md). +- Our Plugin System and Rule Engine are still under construction and will soon be released. + + +**Demo example video** + +Watch a video of how the demo works, with explainations: +[Watch now](https://youtu.be/EzBXhUM7gb8) + +<br/> + +<a href="https://youtu.be/EzBXhUM7gb8" title="Ballerine Demo"> + <img src="https://uploads-ssl.webflow.com/62a3bad46800eb4715b2faf1/646b32fd3d69c9698cd511a1_vid%20thumbnail.png" alt="Demo video"> +</a> + +<br/> #### Get to know when we release more parts Leave us your email on our mailing list and we'll let you know whenever we release a feature or improvement (like liveliness on the camera or the case management back office). @@ -169,4 +117,4 @@ Leave us your email on our mailing list and we'll let you know whenever we relea --- <i>As you can see, most apps and packages are still private git submodules. We are working on migrating them to this monorepo.</i>\ -<i>If you already want to start using them or want to get involved - reach out to us at [oss@ballerine.io](mailto:oss@ballerine.io).</i> +<i>If you already want to start using them or want to get involved - reach out to us at [oss@ballerine.com](mailto:oss@ballerine.com).</i> diff --git a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx index 68ae4eb4ab..99a4a6f9f6 100644 --- a/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx +++ b/websites/docs/src/pages/en/learn/simple-kyb-guide.mdx @@ -1,5 +1,5 @@ --- -title: Simple KYB Workflow +title: KYB Workflow with External Integrations description: Learn how to create a KYC flow, customize its UI, and deploy it layout: ../../../layouts/MainLayout.astro --- From a515cfc5da7e3db22db789f4afda116534665778 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 24 Jun 2023 01:29:35 +0300 Subject: [PATCH 069/123] workflows dashboard (#567) * feat: implemented workflows-runtime controller * feat: added workflows-dashboard & implemented workflows table & filters & pagination * refactor: refactored implementation of workflow table to use react-table & added plugin checker * feat: updated table styles & updated layout & renamed components * feat: replaced dropdown with faceted filter & table layout fixes * feat: added .env.example & updated gitignore * feat: added health indicator & updted models & added jest * feat: updated workflow table cells & updated controller response model * feat: added date formatting to table * feat: added workflow status pie chart & added metrics controller * update docs --------- Co-authored-by: Illia Rudniev <cheskmr@gmail.com> --- .../pages/Entities/components/Cases/Cases.tsx | 2 +- apps/workflows-dashboard/.env.example | 2 + apps/workflows-dashboard/.eslintrc.cjs | 14 + apps/workflows-dashboard/.gitignore | 27 + apps/workflows-dashboard/index.html | 13 + apps/workflows-dashboard/jest.config.ts | 16 + apps/workflows-dashboard/package.json | 64 + apps/workflows-dashboard/postcss.config.cjs | 6 + apps/workflows-dashboard/public/vite.svg | 1 + apps/workflows-dashboard/src/App.tsx | 23 + .../src/components/atoms/Badge/Badge.tsx | 33 + .../src/components/atoms/Badge/index.ts | 1 + .../src/components/atoms/Button/Button.tsx | 48 + .../src/components/atoms/Button/index.ts | 1 + .../src/components/atoms/Card/Card.tsx | 56 + .../src/components/atoms/Card/index.ts | 1 + .../src/components/atoms/Command/Command.tsx | 144 ++ .../src/components/atoms/Command/index.ts | 1 + .../src/components/atoms/Dialog/Dialog.tsx | 108 + .../src/components/atoms/Dialog/index.ts | 1 + .../atoms/HealthIndicator/HealthIndicator.tsx | 21 + .../components/atoms/HealthIndicator/index.ts | 1 + .../atoms/LoadingSpinner/LoadingSpinner.tsx | 34 + .../components/atoms/LoadingSpinner/index.ts | 1 + .../src/components/atoms/Popover/Popover.tsx | 31 + .../src/components/atoms/Popover/index.ts | 1 + .../src/components/atoms/Select/Select.tsx | 120 + .../src/components/atoms/Select/index.ts | 1 + .../components/atoms/Separator/Separator.tsx | 26 + .../src/components/atoms/Separator/index.ts | 1 + .../components/atoms/Skeleton/Skeleton.tsx | 7 + .../src/components/atoms/Skeleton/index.ts | 1 + .../src/components/atoms/Table/Table.tsx | 88 + .../src/components/atoms/Table/index.ts | 1 + .../DashboardLayout/DashboardLayout.tsx | 16 + .../layouts/DashboardLayout/index.ts | 1 + .../molecules/FacetedFilter/FacetedFilter.tsx | 118 + .../molecules/FacetedFilter/index.ts | 1 + .../molecules/Pagination/Pagination.tsx | 97 + .../components/molecules/Pagination/index.ts | 1 + .../WorkflowsTable/WorkflowsTable.tsx | 89 + .../molecules/WorkflowsTable/columns.tsx | 71 + .../molecules/WorkflowsTable/index.ts | 1 + .../WorkflowsTable/utils/format-date.ts | 3 + .../workflows/api/workflow-metrics/index.ts | 1 + .../api/workflow-metrics/query-keys.ts | 9 + .../workflow-metrics/workflow-metrics.api.ts | 8 + .../workflow-metrics.types.ts | 13 + .../domains/workflows/api/workflow/index.ts | 3 + .../workflows/api/workflow/query-keys.ts | 9 + .../workflows/api/workflow/workflow.api.ts | 13 + .../workflows/api/workflow/workflow.types.ts | 31 + .../src/domains/workflows/index.ts | 1 + apps/workflows-dashboard/src/index.css | 82 + .../src/lib/react-query/query-client.ts | 7 + .../src/lib/request/index.ts | 1 + .../src/lib/request/request.ts | 11 + apps/workflows-dashboard/src/lib/utils.ts | 6 + apps/workflows-dashboard/src/main.tsx | 11 + .../src/pages/Workflows/Workflows.tsx | 45 + .../layouts/WorkflowsLayout/Footer.tsx | 7 + .../layouts/WorkflowsLayout/Header.tsx | 7 + .../layouts/WorkflowsLayout/Main.tsx | 7 + .../WorkflowsLayout/WorkflowsLayout.tsx | 15 + .../layouts/WorkflowsLayout/index.ts | 1 + .../StatusFilterComponent.tsx | 23 + .../molecules/StatusFilterComponent/index.ts | 1 + .../WorkflowStatusPieChart/Label.tsx | 29 + .../WorkflowStatusPieChart.tsx | 50 + .../molecules/WorkflowStatusPieChart/index.ts | 1 + .../molecules/WorkflowsList/WorkflowsList.tsx | 19 + .../molecules/WorkflowsList/index.ts | 1 + .../WorkflowFilters/WorkflowFilters.tsx | 23 + .../organisms/WorkflowFilters/index.ts | 1 + .../organisms/WorkflowFilters/types.ts | 8 + .../WorkflowMetrics/WorkflowMetrics.tsx | 47 + .../organisms/WorkflowMetrics/index.ts | 1 + .../Workflows/hooks/useWorkflows/index.ts | 1 + .../hooks/useWorkflows/useWorkflows.ts | 20 + .../hooks/useWorkflowsFilters/index.ts | 1 + .../hooks/useWorkflowsFilters/types.ts | 7 + .../useWorkflowsFilters.ts | 36 + .../hooks/useWorkflowsMetric/index.ts | 1 + .../hooks/useWorkflowsMetric/types.ts | 3 + .../useWorkflowsMetric/useWorkflowsMetric.ts | 15 + .../src/pages/Workflows/index.ts | 1 + apps/workflows-dashboard/src/router.tsx | 23 + .../src/utils/calculate-hour-difference.ts | 8 + .../utils/get-workflow-health-status.test.ts | 50 + .../src/utils/get-workflow-health-status.ts | 35 + apps/workflows-dashboard/src/vite-env.d.ts | 1 + apps/workflows-dashboard/tailwind.config.cjs | 77 + apps/workflows-dashboard/tsconfig.json | 28 + apps/workflows-dashboard/tsconfig.node.json | 10 + apps/workflows-dashboard/vite.config.ts | 15 + pnpm-lock.yaml | 2282 +++++++++++++++-- services/workflows-service/.env.example | 2 +- .../decorators/is-nullable.decorator.ts | 5 + .../src/common/decorators/one-of.decorator.ts | 19 + .../get-workflows-runtime-response.dto.ts | 20 + .../dtos/get-workflows-runtime.dto.ts | 24 + .../src/workflow/types/index.ts | 36 +- .../workflow-runtime-data.repository.ts | 6 + .../workflow-runtime-list-item.model.ts | 68 + .../workflow/workflow.controller.external.ts | 30 +- .../workflow.controller.external.unit.test.ts | 46 +- .../src/workflow/workflow.module.ts | 4 +- .../src/workflow/workflow.service.ts | 101 +- 108 files changed, 4510 insertions(+), 251 deletions(-) create mode 100644 apps/workflows-dashboard/.env.example create mode 100644 apps/workflows-dashboard/.eslintrc.cjs create mode 100644 apps/workflows-dashboard/.gitignore create mode 100644 apps/workflows-dashboard/index.html create mode 100644 apps/workflows-dashboard/jest.config.ts create mode 100644 apps/workflows-dashboard/package.json create mode 100644 apps/workflows-dashboard/postcss.config.cjs create mode 100644 apps/workflows-dashboard/public/vite.svg create mode 100644 apps/workflows-dashboard/src/App.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Badge/Badge.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Badge/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Button/Button.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Button/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Card/Card.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Card/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Command/Command.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Command/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Dialog/Dialog.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Dialog/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/HealthIndicator/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/LoadingSpinner/LoadingSpinner.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/LoadingSpinner/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Popover/Popover.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Popover/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Select/Select.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Select/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Separator/Separator.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Separator/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Skeleton/Skeleton.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Skeleton/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Table/Table.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Table/index.ts create mode 100644 apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx create mode 100644 apps/workflows-dashboard/src/components/layouts/DashboardLayout/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/FacetedFilter/FacetedFilter.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/FacetedFilter/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/Pagination/Pagination.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/Pagination/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/format-date.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/index.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow/index.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/index.ts create mode 100644 apps/workflows-dashboard/src/index.css create mode 100644 apps/workflows-dashboard/src/lib/react-query/query-client.ts create mode 100644 apps/workflows-dashboard/src/lib/request/index.ts create mode 100644 apps/workflows-dashboard/src/lib/request/request.ts create mode 100644 apps/workflows-dashboard/src/lib/utils.ts create mode 100644 apps/workflows-dashboard/src/main.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/index.ts create mode 100644 apps/workflows-dashboard/src/router.tsx create mode 100644 apps/workflows-dashboard/src/utils/calculate-hour-difference.ts create mode 100644 apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts create mode 100644 apps/workflows-dashboard/src/utils/get-workflow-health-status.ts create mode 100644 apps/workflows-dashboard/src/vite-env.d.ts create mode 100644 apps/workflows-dashboard/tailwind.config.cjs create mode 100644 apps/workflows-dashboard/tsconfig.json create mode 100644 apps/workflows-dashboard/tsconfig.node.json create mode 100644 apps/workflows-dashboard/vite.config.ts create mode 100644 services/workflows-service/src/common/decorators/is-nullable.decorator.ts create mode 100644 services/workflows-service/src/common/decorators/one-of.decorator.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts create mode 100644 services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index e6262a14a8..3d03f74422 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> + <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} diff --git a/apps/workflows-dashboard/.env.example b/apps/workflows-dashboard/.env.example new file mode 100644 index 0000000000..77f41d9853 --- /dev/null +++ b/apps/workflows-dashboard/.env.example @@ -0,0 +1,2 @@ +VITE_API_URL=http://localhost:3000/api/v1/ +VITE_API_KEY=secret diff --git a/apps/workflows-dashboard/.eslintrc.cjs b/apps/workflows-dashboard/.eslintrc.cjs new file mode 100644 index 0000000000..d16749b765 --- /dev/null +++ b/apps/workflows-dashboard/.eslintrc.cjs @@ -0,0 +1,14 @@ +module.exports = { + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + parser: '@typescript-eslint/parser', + parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': 'warn', + }, +}; diff --git a/apps/workflows-dashboard/.gitignore b/apps/workflows-dashboard/.gitignore new file mode 100644 index 0000000000..c6d2f98241 --- /dev/null +++ b/apps/workflows-dashboard/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +!.env.example +.env diff --git a/apps/workflows-dashboard/index.html b/apps/workflows-dashboard/index.html new file mode 100644 index 0000000000..778fbf165d --- /dev/null +++ b/apps/workflows-dashboard/index.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Workflow Dashboard</title> + </head> + <body> + <div id="root"></div> + <script type="module" src="/src/main.tsx"></script> + </body> +</html> diff --git a/apps/workflows-dashboard/jest.config.ts b/apps/workflows-dashboard/jest.config.ts new file mode 100644 index 0000000000..cd73e848d3 --- /dev/null +++ b/apps/workflows-dashboard/jest.config.ts @@ -0,0 +1,16 @@ +import { resolve } from 'path'; + +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['<rootDir>/**/*.test.ts'], + testPathIgnorePatterns: ['/node_modules/'], + coveragePathIgnorePatterns: ['node_modules', 'src/database', 'src/test', 'src/types'], + reporters: ['default'], + globals: { 'ts-jest': { diagnostics: false } }, + transform: {}, + moduleNameMapper: { + '^@app/(.*)$': `${resolve(__dirname, './src/$1')}`, + }, +}; diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json new file mode 100644 index 0000000000..e652cfb7ca --- /dev/null +++ b/apps/workflows-dashboard/package.json @@ -0,0 +1,64 @@ +{ + "name": "workflow-dashboard", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", + "test": "NODE_ENV=test jest" + }, + "dependencies": { + "@lukemorales/query-key-factory": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.2", + "@radix-ui/react-popover": "^1.0.6", + "@radix-ui/react-select": "^1.2.1", + "@radix-ui/react-separator": "^1.0.2", + "@radix-ui/react-slot": "^1.0.1", + "@tailwindcss/line-clamp": "^0.4.4", + "@tanstack/react-query": "^4.28.0", + "@tanstack/react-table": "^8.9.2", + "axios": "^1.4.0", + "class-variance-authority": "^0.6.0", + "classnames": "^2.3.2", + "clsx": "^1.2.1", + "cmdk": "^0.2.0", + "install": "^0.13.0", + "lucide-react": "^0.144.0", + "react": "^18.2.0", + "react-custom-scrollbars": "^4.2.1", + "react-dom": "^18.2.0", + "react-router-dom": "^6.11.2", + "recharts": "^2.7.2", + "tailwind-merge": "^1.13.2", + "tailwindcss-animate": "^1.0.5", + "use-query-params": "^2.2.1" + }, + "devDependencies": { + "@types/axios": "^0.14.0", + "@types/classnames": "^2.3.1", + "@types/jest": "^26.0.19", + "@types/moment": "^2.13.0", + "@types/node": "^20.3.1", + "@types/react": "^18.0.37", + "@types/react-custom-scrollbars": "^4.0.10", + "@types/react-dom": "^18.0.11", + "@typescript-eslint/eslint-plugin": "^5.59.0", + "@typescript-eslint/parser": "^5.59.0", + "@vitejs/plugin-react": "^4.0.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.38.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.3.4", + "jest": "^29.5.0", + "moment": "^2.29.4", + "postcss": "^8.4.24", + "tailwindcss": "^3.2.7", + "ts-jest": "^29.1.0", + "typescript": "^5.0.2", + "vite": "^4.3.9", + "vite-plugin-checker": "^0.6.1" + } +} diff --git a/apps/workflows-dashboard/postcss.config.cjs b/apps/workflows-dashboard/postcss.config.cjs new file mode 100644 index 0000000000..12a703d900 --- /dev/null +++ b/apps/workflows-dashboard/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/workflows-dashboard/public/vite.svg b/apps/workflows-dashboard/public/vite.svg new file mode 100644 index 0000000000..e7b8dfb1b2 --- /dev/null +++ b/apps/workflows-dashboard/public/vite.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> \ No newline at end of file diff --git a/apps/workflows-dashboard/src/App.tsx b/apps/workflows-dashboard/src/App.tsx new file mode 100644 index 0000000000..50038af4fd --- /dev/null +++ b/apps/workflows-dashboard/src/App.tsx @@ -0,0 +1,23 @@ +import { queryClient } from '@app/lib/react-query/query-client'; +import { QueryClientProvider } from '@tanstack/react-query'; +import { QueryParamProvider } from 'use-query-params'; +import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; +import { Outlet, useNavigate } from 'react-router-dom'; +import { useEffect } from 'react'; + +export function App() { + const navigate = useNavigate(); + + useEffect( + () => navigate({ pathname: '/workflows', search: location.search }, { replace: true }), + [navigate], + ); + + return ( + <QueryParamProvider adapter={ReactRouter6Adapter}> + <QueryClientProvider client={queryClient}> + <Outlet /> + </QueryClientProvider> + </QueryParamProvider> + ); +} diff --git a/apps/workflows-dashboard/src/components/atoms/Badge/Badge.tsx b/apps/workflows-dashboard/src/components/atoms/Badge/Badge.tsx new file mode 100644 index 0000000000..a8f02ba9ca --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Badge/Badge.tsx @@ -0,0 +1,33 @@ +import * as React from 'react'; +import { cva, type VariantProps } from 'class-variance-authority'; + +import { cn } from '@app/lib/utils'; + +const badgeVariants = cva( + 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + default: 'bg-primary hover:bg-primary/80 border-transparent text-primary-foreground', + secondary: + 'bg-secondary hover:bg-secondary/80 border-transparent text-secondary-foreground', + destructive: + 'bg-destructive hover:bg-destructive/80 border-transparent text-destructive-foreground', + outline: 'text-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +); + +export interface BadgeProps + extends React.HTMLAttributes<HTMLDivElement>, + VariantProps<typeof badgeVariants> {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return <div className={cn(badgeVariants({ variant }), className)} {...props} />; +} + +export { Badge, badgeVariants }; diff --git a/apps/workflows-dashboard/src/components/atoms/Badge/index.ts b/apps/workflows-dashboard/src/components/atoms/Badge/index.ts new file mode 100644 index 0000000000..9c8edca28a --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Badge/index.ts @@ -0,0 +1 @@ +export * from './Badge'; diff --git a/apps/workflows-dashboard/src/components/atoms/Button/Button.tsx b/apps/workflows-dashboard/src/components/atoms/Button/Button.tsx new file mode 100644 index 0000000000..02ed3c7f6c --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Button/Button.tsx @@ -0,0 +1,48 @@ +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, type VariantProps } from 'class-variance-authority'; + +import { cn } from '@app/lib/utils'; + +const buttonVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + outline: 'border border-input hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'underline-offset-4 hover:underline text-primary', + }, + size: { + default: 'h-10 py-2 px-4', + sm: 'h-9 px-3 rounded-md', + lg: 'h-11 px-8 rounded-md', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes<HTMLButtonElement>, + VariantProps<typeof buttonVariants> { + asChild?: boolean; +} + +const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : ('button' as any); + return ( + <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} /> + ); + }, +); +Button.displayName = 'Button'; + +export { Button, buttonVariants }; diff --git a/apps/workflows-dashboard/src/components/atoms/Button/index.ts b/apps/workflows-dashboard/src/components/atoms/Button/index.ts new file mode 100644 index 0000000000..8b166a86e4 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Button/index.ts @@ -0,0 +1 @@ +export * from './Button'; diff --git a/apps/workflows-dashboard/src/components/atoms/Card/Card.tsx b/apps/workflows-dashboard/src/components/atoms/Card/Card.tsx new file mode 100644 index 0000000000..5b4b9afab8 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Card/Card.tsx @@ -0,0 +1,56 @@ +import * as React from 'react'; + +import { cn } from '@app/lib/utils'; + +const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>( + ({ className, ...props }, ref) => ( + <div + ref={ref} + className={cn('bg-card text-card-foreground rounded-lg border shadow-sm', className)} + {...props} + /> + ), +); +Card.displayName = 'Card'; + +const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>( + ({ className, ...props }, ref) => ( + <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} /> + ), +); +CardHeader.displayName = 'CardHeader'; + +const CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>( + ({ className, ...props }, ref) => ( + <h3 + ref={ref} + className={cn('text-lg font-semibold leading-none tracking-tight', className)} + {...props} + /> + ), +); +CardTitle.displayName = 'CardTitle'; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes<HTMLParagraphElement> +>(({ className, ...props }, ref) => ( + <p ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} /> +)); +CardDescription.displayName = 'CardDescription'; + +const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>( + ({ className, ...props }, ref) => ( + <div ref={ref} className={cn('p-6 pt-0', className)} {...props} /> + ), +); +CardContent.displayName = 'CardContent'; + +const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>( + ({ className, ...props }, ref) => ( + <div ref={ref} className={cn(' flex items-center p-6 pt-0', className)} {...props} /> + ), +); +CardFooter.displayName = 'CardFooter'; + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }; diff --git a/apps/workflows-dashboard/src/components/atoms/Card/index.ts b/apps/workflows-dashboard/src/components/atoms/Card/index.ts new file mode 100644 index 0000000000..ca0b060473 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Card/index.ts @@ -0,0 +1 @@ +export * from './Card'; diff --git a/apps/workflows-dashboard/src/components/atoms/Command/Command.tsx b/apps/workflows-dashboard/src/components/atoms/Command/Command.tsx new file mode 100644 index 0000000000..e2bf3f966f --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Command/Command.tsx @@ -0,0 +1,144 @@ +'use client'; + +import * as React from 'react'; +import { Command as CommandPrimitive } from 'cmdk'; +import { Search } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; +import { Dialog, DialogContent, DialogProps } from '@app/components/atoms/Dialog'; + +const Command = React.forwardRef< + React.ElementRef<typeof CommandPrimitive>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive> +>(({ className, ...props }, ref) => ( + <CommandPrimitive + ref={ref} + className={cn( + 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md', + className, + )} + {...props} + /> +)); +Command.displayName = CommandPrimitive.displayName; + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + <Dialog {...props}> + <DialogContent className="overflow-hidden p-0 shadow-2xl"> + <Command className="[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"> + {children} + </Command> + </DialogContent> + </Dialog> + ); +}; + +const CommandInput = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.Input>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input> +>(({ className, ...props }, ref) => ( + <div className="flex items-center border-b px-3" cmdk-input-wrapper=""> + <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" /> + <CommandPrimitive.Input + ref={ref} + className={cn( + 'placeholder:text-muted-foreground flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50', + className, + )} + {...props} + /> + </div> +)); + +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.List>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> +>(({ className, ...props }, ref) => ( + <CommandPrimitive.List + ref={ref} + className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)} + {...props} + /> +)); + +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.Empty>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty> +>((props, ref) => ( + <CommandPrimitive.Empty ref={ref} className="py-6 text-center text-sm" {...props} /> +)); + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.Group>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group> +>(({ className, ...props }, ref) => ( + <CommandPrimitive.Group + ref={ref} + className={cn( + 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium', + className, + )} + {...props} + /> +)); + +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <CommandPrimitive.Separator + ref={ref} + className={cn('bg-border -mx-1 h-px', className)} + {...props} + /> +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef<typeof CommandPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item> +>(({ className, ...props }, ref) => ( + <CommandPrimitive.Item + ref={ref} + className={cn( + 'aria-selected:bg-accent aria-selected:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + {...props} + /> +)); + +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => { + return ( + <span + className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)} + {...props} + /> + ); +}; +CommandShortcut.displayName = 'CommandShortcut'; + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +}; diff --git a/apps/workflows-dashboard/src/components/atoms/Command/index.ts b/apps/workflows-dashboard/src/components/atoms/Command/index.ts new file mode 100644 index 0000000000..a2eecb6bda --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Command/index.ts @@ -0,0 +1 @@ +export * from './Command'; diff --git a/apps/workflows-dashboard/src/components/atoms/Dialog/Dialog.tsx b/apps/workflows-dashboard/src/components/atoms/Dialog/Dialog.tsx new file mode 100644 index 0000000000..22540c85de --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Dialog/Dialog.tsx @@ -0,0 +1,108 @@ +'use client'; + +import * as React from 'react'; +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { X } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = ({ className, children, ...props }: DialogPrimitive.DialogPortalProps) => ( + <DialogPrimitive.Portal className={cn(className)} {...props}> + <div className="fixed inset-0 z-50 flex items-start justify-center sm:items-center"> + {children} + </div> + </DialogPrimitive.Portal> +); +DialogPortal.displayName = DialogPrimitive.Portal.displayName; + +const DialogOverlay = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Overlay>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Overlay + ref={ref} + className={cn( + 'bg-background/80 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in fixed inset-0 z-50 backdrop-blur-sm transition-all duration-100', + className, + )} + {...props} + /> +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> +>(({ className, children, ...props }, ref) => ( + <DialogPortal> + <DialogOverlay /> + <DialogPrimitive.Content + ref={ref} + className={cn( + 'bg-background animate-in data-[state=open]:fade-in-90 data-[state=open]:slide-in-from-bottom-10 sm:zoom-in-90 data-[state=open]:sm:slide-in-from-bottom-0 fixed z-50 grid w-full gap-4 rounded-b-lg border p-6 shadow-lg sm:max-w-lg sm:rounded-lg', + className, + )} + {...props} + > + {children} + <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none"> + <X className="h-4 w-4" /> + <span className="sr-only">Close</span> + </DialogPrimitive.Close> + </DialogPrimitive.Content> + </DialogPortal> +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => ( + <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} /> +); +DialogHeader.displayName = 'DialogHeader'; + +const DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => ( + <div + className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} + {...props} + /> +); +DialogFooter.displayName = 'DialogFooter'; + +const DialogTitle = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Title>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Title + ref={ref} + className={cn('text-lg font-semibold leading-none tracking-tight', className)} + {...props} + /> +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Description>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Description + ref={ref} + className={cn('text-muted-foreground text-sm', className)} + {...props} + /> +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; + +export type DialogProps = DialogPrimitive.DialogProps; diff --git a/apps/workflows-dashboard/src/components/atoms/Dialog/index.ts b/apps/workflows-dashboard/src/components/atoms/Dialog/index.ts new file mode 100644 index 0000000000..a5d3159726 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Dialog/index.ts @@ -0,0 +1 @@ +export * from './Dialog'; diff --git a/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx new file mode 100644 index 0000000000..cec2ccd4b5 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx @@ -0,0 +1,21 @@ +import { HealthStatus } from '@app/utils/get-workflow-health-status'; +import * as classnames from 'classnames'; + +interface Props { + healthStatus: HealthStatus; + size?: number; +} + +export const HealthIndicator = ({ healthStatus, size = 20 }: Props) => { + return ( + <span + style={{ width: `${size}px`, height: `${size}px` }} + className={classnames('block', 'rounded-full', { + ['bg-green-400']: healthStatus === HealthStatus.healthy, + ['bg-red-400']: healthStatus === HealthStatus.failed, + ['bg-yellow-400']: healthStatus === HealthStatus.pending, + ['bg-orange-400']: healthStatus === HealthStatus['pending-longterm'], + })} + ></span> + ); +}; diff --git a/apps/workflows-dashboard/src/components/atoms/HealthIndicator/index.ts b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/index.ts new file mode 100644 index 0000000000..0bd6afe835 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/index.ts @@ -0,0 +1 @@ +export * from './HealthIndicator'; diff --git a/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/LoadingSpinner.tsx b/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/LoadingSpinner.tsx new file mode 100644 index 0000000000..95e6838bba --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/LoadingSpinner.tsx @@ -0,0 +1,34 @@ +import { cn } from '@app/lib/utils'; + +interface Props { + className?: string; + size?: 'small' | 'medium' | 'large'; +} + +export const LoadingSpinner = ({ className, size = 'medium' }: Props) => { + return ( + <div role="status" className={className}> + <svg + aria-hidden="true" + className={cn('animate-spin fill-black text-gray-200', { + 'h-4 w-4': size === 'small', + 'h-8 w-8': size === 'medium', + 'h-12 w-12': size === 'large', + })} + viewBox="0 0 100 101" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" + fill="currentColor" + /> + <path + d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z" + fill="currentFill" + /> + </svg> + <span className="sr-only">Loading...</span> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/index.ts b/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/index.ts new file mode 100644 index 0000000000..58a46ee59c --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/LoadingSpinner/index.ts @@ -0,0 +1 @@ +export * from './LoadingSpinner'; diff --git a/apps/workflows-dashboard/src/components/atoms/Popover/Popover.tsx b/apps/workflows-dashboard/src/components/atoms/Popover/Popover.tsx new file mode 100644 index 0000000000..1de5164e0e --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Popover/Popover.tsx @@ -0,0 +1,31 @@ +'use client'; + +import * as React from 'react'; +import * as PopoverPrimitive from '@radix-ui/react-popover'; + +import { cn } from '@app/lib/utils'; + +const Popover = PopoverPrimitive.Root; + +const PopoverTrigger = PopoverPrimitive.Trigger; + +const PopoverContent = React.forwardRef< + React.ElementRef<typeof PopoverPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + <PopoverPrimitive.Portal> + <PopoverPrimitive.Content + ref={ref} + align={align} + sideOffset={sideOffset} + className={cn( + 'bg-popover text-popover-foreground animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', + className, + )} + {...props} + /> + </PopoverPrimitive.Portal> +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverTrigger, PopoverContent }; diff --git a/apps/workflows-dashboard/src/components/atoms/Popover/index.ts b/apps/workflows-dashboard/src/components/atoms/Popover/index.ts new file mode 100644 index 0000000000..8f473de4b9 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Popover/index.ts @@ -0,0 +1 @@ +export * from './Popover'; diff --git a/apps/workflows-dashboard/src/components/atoms/Select/Select.tsx b/apps/workflows-dashboard/src/components/atoms/Select/Select.tsx new file mode 100644 index 0000000000..532269d860 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Select/Select.tsx @@ -0,0 +1,120 @@ +'use client'; + +import * as React from 'react'; +import * as SelectPrimitive from '@radix-ui/react-select'; +import { Check, ChevronDown } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; + +const Select = SelectPrimitive.Root; + +const SelectGroup = SelectPrimitive.Group; + +const SelectValue = SelectPrimitive.Value; + +const SelectTrigger = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Trigger>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> +>(({ className, children, ...props }, ref) => ( + <SelectPrimitive.Trigger + ref={ref} + className={cn( + 'border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-10 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', + className, + )} + {...props} + > + {children} + <SelectPrimitive.Icon asChild> + <ChevronDown className="h-4 w-4 opacity-50" /> + </SelectPrimitive.Icon> + </SelectPrimitive.Trigger> +)); +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; + +const SelectContent = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> +>(({ className, children, position = 'popper', ...props }, ref) => ( + <SelectPrimitive.Portal> + <SelectPrimitive.Content + ref={ref} + className={cn( + 'bg-popover text-popover-foreground animate-in fade-in-80 relative z-50 min-w-[8rem] overflow-hidden rounded-md border shadow-md', + position === 'popper' && 'translate-y-1', + className, + )} + position={position} + {...props} + > + <SelectPrimitive.Viewport + className={cn( + 'p-1', + position === 'popper' && + 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]', + )} + > + {children} + </SelectPrimitive.Viewport> + </SelectPrimitive.Content> + </SelectPrimitive.Portal> +)); +SelectContent.displayName = SelectPrimitive.Content.displayName; + +const SelectLabel = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Label>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.Label + ref={ref} + className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)} + {...props} + /> +)); +SelectLabel.displayName = SelectPrimitive.Label.displayName; + +const SelectItem = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> +>(({ className, children, ...props }, ref) => ( + <SelectPrimitive.Item + ref={ref} + className={cn( + 'focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <SelectPrimitive.ItemIndicator> + <Check className="h-4 w-4" /> + </SelectPrimitive.ItemIndicator> + </span> + + <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText> + </SelectPrimitive.Item> +)); +SelectItem.displayName = SelectPrimitive.Item.displayName; + +const SelectSeparator = React.forwardRef< + React.ElementRef<typeof SelectPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <SelectPrimitive.Separator + ref={ref} + className={cn('bg-muted -mx-1 my-1 h-px', className)} + {...props} + /> +)); +SelectSeparator.displayName = SelectPrimitive.Separator.displayName; + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, +}; diff --git a/apps/workflows-dashboard/src/components/atoms/Select/index.ts b/apps/workflows-dashboard/src/components/atoms/Select/index.ts new file mode 100644 index 0000000000..7868ecbae2 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Select/index.ts @@ -0,0 +1 @@ +export * from './Select'; diff --git a/apps/workflows-dashboard/src/components/atoms/Separator/Separator.tsx b/apps/workflows-dashboard/src/components/atoms/Separator/Separator.tsx new file mode 100644 index 0000000000..09a83d2590 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Separator/Separator.tsx @@ -0,0 +1,26 @@ +'use client'; + +import * as React from 'react'; +import * as SeparatorPrimitive from '@radix-ui/react-separator'; + +import { cn } from '@app/lib/utils'; + +const Separator = React.forwardRef< + React.ElementRef<typeof SeparatorPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> +>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => ( + <SeparatorPrimitive.Root + ref={ref} + decorative={decorative} + orientation={orientation} + className={cn( + 'bg-border shrink-0', + orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]', + className, + )} + {...props} + /> +)); +Separator.displayName = SeparatorPrimitive.Root.displayName; + +export { Separator }; diff --git a/apps/workflows-dashboard/src/components/atoms/Separator/index.ts b/apps/workflows-dashboard/src/components/atoms/Separator/index.ts new file mode 100644 index 0000000000..6e97479974 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Separator/index.ts @@ -0,0 +1 @@ +export * from './Separator'; diff --git a/apps/workflows-dashboard/src/components/atoms/Skeleton/Skeleton.tsx b/apps/workflows-dashboard/src/components/atoms/Skeleton/Skeleton.tsx new file mode 100644 index 0000000000..84bff68dfa --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Skeleton/Skeleton.tsx @@ -0,0 +1,7 @@ +import { cn } from '@app/lib/utils'; + +function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) { + return <div className={cn('bg-muted animate-pulse rounded-md', className)} {...props} />; +} + +export { Skeleton }; diff --git a/apps/workflows-dashboard/src/components/atoms/Skeleton/index.ts b/apps/workflows-dashboard/src/components/atoms/Skeleton/index.ts new file mode 100644 index 0000000000..66bc08df6b --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Skeleton/index.ts @@ -0,0 +1 @@ +export * from './Skeleton'; diff --git a/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx new file mode 100644 index 0000000000..a8d3be4418 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx @@ -0,0 +1,88 @@ +import { cn } from '@app/lib/utils'; +import * as React from 'react'; + +const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>( + ({ className, ...props }, ref) => ( + <table ref={ref} className={cn('caption-bottom w-full text-sm', className)} {...props} /> + ), +); +Table.displayName = 'Table'; + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} /> +)); +TableHeader.displayName = 'TableHeader'; + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} /> +)); +TableBody.displayName = 'TableBody'; + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <tfoot + ref={ref} + className={cn('bg-primary text-primary-foreground font-medium', className)} + {...props} + /> +)); +TableFooter.displayName = 'TableFooter'; + +const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>( + ({ className, ...props }, ref) => ( + <tr + ref={ref} + className={cn( + 'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', + className, + )} + {...props} + /> + ), +); +TableRow.displayName = 'TableRow'; + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes<HTMLTableCellElement> +>(({ className, ...props }, ref) => ( + <th + ref={ref} + className={cn( + 'font-inter text-muted-foreground h-12 px-4 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0', + className, + )} + {...props} + /> +)); +TableHead.displayName = 'TableHead'; + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes<HTMLTableCellElement> +>(({ className, ...props }, ref) => ( + <td + ref={ref} + className={cn('font-inter p-4 align-middle [&:has([role=checkbox])]:pr-0', className)} + {...props} + /> +)); +TableCell.displayName = 'TableCell'; + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes<HTMLTableCaptionElement> +>(({ className, ...props }, ref) => ( + <caption ref={ref} className={cn('text-muted-foreground mt-4 text-sm', className)} {...props} /> +)); +TableCaption.displayName = 'TableCaption'; + +export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }; diff --git a/apps/workflows-dashboard/src/components/atoms/Table/index.ts b/apps/workflows-dashboard/src/components/atoms/Table/index.ts new file mode 100644 index 0000000000..75193adc33 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Table/index.ts @@ -0,0 +1 @@ +export * from './Table'; diff --git a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx new file mode 100644 index 0000000000..c1a7777c66 --- /dev/null +++ b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx @@ -0,0 +1,16 @@ +import { Outlet } from 'react-router-dom'; +import { QueryParamProvider } from 'use-query-params'; +import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; + +export const DashboardLayout = () => { + return ( + <div className="box-border flex h-screen flex-col"> + {/* <div>Navigation</div> */} + <div className="flex-1 overflow-auto"> + <QueryParamProvider adapter={ReactRouter6Adapter}> + <Outlet /> + </QueryParamProvider> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/index.ts b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/index.ts new file mode 100644 index 0000000000..fc36c152c7 --- /dev/null +++ b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/index.ts @@ -0,0 +1 @@ +export * from './DashboardLayout'; diff --git a/apps/workflows-dashboard/src/components/molecules/FacetedFilter/FacetedFilter.tsx b/apps/workflows-dashboard/src/components/molecules/FacetedFilter/FacetedFilter.tsx new file mode 100644 index 0000000000..83070a8013 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/FacetedFilter/FacetedFilter.tsx @@ -0,0 +1,118 @@ +import { Check, LucideIcon, PlusCircle } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; +// import { Separator } from "@/components/ui/separator" +import { Popover, PopoverContent, PopoverTrigger } from '@app/components/atoms/Popover'; +import { Button } from '@app/components/atoms/Button'; +import { Separator } from '@app/components/atoms/Separator'; +import { Badge } from '@app/components/atoms/Badge'; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator, +} from '@app/components/atoms/Command'; + +export interface FacetedFilterOption { + label: string; + value: string; + icon?: LucideIcon; +} + +interface Props { + title?: string; + options: FacetedFilterOption[]; + value: string[]; + onChange: (values: string[]) => void; +} + +export function FacetedFilter({ title, options, value, onChange }: Props) { + return ( + <Popover> + <PopoverTrigger asChild> + <Button variant="outline" size="sm" className="font-inter h-8 border-dashed"> + <PlusCircle className="mr-2 h-4 w-4" /> + {title} + {value.length > 0 && ( + <> + <Separator orientation="vertical" className="mx-2 h-4" /> + <Badge variant="secondary" className="rounded-sm px-1 font-normal lg:hidden"> + {value.length} + </Badge> + <div className="hidden space-x-1 lg:flex"> + {value.length > 2 ? ( + <Badge variant="secondary" className="rounded-sm px-1 font-normal"> + {value.length} selected + </Badge> + ) : ( + options + .filter(option => value.includes(option.value)) + .map(option => ( + <Badge + variant="secondary" + key={option.value} + className="rounded-sm px-1 font-normal" + > + {option.label} + </Badge> + )) + )} + </div> + </> + )} + </Button> + </PopoverTrigger> + <PopoverContent className="w-[200px] p-0" align="start"> + <Command className="font-inter"> + <CommandInput placeholder={title} /> + <CommandList> + <CommandEmpty>No results found.</CommandEmpty> + <CommandGroup> + {options.map(option => { + const isSelected = value.includes(option.value); + return ( + <CommandItem + key={option.value} + onSelect={() => { + if (isSelected) { + onChange(value.filter(selectedValue => selectedValue !== option.value)); + } else { + onChange([...value, option.value]); + } + }} + > + <div + className={cn( + 'border-primary mr-2 flex h-4 w-4 items-center justify-center rounded-sm border', + isSelected + ? 'bg-primary text-primary-foreground' + : 'opacity-50 [&_svg]:invisible', + )} + > + <Check className={cn('h-4 w-4')} /> + </div> + {option.icon && <option.icon className="text-muted-foreground mr-2 h-4 w-4" />} + <span>{option.label}</span> + </CommandItem> + ); + })} + </CommandGroup> + {value.length > 0 && ( + <> + <CommandSeparator /> + <CommandGroup> + <CommandItem className="justify-center text-center" onSelect={() => onChange([])}> + Clear filters + </CommandItem> + </CommandGroup> + </> + )} + </CommandList> + </Command> + </PopoverContent> + </Popover> + ); +} diff --git a/apps/workflows-dashboard/src/components/molecules/FacetedFilter/index.ts b/apps/workflows-dashboard/src/components/molecules/FacetedFilter/index.ts new file mode 100644 index 0000000000..5bf29065f5 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/FacetedFilter/index.ts @@ -0,0 +1 @@ +export * from './FacetedFilter'; diff --git a/apps/workflows-dashboard/src/components/molecules/Pagination/Pagination.tsx b/apps/workflows-dashboard/src/components/molecules/Pagination/Pagination.tsx new file mode 100644 index 0000000000..3afc2bf88c --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Pagination/Pagination.tsx @@ -0,0 +1,97 @@ +import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'; +import { Button } from '@app/components/atoms/Button'; +import { useCallback } from 'react'; + +interface Props { + totalPages: number; + page: number; + onChange: (nextPage: number) => void; +} + +export const Pagination = ({ totalPages, page, onChange }: Props) => { + const changePage = useCallback( + (nextPage: number) => { + const isPageInRangeOfPages = nextPage <= totalPages || nextPage <= 1; + + if (!isPageInRangeOfPages) return; + + onChange(nextPage); + }, + [onChange, totalPages], + ); + + const goToFirstPage = useCallback(() => { + const FIRST_PAGE_NUMBER = 1; + + changePage(FIRST_PAGE_NUMBER); + }, [changePage]); + + const goToPreviousPage = useCallback(() => { + const PREV_PAGE_NUMBER = page - 1; + + changePage(PREV_PAGE_NUMBER); + }, [page, changePage]); + + const goToLastPage = useCallback(() => { + const LAST_PAGE_NUMBER = totalPages; + + changePage(LAST_PAGE_NUMBER); + }, [totalPages, changePage]); + + const goToNextPage = useCallback(() => { + const NEXT_PAGE_NUMBER = page + 1; + + changePage(NEXT_PAGE_NUMBER); + }, [page, changePage]); + + const isFirstPage = page === 1; + const isLastPage = page === totalPages; + + return ( + <div className="flex items-center justify-between px-2"> + <div className="flex items-center space-x-6 lg:space-x-8"> + <div className="flex items-center justify-center text-sm"> + Page {page} of {totalPages} + </div> + <div className="flex items-center space-x-2"> + <Button + variant="outline" + className="hidden h-8 w-8 p-0 lg:flex" + onClick={goToFirstPage} + disabled={isFirstPage} + > + <span className="sr-only ">Go to first page</span> + <ChevronsLeft className="h-4 w-4" /> + </Button> + <Button + variant="outline" + className="h-8 w-8 p-0" + onClick={goToPreviousPage} + disabled={isFirstPage} + > + <span className="sr-only">Go to previous page</span> + <ChevronLeft className="h-4 w-4" /> + </Button> + <Button + variant="outline" + className="h-8 w-8 p-0" + onClick={goToNextPage} + disabled={isLastPage} + > + <span className="sr-only">Go to next page</span> + <ChevronRight className="h-4 w-4" /> + </Button> + <Button + variant="outline" + className="hidden h-8 w-8 p-0 lg:flex" + onClick={goToLastPage} + disabled={isLastPage} + > + <span className="sr-only">Go to last page</span> + <ChevronsRight className="h-4 w-4" /> + </Button> + </div> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/molecules/Pagination/index.ts b/apps/workflows-dashboard/src/components/molecules/Pagination/index.ts new file mode 100644 index 0000000000..e016c96b72 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Pagination/index.ts @@ -0,0 +1 @@ +export * from './Pagination'; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx new file mode 100644 index 0000000000..90046b9cad --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx @@ -0,0 +1,89 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@app/components/atoms/Table'; +import { memo } from 'react'; +import * as classnames from 'classnames'; +import { useReactTable, flexRender, getCoreRowModel } from '@tanstack/react-table'; +import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { defaultColumns } from '@app/components/molecules/WorkflowsTable/columns'; +import Scrollbars from 'react-custom-scrollbars'; + +interface Props { + items: IWorkflow[]; + isFetching?: boolean; +} + +export const WorkflowsTable = memo(({ items, isFetching }: Props) => { + const table = useReactTable({ + columns: defaultColumns, + data: items, + enableColumnResizing: true, + getCoreRowModel: getCoreRowModel(), + }); + + const isEmpty = !items.length && !isFetching; + + return ( + <div + className={classnames('relative w-full overflow-auto bg-white', 'rounded-md border', { + ['opacity-40']: isFetching, + ['pointer-events-none']: isFetching, + })} + > + <Scrollbars autoHide> + <Table> + <TableHeader> + {table.getHeaderGroups().map(({ id: headerRowId, headers }) => { + return ( + <TableRow key={headerRowId}> + {headers.map(header => ( + <TableHead key={header.id} className="sticky top-0 w-1/4 bg-white"> + {flexRender(header.column.columnDef.header, header.getContext())} + </TableHead> + ))} + </TableRow> + ); + })} + </TableHeader> + <TableBody> + {isEmpty ? ( + <TableRow> + <TableCell colSpan={table.getAllColumns().length} className="text-center"> + Workflows not found. + </TableCell> + </TableRow> + ) : ( + table.getRowModel().rows.map(row => { + return ( + <TableRow key={row.id}> + {row.getVisibleCells().map(cell => { + return ( + <TableCell + key={cell.id} + className="max-w-1/4 w-1/4 " + title={String(cell.getValue())} + style={{ + minWidth: `${cell.column.getSize()}px`, + }} + > + <div className="line-clamp-2 overflow-hidden text-ellipsis break-all"> + {flexRender(cell.column.columnDef.cell, cell.getContext())} + </div> + </TableCell> + ); + })} + </TableRow> + ); + }) + )} + </TableBody> + </Table> + </Scrollbars> + </div> + ); +}); diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx new file mode 100644 index 0000000000..0db8b47961 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx @@ -0,0 +1,71 @@ +import { HealthIndicator } from '@app/components/atoms/HealthIndicator'; +import { formatDate } from '@app/components/molecules/WorkflowsTable/utils/format-date'; +import { IWorkflow, IWorkflowAssignee } from '@app/domains/workflows/api/workflow'; +import { getWorkflowHealthStatus } from '@app/utils/get-workflow-health-status'; +import { ColumnDef } from '@tanstack/react-table'; + +export const defaultColumns: ColumnDef<IWorkflow>[] = [ + { + accessorKey: 'id', + cell: info => info.getValue<string>(), + header: () => 'ID', + size: 280, + }, + { + accessorKey: 'workflowDefinitionName', + cell: info => info.getValue<string>(), + header: 'Workflow Definition Name', + size: 200, + }, + { + accessorKey: 'status', + cell: info => ( + <div className="font-inter flex flex-row flex-nowrap gap-4 font-medium capitalize"> + <HealthIndicator healthStatus={getWorkflowHealthStatus(info.row.original)} /> + {info.getValue<string>() || ''} + </div> + ), + header: () => 'Status', + size: 125, + }, + { + accessorKey: 'state', + cell: info => info.getValue<string>(), + header: 'State', + size: 125, + }, + { + accessorKey: 'assignee', + cell: info => { + const assignee = info.getValue<IWorkflowAssignee>(); + if (!assignee) return '-'; + + return `${assignee.firstName} ${assignee.lastName}`; + }, + header: 'Assign To', + size: 125, + }, + { + accessorKey: 'context', + accessorFn: row => JSON.stringify(row.context), + cell: info => info.getValue<string>(), + header: () => 'Context', + size: 300, + }, + { + accessorKey: 'resolvedAt', + cell: info => (info.getValue<Date>() ? formatDate(info.getValue<Date>()) : '-'), + header: 'Resolved At', + }, + { + accessorKey: 'createdBy', + cell: info => info.getValue<string>(), + header: 'Created By', + }, + { + accessorKey: 'createdAt', + cell: info => formatDate(info.getValue<Date>()), + header: 'Created At', + size: 240, + }, +]; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/index.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/index.ts new file mode 100644 index 0000000000..0d82108883 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/index.ts @@ -0,0 +1 @@ +export * from './WorkflowsTable'; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/format-date.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/format-date.ts new file mode 100644 index 0000000000..b078ba7457 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/format-date.ts @@ -0,0 +1,3 @@ +export function formatDate(date: Date): string { + return new Date(date).toLocaleString(); +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/index.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/index.ts new file mode 100644 index 0000000000..35b7baafab --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/index.ts @@ -0,0 +1 @@ +export * from './workflow-metrics.types'; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts new file mode 100644 index 0000000000..034eee365b --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts @@ -0,0 +1,9 @@ +import { fetchWorkflowMetrics } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.api'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const workflowMetricsKeys = createQueryKeys('workflow-metrics', { + list: () => ({ + queryKey: [{}], + queryFn: fetchWorkflowMetrics, + }), +}); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts new file mode 100644 index 0000000000..ad270b9c73 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts @@ -0,0 +1,8 @@ +import { GetWorkflowMetricsResponse } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; +import { request } from '@app/lib/request'; + +export async function fetchWorkflowMetrics(): Promise<GetWorkflowMetricsResponse> { + const result = await request.get<GetWorkflowMetricsResponse>('/external/workflows/metrics'); + + return result.data; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts new file mode 100644 index 0000000000..244970e2ae --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts @@ -0,0 +1,13 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow/workflow.types'; + +export type IWorkflowStatusMetric = Record<IWorkflowStatus, number>; + +export interface IWorkflowApprovedMetric { + workflowId: string; + approvedDate: Date; +} + +export interface GetWorkflowMetricsResponse { + status: IWorkflowStatusMetric; + approvedWorkflows: IWorkflowApprovedMetric[]; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/index.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/index.ts new file mode 100644 index 0000000000..c1cf574339 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/index.ts @@ -0,0 +1,3 @@ +export * from './workflow.api'; +export * from './workflow.types'; +export * from './query-keys'; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts new file mode 100644 index 0000000000..3417027d9b --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts @@ -0,0 +1,9 @@ +import { fetchWorkflows, GetWorkflowsDto } from '@app/domains/workflows/api/workflow'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const workflowKeys = createQueryKeys('workflows', { + list: (query: GetWorkflowsDto) => ({ + queryKey: [{ query }], + queryFn: () => fetchWorkflows(query), + }), +}); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts new file mode 100644 index 0000000000..88d653f1d5 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts @@ -0,0 +1,13 @@ +import { + GetWorkflowResponse, + GetWorkflowsDto, +} from '@app/domains/workflows/api/workflow/workflow.types'; +import { request } from '@app/lib/request'; + +export async function fetchWorkflows(query: GetWorkflowsDto): Promise<GetWorkflowResponse> { + const result = await request.get<GetWorkflowResponse>('/external/workflows', { + params: query, + }); + + return result.data; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts new file mode 100644 index 0000000000..70cd95edc8 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts @@ -0,0 +1,31 @@ +export type IWorkflowStatus = 'active' | 'completed' | 'failed'; + +export interface IWorkflowAssignee { + firstName: string; + lastName: string; +} +export interface IWorkflow { + id: string; + workflowDefinitionName: string; + status: IWorkflowStatus; + state: string | null; + assignee: IWorkflowAssignee | null; + context: object; + createdAt: Date; + updatedAt: Date; + resolvedAt: Date | null; +} + +export interface GetWorkflowResponse { + results: IWorkflow[]; + meta: { + pages: number; + total: number; + }; +} + +export interface GetWorkflowsDto { + status?: IWorkflowStatus[]; + page?: number; + limit?: number; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/index.ts b/apps/workflows-dashboard/src/domains/workflows/index.ts new file mode 100644 index 0000000000..53b1895059 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/index.ts @@ -0,0 +1 @@ +export * from './api/workflow/query-keys'; diff --git a/apps/workflows-dashboard/src/index.css b/apps/workflows-dashboard/src/index.css new file mode 100644 index 0000000000..518c966f3f --- /dev/null +++ b/apps/workflows-dashboard/src/index.css @@ -0,0 +1,82 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; + + --border: 216 34% 17%; + --input: 216 34% 17%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + + --ring: 216 34% 17%; + + --radius: 0.5rem; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: 'rlig' 1, 'calt' 1; + } +} diff --git a/apps/workflows-dashboard/src/lib/react-query/query-client.ts b/apps/workflows-dashboard/src/lib/react-query/query-client.ts new file mode 100644 index 0000000000..8ce795d403 --- /dev/null +++ b/apps/workflows-dashboard/src/lib/react-query/query-client.ts @@ -0,0 +1,7 @@ +import { QueryClient } from '@tanstack/react-query'; + +const FIVE_MIN_CACHE_TIME_IN_MS = 5 * 60 * 1000; + +export const queryClient = new QueryClient({ + defaultOptions: { queries: { staleTime: FIVE_MIN_CACHE_TIME_IN_MS } }, +}); diff --git a/apps/workflows-dashboard/src/lib/request/index.ts b/apps/workflows-dashboard/src/lib/request/index.ts new file mode 100644 index 0000000000..56e4b0555f --- /dev/null +++ b/apps/workflows-dashboard/src/lib/request/index.ts @@ -0,0 +1 @@ +export * from './request'; diff --git a/apps/workflows-dashboard/src/lib/request/request.ts b/apps/workflows-dashboard/src/lib/request/request.ts new file mode 100644 index 0000000000..8d58a1eab4 --- /dev/null +++ b/apps/workflows-dashboard/src/lib/request/request.ts @@ -0,0 +1,11 @@ +import axios from 'axios'; + +export const request = axios.create({ baseURL: import.meta.env.VITE_API_URL }); + +request.interceptors.request.use(config => { + if (config.headers) { + config.headers['Authorization'] = `Bearer ${import.meta.env.VITE_API_KEY}`; + return config; + } + return config; +}); diff --git a/apps/workflows-dashboard/src/lib/utils.ts b/apps/workflows-dashboard/src/lib/utils.ts new file mode 100644 index 0000000000..e57f980282 --- /dev/null +++ b/apps/workflows-dashboard/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/workflows-dashboard/src/main.tsx b/apps/workflows-dashboard/src/main.tsx new file mode 100644 index 0000000000..83b38bd163 --- /dev/null +++ b/apps/workflows-dashboard/src/main.tsx @@ -0,0 +1,11 @@ +import { router } from '@app/router'; +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { RouterProvider } from 'react-router-dom'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + <React.StrictMode> + <RouterProvider router={router}></RouterProvider> + </React.StrictMode>, +); diff --git a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx new file mode 100644 index 0000000000..0dab44f582 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx @@ -0,0 +1,45 @@ +import { Pagination } from '@app/components/molecules/Pagination'; +import { StatusFilterComponent } from '@app/pages/Workflows/components/molecules/StatusFilterComponent'; +import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; +import { useWorkflows } from '@app/pages/Workflows/hooks/useWorkflows'; +import { useWorkflowsFilters } from '@app/pages/Workflows/hooks/useWorkflowsFilters'; +import { useCallback } from 'react'; +import { WorkflowsList } from '@app/pages/Workflows/components/molecules/WorkflowsList'; +import { WorkflowFilters } from '@app/pages/Workflows/components/organisms/WorkflowFilters'; +import { WorkflowsLayout } from '@app/pages/Workflows/components/layouts/WorkflowsLayout'; +import { WorkflowMetrics } from '@app/pages/Workflows/components/organisms/WorkflowMetrics'; +import { useWorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric'; + +const filterComponents: FilterComponent[] = [StatusFilterComponent]; + +export const Workflows = () => { + const { filters, setFilters } = useWorkflowsFilters(); + const { data, isLoading, isFetching } = useWorkflows(filters); + const { data: metric, isLoading: isLoadingMetric } = useWorkflowsMetric(); + + const handlePageChange = useCallback( + (nextPage: number) => { + setFilters({ page: nextPage }); + }, + [setFilters], + ); + + return ( + <WorkflowsLayout> + <WorkflowsLayout.Header> + <WorkflowMetrics metric={metric} isLoading={isLoadingMetric} /> + <WorkflowFilters components={filterComponents} values={filters} onChange={setFilters} /> + </WorkflowsLayout.Header> + <WorkflowsLayout.Main> + <WorkflowsList workflows={data.results} isLoading={isLoading} isFetching={isFetching} /> + </WorkflowsLayout.Main> + <WorkflowsLayout.Footer> + <Pagination + totalPages={data.meta.pages || 1} + page={filters.page || 1} + onChange={handlePageChange} + /> + </WorkflowsLayout.Footer> + </WorkflowsLayout> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx new file mode 100644 index 0000000000..47be8df802 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx @@ -0,0 +1,7 @@ +interface Props { + children: React.ReactNode; +} + +export const Footer = ({ children }: Props) => { + return <footer className="flex justify-center p-4">{children}</footer>; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx new file mode 100644 index 0000000000..417f7af394 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx @@ -0,0 +1,7 @@ +interface Props { + children: React.ReactNode; +} + +export const Header = ({ children }: Props) => { + return <header className="flex flex-col gap-4 p-4">{children}</header>; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx new file mode 100644 index 0000000000..0d7e71ab71 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx @@ -0,0 +1,7 @@ +interface Props { + children: React.ReactNode; +} + +export const Main = ({ children }: Props) => { + return <main className="flex flex-1 overflow-auto pl-4 pr-4">{children}</main>; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx new file mode 100644 index 0000000000..688cac793c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx @@ -0,0 +1,15 @@ +import { Footer } from './Footer'; +import { Header } from './Header'; +import { Main } from './Main'; + +interface Props { + children: React.ReactNode[]; +} + +export function WorkflowsLayout({ children }: Props) { + return <div className="flex h-full flex-col">{children}</div>; +} + +WorkflowsLayout.Header = Header; +WorkflowsLayout.Main = Main; +WorkflowsLayout.Footer = Footer; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/index.ts new file mode 100644 index 0000000000..a837b7f25b --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/index.ts @@ -0,0 +1 @@ +export * from './WorkflowsLayout'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx new file mode 100644 index 0000000000..a0f8adcf44 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx @@ -0,0 +1,23 @@ +import { FacetedFilter, FacetedFilterOption } from '@app/components/molecules/FacetedFilter'; +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +// import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; + +const options: FacetedFilterOption[] = [ + { label: 'Active', value: 'active' }, + { label: 'Failed', value: 'failed' }, + { label: 'Completed', value: 'completed' }, +]; + +export const StatusFilterComponent: FilterComponent = ({ filterValues, onChange }) => { + return ( + <FacetedFilter + value={filterValues.status || []} + title="Status" + options={options} + onChange={updatedValue => onChange({ status: updatedValue as IWorkflowStatus[] })} + /> + ); +}; + +StatusFilterComponent.displayName = 'StatusFilterComponent'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/index.ts new file mode 100644 index 0000000000..5bf43f4d1f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/index.ts @@ -0,0 +1 @@ +export * from './StatusFilterComponent'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx new file mode 100644 index 0000000000..23a179c47a --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx @@ -0,0 +1,29 @@ +interface Props { + cx: number; + cy: number; + midAngle: number; + innerRadius: number; + outerRadius: number; + percent: number; +} + +const RADIAN = Math.PI / 180; + +export const Label = ({ cx, cy, midAngle, innerRadius, outerRadius, percent }: Props) => { + const radius = innerRadius + (outerRadius - innerRadius) * 0.5; + const x = cx + radius * Math.cos(-midAngle * RADIAN); + const y = cy + radius * Math.sin(-midAngle * RADIAN); + + return percent === 0 ? null : ( + <text + x={x} + y={y} + fill="white" + textAnchor={x > cx ? 'start' : 'end'} + dominantBaseline="central" + fontFamily="inter" + > + {`${(percent * 100).toFixed(0)}%`} + </text> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx new file mode 100644 index 0000000000..994bae9c62 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx @@ -0,0 +1,50 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { useMemo } from 'react'; +import { PieChart, Pie, Cell } from 'recharts'; + +export interface WorkflowStatusPieChartData { + status: IWorkflowStatus; + fillColor?: string; + value: number; +} + +const COLORS = ['#00C49F', '#FF8042', '#FFBB28']; + +interface Props { + data: WorkflowStatusPieChartData[]; + size: number; + useLabel?: boolean; +} + +export const WorkflowStatusPieChart = ({ data, size, useLabel }: Props) => { + const chartData = useMemo(() => { + return data.map(data => { + return { + name: data.status, + value: data.value, + }; + }); + }, [data]); + + return ( + <PieChart width={size} height={size}> + <Pie + data={chartData} + cx="50%" + cy="50%" + labelLine={false} + label={useLabel ? true : undefined} + outerRadius={80} + fill="#000000" + dataKey="value" + > + {data.map((data, index) => ( + <Cell + key={`cell-${index}`} + fill={data.fillColor ? data.fillColor : COLORS[index % COLORS.length]} + /> + ))} + </Pie> + </PieChart> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts new file mode 100644 index 0000000000..e1fed7bdc8 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts @@ -0,0 +1 @@ +export * from './WorkflowStatusPieChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx new file mode 100644 index 0000000000..275ba2c807 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx @@ -0,0 +1,19 @@ +import { LoadingSpinner } from '@app/components/atoms/LoadingSpinner'; +import { WorkflowsTable } from '@app/components/molecules/WorkflowsTable'; +import { IWorkflow } from '@app/domains/workflows/api/workflow'; + +interface Props { + workflows: IWorkflow[]; + isLoading?: boolean; + isFetching?: boolean; +} + +export const WorkflowsList = ({ workflows, isLoading, isFetching }: Props) => { + return isLoading ? ( + <div className="flex w-full justify-center"> + <LoadingSpinner /> + </div> + ) : ( + <WorkflowsTable items={workflows} isFetching={isFetching} /> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts new file mode 100644 index 0000000000..e130a5fba2 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts @@ -0,0 +1 @@ +export * from './WorkflowsList'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx new file mode 100644 index 0000000000..ad3aa81a13 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx @@ -0,0 +1,23 @@ +import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; +import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { memo } from 'react'; + +interface Props { + values: WorkflowsFilterValues; + components: FilterComponent[]; + onChange: (nextValues: WorkflowsFilterValues) => void; +} + +export const WorkflowFilters = memo(({ values, components, onChange }: Props) => { + return ( + <div className="flex justify-between"> + {components.map(Component => { + return ( + <div className="w-1/4" key={`filter-component-${Component.displayName}`}> + <Component filterValues={values} onChange={onChange} /> + </div> + ); + })} + </div> + ); +}); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/index.ts new file mode 100644 index 0000000000..7f2f006688 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/index.ts @@ -0,0 +1 @@ +export * from './WorkflowFilters'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts new file mode 100644 index 0000000000..120fc39d9b --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts @@ -0,0 +1,8 @@ +import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; + +export interface FilterComponentProps { + filterValues: Partial<WorkflowsFilterValues>; + onChange: (value: Partial<WorkflowsFilterValues>) => void; +} + +export type FilterComponent = React.ComponentType<FilterComponentProps>; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx new file mode 100644 index 0000000000..4f8a87f015 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx @@ -0,0 +1,47 @@ +import { Card, CardContent, CardTitle } from '@app/components/atoms/Card'; +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { + WorkflowStatusPieChart, + WorkflowStatusPieChartData, +} from '@app/pages/Workflows/components/molecules/WorkflowStatusPieChart'; +import { WorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric/types'; +import { useMemo } from 'react'; + +interface Props { + isLoading: boolean; + metric: WorkflowsMetric | null; +} + +export const WorkflowMetrics = ({ isLoading, metric }: Props) => { + const pieChartData: WorkflowStatusPieChartData[] = useMemo(() => { + if (!metric) return []; + + return Object.entries(metric.status).map(([key, value]) => { + return { + status: key as IWorkflowStatus, + value, + }; + }); + }, [metric]); + + return ( + <div className="grid grid-cols-12"> + <div className="flex h-full min-w-[300px] max-w-[300px]"> + <Card className="font-inter flex w-full flex-col p-4"> + <CardTitle>Overview</CardTitle> + <CardContent className="flex flex-1 flex-col items-center justify-center p-0"> + <WorkflowStatusPieChart + size={240} + useLabel={isLoading ? false : true} + data={ + isLoading + ? [{ status: 'placeholder' as any, fillColor: 'grey', value: 100 }] + : pieChartData + } + /> + </CardContent> + </Card> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts new file mode 100644 index 0000000000..aa00f2a3ed --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts @@ -0,0 +1 @@ +export * from './WorkflowMetrics'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts new file mode 100644 index 0000000000..ade1df322a --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts @@ -0,0 +1 @@ +export * from './useWorkflows'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts new file mode 100644 index 0000000000..a01b162cb3 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts @@ -0,0 +1,20 @@ +import { workflowKeys } from '@app/domains/workflows'; +import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { useQuery } from '@tanstack/react-query'; + +export function useWorkflows(query: WorkflowsFilterValues) { + const { + isFetching, + isLoading, + data = { results: [], meta: { pages: 0, total: 0 } }, + } = useQuery({ + ...workflowKeys.list(query), + keepPreviousData: true, + }); + + return { + isFetching, + isLoading, + data, + }; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts new file mode 100644 index 0000000000..db38b4a23c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowsFilters'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts new file mode 100644 index 0000000000..66e9086e39 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts @@ -0,0 +1,7 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; + +export interface WorkflowsFilterValues { + status?: IWorkflowStatus[]; + page?: number; + limit?: number; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts new file mode 100644 index 0000000000..24ed744871 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts @@ -0,0 +1,36 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { useCallback, useMemo } from 'react'; +import { useQueryParams, NumberParam, withDefault, ArrayParam } from 'use-query-params'; + +export function useWorkflowsFilters() { + const [query, setQuery] = useQueryParams({ + page: withDefault(NumberParam, 1), + limit: withDefault(NumberParam, 25), + status: withDefault(ArrayParam, [] as IWorkflowStatus[]), + }); + + const filters = useMemo(() => { + const filters: WorkflowsFilterValues = { + status: query.status ? (query.status as IWorkflowStatus[]) : undefined, + limit: query.limit, + page: query.page, + }; + + return filters; + }, [query]); + + const setFilters = useCallback( + (query: WorkflowsFilterValues) => { + const isShouldResetPagination = filters.page === query.page; + + setQuery({ ...query, page: isShouldResetPagination ? 1 : query.page }); + }, + [filters, setQuery], + ); + + return { + filters, + setFilters, + }; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts new file mode 100644 index 0000000000..4d96315b8a --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowsMetric'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts new file mode 100644 index 0000000000..876b127717 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts @@ -0,0 +1,3 @@ +import { GetWorkflowMetricsResponse } from '@app/domains/workflows/api/workflow-metrics'; + +export type WorkflowsMetric = GetWorkflowMetricsResponse; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts new file mode 100644 index 0000000000..67caffa654 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts @@ -0,0 +1,15 @@ +import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; +import { WorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric/types'; +import { useQuery } from '@tanstack/react-query'; + +export function useWorkflowsMetric() { + const { data, isLoading } = useQuery({ + ...workflowMetricsKeys.list(), + keepPreviousData: true, + }); + + return { + data: data ? (data as WorkflowsMetric) : null, + isLoading, + }; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/index.ts b/apps/workflows-dashboard/src/pages/Workflows/index.ts new file mode 100644 index 0000000000..57508c4052 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/index.ts @@ -0,0 +1 @@ +export * from './Workflows'; diff --git a/apps/workflows-dashboard/src/router.tsx b/apps/workflows-dashboard/src/router.tsx new file mode 100644 index 0000000000..3cfea21ed1 --- /dev/null +++ b/apps/workflows-dashboard/src/router.tsx @@ -0,0 +1,23 @@ +import { App } from '@app/App'; +import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; +import { Workflows } from '@app/pages/Workflows'; +import { createBrowserRouter } from 'react-router-dom'; + +export const router = createBrowserRouter([ + { + path: '/', + Component: App, + children: [ + { + path: '', + Component: DashboardLayout, + children: [ + { + path: 'workflows', + Component: Workflows, + }, + ], + }, + ], + }, +]); diff --git a/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts b/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts new file mode 100644 index 0000000000..a7e352c5d5 --- /dev/null +++ b/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts @@ -0,0 +1,8 @@ +export function calculateHourDifference(dateA: Date, dateB: Date): number { + const diff = Math.abs( + Number(new Date(dateB.toISOString())) - Number(new Date(dateA.toISOString())), + ); + const hours = Math.floor(diff / (1000 * 60 * 60)); + + return hours; +} diff --git a/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts b/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts new file mode 100644 index 0000000000..5b5201777b --- /dev/null +++ b/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts @@ -0,0 +1,50 @@ +import * as moment from 'moment'; +import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { getWorkflowHealthStatus, HealthStatus } from '@app/utils/get-workflow-health-status'; + +describe('getWorkflowHealthStatus', () => { + describe('healthy status', () => { + test('healthy when status is completed', () => { + expect(getWorkflowHealthStatus({ status: 'completed' } as IWorkflow)).toBe( + HealthStatus.healthy, + ); + }); + + test('healthy when status pending/active and process started < 2 hours ago', () => { + const PAST_DATE_3O_MIN_AGO = moment().subtract(30, 'minutes'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_3O_MIN_AGO.toDate(), + } as IWorkflow), + ).toBe(HealthStatus.healthy); + }); + }); + + describe('pending status', () => { + test('pending when status pending/active and process started > 2 && < 6 hours', () => { + const PAST_DATE_3HOURS_AGO = moment().subtract(3, 'hours'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_3HOURS_AGO.toDate(), + } as IWorkflow), + ).toBe(HealthStatus.pending); + }); + }); + + describe('pending-longterm status', () => { + test('pending-longterm when status pending/active and process started > 6 hours', () => { + const PAST_DATE_8HOURS_AGO = moment().subtract(8, 'hours'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_8HOURS_AGO.toDate(), + } as IWorkflow), + ).toBe(HealthStatus['pending-longterm']); + }); + }); +}); diff --git a/apps/workflows-dashboard/src/utils/get-workflow-health-status.ts b/apps/workflows-dashboard/src/utils/get-workflow-health-status.ts new file mode 100644 index 0000000000..3ee0f161d3 --- /dev/null +++ b/apps/workflows-dashboard/src/utils/get-workflow-health-status.ts @@ -0,0 +1,35 @@ +import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { calculateHourDifference } from '@app/utils/calculate-hour-difference'; + +export enum HealthStatus { + 'healthy', + 'failed', + 'pending', + 'pending-longterm', +} + +export function getWorkflowHealthStatus(workflow: IWorkflow): HealthStatus { + const { status, createdAt } = workflow; + + if (status === 'failed') return HealthStatus.failed; + + if (status === 'completed') return HealthStatus.healthy; + + const hourDifference = calculateHourDifference(new Date(createdAt), new Date()); + const TWO_HOURS = 2; + const SIX_HOURS = 6; + + if (status === 'active' && hourDifference < TWO_HOURS) { + return HealthStatus.healthy; + } + + if (status === 'active' && hourDifference > TWO_HOURS && hourDifference < SIX_HOURS) { + return HealthStatus.pending; + } + + if (status === 'active' && hourDifference > SIX_HOURS) { + return HealthStatus['pending-longterm']; + } + + return HealthStatus.failed; +} diff --git a/apps/workflows-dashboard/src/vite-env.d.ts b/apps/workflows-dashboard/src/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/apps/workflows-dashboard/src/vite-env.d.ts @@ -0,0 +1 @@ +/// <reference types="vite/client" /> diff --git a/apps/workflows-dashboard/tailwind.config.cjs b/apps/workflows-dashboard/tailwind.config.cjs new file mode 100644 index 0000000000..49e805d1f4 --- /dev/null +++ b/apps/workflows-dashboard/tailwind.config.cjs @@ -0,0 +1,77 @@ +const { fontFamily } = require('tailwindcss/defaultTheme'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ['class'], + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px', + }, + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: 'calc(var(--radius) - 4px)', + }, + fontFamily: { + sans: ['var(--font-sans)', ...fontFamily.sans], + inter: ['Inter', 'sans-serif'], + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + }, + }, + plugins: [require('tailwindcss-animate'), require('@tailwindcss/line-clamp')], +}; diff --git a/apps/workflows-dashboard/tsconfig.json b/apps/workflows-dashboard/tsconfig.json new file mode 100644 index 0000000000..4b301e4e61 --- /dev/null +++ b/apps/workflows-dashboard/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Node", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "paths": { + "@app/*": ["./src/*"] + } + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/apps/workflows-dashboard/tsconfig.node.json b/apps/workflows-dashboard/tsconfig.node.json new file mode 100644 index 0000000000..c53fe434e9 --- /dev/null +++ b/apps/workflows-dashboard/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ES6", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/apps/workflows-dashboard/vite.config.ts b/apps/workflows-dashboard/vite.config.ts new file mode 100644 index 0000000000..b8ce71854c --- /dev/null +++ b/apps/workflows-dashboard/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import { resolve } from 'path'; +import tailwindcss from 'tailwindcss'; +import checker from 'vite-plugin-checker'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react(), tailwindcss(), checker({ typescript: true })], + resolve: { + alias: { + '@app': resolve(__dirname, './src'), + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65d2779379..7d0a78a107 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -311,6 +311,151 @@ importers: specifier: ^0.29.8 version: 0.29.8 + apps/workflows-dashboard: + dependencies: + '@lukemorales/query-key-factory': + specifier: ^1.0.3 + version: 1.2.0(@tanstack/query-core@4.27.0) + '@radix-ui/react-dialog': + specifier: ^1.0.2 + version: 1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': + specifier: ^1.0.6 + version: 1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': + specifier: ^1.2.1 + version: 1.2.1(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': + specifier: ^1.0.2 + version: 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.1 + version: 1.0.1(react@18.2.0) + '@tailwindcss/line-clamp': + specifier: ^0.4.4 + version: 0.4.4(tailwindcss@3.2.7) + '@tanstack/react-query': + specifier: ^4.28.0 + version: 4.28.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-table': + specifier: ^8.9.2 + version: 8.9.2(react-dom@18.2.0)(react@18.2.0) + axios: + specifier: ^1.4.0 + version: 1.4.0 + class-variance-authority: + specifier: ^0.6.0 + version: 0.6.0(typescript@5.0.2) + classnames: + specifier: ^2.3.2 + version: 2.3.2 + clsx: + specifier: ^1.2.1 + version: 1.2.1 + cmdk: + specifier: ^0.2.0 + version: 0.2.0(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + install: + specifier: ^0.13.0 + version: 0.13.0 + lucide-react: + specifier: ^0.144.0 + version: 0.144.0(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-custom-scrollbars: + specifier: ^4.2.1 + version: 4.2.1(react-dom@18.2.0)(react@18.2.0) + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-router-dom: + specifier: ^6.11.2 + version: 6.11.2(react-dom@18.2.0)(react@18.2.0) + recharts: + specifier: ^2.7.2 + version: 2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + tailwind-merge: + specifier: ^1.13.2 + version: 1.13.2 + tailwindcss-animate: + specifier: ^1.0.5 + version: 1.0.5(tailwindcss@3.2.7) + use-query-params: + specifier: ^2.2.1 + version: 2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0) + devDependencies: + '@types/axios': + specifier: ^0.14.0 + version: 0.14.0 + '@types/classnames': + specifier: ^2.3.1 + version: 2.3.1 + '@types/jest': + specifier: ^26.0.19 + version: 26.0.24 + '@types/moment': + specifier: ^2.13.0 + version: 2.13.0 + '@types/node': + specifier: ^20.3.1 + version: 20.3.1 + '@types/react': + specifier: ^18.0.37 + version: 18.0.37 + '@types/react-custom-scrollbars': + specifier: ^4.0.10 + version: 4.0.10 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^5.59.0 + version: 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/parser': + specifier: ^5.59.0 + version: 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@vitejs/plugin-react': + specifier: ^4.0.0 + version: 4.0.0(vite@4.3.9) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.24) + eslint: + specifier: ^8.38.0 + version: 8.38.0 + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.0(eslint@8.38.0) + eslint-plugin-react-refresh: + specifier: ^0.3.4 + version: 0.3.4(eslint@8.38.0) + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) + moment: + specifier: ^2.29.4 + version: 2.29.4 + postcss: + specifier: ^8.4.24 + version: 8.4.24 + tailwindcss: + specifier: ^3.2.7 + version: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + ts-jest: + specifier: ^29.1.0 + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.0.2) + typescript: + specifier: ^5.0.2 + version: 5.0.2 + vite: + specifier: ^4.3.9 + version: 4.3.9(@types/node@20.3.1) + vite-plugin-checker: + specifier: ^0.6.1 + version: 0.6.1(eslint@8.38.0)(typescript@5.0.2)(vite@4.3.9) + examples/headless-example: dependencies: '@ballerine/common': @@ -1534,13 +1679,13 @@ importers: version: 8.8.0(eslint@8.36.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 version: 0.21.1(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -2852,6 +2997,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} @@ -3192,6 +3338,7 @@ packages: /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} @@ -3208,8 +3355,9 @@ packages: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 + '@babel/template': 7.22.5 '@babel/types': 7.22.5 + dev: true /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} @@ -3223,6 +3371,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} @@ -3299,7 +3448,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3314,7 +3463,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3329,7 +3478,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3375,6 +3524,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-split-export-declaration@7.22.5: resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} @@ -3447,6 +3597,7 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} @@ -4712,13 +4863,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4732,13 +4883,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5800,11 +5951,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3) '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3) @@ -5886,11 +6037,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.5) '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.5) @@ -6039,7 +6190,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -6076,6 +6227,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/parser': 7.21.3 '@babel/types': 7.21.3 + dev: true /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} @@ -6090,12 +6242,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 - '@babel/generator': 7.21.3 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.3 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.22.5 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 @@ -6641,7 +6793,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/android-arm@0.15.18: @@ -6675,7 +6826,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/android-x64@0.16.17: @@ -6701,7 +6851,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: false optional: true /@esbuild/darwin-arm64@0.16.17: @@ -6727,7 +6876,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: false optional: true /@esbuild/darwin-x64@0.16.17: @@ -6753,7 +6901,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: false optional: true /@esbuild/freebsd-arm64@0.16.17: @@ -6779,7 +6926,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: false optional: true /@esbuild/freebsd-x64@0.16.17: @@ -6805,7 +6951,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: false optional: true /@esbuild/linux-arm64@0.16.17: @@ -6831,7 +6976,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-arm@0.16.17: @@ -6857,7 +7001,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-ia32@0.16.17: @@ -6883,7 +7026,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-loong64@0.15.18: @@ -6917,7 +7059,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-mips64el@0.16.17: @@ -6943,7 +7084,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-ppc64@0.16.17: @@ -6969,7 +7109,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-riscv64@0.16.17: @@ -6995,7 +7134,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-s390x@0.16.17: @@ -7021,7 +7159,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/linux-x64@0.16.17: @@ -7047,7 +7184,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@esbuild/netbsd-x64@0.16.17: @@ -7073,7 +7209,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: false optional: true /@esbuild/openbsd-x64@0.16.17: @@ -7099,7 +7234,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: false optional: true /@esbuild/sunos-x64@0.16.17: @@ -7125,7 +7259,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: false optional: true /@esbuild/win32-arm64@0.16.17: @@ -7151,7 +7284,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: false optional: true /@esbuild/win32-ia32@0.16.17: @@ -7177,7 +7309,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: false optional: true /@esbuild/win32-x64@0.16.17: @@ -7203,7 +7334,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: false optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.22.0): @@ -7213,7 +7343,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.22.0 - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.36.0): @@ -7223,7 +7353,17 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.36.0 - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.38.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/regexpp@4.4.1: @@ -7237,7 +7377,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.0 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7253,7 +7393,24 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.0 + espree: 9.5.2 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7269,6 +7426,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@8.38.0: + resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@faker-js/faker@7.6.0: resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} @@ -7341,6 +7503,20 @@ packages: - '@types/react' dev: false + /@floating-ui/react-dom@0.7.2(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 0.5.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@floating-ui/react-dom@2.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==} peerDependencies: @@ -8015,7 +8191,7 @@ packages: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.3.8 + semver: 7.5.3 tar: 6.1.13 transitivePeerDependencies: - encoding @@ -8052,7 +8228,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.3 - '@types/react': 18.0.29 + '@types/react': 18.0.37 react: 18.2.0 dev: true @@ -8726,6 +8902,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-checkbox@1.0.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==} peerDependencies: @@ -8807,6 +9004,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-context@1.0.0(react@18.2.0): resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: @@ -8830,6 +9041,47 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-context@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + + /@radix-ui/react-dialog@1.0.0(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-portal': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.0(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-dialog@1.0.3(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} peerDependencies: @@ -8857,16 +9109,43 @@ packages: - '@types/react' dev: false - /@radix-ui/react-direction@1.0.0(react@18.2.0): - resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + /@radix-ui/react-dialog@1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 - react: 18.2.0 - dev: false - - /@radix-ui/react-direction@1.0.1(@types/react@18.0.29)(react@18.2.0): + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + + /@radix-ui/react-direction@1.0.0(react@18.2.0): + resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + react: 18.2.0 + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -8880,6 +9159,22 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-dismissable-layer@1.0.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==} peerDependencies: @@ -8921,6 +9216,31 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} peerDependencies: @@ -8971,6 +9291,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-focus-scope@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==} peerDependencies: @@ -9008,6 +9356,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-jXRuZEkxSWdHZbVyL0J46cm7pQjmOMpwJEFKY+VqAJnV+FxS+zIZExI1OCeIiDwCBzUy6If1FfouOsfqBxr86g==} peerDependencies: @@ -9055,6 +9426,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-id@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-label@2.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qcfbS3B8hTYmEO44RNcXB6pegkxRsJIbdxTMu0PEX0Luv5O2DvTIwwVYxQfUwLpM88EL84QRPLOLgwUSApMsLQ==} peerDependencies: @@ -9105,6 +9491,41 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) dev: false + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) + dev: false + /@radix-ui/react-popper@1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: @@ -9128,6 +9549,29 @@ packages: - '@types/react' dev: false + /@radix-ui/react-popper@1.1.1(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@floating-ui/react-dom': 0.7.2(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-size': 1.0.0(react@18.2.0) + '@radix-ui/rect': 1.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -9158,6 +9602,48 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-portal@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==} peerDependencies: @@ -9191,6 +9677,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: @@ -9226,6 +9733,40 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-slot': 1.0.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-primitive@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} peerDependencies: @@ -9259,6 +9800,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: @@ -9342,6 +9904,40 @@ packages: - '@types/react' dev: false + /@radix-ui/react-select@1.2.1(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/number': 1.0.0 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-collection': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-direction': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.0(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.2(react-dom@18.2.0)(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-separator@1.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lZoAG/rS2jzb/OSvyBrpN3dmikw20ewmWx1GkM1VldbDyD0DACCbH9LIXSrqyS/2mE1VYKOHmyq5W90Dx4ryqA==} peerDependencies: @@ -9354,6 +9950,16 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-slot@1.0.0(react@18.2.0): + resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + /@radix-ui/react-slot@1.0.1(react@18.2.0): resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} peerDependencies: @@ -9379,6 +9985,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-slot@1.0.2(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: @@ -9402,6 +10023,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0): resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} peerDependencies: @@ -9427,6 +10062,31 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0): + resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0): resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: @@ -9452,6 +10112,21 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: @@ -9475,6 +10150,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-use-previous@1.0.0(react@18.2.0): resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} peerDependencies: @@ -9509,17 +10198,47 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-use-size@1.0.0(react@18.2.0): resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.29)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.37)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -9529,8 +10248,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 react: 18.2.0 dev: false @@ -10295,10 +11014,10 @@ packages: '@storybook/node-logger': 7.0.0-rc.10 '@types/ejs': 3.1.2 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.14) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.19) browser-assert: 1.2.1 ejs: 3.1.9 - esbuild: 0.17.14 + esbuild: 0.17.19 esbuild-plugin-alias: 0.2.1 express: 4.18.2 find-cache-dir: 3.3.2 @@ -10438,7 +11157,7 @@ packages: prompts: 2.4.2 puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.3.8 + semver: 7.5.3 shelljs: 0.8.5 simple-update-notifier: 1.1.0 strip-json-comments: 3.1.1 @@ -10542,8 +11261,8 @@ packages: '@types/node': 16.18.25 '@types/pretty-hrtime': 1.0.1 chalk: 4.1.2 - esbuild: 0.17.14 - esbuild-register: 3.4.2(esbuild@0.17.14) + esbuild: 0.17.19 + esbuild-register: 3.4.2(esbuild@0.17.19) file-system-cache: 2.1.1 find-up: 5.0.0 fs-extra: 11.1.1 @@ -10612,7 +11331,7 @@ packages: pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.3.8 + semver: 7.5.3 serve-favicon: 2.5.0 telejson: 7.1.0 ts-dedent: 2.2.0 @@ -10736,7 +11455,7 @@ packages: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - semver: 7.3.8 + semver: 7.5.3 store2: 2.14.2 telejson: 7.1.0 ts-dedent: 2.2.0 @@ -11152,6 +11871,14 @@ packages: zod: 3.21.4 dev: false + /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.2.7): + resolution: {integrity: sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==} + peerDependencies: + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' + dependencies: + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + dev: false + /@tanstack/match-sorter-utils@8.7.6: resolution: {integrity: sha512-2AMpRiA6QivHOUiBpQAVxjiHAA68Ei23ZUMNaRJrN6omWiSFLoYrxGcT6BXtuzp0Jw4h6HZCmGGIM/gbwebO2A==} engines: {node: '>=12'} @@ -11194,6 +11921,18 @@ packages: react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) + /@tanstack/react-table@8.9.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Irvw4wqVF9hhuYzmNrlae4IKdlmgSyoRWnApSLebvYzqHoi5tEsYzBj6YPd0hX78aB/L+4w/jgK2eBQVpGfThQ==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + '@tanstack/table-core': 8.9.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@tanstack/svelte-query@4.27.0(svelte@3.57.0): resolution: {integrity: sha512-FmrviPCoWbgBOLgG4uOG4EHi80DDzvD4XK+0nQBTLb4c2cKyN7c98MLgG58yHbdFEPQyhhcJlqagXP18vWWS9w==} peerDependencies: @@ -11203,6 +11942,11 @@ packages: svelte: 3.57.0 dev: false + /@tanstack/table-core@8.9.2: + resolution: {integrity: sha512-ajc0OF+karBAdaSz7OK09rCoAHB1XI1+wEhu+tDNMPc+XcO+dTlXXN/Vc0a8vym4kElvEjXEDd9c8Zfgt4bekA==} + engines: {node: '>=12'} + dev: false + /@tensorflow/tfjs-core@1.7.0: resolution: {integrity: sha512-uwQdiklNjqBnHPeseOdG0sGxrI3+d6lybaKu2+ou3ajVeKdPEwpWbgqA6iHjq1iylnOGkgkbbnQ6r2lwkiIIHw==} engines: {yarn: '>= 1.3.2'} @@ -11337,6 +12081,15 @@ packages: resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: true + /@types/axios@0.14.0: + resolution: {integrity: sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==} + deprecated: This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed! + dependencies: + axios: 1.4.0 + transitivePeerDependencies: + - debug + dev: true + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: @@ -11385,6 +12138,13 @@ packages: resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} dev: true + /@types/classnames@2.3.1: + resolution: {integrity: sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==} + deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. + dependencies: + classnames: 2.3.2 + dev: true + /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: @@ -11405,6 +12165,48 @@ packages: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true + /@types/d3-array@3.0.5: + resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==} + dev: false + + /@types/d3-color@3.1.0: + resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==} + dev: false + + /@types/d3-ease@3.0.0: + resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} + dev: false + + /@types/d3-interpolate@3.0.1: + resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==} + dependencies: + '@types/d3-color': 3.1.0 + dev: false + + /@types/d3-path@3.0.0: + resolution: {integrity: sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==} + dev: false + + /@types/d3-scale@4.0.3: + resolution: {integrity: sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==} + dependencies: + '@types/d3-time': 3.0.0 + dev: false + + /@types/d3-shape@3.1.1: + resolution: {integrity: sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==} + dependencies: + '@types/d3-path': 3.0.0 + dev: false + + /@types/d3-time@3.0.0: + resolution: {integrity: sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==} + dev: false + + /@types/d3-timer@3.0.0: + resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} + dev: false + /@types/debug@4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: @@ -11565,13 +12367,6 @@ packages: pretty-format: 26.6.2 dev: true - /@types/jest@29.5.0: - resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} - dependencies: - expect: 29.5.0 - pretty-format: 29.5.0 - dev: true - /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} @@ -11655,6 +12450,13 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true + /@types/moment@2.13.0: + resolution: {integrity: sha512-DyuyYGpV6r+4Z1bUznLi/Y7HpGn4iQ4IVcGn8zrr1P4KotKLdH0sbK1TFR6RGyX6B+G8u83wCzL+bpawKU/hdQ==} + deprecated: This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed! + dependencies: + moment: 2.29.4 + dev: true + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} @@ -11698,6 +12500,10 @@ packages: /@types/node@18.15.10: resolution: {integrity: sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==} + /@types/node@20.3.1: + resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -11781,10 +12587,16 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true + /@types/react-custom-scrollbars@4.0.10: + resolution: {integrity: sha512-1T430E+usndUjymkXB8k/zGpWehggircq/QaQMuFLMJceccAcD9vcmbUXF1LjeVP/+P4wI/bad6BF1E+7IGlqA==} + dependencies: + '@types/react': 18.0.37 + dev: true + /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 17.0.53 + '@types/react': 18.0.37 /@types/react@17.0.53: resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} @@ -11792,6 +12604,7 @@ packages: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.1 + dev: false /@types/react@18.0.29: resolution: {integrity: sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==} @@ -11800,6 +12613,13 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.1 + /@types/react@18.0.37: + resolution: {integrity: sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.1 + /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: @@ -11895,7 +12715,7 @@ packages: /@types/testing-library__jest-dom@5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 29.5.0 + '@types/jest': 26.0.24 dev: true /@types/tmp@0.2.3: @@ -12003,6 +12823,62 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/type-utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.36.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.3.8 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.38.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.3.8 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/experimental-utils@4.33.0(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} engines: {node: ^10.12.0 || >=12.0.0} @@ -12061,6 +12937,46 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@5.59.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.36.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.38.0 + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@4.33.0: resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -12077,6 +12993,14 @@ packages: '@typescript-eslint/visitor-keys': 5.56.0 dev: true + /@typescript-eslint/scope-manager@5.59.0: + resolution: {integrity: sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 + dev: true + /@typescript-eslint/type-utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -12117,6 +13041,46 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.36.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.38.0 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types@4.33.0: resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -12127,6 +13091,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/types@5.59.0: + resolution: {integrity: sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5): resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} engines: {node: ^10.12.0 || >=12.0.0} @@ -12141,7 +13110,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 + semver: 7.5.3 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -12162,13 +13131,55 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 + semver: 7.5.3 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@5.59.0(typescript@4.9.5): + resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.3 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.59.0(typescript@5.0.2): + resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.3 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -12183,27 +13194,67 @@ packages: '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) eslint: 8.22.0 eslint-scope: 5.1.1 - semver: 7.3.8 + semver: 7.5.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + eslint: 8.36.0 + eslint-scope: 5.1.1 + semver: 7.5.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + eslint: 8.36.0 + eslint-scope: 5.1.1 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + eslint: 8.38.0 eslint-scope: 5.1.1 - semver: 7.3.8 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -12222,7 +13273,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.56.0 - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@typescript-eslint/visitor-keys@5.59.0: + resolution: {integrity: sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.59.0 + eslint-visitor-keys: 3.4.1 dev: true /@vitejs/plugin-react-swc@3.2.0(vite@4.2.1): @@ -12250,6 +13309,21 @@ packages: - supports-color dev: true + /@vitejs/plugin-react@4.0.0(vite@4.3.9): + resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) + react-refresh: 0.14.0 + vite: 4.3.9(@types/node@20.3.1) + transitivePeerDependencies: + - supports-color + dev: true + /@vitest/coverage-istanbul@0.28.5(jsdom@20.0.3): resolution: {integrity: sha512-na1pkr3AVrdFflzuBXsBh1MvBfhSMrv4nfd4N8rm0HEJlvlbQc+GiqNwtwzfO8TPsXxcjNphSIMp5wvCy+0xrQ==} dependencies: @@ -12500,13 +13574,13 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.14): + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.17.19): resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: esbuild: '>=0.10.0' dependencies: - esbuild: 0.17.14 + esbuild: 0.17.19 tslib: 2.5.2 dev: true @@ -12629,6 +13703,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /add-px-to-style@1.0.0: + resolution: {integrity: sha512-YMyxSlXpPjD8uWekCQGuN40lV4bnZagUwqa2m/uFv1z/tNImSk9fnXVMUI5qwME/zzI3MMQRvjZ+69zyfSSyew==} + dev: false + /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -13023,12 +14101,12 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@astrojs/compiler': 0.32.0 - '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/types': 5.59.0 astrojs-compiler-sync: 0.3.2(@astrojs/compiler@0.32.0) debug: 4.3.4(supports-color@8.1.1) eslint-scope: 7.1.1 - eslint-visitor-keys: 3.3.0 - espree: 9.5.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 transitivePeerDependencies: - supports-color dev: true @@ -13170,7 +14248,6 @@ packages: picocolors: 1.0.0 postcss: 8.4.24 postcss-value-parser: 4.2.0 - dev: false /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} @@ -13224,9 +14301,9 @@ packages: eslint: '>= 4.12.1' dependencies: '@babel/code-frame': 7.22.5 - '@babel/parser': 7.21.3 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 resolve: 1.22.1 @@ -13800,7 +14877,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.3.8 + semver: 7.5.3 dev: true /busboy@1.6.0: @@ -14061,6 +15138,21 @@ packages: typescript: 4.9.5 dev: false + /class-variance-authority@0.6.0(typescript@5.0.2): + resolution: {integrity: sha512-qdRDgfjx3GRb9fpwpSvn+YaidnT7IUJNe4wt5/SWwM+PmUwJUhQRk/8zAyNro0PmVfmen2635UboTjIBXXxy5A==} + peerDependencies: + typescript: '>= 4.5.5 < 6' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + clsx: 1.2.1 + typescript: 5.0.2 + dev: false + + /classnames@2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + /clean-css@5.3.2: resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} engines: {node: '>= 10.0'} @@ -14187,6 +15279,20 @@ packages: engines: {node: '>=6'} dev: false + /cmdk@0.2.0(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@radix-ui/react-dialog': 1.0.0(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + command-score: 0.1.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -14259,6 +15365,10 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false + /command-score@0.1.2: + resolution: {integrity: sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w==} + dev: false + /commander@10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} @@ -14652,6 +15762,10 @@ packages: fastparse: 1.1.2 dev: true + /css-unit-converter@1.1.2: + resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} + dev: false + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -14727,6 +15841,77 @@ packages: - '@swc/wasm' dev: true + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: @@ -14842,6 +16027,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + dev: false + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true @@ -15167,6 +16356,20 @@ packages: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true + /dom-css@2.1.0: + resolution: {integrity: sha512-w9kU7FAbaSh3QKijL6n59ofAhkkmMJ31GclJIz/vyQdjogfyxcB6Zf8CZyibOERI5o0Hxz30VmJS7+7r5fEj2Q==} + dependencies: + add-px-to-style: 1.0.0 + prefix-style: 2.0.1 + to-camel-case: 1.0.0 + dev: false + + /dom-helpers@3.4.0: + resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + dependencies: + '@babel/runtime': 7.21.0 + dev: false + /dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: @@ -15659,13 +16862,13 @@ packages: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} dev: true - /esbuild-register@3.4.2(esbuild@0.17.14): + /esbuild-register@3.4.2(esbuild@0.17.19): resolution: {integrity: sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==} peerDependencies: esbuild: '>=0.12 <1' dependencies: debug: 4.3.4(supports-color@8.1.1) - esbuild: 0.17.14 + esbuild: 0.17.19 transitivePeerDependencies: - supports-color dev: true @@ -15818,7 +17021,6 @@ packages: '@esbuild/win32-arm64': 0.17.19 '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - dev: false /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -15886,7 +17088,7 @@ packages: eslint: 8.36.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -15896,11 +17098,11 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 @@ -15917,7 +17119,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true @@ -16011,6 +17213,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -16022,7 +17253,7 @@ packages: astro-eslint-parser: 0.9.5 eslint: 8.36.0 eslint-utils: 3.0.0(eslint@8.36.0) - postcss: 8.4.21 + postcss: 8.4.24 postcss-selector-parser: 6.0.11 transitivePeerDependencies: - supports-color @@ -16140,6 +17371,39 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-n@15.6.1(eslint@8.36.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -16154,7 +17418,7 @@ packages: is-core-module: 2.11.0 minimatch: 3.1.2 resolve: 1.22.1 - semver: 7.3.8 + semver: 7.5.3 dev: true /eslint-plugin-promise@6.1.1(eslint@8.36.0): @@ -16175,6 +17439,23 @@ packages: eslint: 8.22.0 dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.38.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.38.0 + dev: true + + /eslint-plugin-react-refresh@0.3.4(eslint@8.38.0): + resolution: {integrity: sha512-E0ViBglxSQAERBp6eTj5fPgtCRtDonnbCFiVQBhf4Dto2blJRxg1dFUMdMh7N6ljTI4UwPhHwYDQ3Dyo4m6bwA==} + peerDependencies: + eslint: '>=7' + dependencies: + eslint: 8.38.0 + dev: true + /eslint-plugin-react@7.32.2(eslint@8.22.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} @@ -16232,7 +17513,7 @@ packages: tailwindcss: ^3.2.2 dependencies: fast-glob: 3.2.12 - postcss: 8.4.21 + postcss: 8.4.24 tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false @@ -16266,6 +17547,21 @@ packages: eslint-rule-composer: 0.3.0 dev: true + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0): + resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) + eslint: 8.36.0 + eslint-rule-composer: 0.3.0 + dev: true + /eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} @@ -16324,6 +17620,10 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint@8.22.0: resolution: {integrity: sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -16339,7 +17639,57 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.22.0) + eslint-utils: 3.0.0(eslint@8.22.0) + eslint-visitor-keys: 3.3.0 + espree: 9.5.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.20.0 + globby: 11.1.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + + /eslint@8.36.0: + resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/regexpp': 4.4.1 + '@eslint/eslintrc': 2.0.1 + '@eslint/js': 8.36.0 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 eslint-visitor-keys: 3.3.0 espree: 9.5.0 esquery: 1.5.0 @@ -16347,15 +17697,15 @@ packages: fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 - functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 globals: 13.20.0 - globby: 11.1.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -16363,23 +17713,22 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color + dev: true - /eslint@8.36.0: - resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} + /eslint@8.38.0: + resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@eslint-community/regexpp': 4.4.1 - '@eslint/eslintrc': 2.0.1 - '@eslint/js': 8.36.0 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.38.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -16390,8 +17739,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-visitor-keys: 3.3.0 - espree: 9.5.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -16426,7 +17775,15 @@ packages: dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.3.0 + eslint-visitor-keys: 3.4.1 + + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) + eslint-visitor-keys: 3.4.1 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -16458,7 +17815,7 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.21.3 + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 c8: 7.13.0 transitivePeerDependencies: @@ -16538,6 +17895,10 @@ packages: resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} dev: false + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -16773,6 +18134,11 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + dev: false + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} @@ -17096,7 +18462,7 @@ packages: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.1.1 - semver: 7.3.8 + semver: 7.5.3 tapable: 2.2.1 typescript: 4.9.5 webpack: 5.76.2 @@ -18183,6 +19549,11 @@ packages: through: 2.3.8 wrap-ansi: 7.0.0 + /install@0.13.0: + resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==} + engines: {node: '>= 0.10'} + dev: false + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -18192,6 +19563,11 @@ packages: side-channel: 1.0.4 dev: true + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -18882,6 +20258,34 @@ packages: - ts-node dev: true + /jest-cli@29.5.0(@types/node@20.3.1)(ts-node@10.9.1): + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) + jest-util: 29.5.0 + jest-validate: 29.5.0 + prompts: 2.4.2 + yargs: 17.7.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jest-config@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -18963,6 +20367,46 @@ packages: - supports-color dev: true + /jest-config@29.5.0(@types/node@20.3.1)(ts-node@10.9.1): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.22.5 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 20.3.1 + babel-jest: 29.5.0(@babel/core@7.22.5) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + transitivePeerDependencies: + - supports-color + dev: true + /jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -19484,7 +20928,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.3.8 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -19515,7 +20959,7 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.3.8 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -19664,6 +21108,26 @@ packages: - ts-node dev: true + /jest@29.5.0(@types/node@20.3.1)(ts-node@10.9.1): + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/types': 29.5.0 + import-local: 3.1.0 + jest-cli: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -19709,7 +21173,7 @@ packages: '@babel/preset-env': ^7.1.6 dependencies: '@babel/core': 7.22.5 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.5 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) @@ -19925,7 +21389,7 @@ packages: jws: 3.2.2 lodash: 4.17.21 ms: 2.1.3 - semver: 7.3.8 + semver: 7.5.3 dev: false /jsx-ast-utils@3.3.3: @@ -20170,6 +21634,10 @@ packages: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true + /lodash.pick@4.4.0: + resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} + dev: true + /lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} dev: true @@ -21189,6 +22657,10 @@ packages: ufo: 1.1.1 dev: true + /moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -21521,7 +22993,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.11.0 - semver: 7.3.8 + semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -22131,6 +23603,10 @@ packages: /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -22249,7 +23725,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 - dev: false /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -22268,7 +23743,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.24 - dev: false /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -22303,7 +23777,6 @@ packages: postcss: 8.4.24 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 1.10.2 - dev: false /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -22340,7 +23813,6 @@ packages: dependencies: postcss: 8.4.24 postcss-selector-parser: 6.0.11 - dev: false /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} @@ -22349,6 +23821,10 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 + /postcss-value-parser@3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} + dev: false + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -22377,6 +23853,10 @@ packages: path-exists: 4.0.0 which-pm: 2.0.0 + /prefix-style@2.0.1: + resolution: {integrity: sha512-gdr1MBNVT0drzTq95CbSNdsrBDoHGlb2aDJP/FoY+1e+jSDPOb1Cv554gH2MGiSr2WTcXi/zu+NaFzfcHQkfBQ==} + dev: false + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -22572,7 +24052,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /properties-reader@2.2.0: resolution: {integrity: sha512-CgVcr8MwGoBKK24r9TwHfZkLLaNFHQ6y4wgT9w/XzdpacOOi5ciH4hcuLechSDAwXsfrGQtI2JTutY2djOx2Ow==} @@ -22694,6 +24173,12 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + /raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + /ramda@0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true @@ -22746,6 +24231,19 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /react-custom-scrollbars@4.2.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-VtJTUvZ7kPh/auZWIbBRceGPkE30XBYe+HktFxuMWBR2eVQQ+Ur6yFJMoaYcNpyGq22uYJ9Wx4UAEcC0K+LNPQ==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 + react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 + dependencies: + dom-css: 2.1.0 + prop-types: 15.8.1 + raf: 3.4.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-docgen-typescript@2.2.2(typescript@4.9.5): resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: @@ -22760,7 +24258,7 @@ packages: hasBin: true dependencies: '@babel/core': 7.22.5 - '@babel/generator': 7.21.3 + '@babel/generator': 7.22.5 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -22857,7 +24355,6 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -22884,6 +24381,10 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + dev: false + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -22905,6 +24406,41 @@ packages: tslib: 2.5.2 dev: false + /react-remove-scroll-bar@2.3.4(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.0.37)(react@18.2.0) + tslib: 2.5.2 + dev: false + + /react-remove-scroll@2.5.4(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.0.37)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.37)(react@18.2.0) + tslib: 2.5.2 + use-callback-ref: 1.3.0(@types/react@18.0.37)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.37)(react@18.2.0) + dev: false + /react-remove-scroll@2.5.5(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -22924,6 +24460,36 @@ packages: use-sidecar: 1.1.2(@types/react@18.0.29)(react@18.2.0) dev: false + /react-remove-scroll@2.5.5(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.0.37)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.37)(react@18.2.0) + tslib: 2.5.2 + use-callback-ref: 1.3.0(@types/react@18.0.37)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.37)(react@18.2.0) + dev: false + + /react-resize-detector@8.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-router-dom@6.11.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==} engines: {node: '>=14'} @@ -22956,6 +24522,20 @@ packages: throttle-debounce: 3.0.1 dev: true + /react-smooth@2.0.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==} + peerDependencies: + prop-types: ^15.6.0 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + fast-equals: 5.0.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) + dev: false + /react-style-singleton@2.2.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} @@ -22973,6 +24553,37 @@ packages: tslib: 2.5.2 dev: false + /react-style-singleton@2.2.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.5.2 + dev: false + + /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + peerDependencies: + react: '>=15.0.0' + react-dom: '>=15.0.0' + dependencies: + dom-helpers: 3.4.0 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + dev: false + /react-zoom-pan-pinch@3.0.8(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-z6O5SV5X+XBo/LLO59PgzNE2WT+tp8lw1w3M0y138jCXViwHWKK1MqorICbmSVSOOD5Fa2o6pcg1ppJj9vzqJA==} engines: {node: '>=8', npm: '>=5'} @@ -23076,6 +24687,34 @@ packages: tslib: 2.5.2 dev: true + /recharts-scale@0.4.5: + resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} + dependencies: + decimal.js-light: 2.5.1 + dev: false + + /recharts@2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==} + engines: {node: '>=12'} + peerDependencies: + prop-types: ^15.6.0 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + classnames: 2.3.2 + eventemitter3: 4.0.7 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 16.13.1 + react-resize-detector: 8.1.0(react-dom@18.2.0)(react@18.2.0) + react-smooth: 2.0.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + recharts-scale: 0.4.5 + reduce-css-calc: 2.1.8 + victory-vendor: 36.6.11 + dev: false + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -23091,6 +24730,13 @@ packages: strip-indent: 3.0.0 dev: true + /reduce-css-calc@2.1.8: + resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==} + dependencies: + css-unit-converter: 1.1.2 + postcss-value-parser: 3.3.1 + dev: false + /reflect-metadata@0.1.13: resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} @@ -23573,7 +25219,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: false /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} @@ -23729,6 +25374,13 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + /send@0.17.1: resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} engines: {node: '>= 0.8.0'} @@ -23782,6 +25434,10 @@ packages: randombytes: 2.1.0 dev: true + /serialize-query-params@2.0.2: + resolution: {integrity: sha512-1chMo1dST4pFA9RDXAtF0Rbjaut4is7bzFbI1Z26IuMub68pNCILku85aYmeFhvnY//BXUPUhoRMjYcsT93J/Q==} + dev: false + /serve-favicon@2.5.0: resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} engines: {node: '>= 0.8.0'} @@ -24463,7 +26119,7 @@ packages: mime: 2.6.0 qs: 6.11.2 readable-stream: 3.6.2 - semver: 7.3.8 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -24544,8 +26200,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.57.0 - svelte-preprocess: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@5.0.2) - typescript: 5.0.2 + svelte-preprocess: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -24621,59 +26277,6 @@ packages: typescript: 4.9.5 dev: true - /svelte-preprocess@4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@5.0.2): - resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} - engines: {node: '>= 9.11.2'} - requiresBuild: true - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - node-sass: '*' - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 - svelte: ^3.23.0 - typescript: ^3.9.5 || ^4.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - node-sass: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.21.3 - '@types/pug': 2.0.6 - '@types/sass': 1.45.0 - detect-indent: 6.1.0 - magic-string: 0.25.9 - postcss: 8.4.21 - sorcery: 0.10.0 - strip-indent: 3.0.0 - svelte: 3.57.0 - typescript: 5.0.2 - dev: true - /svelte@3.57.0: resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} engines: {node: '>= 8'} @@ -24725,12 +26328,16 @@ packages: resolution: {integrity: sha512-WFnDXSS4kFTZwjKg5/oZSGzBRU/l+qcbv5NVTzLUQvJ9yovDAP05h0F2+ZFW0Lw9EcgRoc2AfURUdZvnEFrXKg==} dev: false + /tailwind-merge@1.13.2: + resolution: {integrity: sha512-R2/nULkdg1VR/EL4RXg4dEohdoxNUJGLMnWIQnPKL+O9Twu7Cn3Rxi4dlXkDzZrEGtR+G+psSXFouWlpTyLhCQ==} + dev: false + /tailwindcss-animate@1.0.5(tailwindcss@3.2.7): resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): @@ -24798,7 +26405,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - ts-node - dev: false /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -25134,16 +26740,32 @@ packages: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} dev: false + /to-camel-case@1.0.0: + resolution: {integrity: sha512-nD8pQi5H34kyu1QDMFjzEIYqk0xa9Alt6ZfrdEMuHCFOfTLhDG5pgTu/aAM9Wt9lXILwlXmWP43b8sav0GNE8Q==} + dependencies: + to-space-case: 1.0.0 + dev: false + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + /to-no-case@1.0.2: + resolution: {integrity: sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==} + dev: false + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + /to-space-case@1.0.0: + resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} + dependencies: + to-no-case: 1.0.2 + dev: false + /toidentifier@1.0.0: resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} engines: {node: '>=0.6'} @@ -25277,6 +26899,40 @@ packages: yargs-parser: 21.1.1 dev: true + /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.0.2): + resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.22.5 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) + jest-util: 29.5.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 5.0.2 + yargs-parser: 21.1.1 + dev: true + /ts-loader@9.2.3(typescript@4.9.5)(webpack@5.76.2): resolution: {integrity: sha512-sEyWiU3JMHBL55CIeC4iqJQadI0U70A5af0kvgbNLHVNz2ACztQg0j/9x10bjjIht8WfFYLKfn4L6tkZ+pu+8Q==} engines: {node: '>=12.0.0'} @@ -25417,6 +27073,16 @@ packages: typescript: 4.9.5 dev: true + /tsutils@3.21.0(typescript@5.0.2): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.0.2 + dev: true + /tty-table@4.2.1: resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} engines: {node: '>=8.0.0'} @@ -25570,7 +27236,6 @@ packages: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} engines: {node: '>=12.20'} hasBin: true - dev: true /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} @@ -25821,6 +27486,21 @@ packages: tslib: 2.5.2 dev: false + /use-callback-ref@1.3.0(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + tslib: 2.5.2 + dev: false + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: @@ -25834,6 +27514,38 @@ packages: react: 18.2.0 dev: false + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + + /use-query-params@2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0): + resolution: {integrity: sha512-i6alcyLB8w9i3ZK3caNftdb+UnbfBRNPDnc89CNQWkGRmDrm/gfydHvMBfVsQJRq3NoHOM2dt/ceBWG2397v1Q==} + peerDependencies: + '@reach/router': ^1.2.1 + react: '>=16.8.0' + react-dom: '>=16.8.0' + react-router-dom: '>=5' + peerDependenciesMeta: + '@reach/router': + optional: true + react-router-dom: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-router-dom: 6.11.2(react-dom@18.2.0)(react@18.2.0) + serialize-query-params: 2.0.2 + dev: false + /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} peerDependencies: @@ -25861,6 +27573,22 @@ packages: tslib: 2.5.2 dev: false + /use-sidecar@1.1.2(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.5.2 + dev: false + /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -25993,6 +27721,25 @@ packages: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 + /victory-vendor@36.6.11: + resolution: {integrity: sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==} + dependencies: + '@types/d3-array': 3.0.5 + '@types/d3-ease': 3.0.0 + '@types/d3-interpolate': 3.0.1 + '@types/d3-scale': 4.0.3 + '@types/d3-shape': 3.1.1 + '@types/d3-time': 3.0.0 + '@types/d3-timer': 3.0.0 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + dev: false + /vite-node@0.28.5(@types/node@18.15.10): resolution: {integrity: sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==} engines: {node: '>=v14.16.0'} @@ -26005,7 +27752,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' - less @@ -26026,7 +27773,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' - less @@ -26037,6 +27784,59 @@ packages: - terser dev: true + /vite-plugin-checker@0.6.1(eslint@8.38.0)(typescript@5.0.2)(vite@4.3.9): + resolution: {integrity: sha512-4fAiu3W/IwRJuJkkUZlWbLunSzsvijDf0eDN6g/MGh6BUK4SMclOTGbLJCPvdAcMOQvVmm8JyJeYLYd4//8CkA==} + engines: {node: '>=14.16'} + peerDependencies: + eslint: '>=7' + meow: ^9.0.0 + optionator: ^0.9.1 + stylelint: '>=13' + typescript: '*' + vite: '>=2.0.0' + vls: '*' + vti: '*' + vue-tsc: '>=1.3.9' + peerDependenciesMeta: + eslint: + optional: true + meow: + optional: true + optionator: + optional: true + stylelint: + optional: true + typescript: + optional: true + vls: + optional: true + vti: + optional: true + vue-tsc: + optional: true + dependencies: + '@babel/code-frame': 7.22.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.5.3 + commander: 8.3.0 + eslint: 8.38.0 + fast-glob: 3.2.12 + fs-extra: 11.1.1 + lodash.debounce: 4.0.8 + lodash.pick: 4.4.0 + npm-run-path: 4.0.1 + semver: 7.5.3 + strip-ansi: 6.0.1 + tiny-invariant: 1.3.1 + typescript: 5.0.2 + vite: 4.3.9(@types/node@20.3.1) + vscode-languageclient: 7.0.0 + vscode-languageserver: 7.0.0 + vscode-languageserver-textdocument: 1.0.8 + vscode-uri: 3.0.7 + dev: true + /vite-plugin-dts@1.7.3(@types/node@18.15.10)(vite@4.0.3): resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} @@ -26172,7 +27972,7 @@ packages: dependencies: '@types/node': 18.15.10 esbuild: 0.16.17 - postcss: 8.4.21 + postcss: 8.4.24 resolve: 1.22.1 rollup: 3.20.2 optionalDependencies: @@ -26206,7 +28006,7 @@ packages: dependencies: '@types/node': 18.15.10 esbuild: 0.17.14 - postcss: 8.4.21 + postcss: 8.4.24 resolve: 1.22.1 rollup: 3.20.2 optionalDependencies: @@ -26243,7 +28043,39 @@ packages: rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 - dev: false + + /vite@4.3.9(@types/node@20.3.1): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.3.1 + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true /vitefu@0.2.4(vite@3.2.5): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} @@ -26365,7 +28197,7 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.10) vite-node: 0.28.5(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -26429,7 +28261,7 @@ packages: tinybench: 2.4.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.10) vite-node: 0.29.8(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -26464,11 +28296,32 @@ packages: vscode-uri: 3.0.7 dev: false + /vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + dev: true + /vscode-jsonrpc@8.1.0: resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} engines: {node: '>=14.0.0'} dev: false + /vscode-languageclient@7.0.0: + resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} + engines: {vscode: ^1.52.0} + dependencies: + minimatch: 3.1.2 + semver: 7.5.3 + vscode-languageserver-protocol: 3.16.0 + dev: true + + /vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + dev: true + /vscode-languageserver-protocol@3.17.3: resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} dependencies: @@ -26478,12 +28331,22 @@ packages: /vscode-languageserver-textdocument@1.0.8: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} - dev: false + + /vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + dev: true /vscode-languageserver-types@3.17.3: resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} dev: false + /vscode-languageserver@7.0.0: + resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.16.0 + dev: true + /vscode-languageserver@8.1.0: resolution: {integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==} hasBin: true @@ -26503,7 +28366,6 @@ packages: /vscode-uri@3.0.7: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} - dev: false /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} diff --git a/services/workflows-service/.env.example b/services/workflows-service/.env.example index ae790ec182..e2e825b081 100644 --- a/services/workflows-service/.env.example +++ b/services/workflows-service/.env.example @@ -1,6 +1,6 @@ BCRYPT_SALT=10 COMPOSE_PROJECT_NAME=ballerine-x -JWT_SECRET_KEY=secret +JWT_SECRET_KEY=demo JWT_EXPIRATION=10d PORT=3000 DB_USER=admin diff --git a/services/workflows-service/src/common/decorators/is-nullable.decorator.ts b/services/workflows-service/src/common/decorators/is-nullable.decorator.ts new file mode 100644 index 0000000000..72e80afe68 --- /dev/null +++ b/services/workflows-service/src/common/decorators/is-nullable.decorator.ts @@ -0,0 +1,5 @@ +import { ValidationOptions, ValidateIf } from 'class-validator'; + +export function IsNullable(validationOptions?: ValidationOptions) { + return ValidateIf((_object, value) => value !== null, validationOptions); +} diff --git a/services/workflows-service/src/common/decorators/one-of.decorator.ts b/services/workflows-service/src/common/decorators/one-of.decorator.ts new file mode 100644 index 0000000000..eb1c3a7508 --- /dev/null +++ b/services/workflows-service/src/common/decorators/one-of.decorator.ts @@ -0,0 +1,19 @@ +import { registerDecorator, ValidationOptions } from 'class-validator'; + +export function oneOf(list: (string | number)[], options?: ValidationOptions) { + return function (obj: object, paramName: string) { + registerDecorator({ + name: 'oneOf', + target: obj.constructor, + propertyName: paramName, + constraints: list, + options: { + message: `Value must be one of ${JSON.stringify(list)}`, + ...options, + }, + validator: { + validate: (value: string | number) => list.some(val => val === value), + }, + }); + }; +} diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts new file mode 100644 index 0000000000..11e91abbc5 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts @@ -0,0 +1,20 @@ +import { WorkflowRuntimeListItemModel } from '@/workflow/workflow-runtime-list-item.model'; +import { ApiProperty } from '@nestjs/swagger'; +import { ValidateNested } from 'class-validator'; + +export class Pagination { + @ApiProperty({ type: () => Number }) + pages!: number; + + @ApiProperty({ type: () => Number }) + total!: number; +} + +export class GetWorkflowsRuntimeResponseDto { + @ApiProperty({ type: () => WorkflowRuntimeListItemModel, isArray: true }) + @ValidateNested() + results!: WorkflowRuntimeListItemModel[]; + + @ApiProperty({ type: () => Pagination }) + meta!: Pagination; +} diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts new file mode 100644 index 0000000000..886967dda2 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts @@ -0,0 +1,24 @@ +import { oneOf } from '@/common/decorators/one-of.decorator'; +import { ApiPropertyOptional } from '@nestjs/swagger'; +import { WorkflowRuntimeDataStatus } from '@prisma/client'; +import { Type } from 'class-transformer'; +import { IsNumber, IsOptional } from 'class-validator'; + +export class GetWorkflowsRuntimeDto { + @IsOptional() + @oneOf(Object.values(WorkflowRuntimeDataStatus), { each: true }) + @ApiPropertyOptional() + status?: WorkflowRuntimeDataStatus[]; + + @Type(() => Number) + @IsOptional() + @IsNumber() + @ApiPropertyOptional() + page?: number; + + @Type(() => Number) + @IsOptional() + @IsNumber() + @ApiPropertyOptional() + limit?: number; +} diff --git a/services/workflows-service/src/workflow/types/index.ts b/services/workflows-service/src/workflow/types/index.ts index afa14ca82d..a09c5ae9a6 100644 --- a/services/workflows-service/src/workflow/types/index.ts +++ b/services/workflows-service/src/workflow/types/index.ts @@ -1,4 +1,11 @@ -import { Business, EndUser, WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; +import { WorkflowRuntimeListItemModel } from '@/workflow/workflow-runtime-list-item.model'; +import { + Business, + EndUser, + WorkflowDefinition, + WorkflowRuntimeData, + WorkflowRuntimeDataStatus, +} from '@prisma/client'; import { User } from '@sentry/node'; export interface RunnableWorkflowData { @@ -17,3 +24,30 @@ export type TWorkflowWithRelations = WorkflowRuntimeData & { workflowDefinition: WorkflowDefinition; assignee: User; } & ({ endUser: EndUser } | { business: Business }); + +export interface ListWorkflowsRuntimeParams { + page?: number; + size?: number; + status?: WorkflowRuntimeDataStatus[]; +} + +export interface ListRuntimeDataResult { + results: WorkflowRuntimeListItemModel[]; + meta: { + pages: number; + total: number; + }; +} + +export type WorkflowRuntimeListQueryResult = WorkflowRuntimeData & { + workflowDefinition: WorkflowDefinition; + assignee: User | null; +}; + +export type WorkflowStatusMetric = Record<WorkflowRuntimeDataStatus, number>; + +export type WorkflowsApprovedChart = { workflowId: string; approvedDate: Date }[]; +export interface WorkflowsRuntimeMetric { + status: WorkflowStatusMetric; + approvedWorkflows: WorkflowsApprovedChart; +} diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index fc6c6229a1..4ca8fae460 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -113,4 +113,10 @@ export class WorkflowRuntimeDataRepository { ): Promise<number> { return await this.prisma.workflowRuntimeData.count(args); } + + async groupBy<T extends Prisma.WorkflowRuntimeDataGroupByArgs>( + args: Prisma.SubsetIntersection<T, Prisma.WorkflowRuntimeDataGroupByArgs, any>, + ) { + return await this.prisma.workflowRuntimeData.groupBy(args); + } } diff --git a/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts b/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts new file mode 100644 index 0000000000..0730cd5a0b --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts @@ -0,0 +1,68 @@ +import { IsNullable } from '@/common/decorators/is-nullable.decorator'; +import { ApiProperty } from '@nestjs/swagger'; +import { WorkflowRuntimeDataStatus } from '@prisma/client'; +import { Expose } from 'class-transformer'; +import { IsDate, IsJSON, IsString, ValidateNested } from 'class-validator'; + +export class WorkflowAssignee { + @Expose() + @IsNullable() + @IsString() + firstName!: string; + + @Expose() + @IsNullable() + @IsString() + lastName!: string; +} + +export class WorkflowRuntimeListItemModel { + @Expose() + @ApiProperty() + @IsString() + id!: string; + + @Expose() + @ApiProperty() + @IsString() + workflowDefinitionName!: string; + + @Expose() + @ApiProperty() + @IsString() + status!: WorkflowRuntimeDataStatus; + + @Expose() + @ApiProperty() + @IsJSON() + context!: JSON; + + @Expose() + @IsNullable() + @IsString() + state!: string | null; + + @Expose() + @IsNullable() + @ValidateNested() + assignee!: WorkflowAssignee | null; + + @Expose() + @IsString() + createdBy!: string; + + @Expose() + @ApiProperty() + @IsDate() + createdAt!: Date; + + @Expose() + @ApiProperty() + @IsDate() + resolvedAt!: Date; + + @Expose() + @ApiProperty() + @IsDate() + updatedAt!: Date; +} diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 96a4f1d3dc..74bb3b5b02 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -5,7 +5,7 @@ import { UserInfo } from '@/user/user-info'; import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import * as common from '@nestjs/common'; -import { NotFoundException, Res } from '@nestjs/common'; +import { NotFoundException, Query, Res } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { WorkflowRuntimeData } from '@prisma/client'; import * as nestAccessControl from 'nest-access-control'; @@ -18,12 +18,13 @@ import { WorkflowDefinitionWhereUniqueInput } from './dtos/workflow-where-unique import { RunnableWorkflowData } from './types'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { IntentResponse, WorkflowService } from './workflow.service'; -import { EventEmitter2 } from '@nestjs/event-emitter'; import { Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; -import { makeFullWorkflow } from '@/workflow/utils/make-full-workflow'; +import { GetWorkflowsRuntimeDto } from '@/workflow/dtos/get-workflows-runtime.dto'; +import { GetWorkflowsRuntimeResponseDto } from '@/workflow/dtos/get-workflows-runtime-response.dto'; +import { plainToClass } from 'class-transformer'; @swagger.ApiBearerAuth() @swagger.ApiTags('external/workflows') @@ -33,19 +34,30 @@ export class WorkflowControllerExternal { protected readonly service: WorkflowService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, - private eventEmitter: EventEmitter2, ) {} - // GET /workflows @common.Get('/') - @swagger.ApiOkResponse({ type: [WorkflowDefinitionModel] }) + @swagger.ApiOkResponse({ type: [GetWorkflowsRuntimeResponseDto] }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) @common.HttpCode(200) + @UseKeyAuthInDevGuard() @ApiNestedQuery(WorkflowDefinitionFindManyArgs) - async listWorkflowRuntimeData() { - const workflowRuntimeDataWithDefinition = await this.service.listFullWorkflowData(); + async listWorkflowRuntimeData( + @Query() query: GetWorkflowsRuntimeDto, + ): Promise<GetWorkflowsRuntimeResponseDto> { + const results = await this.service.listRuntimeData({ + page: query.page, + size: query.limit, + status: query.status, + }); - return makeFullWorkflow(workflowRuntimeDataWithDefinition); + return plainToClass(GetWorkflowsRuntimeResponseDto, results); + } + + @common.Get('/metrics') + @UseKeyAuthInDevGuard() + async listWorkflowRuntimeMetric() { + return await this.service.listWorkflowsMetrics(); } @common.Get('/:id') diff --git a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts index 7cbebc95dc..cdb0e067ea 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts @@ -36,7 +36,7 @@ describe('Workflow (external)', () => { beforeEach(async () => { wfService = { - listFullWorkflowData: jest.fn() as unknown, + listRuntimeData: jest.fn() as unknown, getWorkflowRuntimeDataById: jest.fn() as unknown, getWorkflowDefinitionById: jest.fn() as unknown, } as WorkflowService; @@ -67,29 +67,29 @@ describe('Workflow (external)', () => { await app.init(); }); - test('GET /workflows will return a two-key object containing "definition" and "runtime data" ', async () => { - const wfService = moduleRef.get<WorkflowService>(WorkflowService); - (wfService.listFullWorkflowData as jest.Mock).mockReturnValue( - Promise.resolve([ - { - workflowDefinition: { id: 'a' }, - state: { id: 'b' } as unknown, - }, - ] as unknown as CompleteWorkflowData[]), - ); + // test('GET /workflows will return a two-key object containing "definition" and "runtime data" ', async () => { + // const wfService = moduleRef.get<WorkflowService>(WorkflowService); + // (wfService.listRuntimeData as jest.Mock).mockReturnValue( + // Promise.resolve([ + // { + // workflowDefinition: { id: 'a' }, + // state: { id: 'b' } as unknown, + // }, + // ] as unknown as CompleteWorkflowData[]), + // ); - await request(app.getHttpServer()) - .get('/external/workflows') - .expect(HttpStatus.OK) - .expect([ - { - workflowDefinition: { id: 'a' }, - workflowRuntimeData: { - state: { id: 'b' }, - }, - }, - ]); - }); + // await request(app.getHttpServer()) + // .get('/external/workflows') + // .expect(HttpStatus.OK) + // .expect([ + // { + // workflowDefinition: { id: 'a' }, + // workflowRuntimeData: { + // state: { id: 'b' }, + // }, + // }, + // ]); + // }); test('GET /workflows/:id non existing', async () => { const wfService = moduleRef.get<WorkflowService>(WorkflowService); diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index 56607c85d1..b56f3ad0c2 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -5,7 +5,6 @@ import { WorkflowControllerInternal } from './workflow.controller.internal'; import { ACLModule } from '@/common/access-control/acl.module'; import { AuthModule } from '../auth/auth.module'; import { WorkflowDefinitionRepository } from './workflow-definition.repository'; -import { WorkflowRuntimeDataRepository } from './workflow-runtime-data.repository'; import { EndUserRepository } from '@/end-user/end-user.repository'; import { WorkflowEventEmitterService } from './workflow-event-emitter.service'; import { DocumentChangedWebhookCaller } from '@/events/document-changed-webhook-caller'; @@ -13,9 +12,10 @@ import { BusinessRepository } from '@/business/business.repository'; import { FileService } from '@/providers/file/file.service'; import { StorageService } from '@/storage/storage.service'; import { FileRepository } from '@/storage/storage.repository'; -import { HttpModule, HttpService } from '@nestjs/axios'; +import { HttpModule } from '@nestjs/axios'; import { FilterRepository } from '@/filter/filter.repository'; import { FilterService } from '@/filter/filter.service'; +import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule), HttpModule], diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 4bda0688f2..bbf9ece012 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -13,7 +13,16 @@ import { WorkflowRuntimeDataStatus, } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; -import { RunnableWorkflowData, TWorkflowWithRelations } from './types'; +import { + CompleteWorkflowData, + ListRuntimeDataResult, + ListWorkflowsRuntimeParams, + RunnableWorkflowData, + TWorkflowWithRelations, + WorkflowRuntimeListQueryResult, + WorkflowsRuntimeMetric, + WorkflowStatusMetric, +} from './types'; import { createWorkflow } from '@ballerine/workflow-node-sdk'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { isEqual, merge } from 'lodash'; @@ -52,6 +61,11 @@ import { TDefaultSchemaDocumentPage, } from '@ballerine/common'; import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; +import { + WorkflowAssignee, + WorkflowRuntimeListItemModel, +} from '@/workflow/workflow-runtime-list-item.model'; +import { plainToClass } from 'class-transformer'; type TEntityId = string; @@ -325,9 +339,56 @@ export class WorkflowService { }); } - async listFullWorkflowData() { - return await this.workflowRuntimeDataRepository.findMany({ - include: { workflowDefinition: true }, + async listRuntimeData({ + page, + size, + status, + }: ListWorkflowsRuntimeParams): Promise<ListRuntimeDataResult> { + const query = { + where: { + ...(status ? { status: { in: status } } : undefined), + }, + }; + + const [workflowsRuntimeCount, workflowsRuntime] = await Promise.all([ + this.workflowRuntimeDataRepository.count(query), + this.workflowRuntimeDataRepository.findMany({ + skip: page && size ? (page - 1) * size : undefined, + take: size, + include: { + workflowDefinition: true, + assignee: true, + }, + ...query, + }), + ]); + + const result: ListRuntimeDataResult = { + results: this.workflowsRuntimeListItemsFactory(workflowsRuntime), + meta: { + pages: size ? Math.max(Math.ceil(workflowsRuntimeCount / size)) : 0, + total: workflowsRuntimeCount, + }, + }; + + return result; + } + + private workflowsRuntimeListItemsFactory( + workflows: WorkflowRuntimeListQueryResult[], + ): WorkflowRuntimeListItemModel[] { + return workflows.map(workflow => { + const { assignee, workflowDefinition } = workflow; + + return plainToClass( + WorkflowRuntimeListItemModel, + { + ...workflow, + assignee: assignee ? plainToClass(WorkflowAssignee, assignee) : null, + workflowDefinitionName: workflowDefinition?.name || null, + }, + { excludeExtraneousValues: true }, + ); }); } @@ -1062,4 +1123,36 @@ export class WorkflowService { async getWorkflowRuntimeDataContext(id: string) { return this.workflowRuntimeDataRepository.findContext(id); } + + async listWorkflowsMetrics(): Promise<WorkflowsRuntimeMetric> { + return { + approvedWorkflows: (await this.listResolvedWorkflowRuntimes()) as any, + status: await this._getWorkflowsStatusMetric(), + }; + } + + private async listResolvedWorkflowRuntimes(): Promise<WorkflowRuntimeData[]> { + return await this.workflowRuntimeDataRepository.findMany({ + where: { resolvedAt: { not: null } }, + }); + } + + private async _getWorkflowsStatusMetric(): Promise<WorkflowStatusMetric> { + const queryResult = await this.workflowRuntimeDataRepository.groupBy({ + by: ['status'], + _count: true, + }); + + const metrics: WorkflowStatusMetric = { + active: 0, + failed: 0, + completed: 0, + }; + + queryResult.forEach(metric => { + metrics[metric.status] = Number(metric._count) || 0; + }); + + return metrics; + } } From bb494abf06db1493add86be035e369d8661e19f9 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 24 Jun 2023 01:31:16 +0300 Subject: [PATCH 070/123] update docs --- .../src/components/Footer/AvatarList.astro | 2 +- websites/docs/src/config.ts | 6 +- .../learn/kyc-manual-review-workflow-guide.md | 70 +++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 websites/docs/src/pages/en/learn/kyc-manual-review-workflow-guide.md diff --git a/websites/docs/src/components/Footer/AvatarList.astro b/websites/docs/src/components/Footer/AvatarList.astro index b032516fb2..5663bcf8f4 100644 --- a/websites/docs/src/components/Footer/AvatarList.astro +++ b/websites/docs/src/components/Footer/AvatarList.astro @@ -7,7 +7,7 @@ type Props = { }; const { path } = Astro.props as Props; // Change to the path of the docs repo -const resolvedPath = `examples/docs/${path}`; +const resolvedPath = `websites/docs/${path}`; const url = `https://api.github.com/repos/ballerine-io/ballerine/commits?path=${resolvedPath}`; const commitsURL = `https://github.com/ballerine-io/ballerine/commits/main/${resolvedPath}`; diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index c71390437e..be9428c702 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -31,7 +31,7 @@ export const KNOWN_LANGUAGES = { } as const; export const KNOWN_LANGUAGE_CODES = Object.values(KNOWN_LANGUAGES); -export const GITHUB_EDIT_URL = `https://github.com/ballerine-io/ballerine/tree/main/examples/docs`; +export const GITHUB_EDIT_URL = `https://github.com/ballerine-io/ballerine/tree/dev/websites/docs`; export const DISCORD_URL = `https://discord.gg/e2rQE4YygA`; @@ -79,6 +79,10 @@ export const SIDEBAR: Sidebar = { text: `KYB Workflow with External Integrations`, link: `simple-kyb-guide`, }, + { + text: `KYC Manual Review Workflow Guide`, + link: `kyc-manual-review-workflow-guide`, + }, { text: `Creating a KYC UI Flow`, link: `creating-a-kyc-flow-and-deploying-it`, diff --git a/websites/docs/src/pages/en/learn/kyc-manual-review-workflow-guide.md b/websites/docs/src/pages/en/learn/kyc-manual-review-workflow-guide.md new file mode 100644 index 0000000000..ed2898b85f --- /dev/null +++ b/websites/docs/src/pages/en/learn/kyc-manual-review-workflow-guide.md @@ -0,0 +1,70 @@ +--- +title: KYC Manual Review Workflow Guide +description: KYC Manual Review Workflow Guide +layout: ../../../layouts/MainLayout.astro +--- + +In this guide, we will go through the KYC Manual Review workflow step-by-step. This workflow involves collecting KYC data through a user interface, reviewing the collected data in the backoffice application, and then reflecting the decision made in the backoffice in the user interface. + +## Prerequisites + +Before we start, please make sure you have all the necessary dependencies installed. If you haven't done so already, you can find the installation instructions on our installation page. + +## Running the KYC Manual Review Workflow + +First, we need to start the backend services and the user interface for the KYC Manual Review workflow. You can do this by running the following command: + +```sh +pnpm kyc-manual-review-example +``` + +After running this command, your default browser should automatically open two tabs. One for the KYC UI, and another for the backoffice application. + +If the tabs didn't open automatically, please manually navigate to the links provided in the terminal output. + +## The KYC Data Collection Flow + +In the KYC UI tab, click on the "Start KYC" button to start the data collection process. This process involves filling in personal details, uploading required documents, and finally submitting the data for review. + +As you navigate through the data collection process, your progress will be automatically saved in the backend. This feature allows users to pick up where they left off, even if they continue the process on a different device. + +Here is a brief overview of the states involved in this process: + +- `welcome`: The initial state where the user starts the KYC process. +- `document_selection`: The user selects the documents to upload. +- `document_photo`: The user uploads photos of the selected documents. +- `document_review`: The user reviews the uploaded documents. +- `selfie`: The user takes and uploads a selfie. +- `selfie_review`: The user reviews the uploaded selfie. +- `final`: The final state indicating the completion of the data collection process. + +All these states are part of a [statechart](https://xstate.js.org/docs/guides/statecharts.html#statechart-example) defined in the client application, orchestrated by the headless SDK. + +The states `document_review`, `document_selection`, and `final` are persisted in the backend, allowing the user's progress to be saved and resumed later. The state `document_photo` is a submit state, meaning that when the user moves from this state to the next, the workflow backend is informed of the transition. + +## Reviewing KYC Data in the Backoffice + +After the user submits the KYC data, a new case will appear in the backoffice application. In the backoffice, you can review the submitted data, and decide whether to approve, reject, or ask the user to resubmit some documents. For example, you might ask the user to resubmit a document if the uploaded photo is blurry. + +To review a case: + +1. Go to the backoffice tab in your browser. +2. Click on the new case that appeared after the user submitted the KYC data. +3. Review the data and decide whether to approve, reject, or ask for resubmission. + +## Reflecting the Decision in the KYC UI + +After you make a decision in the backoffice, the workflow context will be updated accordingly. The updated context will then be reflected in the KYC UI. + +To see the result of the review: + +1. Go back to the KYC UI tab in your browser. +2. You will see the result of the review, whether the KYC data was approved, rejected, or needs to be resubmitted. + +Remember: this is an example workflow showcasing our system's capabilities. In real-world applications, the workflow can be + + much more complex, involving multiple review stages, automatic data checks, integration with external services, and much more. + +Enjoy exploring our system, and please feel free to reach out if you have any questions or run into any issues! + +--- From f89a176f55c4dfba8088892880d1e6a178d48e5b Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sat, 24 Jun 2023 01:40:58 +0300 Subject: [PATCH 071/123] update workflows dashboard name --- apps/workflows-dashboard/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json index e652cfb7ca..ef53512e7a 100644 --- a/apps/workflows-dashboard/package.json +++ b/apps/workflows-dashboard/package.json @@ -1,6 +1,6 @@ { - "name": "workflow-dashboard", - "private": true, + "name": "@ballerine/workflows-dashboard", + "private": false, "version": "0.0.0", "type": "module", "scripts": { @@ -61,4 +61,4 @@ "vite": "^4.3.9", "vite-plugin-checker": "^0.6.1" } -} +} \ No newline at end of file From fbf844de04471c8b4bad8df7e4475d1cd085cc20 Mon Sep 17 00:00:00 2001 From: Ilya Rudnev <cheskmr@gmail.com> Date: Sat, 24 Jun 2023 22:45:41 +0300 Subject: [PATCH 072/123] fix: fixed websocket-service path in init script (#594) --- scripts/init.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/init.js b/scripts/init.js index 830c1dd885..170c271170 100755 --- a/scripts/init.js +++ b/scripts/init.js @@ -5,7 +5,7 @@ const fs = require('fs'); const rootDir = path.join(__dirname, '..'); const workflowServiceRoot = path.join(rootDir, 'services/workflows-service'); -const workflowWebsocketServiceRoot = path.join(rootDir, 'services/workflows-websocket-service'); +const workflowWebsocketServiceRoot = path.join(rootDir, 'services/websocket-service'); const backofficeRoot = path.join(rootDir, 'apps/backoffice-v2'); const ensureEnvFileIsPresent = projectPath => { From 0a114e1421563d06d95f3faef3cc295ebd4a9c8e Mon Sep 17 00:00:00 2001 From: Ilya Rudnev <cheskmr@gmail.com> Date: Mon, 26 Jun 2023 12:43:57 +0300 Subject: [PATCH 073/123] Illia rudniev/feat/winston logger (#544) * feat: implemented logger service & logger adapter(winston) & added cls to share state * chore: cleaned code * refactor: refactored initialization of exception filters to work with DI & cleaned code * fix: fixed typo in app-logger * add local env * fix: added missing logger service to test cases * fix: fixed lint issues --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../atoms/AssignButton/AssignButton.tsx | 2 +- .../components/organisms/Modal/Modal.tsx | 2 +- .../pages/Entities/components/Cases/Cases.tsx | 4 +- .../Entity/components/Case/Case.Actions.tsx | 2 +- apps/workflows-dashboard/package.json | 2 +- .../src/components/atoms/Table/Table.tsx | 2 +- pnpm-lock.yaml | 3909 +++++++++-------- services/workflows-service/package.json | 2 + services/workflows-service/src/app.module.ts | 10 +- .../common/abstract-logger/abstract-logger.ts | 11 + .../common/app-logger/app-logger.module.ts | 10 + .../common/app-logger/app-logger.service.ts | 33 + .../common/filters/AllExceptions.filter.ts | 9 +- .../common/filters/HttpExceptions.filter.ts | 6 +- .../src/common/filters/filters.module.ts | 14 + .../PrismaClientValidation.filter.ts | 7 +- .../PrismaClientValidation.module.ts | 8 + .../interceptors/log-request.interceptor.ts | 3 +- .../middlewares/request-id.middleware.ts | 8 +- .../utils/winston-logger/winston-logger.ts | 40 + .../end-user.controller.external.intg.test.ts | 2 + .../events/document-changed-webhook-caller.ts | 4 +- services/workflows-service/src/main.ts | 13 +- .../src/serve-static-options.service.ts | 8 +- .../src/test/helpers/nest-app-helper.ts | 13 +- .../workflow.controller.internal.unit.test.ts | 11 + .../src/workflow/workflow.service.ts | 4 +- .../workflow/workflow.service.unit.test.ts | 12 + 28 files changed, 2284 insertions(+), 1867 deletions(-) create mode 100644 services/workflows-service/src/common/abstract-logger/abstract-logger.ts create mode 100644 services/workflows-service/src/common/app-logger/app-logger.module.ts create mode 100644 services/workflows-service/src/common/app-logger/app-logger.service.ts create mode 100644 services/workflows-service/src/common/filters/filters.module.ts create mode 100644 services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.module.ts create mode 100644 services/workflows-service/src/common/utils/winston-logger/winston-logger.ts diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index ce7d8cae80..fe73954468 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -56,7 +56,7 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ <DropdownMenuContent className={`min-w-[16rem]`} align={'start'}> {isUnassignEnabled ? ( <DropdownMenuItem - className={`text-cyan-950 border-b-2`} + className={`border-b-2 text-cyan-950`} onClick={() => onAssigneeSelect(null)} > Unassign diff --git a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx index 152336a065..073b5225d2 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx @@ -41,7 +41,7 @@ export const Modal: FunctionComponent<IModalProps> = ({ <Dialog.Content className={ctw(`modal-box w-full max-w-7xl`, className)} {...props}> <div className={`flex justify-end`}> <Dialog.Close - className={`btn-ghost btn-sm btn-square btn mb-4 focus:outline-primary`} + className={`btn-ghost btn-square btn-sm btn mb-4 focus:outline-primary`} aria-label={`Close`} > <XMarkSvg /> diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 3d03f74422..9f7aa0400e 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> + <div className="dropdown dropdown-bottom dropdown-hover z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} @@ -115,7 +115,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ > <div className={`input-group flex items-center`}> <button - className={`btn-ghost btn-sm btn-square btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} + className={`btn-ghost btn-square btn-sm btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} onClick={onSortDirToggle} ref={sortRef} > diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 88c66e4c3c..129ce91af5 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -112,7 +112,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ </h2> </div> {showResolutionButtons && ( - <div className={`pe-[3.35rem] flex items-center space-x-6`}> + <div className={`flex items-center space-x-6 pe-[3.35rem]`}> <Button className={ctw({ // loading: debouncedIsLoadingRejectEntity, diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json index ef53512e7a..ad6e5f81cf 100644 --- a/apps/workflows-dashboard/package.json +++ b/apps/workflows-dashboard/package.json @@ -61,4 +61,4 @@ "vite": "^4.3.9", "vite-plugin-checker": "^0.6.1" } -} \ No newline at end of file +} diff --git a/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx index a8d3be4418..4e94717143 100644 --- a/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx +++ b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>( ({ className, ...props }, ref) => ( - <table ref={ref} className={cn('caption-bottom w-full text-sm', className)} {...props} /> + <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} /> ), ); Table.displayName = 'Table'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d0a78a107..c2c5db80a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,10 +32,10 @@ importers: version: 2.26.1 '@commitlint/cli': specifier: ^17.5.0 - version: 17.5.0 + version: 17.6.0 '@commitlint/config-conventional': specifier: ^17.4.4 - version: 17.4.4 + version: 17.6.0 commitizen: specifier: ^4.3.0 version: 4.3.0 @@ -77,19 +77,19 @@ importers: version: 3.1.0(react-hook-form@7.43.9) '@lukemorales/query-key-factory': specifier: ^1.0.3 - version: 1.2.0(@tanstack/query-core@4.27.0) + version: 1.2.0(@tanstack/query-core@4.29.1) '@radix-ui/react-checkbox': specifier: ^1.0.1 version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.2 - version: 1.0.3(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.0.5 - version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-hover-card': specifier: ^1.0.2 - version: 1.0.5(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-label': specifier: ^2.0.1 version: 2.0.1(react-dom@18.2.0)(react@18.2.0) @@ -98,7 +98,7 @@ importers: version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^1.2.1 - version: 1.2.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + version: 1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-separator': specifier: ^1.0.2 version: 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -107,7 +107,7 @@ importers: version: 1.0.1(react@18.2.0) '@tanstack/react-query': specifier: ^4.19.1 - version: 4.28.0(react-dom@18.2.0)(react@18.2.0) + version: 4.29.1(react-dom@18.2.0)(react@18.2.0) class-variance-authority: specifier: ^0.6.0 version: 0.6.0(typescript@4.9.5) @@ -119,7 +119,7 @@ importers: version: 1.11.7 eslint-plugin-tailwindcss: specifier: ^3.8.0 - version: 3.10.1(tailwindcss@3.2.7) + version: 3.11.0(tailwindcss@3.3.1) face-api.js: specifier: ^0.22.2 version: 0.22.2 @@ -128,7 +128,7 @@ importers: version: 8.5.5(react-dom@18.2.0)(react@18.2.0) i18next: specifier: ^22.4.9 - version: 22.4.13 + version: 22.4.14 i18next-browser-languagedetector: specifier: ^7.0.1 version: 7.0.1 @@ -161,10 +161,10 @@ importers: version: 7.43.9(react@18.2.0) react-hot-toast: specifier: ^2.4.0 - version: 2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) + version: 2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) react-i18next: specifier: ^12.1.4 - version: 12.2.0(i18next@22.4.13)(react-dom@18.2.0)(react@18.2.0) + version: 12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0) react-image-crop: specifier: ^10.0.9 version: 10.0.9(react@18.2.0) @@ -179,13 +179,13 @@ importers: version: 3.0.8(react-dom@18.2.0)(react@18.2.0) tailwind-merge: specifier: ^1.10.0 - version: 1.10.0 + version: 1.12.0 tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.5(tailwindcss@3.2.7) + version: 1.0.5(tailwindcss@3.3.1) tesseract.js: specifier: ^4.0.1 - version: 4.0.2(eslint@8.22.0) + version: 4.0.3(eslint@8.22.0) vite-plugin-terminal: specifier: ^1.1.0 version: 1.1.0(vite@4.2.1) @@ -198,7 +198,7 @@ importers: version: 7.6.0 '@playwright/test': specifier: ^1.32.1 - version: 1.32.1 + version: 1.32.3 '@storybook/addon-a11y': specifier: ^6.5.16 version: 6.5.16(react-dom@18.2.0)(react@18.2.0) @@ -225,7 +225,7 @@ importers: version: 0.0.14-next.1 '@tanstack/react-query-devtools': specifier: 4.22.0 - version: 4.22.0(@tanstack/react-query@4.28.0)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0) '@testing-library/jest-dom': specifier: ^5.16.4 version: 5.16.5 @@ -237,13 +237,13 @@ importers: version: 1.9.3 '@types/node': specifier: ^18.11.13 - version: 18.15.10 + version: 18.15.11 '@types/qs': specifier: ^6.9.7 version: 6.9.7 '@types/react': specifier: ^18.0.14 - version: 18.0.29 + version: 18.0.35 '@types/react-dom': specifier: ^18.0.5 version: 18.0.11 @@ -252,13 +252,13 @@ importers: version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.30.0 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.30.0 - version: 5.56.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) '@vitejs/plugin-react-swc': specifier: ^3.0.1 - version: 3.2.0(vite@4.2.1) + version: 3.3.0(vite@4.2.1) autoprefixer: specifier: ^10.4.7 version: 10.4.14(postcss@8.4.21) @@ -273,7 +273,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -285,7 +285,7 @@ importers: version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0) postcss: specifier: ^8.4.14 version: 8.4.21 @@ -294,19 +294,19 @@ importers: version: 2.8.7 prettier-plugin-tailwindcss: specifier: ^0.2.1 - version: 0.2.5(prettier@2.8.7) + version: 0.2.7(prettier@2.8.7) storybook: specifier: ^7.0.0-rc.10 version: 7.0.0-rc.10 tailwindcss: specifier: ^3.2.4 - version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^4.0.4 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.29.8 version: 0.29.8 @@ -315,7 +315,7 @@ importers: dependencies: '@lukemorales/query-key-factory': specifier: ^1.0.3 - version: 1.2.0(@tanstack/query-core@4.27.0) + version: 1.2.0(@tanstack/query-core@4.29.1) '@radix-ui/react-dialog': specifier: ^1.0.2 version: 1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) @@ -333,10 +333,10 @@ importers: version: 1.0.1(react@18.2.0) '@tailwindcss/line-clamp': specifier: ^0.4.4 - version: 0.4.4(tailwindcss@3.2.7) + version: 0.4.4(tailwindcss@3.3.1) '@tanstack/react-query': specifier: ^4.28.0 - version: 4.28.0(react-dom@18.2.0)(react@18.2.0) + version: 4.29.1(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-table': specifier: ^8.9.2 version: 8.9.2(react-dom@18.2.0)(react@18.2.0) @@ -381,7 +381,7 @@ importers: version: 1.13.2 tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.5(tailwindcss@3.2.7) + version: 1.0.5(tailwindcss@3.3.1) use-query-params: specifier: ^2.2.1 version: 2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0) @@ -442,7 +442,7 @@ importers: version: 8.4.24 tailwindcss: specifier: ^3.2.7 - version: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + version: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) ts-jest: specifier: ^29.1.0 version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.0.2) @@ -466,7 +466,7 @@ importers: version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 - version: 1.1.5(svelte@3.57.0) + version: 1.1.5(svelte@3.58.0) '@felte/validator-zod': specifier: ^1.0.13 version: 1.0.13(zod@3.21.4) @@ -475,22 +475,22 @@ importers: version: 4.5.15 '@tanstack/svelte-query': specifier: ^4.27.0 - version: 4.27.0(svelte@3.57.0) + version: 4.29.1(svelte@3.58.0) '@xstate/svelte': specifier: ^2.0.1 - version: 2.0.1(svelte@3.57.0)(xstate@4.37.1) + version: 2.0.1(svelte@3.58.0)(xstate@4.37.1) clsx: specifier: ^1.2.1 version: 1.2.1 felte: specifier: ^1.2.7 - version: 1.2.7(svelte@3.57.0) + version: 1.2.7(svelte@3.58.0) tailwind-merge: specifier: ^1.8.1 - version: 1.10.0 + version: 1.12.0 vite-tsconfig-paths: specifier: ^4.0.7 - version: 4.0.7(typescript@4.9.5)(vite@4.2.1) + version: 4.2.0(typescript@4.9.5)(vite@4.2.1) xstate: specifier: 4.37.1 version: 4.37.1 @@ -503,7 +503,7 @@ importers: version: 1.3.7 '@sveltejs/vite-plugin-svelte': specifier: ^2.0.2 - version: 2.0.3(svelte@3.57.0)(vite@4.2.1) + version: 2.0.4(svelte@3.58.0)(vite@4.2.1) '@tsconfig/svelte': specifier: ^3.0.0 version: 3.0.0 @@ -521,16 +521,16 @@ importers: version: 2.8.8 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.8)(svelte@3.57.0) + version: 2.10.0(prettier@2.8.8)(svelte@3.58.0) svelte: specifier: ^3.55.1 - version: 3.57.0 + version: 3.58.0 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) + version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) tailwindcss: specifier: ^3.2.4 - version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -539,7 +539,7 @@ importers: version: 4.9.5 vite: specifier: ^4.1.0 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) packages/common: dependencies: @@ -564,7 +564,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.0.1(rollup@2.70.2) + version: 24.1.0(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -582,13 +582,13 @@ importers: version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.10 + version: 18.15.11 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -600,22 +600,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.36.0) + version: 6.15.0(eslint@8.38.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.36.0) + version: 3.2.0(eslint@8.38.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -645,13 +645,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -679,7 +679,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.0.1(rollup@2.70.2) + version: 24.1.0(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -697,10 +697,10 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -712,22 +712,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.36.0) + version: 6.15.0(eslint@8.38.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.36.0) + version: 3.2.0(eslint@8.38.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -751,13 +751,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -794,7 +794,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.0.1(rollup@2.70.2) + version: 24.1.0(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -806,7 +806,7 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.0(rollup@2.70.2) + version: 0.4.1(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 @@ -818,13 +818,13 @@ importers: version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.10 + version: 18.15.11 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -836,22 +836,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.36.0) + version: 6.15.0(eslint@8.38.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.36.0) + version: 3.2.0(eslint@8.38.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -887,13 +887,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -905,7 +905,7 @@ importers: version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 - version: 0.8.0 + version: 0.8.2 compressorjs: specifier: ^1.1.1 version: 1.2.1 @@ -921,19 +921,19 @@ importers: devDependencies: '@babel/core': specifier: ^7.18.5 - version: 7.21.3 + version: 7.21.4 '@playwright/test': specifier: ^1.27.1 - version: 1.32.1 + version: 1.32.3 '@sveltejs/vite-plugin-svelte': specifier: 1.0.8 - version: 1.0.8(svelte@3.57.0)(vite@4.0.3) + version: 1.0.8(svelte@3.58.0)(vite@4.0.3) '@testing-library/jest-dom': specifier: ^5.16.5 version: 5.16.5 '@testing-library/svelte': specifier: ^3.2.2 - version: 3.2.2(svelte@3.57.0) + version: 3.2.2(svelte@3.58.0) '@tsconfig/svelte': specifier: ^2.0.1 version: 2.0.1 @@ -945,16 +945,16 @@ importers: version: 4.6.7 '@types/node': specifier: ^18.11.9 - version: 18.15.10 + version: 18.15.11 '@types/testing-library__jest-dom': specifier: ^5.14.5 version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.41.0 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.41.0 - version: 5.56.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) editorconfig: specifier: ^1.0.1 version: 1.0.2 @@ -969,10 +969,10 @@ importers: version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) eslint-plugin-svelte3: specifier: ^4.0.0 - version: 4.0.0(eslint@8.22.0)(svelte@3.57.0) + version: 4.0.0(eslint@8.22.0)(svelte@3.58.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0) jsdom: specifier: ^20.0.2 version: 20.0.3 @@ -984,34 +984,34 @@ importers: version: 2.8.7 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.7)(svelte@3.57.0) + version: 2.10.0(prettier@2.8.7)(svelte@3.58.0) rollup-plugin-visualizer: specifier: ^5.8.3 version: 5.9.0 svelte: specifier: ^3.39.0 - version: 3.57.0 + version: 3.58.0 svelte-check: specifier: ^2.2.7 - version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) + version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) svelte-preprocess: specifier: ^4.9.8 - version: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) + version: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) typedoc: specifier: ^0.23.23 version: 0.23.28(typescript@4.9.5) typedoc-plugin-markdown: specifier: ^3.14.0 - version: 3.14.0(typedoc@0.23.28) + version: 3.15.1(typedoc@0.23.28) typescript: specifier: ^4.5.4 version: 4.9.5 vite: specifier: 4.0.3 - version: 4.0.3(@types/node@18.15.10) + version: 4.0.3(@types/node@18.15.11) vite-plugin-dts: specifier: ^1.6.6 - version: 1.7.3(@types/node@18.15.10)(vite@4.0.3) + version: 1.7.3(@types/node@18.15.11)(vite@4.0.3) vite-plugin-html: specifier: ^3.2.0 version: 3.2.0(vite@4.0.3) @@ -1045,7 +1045,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.0.1(rollup@2.70.2) + version: 24.1.0(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -1057,7 +1057,7 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.0(rollup@2.70.2) + version: 0.4.1(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 @@ -1066,13 +1066,13 @@ importers: version: 11.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.10 + version: 18.15.11 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1087,22 +1087,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.36.0) + version: 6.15.0(eslint@8.38.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.36.0) + version: 3.2.0(eslint@8.38.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -1138,13 +1138,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1175,7 +1175,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.0.1(rollup@2.70.2) + version: 24.1.0(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -1196,10 +1196,10 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1211,22 +1211,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.36.0) + version: 6.15.0(eslint@8.38.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.36.0) + version: 3.2.0(eslint@8.38.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -1250,13 +1250,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@18.15.11) vitest: specifier: ^0.28.5 version: 0.28.5(jsdom@20.0.3) @@ -1265,7 +1265,7 @@ importers: dependencies: '@nestjs/common': specifier: ^9.3.12 - version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) @@ -1302,7 +1302,7 @@ importers: version: 9.3.0 '@nestjs/schematics': specifier: ^9.0.0 - version: 9.0.4(chokidar@3.5.3)(typescript@4.9.5) + version: 9.1.0(chokidar@3.5.3)(typescript@4.9.5) '@nestjs/testing': specifier: ^9.3.12 version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) @@ -1314,31 +1314,31 @@ importers: version: 26.0.24 '@types/node': specifier: ^18.14.6 - version: 18.15.10 + version: 18.15.11 '@types/supertest': specifier: 2.0.11 version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) eslint: specifier: ^8.35.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.36.0) + version: 8.8.0(eslint@8.38.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) jest: specifier: 29.5.0 - version: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) prettier: specifier: ^2.8.4 version: 2.8.8 @@ -1353,7 +1353,7 @@ importers: version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -1368,7 +1368,7 @@ importers: version: 3.325.0 '@aws-sdk/lib-storage': specifier: 3.325.0 - version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) + version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1380,40 +1380,40 @@ importers: version: 7.6.0 '@nestjs/axios': specifier: ^2.0.0 - version: 2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/common': specifier: ^9.3.12 - version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/config': specifier: 2.3.1 - version: 2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/devtools-integration': specifier: ^0.1.4 - version: 0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) + version: 0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) '@nestjs/event-emitter': specifier: ^1.4.1 - version: 1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) + version: 1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) '@nestjs/graphql': specifier: ^10.0.0 - version: 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + version: 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) '@nestjs/jwt': specifier: 10.0.3 - version: 10.0.3(@nestjs/common@9.3.12) + version: 10.0.3(@nestjs/common@9.4.0) '@nestjs/passport': specifier: 9.0.3 - version: 9.0.3(@nestjs/common@9.3.12)(passport@0.6.0) + version: 9.0.3(@nestjs/common@9.4.0)(passport@0.6.0) '@nestjs/platform-express': specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) '@nestjs/serve-static': specifier: 3.0.1 - version: 3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2) + version: 3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2) '@nestjs/testing': specifier: ^9.3.12 - version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) + version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0) '@prisma/client': specifier: ^4.13.0 version: 4.13.0(prisma@4.13.0) @@ -1464,19 +1464,22 @@ importers: version: 4.17.1 helmet: specifier: ^6.0.1 - version: 6.0.1 + version: 6.1.5 lodash: specifier: ^4.17.21 version: 4.17.21 multer-s3: specifier: 3.0.1 - version: 3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) + version: 3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) nest-access-control: specifier: 2.2.0 version: 2.2.0(@nestjs/graphql@10.0.0) + nestjs-cls: + specifier: ^3.5.0 + version: 3.5.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) nestjs-prisma: specifier: 0.20.0 - version: 0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0) + version: 0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0) passport: specifier: 0.6.0 version: 0.6.0 @@ -1501,6 +1504,9 @@ importers: tmp: specifier: ^0.2.1 version: 0.2.1 + winston: + specifier: ^3.9.0 + version: 3.9.0 zod: specifier: ^3.21.4 version: 3.21.4 @@ -1510,7 +1516,7 @@ importers: version: 9.3.0 '@nestjs/swagger': specifier: 6.2.1 - version: 6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + version: 6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) '@types/bcrypt': specifier: 5.0.0 version: 5.0.0 @@ -1525,7 +1531,7 @@ importers: version: 26.0.24 '@types/lodash': specifier: ^4.14.191 - version: 4.14.191 + version: 4.14.192 '@types/multer': specifier: ^1.4.7 version: 1.4.7 @@ -1534,7 +1540,7 @@ importers: version: 3.0.0 '@types/node': specifier: ^18.14.6 - version: 18.15.10 + version: 18.15.11 '@types/normalize-path': specifier: 3.0.0 version: 3.0.0 @@ -1555,28 +1561,28 @@ importers: version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) dotenv: specifier: ^16.0.3 version: 16.0.3 eslint: specifier: ^8.35.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.36.0) + version: 8.8.0(eslint@8.38.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) + version: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) jest: specifier: 27.0.6 version: 27.0.6(ts-node@10.9.1) @@ -1603,7 +1609,7 @@ importers: version: 27.0.3(jest@27.0.6)(typescript@4.9.5) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) type-fest: specifier: 0.11.0 version: 0.11.0 @@ -1615,19 +1621,19 @@ importers: dependencies: '@algolia/client-search': specifier: ^4.13.1 - version: 4.16.0 + version: 4.17.0 '@astrojs/mdx': specifier: 0.19.7 version: 0.19.7(astro@2.6.6) '@astrojs/react': specifier: ^2.2.1 - version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) + version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.7.3)(vite@3.2.5) '@astrojs/tailwind': specifier: ^4.0.0 - version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) + version: 4.0.0(astro@2.6.6)(tailwindcss@3.3.1)(ts-node@10.9.1) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1636,19 +1642,19 @@ importers: version: 3.3.3 '@docsearch/react': specifier: ^3.1.0 - version: 3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) + version: 3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) '@types/node': specifier: ^18.0.0 - version: 18.15.10 + version: 18.15.11 '@types/react': specifier: ^17.0.45 - version: 17.0.53 + version: 17.0.58 '@types/react-dom': specifier: ^18.0.0 version: 18.0.11 astro: specifier: ^2.6.6 - version: 2.6.6(@types/node@18.15.10) + version: 2.6.6(@types/node@18.15.11) react: specifier: ^18.2.0 version: 18.2.0 @@ -1660,10 +1666,10 @@ importers: version: 0.14.2 solid-js: specifier: ^1.4.3 - version: 1.6.15 + version: 1.7.3 vite: specifier: ~3.2.5 - version: 3.2.5(@types/node@18.15.10) + version: 3.2.5(@types/node@18.15.11) devDependencies: '@types/html-escaper': specifier: ^3.0.0 @@ -1673,19 +1679,19 @@ importers: version: 1.0.2 eslint: specifier: ^8.28.0 - version: 8.36.0 + version: 8.38.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.36.0) + version: 8.8.0(eslint@8.38.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 - version: 0.21.1(eslint@8.36.0) + version: 0.21.1(eslint@8.38.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.38.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -1708,117 +1714,117 @@ packages: '@algolia/autocomplete-shared': 1.7.4 dev: false - /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0): + /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0): resolution: {integrity: sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: '@algolia/autocomplete-shared': 1.7.4 - '@algolia/client-search': 4.16.0 - algoliasearch: 4.16.0 + '@algolia/client-search': 4.17.0 + algoliasearch: 4.17.0 dev: false /@algolia/autocomplete-shared@1.7.4: resolution: {integrity: sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==} dev: false - /@algolia/cache-browser-local-storage@4.16.0: - resolution: {integrity: sha512-jVrk0YB3tjOhD5/lhBtYCVCeLjZmVpf2kdi4puApofytf/R0scjWz0GdozlW4HhU+Prxmt/c9ge4QFjtv5OAzQ==} + /@algolia/cache-browser-local-storage@4.17.0: + resolution: {integrity: sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==} dependencies: - '@algolia/cache-common': 4.16.0 + '@algolia/cache-common': 4.17.0 dev: false - /@algolia/cache-common@4.16.0: - resolution: {integrity: sha512-4iHjkSYQYw46pITrNQgXXhvUmcekI8INz1m+SzmqLX8jexSSy4Ky4zfGhZzhhhLHXUP3+x/PK/c0qPjxEvRwKQ==} + /@algolia/cache-common@4.17.0: + resolution: {integrity: sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==} dev: false - /@algolia/cache-in-memory@4.16.0: - resolution: {integrity: sha512-p7RYykvA6Ip6QENxrh99nOD77otVh1sJRivcgcVpnjoZb5sIN3t33eUY1DpB9QSBizcrW+qk19rNkdnZ43a+PQ==} + /@algolia/cache-in-memory@4.17.0: + resolution: {integrity: sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==} dependencies: - '@algolia/cache-common': 4.16.0 + '@algolia/cache-common': 4.17.0 dev: false - /@algolia/client-account@4.16.0: - resolution: {integrity: sha512-eydcfpdIyuWoKgUSz5iZ/L0wE/Wl7958kACkvTHLDNXvK/b8Z1zypoJavh6/km1ZNQmFpeYS2jrmq0kUSFn02w==} + /@algolia/client-account@4.17.0: + resolution: {integrity: sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.17.0 + '@algolia/client-search': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false - /@algolia/client-analytics@4.16.0: - resolution: {integrity: sha512-cONWXH3BfilgdlCofUm492bJRWtpBLVW/hsUlfoFtiX1u05xoBP7qeiDwh9RR+4pSLHLodYkHAf5U4honQ55Qg==} + /@algolia/client-analytics@4.17.0: + resolution: {integrity: sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.17.0 + '@algolia/client-search': 4.17.0 + '@algolia/requester-common': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false - /@algolia/client-common@4.16.0: - resolution: {integrity: sha512-QVdR4019ukBH6f5lFr27W60trRxQF1SfS1qo0IP6gjsKhXhUVJuHxOCA6ArF87jrNkeuHEoRoDU+GlvaecNo8g==} + /@algolia/client-common@4.17.0: + resolution: {integrity: sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==} dependencies: - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/requester-common': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false - /@algolia/client-personalization@4.16.0: - resolution: {integrity: sha512-irtLafssDGPuhYqIwxqOxiWlVYvrsBD+EMA1P9VJtkKi3vSNBxiWeQ0f0Tn53cUNdSRNEssfoEH84JL97SV2SQ==} + /@algolia/client-personalization@4.17.0: + resolution: {integrity: sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.17.0 + '@algolia/requester-common': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false - /@algolia/client-search@4.16.0: - resolution: {integrity: sha512-xsfrAE1jO/JDh1wFrRz+alVyW+aA6qnkzmbWWWZWEgVF3EaFqzIf9r1l/aDtDdBtNTNhX9H3Lg31+BRtd5izQA==} + /@algolia/client-search@4.17.0: + resolution: {integrity: sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.17.0 + '@algolia/requester-common': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false - /@algolia/logger-common@4.16.0: - resolution: {integrity: sha512-U9H8uCzSDuePJmbnjjTX21aPDRU6x74Tdq3dJmdYu2+pISx02UeBJm4kSgc9RW5jcR5j35G9gnjHY9Q3ngWbyQ==} + /@algolia/logger-common@4.17.0: + resolution: {integrity: sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==} dev: false - /@algolia/logger-console@4.16.0: - resolution: {integrity: sha512-+qymusiM+lPZKrkf0tDjCQA158eEJO2IU+Nr/sJ9TFyI/xkFPjNPzw/Qbc8Iy/xcOXGlc6eMgmyjtVQqAWq6UA==} + /@algolia/logger-console@4.17.0: + resolution: {integrity: sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==} dependencies: - '@algolia/logger-common': 4.16.0 + '@algolia/logger-common': 4.17.0 dev: false - /@algolia/requester-browser-xhr@4.16.0: - resolution: {integrity: sha512-gK+kvs6LHl/PaOJfDuwjkopNbG1djzFLsVBklGBsSU6h6VjFkxIpo6Qq80IK14p9cplYZfhfaL12va6Q9p3KVQ==} + /@algolia/requester-browser-xhr@4.17.0: + resolution: {integrity: sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==} dependencies: - '@algolia/requester-common': 4.16.0 + '@algolia/requester-common': 4.17.0 dev: false - /@algolia/requester-common@4.16.0: - resolution: {integrity: sha512-3Zmcs/iMubcm4zqZ3vZG6Zum8t+hMWxGMzo0/uY2BD8o9q5vMxIYI0c4ocdgQjkXcix189WtZNkgjSOBzSbkdw==} + /@algolia/requester-common@4.17.0: + resolution: {integrity: sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==} dev: false - /@algolia/requester-node-http@4.16.0: - resolution: {integrity: sha512-L8JxM2VwZzh8LJ1Zb8TFS6G3icYsCKZsdWW+ahcEs1rGWmyk9SybsOe1MLnjonGBaqPWJkn9NjS7mRdjEmBtKA==} + /@algolia/requester-node-http@4.17.0: + resolution: {integrity: sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==} dependencies: - '@algolia/requester-common': 4.16.0 + '@algolia/requester-common': 4.17.0 dev: false - /@algolia/transporter@4.16.0: - resolution: {integrity: sha512-H9BVB2EAjT65w7XGBNf5drpsW39x2aSZ942j4boSAAJPPlLmjtj5IpAP7UAtsV8g9Beslonh0bLa1XGmE/P0BA==} + /@algolia/transporter@4.17.0: + resolution: {integrity: sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==} dependencies: - '@algolia/cache-common': 4.16.0 - '@algolia/logger-common': 4.16.0 - '@algolia/requester-common': 4.16.0 + '@algolia/cache-common': 4.17.0 + '@algolia/logger-common': 4.17.0 + '@algolia/requester-common': 4.17.0 dev: false - /@ampproject/remapping@2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 /@angular-devkit/core@13.3.11: resolution: {integrity: sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==} @@ -1837,23 +1843,6 @@ packages: source-map: 0.7.3 dev: false - /@angular-devkit/core@15.0.4(chokidar@3.5.3): - resolution: {integrity: sha512-4ITpRAevd652SxB+qNesIQ9qfbm7wT5UBU5kJOPPwGL77I21g8CQpkmV1n5VSacPvC9Zbz90feOWexf7w7JzcA==} - engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^3.5.2 - peerDependenciesMeta: - chokidar: - optional: true - dependencies: - ajv: 8.11.0 - ajv-formats: 2.1.1(ajv@8.11.0) - chokidar: 3.5.3 - jsonc-parser: 3.2.0 - rxjs: 6.6.7 - source-map: 0.7.4 - dev: true - /@angular-devkit/core@15.2.4(chokidar@3.5.3): resolution: {integrity: sha512-yl+0j1bMwJLKShsyCXw77tbJG8Sd21+itisPLL2MgEpLNAO252kr9zG4TLlFRJyKVftm2l1h78KjqvM5nbOXNg==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1899,19 +1888,6 @@ packages: - chokidar dev: false - /@angular-devkit/schematics@15.0.4(chokidar@3.5.3): - resolution: {integrity: sha512-/gXiLFS0+xFdx6wPoBpe/c6/K9I5edMpaASqPf4XheKtrsSvL+qTlIi3nsbfItzOiDXbaBmlbxGfkMHz/yg0Ig==} - engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 15.0.4(chokidar@3.5.3) - jsonc-parser: 3.2.0 - magic-string: 0.26.7 - ora: 5.4.1 - rxjs: 6.6.7 - transitivePeerDependencies: - - chokidar - dev: true - /@angular-devkit/schematics@15.2.4(chokidar@3.5.3): resolution: {integrity: sha512-/W7/vvn59PAVLzhcvD4/N/E8RDhub8ny1A7I96LTRjC5o+yvVV16YJ4YJzolrRrIEN01KmLVQJ9A58VCaweMgw==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1950,7 +1926,7 @@ packages: hasBin: true dependencies: '@astrojs/compiler': 1.5.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@vscode/emmet-helper': 2.8.6 events: 3.3.0 prettier: 2.8.8 @@ -1970,7 +1946,7 @@ packages: astro: ^2.5.0 dependencies: '@astrojs/prism': 2.1.2 - astro: 2.6.6(@types/node@18.15.10) + astro: 2.6.6(@types/node@18.15.11) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 rehype-raw: 6.1.1 @@ -1995,7 +1971,7 @@ packages: '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 acorn: 8.8.2 - es-module-lexer: 1.2.0 + es-module-lexer: 1.2.1 estree-util-visit: 1.2.1 github-slugger: 1.5.0 gray-matter: 4.0.3 @@ -2021,7 +1997,7 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): + /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nq5Zr8iWdwjSp5fh1NReaCplwsnL4w5PXAY5XWu1jE/frxEfF/ycGHrrhwWW0uJHX9G+kUtmQLR0GBhlR4FmAw==} engines: {node: '>=16.12.0'} peerDependencies: @@ -2030,9 +2006,9 @@ packages: react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@types/react': 17.0.53 + '@babel/core': 7.21.4 + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.4) + '@types/react': 17.0.58 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2040,31 +2016,31 @@ packages: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.7.3)(vite@3.2.5): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: solid-js: ^1.4.3 dependencies: - babel-preset-solid: 1.6.13(@babel/core@7.22.5) - solid-js: 1.6.15 + babel-preset-solid: 1.7.3(@babel/core@7.22.5) + solid-js: 1.7.3 vitefu: 0.2.4(vite@3.2.5) transitivePeerDependencies: - '@babel/core' - vite dev: false - /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1): + /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.3.1)(ts-node@10.9.1): resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} peerDependencies: astro: ^2.6.5 tailwindcss: ^3.0.24 dependencies: - astro: 2.6.6(@types/node@18.15.10) + astro: 2.6.6(@types/node@18.15.11) autoprefixer: 10.4.14(postcss@8.4.24) postcss: 8.4.24 postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: false @@ -2166,11 +2142,11 @@ packages: '@aws-sdk/types': 3.310.0 tslib: 2.5.2 - /@aws-sdk/abort-controller@3.347.0: - resolution: {integrity: sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==} + /@aws-sdk/abort-controller@3.329.0: + resolution: {integrity: sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.347.0 + '@aws-sdk/types': 3.329.0 tslib: 2.5.2 dev: false @@ -2536,14 +2512,14 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): + /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-QobsFsDDoOs26nLmxo8nTTCwjJmO4jmElqU4R2r2mlf4g3ClSm5+W79jbqbfDKlEGbN4TtDr+FzWYiULOl/TIg==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/abort-controller': ^3.0.0 '@aws-sdk/client-s3': ^3.0.0 dependencies: - '@aws-sdk/abort-controller': 3.347.0 + '@aws-sdk/abort-controller': 3.329.0 '@aws-sdk/client-s3': 3.325.0 '@aws-sdk/middleware-endpoint': 3.325.0 '@aws-sdk/smithy-client': 3.325.0 @@ -2818,8 +2794,8 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/types@3.347.0: - resolution: {integrity: sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==} + /@aws-sdk/types@3.329.0: + resolution: {integrity: sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.2 @@ -2992,12 +2968,11 @@ packages: dependencies: tslib: 2.5.2 - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame@7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - dev: true /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} @@ -3005,10 +2980,9 @@ packages: dependencies: '@babel/highlight': 7.22.5 - /@babel/compat-data@7.21.0: - resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} + /@babel/compat-data@7.21.4: + resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} - dev: true /@babel/compat-data@7.22.5: resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} @@ -3018,16 +2992,16 @@ packages: resolution: {integrity: sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 + '@babel/parser': 7.21.4 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -3037,20 +3011,20 @@ packages: - supports-color dev: true - /@babel/core@7.21.3: - resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==} + /@babel/core@7.21.4: + resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 + '@babel/parser': 7.21.4 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -3058,13 +3032,12 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true /@babel/core@7.22.5: resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 + '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) @@ -3082,13 +3055,13 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.21.3: - resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} + /@babel/generator@7.21.4: + resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 /@babel/generator@7.22.5: @@ -3096,8 +3069,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.18.6: @@ -3114,13 +3087,13 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.17.9): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets@7.21.4(@babel/core@7.17.9): + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 @@ -3128,27 +3101,26 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.21.3 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 - dev: true - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.5): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.22.5 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 @@ -3170,14 +3142,14 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.3): + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.4): resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-validator-option': 7.22.5 browserslist: 4.21.5 lru-cache: 5.1.1 @@ -3197,65 +3169,65 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.17.9): + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3): - resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.22.5): - resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.17.9): - resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.17.9): + resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3265,19 +3237,19 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.21.3): - resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): + resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.3.2 dev: true - /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.22.5): - resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3297,23 +3269,23 @@ packages: '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3): + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3329,7 +3301,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3338,7 +3310,6 @@ packages: /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} @@ -3390,7 +3361,14 @@ packages: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 + dev: false + + /@babel/helper-module-imports@7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} @@ -3403,16 +3381,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-module-transforms@7.22.5: resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} @@ -3448,22 +3425,22 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3): + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3478,7 +3455,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3489,7 +3466,7 @@ packages: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.22.5 @@ -3504,7 +3481,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} @@ -3524,7 +3500,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: true /@babel/helper-split-export-declaration@7.22.5: resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} @@ -3551,7 +3526,6 @@ packages: /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.22.5: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} @@ -3574,11 +3548,10 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color - dev: true /@babel/helpers@7.22.5: resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} @@ -3597,7 +3570,6 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} @@ -3607,12 +3579,12 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.21.3: - resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} + /@babel/parser@7.21.4: + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.21.4 /@babel/parser@7.22.5: resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} @@ -3631,13 +3603,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3663,16 +3635,16 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.3): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.22.5): @@ -3702,17 +3674,17 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true @@ -3739,20 +3711,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -3765,7 +3737,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -3778,23 +3750,23 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.3): + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true @@ -3806,7 +3778,7 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: @@ -3824,15 +3796,15 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.22.5): @@ -3857,15 +3829,15 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.3): + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.5): @@ -3890,15 +3862,15 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.22.5): @@ -3923,15 +3895,15 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.3): + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): @@ -3956,15 +3928,15 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): @@ -3989,15 +3961,15 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): @@ -4017,26 +3989,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3): + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): @@ -4045,9 +4017,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) @@ -4064,15 +4036,15 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.5): @@ -4098,16 +4070,16 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.3): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) dev: true /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): @@ -4129,20 +4101,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -4155,7 +4127,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -4169,24 +4141,24 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.3): + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true @@ -4199,7 +4171,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: @@ -4213,18 +4185,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3): + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4235,7 +4207,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4248,12 +4220,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4284,12 +4256,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4312,13 +4284,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4341,12 +4313,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4368,12 +4340,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4386,8 +4358,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): - resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4396,13 +4368,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3): + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4434,12 +4406,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4452,8 +4424,18 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.5): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4470,12 +4452,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4497,12 +4479,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4524,12 +4506,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4551,12 +4533,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4578,12 +4560,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4605,12 +4587,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4633,13 +4615,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4663,13 +4645,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4683,8 +4665,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.17.9): - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.17.9): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4693,8 +4675,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.22.5): - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4713,13 +4695,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3): + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4740,23 +4722,23 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.3): + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.18.6 + '@babel/core': 7.21.4 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true @@ -4768,7 +4750,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) transitivePeerDependencies: @@ -4785,13 +4767,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4815,13 +4797,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4843,7 +4825,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -4855,15 +4837,15 @@ packages: - supports-color dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 @@ -4906,13 +4888,13 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3): + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 dev: true @@ -4938,13 +4920,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3): + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4965,18 +4947,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4987,7 +4969,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5001,13 +4983,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5032,13 +5014,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5062,7 +5044,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) dev: true /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.17.9): @@ -5075,13 +5057,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3): + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5102,19 +5084,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5126,7 +5108,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.22.5) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5141,13 +5123,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5171,13 +5153,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5204,13 +5186,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.3): + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: @@ -5244,13 +5226,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3): + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 @@ -5287,13 +5269,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.3): + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 @@ -5330,13 +5312,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: @@ -5363,18 +5345,18 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3): + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5385,7 +5367,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5399,13 +5381,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5432,13 +5414,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: @@ -5468,13 +5450,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3): + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5498,13 +5480,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5538,6 +5520,20 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.4): + resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) + '@babel/types': 7.22.5 + dev: false + /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} engines: {node: '>=6.9.0'} @@ -5548,7 +5544,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) '@babel/types': 7.22.5 /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): @@ -5562,13 +5558,13 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3): + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 dev: true @@ -5594,13 +5590,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5624,13 +5620,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5655,13 +5651,13 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.3): + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5687,13 +5683,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5717,13 +5713,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5747,13 +5743,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3): + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5775,9 +5771,9 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.17.9) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true @@ -5790,9 +5786,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true @@ -5807,13 +5803,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3): + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5834,18 +5830,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3): + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5856,7 +5852,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5866,9 +5862,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.17.9) @@ -5935,104 +5931,104 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.17.9) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.17.9) '@babel/preset-modules': 0.1.5(@babel/core@7.17.9) - '@babel/types': 7.21.3 + '@babel/types': 7.21.4 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.9) babel-plugin-polyfill-corejs3: 0.5.3(@babel/core@7.17.9) babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.9) - core-js-compat: 3.29.1 + core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-env@7.20.2(@babel/core@7.21.3): + /@babel/preset-env@7.20.2(@babel/core@7.21.4): resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) - core-js-compat: 3.29.1 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) + core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-env@7.20.2(@babel/core@7.22.5): - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + /@babel/preset-env@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6111,14 +6107,14 @@ packages: babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) - core-js-compat: 3.29.1 + core-js-compat: 3.30.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-flow@7.18.6(@babel/core@7.22.5): - resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} + /@babel/preset-flow@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6138,20 +6134,20 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/types': 7.21.3 + '@babel/types': 7.21.4 esutils: 2.0.3 dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.21.3): + /@babel/preset-modules@0.1.5(@babel/core@7.21.4): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) + '@babel/types': 7.21.4 esutils: 2.0.3 dev: true @@ -6164,7 +6160,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) - '@babel/types': 7.21.3 + '@babel/types': 7.21.4 esutils: 2.0.3 dev: true @@ -6224,10 +6220,9 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 - dev: true + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} @@ -6237,8 +6232,8 @@ packages: '@babel/parser': 7.22.5 '@babel/types': 7.22.5 - /@babel/traverse@7.21.3: - resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} + /@babel/traverse@7.21.4: + resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 @@ -6271,8 +6266,8 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.21.3: - resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} + /@babel/types@7.21.4: + resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -6522,18 +6517,16 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} requiresBuild: true - dev: true - optional: true - /@commitlint/cli@17.5.0: - resolution: {integrity: sha512-yNW3+M7UM1ioK28LKTrryIVB5qGpXlEv8+rJQiWPMZNayy9/1XR5+lL8qBTNlgopYtZWWnIm5RETcAN29ZTL/A==} + /@commitlint/cli@17.6.0: + resolution: {integrity: sha512-JaZeZ1p6kfkSiZlDoQjK09AuiI9zYQMiIUJzTOM8qNRHFOXOPmiTM56nI67yzeUSNTFu6M/DRqjmdjtA5q3hEg==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.4.4 + '@commitlint/lint': 17.6.0 '@commitlint/load': 17.5.0 - '@commitlint/read': 17.4.4 + '@commitlint/read': 17.5.1 '@commitlint/types': 17.4.4 execa: 5.1.1 lodash.isfunction: 3.0.9 @@ -6545,8 +6538,8 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@17.4.4: - resolution: {integrity: sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==} + /@commitlint/config-conventional@17.6.0: + resolution: {integrity: sha512-2Y9M7MN942bTK5h70fJGknhXA02+OtWCkKeIzTSwsdwz1V7y6bxYv24x052E9XHKtZHJfvM3iLuTOsjRvLqWtA==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 @@ -6593,13 +6586,13 @@ packages: semver: 7.3.8 dev: true - /@commitlint/lint@17.4.4: - resolution: {integrity: sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw==} + /@commitlint/lint@17.6.0: + resolution: {integrity: sha512-6cEXxpxZd7fbtYMxeosOum/Nnwu3VdSuZcrFSqP9lWNsrHRv4ijVsnLeomvo6WHPchGOeEWAazAI7Q6Ap22fJw==} engines: {node: '>=v14'} dependencies: '@commitlint/is-ignored': 17.4.4 '@commitlint/parse': 17.4.4 - '@commitlint/rules': 17.4.4 + '@commitlint/rules': 17.6.0 '@commitlint/types': 17.4.4 dev: true @@ -6611,15 +6604,15 @@ packages: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.10)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' @@ -6640,8 +6633,8 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read@17.4.4: - resolution: {integrity: sha512-B2TvUMJKK+Svzs6eji23WXsRJ8PAD+orI44lVuVNsm5zmI7O8RSGJMvdEZEikiA4Vohfb+HevaPoWZ7PiFZ3zA==} + /@commitlint/read@17.5.1: + resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} engines: {node: '>=v14'} dependencies: '@commitlint/top-level': 17.4.0 @@ -6663,8 +6656,8 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.4.4: - resolution: {integrity: sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ==} + /@commitlint/rules@17.6.0: + resolution: {integrity: sha512-Ka7AsRFvkKMYYE7itgo7hddRGCiV+0BgbTIAq4PWmnkHAECxYpdqMVzW5jaATmXZfwfRRTB57e7KZWj6EPmK1A==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.4.4 @@ -6699,6 +6692,14 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 + /@dabh/diagnostics@2.0.3: + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + dev: false + /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -6708,7 +6709,7 @@ packages: resolution: {integrity: sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==} dev: false - /@docsearch/react@3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): + /@docsearch/react@3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -6723,30 +6724,30 @@ packages: optional: true dependencies: '@algolia/autocomplete-core': 1.7.4 - '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0) + '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0) '@docsearch/css': 3.3.3 - '@types/react': 17.0.53 - algoliasearch: 4.16.0 + '@types/react': 17.0.58 + algoliasearch: 4.17.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@algolia/client-search' dev: false - /@emmetio/abbreviation@2.2.3: - resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==} + /@emmetio/abbreviation@2.3.1: + resolution: {integrity: sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g==} dependencies: - '@emmetio/scanner': 1.0.0 + '@emmetio/scanner': 1.0.2 dev: false - /@emmetio/css-abbreviation@2.1.4: - resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==} + /@emmetio/css-abbreviation@2.1.6: + resolution: {integrity: sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw==} dependencies: - '@emmetio/scanner': 1.0.0 + '@emmetio/scanner': 1.0.2 dev: false - /@emmetio/scanner@1.0.0: - resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} + /@emmetio/scanner@1.0.2: + resolution: {integrity: sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w==} dev: false /@emotion/is-prop-valid@0.8.8: @@ -6779,8 +6780,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.17.14: - resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} + /@esbuild/android-arm64@0.17.16: + resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -6812,8 +6813,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.14: - resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==} + /@esbuild/android-arm@0.17.16: + resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -6837,8 +6838,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.14: - resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==} + /@esbuild/android-x64@0.17.16: + resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -6862,8 +6863,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.14: - resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==} + /@esbuild/darwin-arm64@0.17.16: + resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -6887,8 +6888,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.14: - resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==} + /@esbuild/darwin-x64@0.17.16: + resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -6912,8 +6913,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.14: - resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==} + /@esbuild/freebsd-arm64@0.17.16: + resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -6937,8 +6938,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.14: - resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==} + /@esbuild/freebsd-x64@0.17.16: + resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -6962,8 +6963,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.14: - resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==} + /@esbuild/linux-arm64@0.17.16: + resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -6987,8 +6988,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.14: - resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==} + /@esbuild/linux-arm@0.17.16: + resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -7012,8 +7013,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.14: - resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==} + /@esbuild/linux-ia32@0.17.16: + resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -7045,8 +7046,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.14: - resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==} + /@esbuild/linux-loong64@0.17.16: + resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -7070,8 +7071,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.14: - resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==} + /@esbuild/linux-mips64el@0.17.16: + resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -7095,8 +7096,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.14: - resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==} + /@esbuild/linux-ppc64@0.17.16: + resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -7120,8 +7121,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.14: - resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==} + /@esbuild/linux-riscv64@0.17.16: + resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -7145,8 +7146,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.14: - resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==} + /@esbuild/linux-s390x@0.17.16: + resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -7170,8 +7171,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.14: - resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==} + /@esbuild/linux-x64@0.17.16: + resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -7195,8 +7196,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.14: - resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==} + /@esbuild/netbsd-x64@0.17.16: + resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -7220,8 +7221,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.14: - resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==} + /@esbuild/openbsd-x64@0.17.16: + resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -7245,8 +7246,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.14: - resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==} + /@esbuild/sunos-x64@0.17.16: + resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -7270,8 +7271,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.14: - resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==} + /@esbuild/win32-arm64@0.17.16: + resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -7295,8 +7296,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.14: - resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==} + /@esbuild/win32-ia32@0.17.16: + resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -7320,8 +7321,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.14: - resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==} + /@esbuild/win32-x64@0.17.16: + resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -7343,17 +7344,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.22.0 - eslint-visitor-keys: 3.4.1 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.36.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.36.0 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.0 dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): @@ -7363,11 +7354,11 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.38.0 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.0 dev: true - /@eslint-community/regexpp@4.4.1: - resolution: {integrity: sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==} + /@eslint-community/regexpp@4.5.0: + resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -7377,23 +7368,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 - globals: 13.20.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - /@eslint/eslintrc@2.0.1: - resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.5.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7402,15 +7377,14 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + /@eslint/eslintrc@2.0.2: + resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.5.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7421,11 +7395,6 @@ packages: - supports-color dev: true - /@eslint/js@8.36.0: - resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@eslint/js@8.38.0: resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7449,14 +7418,14 @@ packages: dependencies: '@felte/common': 1.1.4 - /@felte/reporter-svelte@1.1.5(svelte@3.57.0): + /@felte/reporter-svelte@1.1.5(svelte@3.58.0): resolution: {integrity: sha512-emV9eYpN6/JcUP5sDXC3zPFdTnEp4Tw3G7KyT/cSg9MSnhYz+6ZW7eBEGsFSS0dJHocIliZPk+T4ROKdQgFG+w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/common': 1.1.4 - svelte: 3.57.0 + svelte: 3.58.0 dev: false /@felte/validator-zod@1.0.13(zod@3.21.4): @@ -7483,13 +7452,13 @@ packages: '@floating-ui/core': 0.7.3 dev: false - /@floating-ui/dom@1.4.1: - resolution: {integrity: sha512-loCXUOLzIC3jp50RFOKXZ/kQjjz26ryr/23M+FWG9jrmAv8lRf3DUfC2AiVZ3+K316GOhB08CR+Povwz8e9mDw==} + /@floating-ui/dom@1.4.2: + resolution: {integrity: sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==} dependencies: '@floating-ui/core': 1.3.1 dev: false - /@floating-ui/react-dom@0.7.2(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react-dom@0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: react: '>=16.8.0' @@ -7498,7 +7467,7 @@ packages: '@floating-ui/dom': 0.5.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.29)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.35)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -7523,7 +7492,7 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.4.1 + '@floating-ui/dom': 1.4.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -7666,7 +7635,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -7678,7 +7647,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -7699,7 +7668,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -7744,14 +7713,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -7778,7 +7747,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-mock: 27.5.1 dev: true @@ -7788,7 +7757,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-mock: 29.5.0 dev: true @@ -7815,7 +7784,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -7826,8 +7795,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.1.0 - '@types/node': 18.15.10 + '@sinonjs/fake-timers': 10.2.0 + '@types/node': 18.15.11 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -7868,7 +7837,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -7906,8 +7875,8 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.15.10 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 18.15.11 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -7949,7 +7918,7 @@ packages: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -8025,7 +7994,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -8048,7 +8017,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -8059,7 +8028,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -8071,8 +8040,8 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.10 - '@types/yargs': 17.0.23 + '@types/node': 18.15.11 + '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -8088,44 +8057,44 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@4.9.5) typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) dev: true - /@jridgewell/gen-mapping@0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - - /@jridgewell/gen-mapping@0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map@0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -8133,8 +8102,8 @@ packages: /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -8147,17 +8116,17 @@ packages: resolution: {integrity: sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==} dev: false - /@lukeed/csprng@1.0.1: - resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==} + /@lukeed/csprng@1.1.0: + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - /@lukemorales/query-key-factory@1.2.0(@tanstack/query-core@4.27.0): + /@lukemorales/query-key-factory@1.2.0(@tanstack/query-core@4.29.1): resolution: {integrity: sha512-ilUedLpJdpOCMKgxoncRkYEFF7C+K//IK/QWXHs0G6HjmZunT9XcrpWHNc5RjrBBqPhdxYNa7aUoEhjonwl4eQ==} engines: {node: '>=14'} peerDependencies: '@tanstack/query-core': ^4.0.0 dependencies: - '@tanstack/query-core': 4.27.0 + '@tanstack/query-core': 4.29.1 dev: false /@manypkg/find-root@1.1.0: @@ -8202,7 +8171,7 @@ packages: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.0 - '@types/mdx': 2.0.3 + '@types/mdx': 2.0.4 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -8227,34 +8196,34 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.3 + '@types/mdx': 2.0.4 '@types/react': 18.0.37 react: 18.2.0 dev: true - /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.10): + /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.11): resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.34.4(@types/node@18.15.10): + /@microsoft/api-extractor@7.34.4(@types/node@18.15.11): resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.10) + '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.11) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) '@rushstack/rig-package': 0.3.18 '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.3.8 source-map: 0.6.1 typescript: 4.8.4 @@ -8335,7 +8304,7 @@ packages: dependencies: '@open-draft/until': 1.0.3 '@types/debug': 4.1.7 - '@xmldom/xmldom': 0.8.6 + '@xmldom/xmldom': 0.8.7 debug: 4.3.4(supports-color@8.1.1) headers-polyfill: 3.1.2 outvariant: 1.4.0 @@ -8352,7 +8321,7 @@ packages: tar-fs: 2.1.1 dev: true - /@nestjs/axios@2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/axios@2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-F6oceoQLEn031uun8NiommeMkRIojQqVryxQy/mK7fx0CI0KbgkJL3SloCQcsOD+agoEnqKJKXZpEvL6FNswJg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -8360,7 +8329,7 @@ packages: reflect-metadata: ^0.1.12 rxjs: ^6.0.0 || ^7.0.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) axios: 1.4.0 reflect-metadata: 0.1.13 rxjs: 7.8.0 @@ -8374,7 +8343,7 @@ packages: '@angular-devkit/core': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics-cli': 15.2.4(chokidar@3.5.3) - '@nestjs/schematics': 9.0.4(chokidar@3.5.3)(typescript@4.9.5) + '@nestjs/schematics': 9.1.0(chokidar@3.5.3)(typescript@4.9.5) chalk: 4.1.2 chokidar: 3.5.3 cli-table3: 0.6.3 @@ -8400,8 +8369,30 @@ packages: - webpack-cli dev: true - /@nestjs/common@9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/common@9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-NtrUG2VgCbhmZEO1yRt/Utq16uFRV+xeHAOtdYIsfHGG0ssAV2lVLlvFFAQYh0SQ+KuYY1Gsxd3GK2JFoJCNqQ==} + peerDependencies: + cache-manager: <=5 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + cache-manager: + optional: true + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + tslib: 2.5.0 + uid: 2.0.1 + + /@nestjs/common@9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-RUcVAQsEF4WPrmzFXEOUfZnPwrLTe1UVlzXTlSyfqfqbdWDPKDGlIPVelBLfc5/+RRUQ0I5iE4+CQvpCmkqldw==} peerDependencies: cache-manager: <=5 class-transformer: '*' @@ -8422,16 +8413,16 @@ packages: reflect-metadata: 0.1.13 rxjs: 7.8.0 tslib: 2.5.0 - uid: 2.0.1 + uid: 2.0.2 - /@nestjs/config@2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/config@2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-Ckzel0NZ9CWhNsLfE1hxfDuxJuEbhQvGxSlmZ1/X8awjRmAA/g3kT6M1+MO1SHj1wMtPyUfd9WpwkiqFbiwQgA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.13 rxjs: ^6.0.0 || ^7.2.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) dotenv: 16.0.3 dotenv-expand: 10.0.0 lodash: 4.17.21 @@ -8458,7 +8449,7 @@ packages: '@nestjs/websockets': optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nuxtjs/opencollective': 0.3.2 @@ -8472,15 +8463,46 @@ packages: transitivePeerDependencies: - encoding - /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): + /@nestjs/core@9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-yTLryCgFD0462wPe4HIzhyTcDgibt8Stfwb5YzcX7Ma0NM4m8uBIpcPG109KBubp8ZmV85e5mw4rl20qLQQVsQ==} + requiresBuild: true + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/microservices': ^9.0.0 + '@nestjs/platform-express': ^9.0.0 + '@nestjs/websockets': ^9.0.0 + reflect-metadata: ^0.1.12 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + tslib: 2.5.0 + uid: 2.0.2 + transitivePeerDependencies: + - encoding + + /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-jAKTrpc+Ilrb7CFV1ZuG9b4OYVlFPHUXna2H8BrmxKResyqnzlzR/YIUr8zJE7p15MipAjiVaLHHyEL0C9OYGA==} peerDependencies: '@nestjs/common': ^9.3.7 '@nestjs/core': ^9.3.7 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) chalk: 4.1.2 node-fetch: 2.6.9 reflect-metadata: 0.1.13 @@ -8488,20 +8510,20 @@ packages: - encoding dev: false - /@nestjs/event-emitter@1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): + /@nestjs/event-emitter@1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-PmLpzMYgEKJNxOUrRjb6kNSm2PC6J+BeLTuF/bkYViGM/mVGvYOgU5jq8DQnXmiSmDmyWN+tO2cHSnR7odJJRA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) eventemitter2: 6.4.9 reflect-metadata: 0.1.13 dev: false - /@nestjs/graphql@10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): + /@nestjs/graphql@10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-fsOsoK2nMqmnBisrno+S+Yj/Qr/GLh2b3QCDEx4eooOEGM0+/NjCwmJ19iQ6nBLW6n4K8ZUvuCDMjg9ecaTZ+Q==} peerDependencies: '@apollo/subgraph': ^0.1.5 || ^0.3.0 @@ -8519,9 +8541,9 @@ packages: '@graphql-tools/merge': 8.2.2(graphql@16.6.0) '@graphql-tools/schema': 8.3.1(graphql@16.6.0) '@graphql-tools/utils': 8.6.1(graphql@16.6.0) - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) chokidar: 3.5.3 fast-glob: 3.2.11 graphql: 16.6.0 @@ -8542,17 +8564,17 @@ packages: - utf-8-validate dev: false - /@nestjs/jwt@10.0.3(@nestjs/common@9.3.12): + /@nestjs/jwt@10.0.3(@nestjs/common@9.4.0): resolution: {integrity: sha512-WO8MI3uEMOFKpbO+SAg6l4aRCr+9KvaL+raFMZaXuEUDphXek6pqdox+4tex9242pNSJUA0trfAMaiy/yVrXQg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@types/jsonwebtoken': 9.0.1 jsonwebtoken: 9.0.0 dev: false - /@nestjs/mapped-types@1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 @@ -8565,13 +8587,13 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: false - /@nestjs/mapped-types@1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 || ^9.0.0 @@ -8584,19 +8606,19 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: true - /@nestjs/passport@9.0.3(@nestjs/common@9.3.12)(passport@0.6.0): + /@nestjs/passport@9.0.3(@nestjs/common@9.4.0)(passport@0.6.0): resolution: {integrity: sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 passport: ^0.4.0 || ^0.5.0 || ^0.6.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) passport: 0.6.0 dev: false @@ -8606,7 +8628,7 @@ packages: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) body-parser: 1.20.2 cors: 2.8.5 @@ -8616,6 +8638,22 @@ packages: transitivePeerDependencies: - supports-color + /@nestjs/platform-express@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): + resolution: {integrity: sha512-PpnfghpNq7mwG43z3+pacHulsabUCBMla4nUikntXT525ORpZSDvh/nLi1HLfE4w5+FcINc8/RBOyYTeRVmiRQ==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.2 + multer: 1.4.4-lts.1 + tslib: 2.5.0 + transitivePeerDependencies: + - supports-color + /@nestjs/platform-ws@9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0): resolution: {integrity: sha512-JURYiQ/0yoDD/Z14szKDMts6xUP7hI/z5CSBOSAEJk+GdhKB4VW6noTgZQu8KRSZxtLj5tm73JIaOMX9P97Buw==} peerDependencies: @@ -8623,7 +8661,7 @@ packages: '@nestjs/websockets': ^9.0.0 rxjs: ^7.1.0 dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) rxjs: 7.8.0 tslib: 2.5.2 @@ -8633,14 +8671,13 @@ packages: - utf-8-validate dev: false - /@nestjs/schematics@9.0.4(chokidar@3.5.3)(typescript@4.9.5): - resolution: {integrity: sha512-egurCfAc4e5i1r2TmeAF0UrOKejFmT5oTdv4b7HcOVPupc3QGU7CbEfGleL3mkM5AjrixTQeMxU9bJ00ttAbGg==} + /@nestjs/schematics@9.1.0(chokidar@3.5.3)(typescript@4.9.5): + resolution: {integrity: sha512-/7CyMTnPJSK9/xD9CkCqwuHPOlHVlLC2RDnbdCJ7mIO07SdbBbY14msTqtYW9VRQtsjZPLh1GTChf7ryJUImwA==} peerDependencies: - typescript: ^4.3.5 + typescript: '>=4.3.5' dependencies: - '@angular-devkit/core': 15.0.4(chokidar@3.5.3) - '@angular-devkit/schematics': 15.0.4(chokidar@3.5.3) - fs-extra: 11.1.0 + '@angular-devkit/core': 15.2.4(chokidar@3.5.3) + '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) jsonc-parser: 3.2.0 pluralize: 8.0.0 typescript: 4.9.5 @@ -8648,7 +8685,7 @@ packages: - chokidar dev: true - /@nestjs/serve-static@3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2): + /@nestjs/serve-static@3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2): resolution: {integrity: sha512-i766UJPYOqvQ2BbRKh0/+Mmq5NkJnmKcShjWV1i5qpXyeM0KDZTn0n7g7ykWq/3LbQgjpMzrhYtGv35GX7GVQw==} peerDependencies: '@fastify/static': ^6.5.0 @@ -8664,13 +8701,13 @@ packages: fastify: optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) express: 4.18.2 path-to-regexp: 0.2.5 dev: false - /@nestjs/swagger@6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/swagger@6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-9M2vkfJHIzLqDZwvM5TEZO0MxRCvIb0xVy0LsmWwxH1lrb0z/4MhU+r2CWDhBtTccVJrKxVPiU2s3T3b9uUJbg==} peerDependencies: '@fastify/static': ^6.0.0 @@ -8687,9 +8724,9 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) class-transformer: 0.5.1 class-validator: 0.14.0 js-yaml: 4.1.0 @@ -8712,10 +8749,30 @@ packages: '@nestjs/platform-express': optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) tslib: 2.5.0 + dev: true + + /@nestjs/testing@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0): + resolution: {integrity: sha512-xZWp363P4otcebg++gSjUcdCfTK0RorORzyFq3aLaSAQOlq8kxfFDRIKzEATR4aOUfqTMMsAA8lhnMJWf35N6A==} + peerDependencies: + '@nestjs/common': ^9.0.0 + '@nestjs/core': ^9.0.0 + '@nestjs/microservices': ^9.0.0 + '@nestjs/platform-express': ^9.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + tslib: 2.5.0 + dev: false /@nestjs/websockets@9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-u1Txsb+rHWOG0mHxTfNt/64eyYSCGg6t/k736P2bdYP1fP4ETo/Z/F4Othau8q0MsWvKi3ZgYRQbhcefaudQww==} @@ -8729,7 +8786,7 @@ packages: '@nestjs/platform-socket.io': optional: true dependencies: - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) iterare: 1.2.1 object-hash: 3.0.0 @@ -8814,13 +8871,13 @@ packages: tiny-glob: 0.2.9 tslib: 2.5.2 - /@playwright/test@1.32.1: - resolution: {integrity: sha512-FTwjCuhlm1qHUGf4hWjfr64UMJD/z0hXYbk+O387Ioe6WdyZQ+0TBDAc6P+pHjx2xCv1VYNgrKbYrNixFWy4Dg==} + /@playwright/test@1.32.3: + resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.15.10 - playwright-core: 1.32.1 + '@types/node': 18.15.11 + playwright-core: 1.32.3 optionalDependencies: fsevents: 2.3.2 dev: true @@ -8881,7 +8938,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -8895,8 +8952,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8957,7 +9014,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -8971,11 +9028,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -8990,7 +9047,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -9000,7 +9057,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -9027,7 +9084,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -9037,7 +9094,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -9082,7 +9139,7 @@ packages: - '@types/react' dev: false - /@radix-ui/react-dialog@1.0.3(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9104,7 +9161,7 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -9145,7 +9202,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -9155,7 +9212,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -9191,7 +9248,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -9206,11 +9263,11 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9241,7 +9298,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} peerDependencies: '@types/react': '*' @@ -9256,13 +9313,13 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9277,7 +9334,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -9287,7 +9344,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -9333,7 +9390,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -9347,10 +9404,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9379,7 +9436,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-jXRuZEkxSWdHZbVyL0J46cm7pQjmOMpwJEFKY+VqAJnV+FxS+zIZExI1OCeIiDwCBzUy6If1FfouOsfqBxr86g==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9390,7 +9447,7 @@ packages: '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -9411,7 +9468,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -9421,8 +9478,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -9453,7 +9510,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} peerDependencies: '@types/react': '*' @@ -9468,27 +9525,27 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) dev: false /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): @@ -9526,14 +9583,14 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 - '@floating-ui/react-dom': 0.7.2(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) @@ -9572,7 +9629,7 @@ packages: - '@types/react' dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -9587,16 +9644,16 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.35)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.29 + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9656,7 +9713,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -9670,8 +9727,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9711,7 +9768,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -9725,9 +9782,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9779,7 +9836,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -9793,8 +9850,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9821,7 +9878,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -9836,15 +9893,15 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9870,7 +9927,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@1.2.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-select@1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9887,7 +9944,7 @@ packages: '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.1(react@18.2.0) @@ -9899,7 +9956,7 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -9970,7 +10027,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -9980,8 +10037,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10009,7 +10066,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -10019,7 +10076,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10047,7 +10104,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -10057,8 +10114,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10097,7 +10154,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -10107,8 +10164,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10136,7 +10193,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -10146,7 +10203,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10183,7 +10240,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -10194,7 +10251,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10223,7 +10280,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.0.29)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -10233,8 +10290,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) - '@types/react': 18.0.29 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -10306,14 +10363,14 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.21.4 '@rollup/pluginutils': 3.1.0(rollup@2.70.2) '@types/babel__core': 7.20.0 rollup: 2.70.2 dev: true - /@rollup/plugin-commonjs@24.0.1(rollup@2.70.2): - resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} + /@rollup/plugin-commonjs@24.1.0(rollup@2.70.2): + resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -10354,7 +10411,7 @@ packages: builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 rollup: 2.70.2 dev: true @@ -10382,8 +10439,8 @@ packages: magic-string: 0.27.0 dev: false - /@rollup/plugin-terser@0.4.0(rollup@2.70.2): - resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==} + /@rollup/plugin-terser@0.4.1(rollup@2.70.2): + resolution: {integrity: sha512-aKS32sw5a7hy+fEXVy+5T95aDIwjpGHCTv833HXVtyKMDoVS7pBr5K3L9hEQoNqbJFjfANPrNpIXlTQ7is00eA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -10394,7 +10451,7 @@ packages: rollup: 2.70.2 serialize-javascript: 6.0.1 smob: 0.0.6 - terser: 5.16.8 + terser: 5.16.9 dev: true /@rollup/pluginutils@3.1.0(rollup@2.70.2): @@ -10431,7 +10488,7 @@ packages: picomatch: 2.3.1 rollup: 2.70.2 - /@rushstack/node-core-library@3.55.2(@types/node@18.15.10): + /@rushstack/node-core-library@3.55.2(@types/node@18.15.11): resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} peerDependencies: '@types/node': '*' @@ -10439,12 +10496,12 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.3.8 z-schema: 5.0.5 dev: true @@ -10452,7 +10509,7 @@ packages: /@rushstack/rig-package@0.3.18: resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} dependencies: - resolve: 1.22.1 + resolve: 1.22.2 strip-json-comments: 3.1.1 dev: true @@ -10580,8 +10637,9 @@ packages: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.1.0: - resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} + /@sinonjs/fake-timers@10.2.0: + resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} + deprecated: Use version 10.1.0. Version 10.2.0 has potential breaking issues dependencies: '@sinonjs/commons': 3.0.0 dev: true @@ -10612,7 +10670,7 @@ packages: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) axe-core: 4.6.3 - core-js: 3.29.1 + core-js: 3.30.0 global: 4.4.0 lodash: 4.17.21 react: 18.2.0 @@ -10937,7 +10995,7 @@ packages: '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@types/webpack-env': 1.18.0 - core-js: 3.29.1 + core-js: 3.30.0 global: 4.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -10957,7 +11015,7 @@ packages: '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.29.1 + core-js: 3.30.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -10988,7 +11046,7 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-rc.10 - '@types/lodash': 4.14.191 + '@types/lodash': 4.14.192 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -11067,7 +11125,7 @@ packages: remark-slug: 7.0.1 rollup: 2.70.2 typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) transitivePeerDependencies: - supports-color dev: true @@ -11102,7 +11160,7 @@ packages: /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: - core-js: 3.29.1 + core-js: 3.30.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true @@ -11127,7 +11185,7 @@ packages: hasBin: true dependencies: '@babel/core': 7.22.5 - '@babel/preset-env': 7.20.2(@babel/core@7.22.5) + '@babel/preset-env': 7.21.4(@babel/core@7.22.5) '@ndelangen/get-tarball': 3.0.7 '@storybook/codemod': 7.0.0-rc.10 '@storybook/core-common': 7.0.0-rc.10 @@ -11151,7 +11209,7 @@ packages: get-port: 5.1.1 giget: 1.1.2 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.20.2) + jscodeshift: 0.14.0(@babel/preset-env@7.21.4) leven: 3.1.0 prettier: 2.8.8 prompts: 2.4.2 @@ -11174,7 +11232,7 @@ packages: /@storybook/client-logger@6.5.16: resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==} dependencies: - core-js: 3.29.1 + core-js: 3.30.0 global: 4.4.0 dev: true @@ -11193,9 +11251,9 @@ packages: /@storybook/codemod@7.0.0-rc.10: resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==} dependencies: - '@babel/core': 7.21.3 - '@babel/preset-env': 7.20.2(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/core': 7.21.4 + '@babel/preset-env': 7.20.2(@babel/core@7.21.4) + '@babel/types': 7.21.4 '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 '@storybook/node-logger': 7.0.0-rc.10 @@ -11219,7 +11277,7 @@ packages: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.29.1 + core-js: 3.30.0 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -11282,7 +11340,7 @@ packages: /@storybook/core-events@6.5.16: resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==} dependencies: - core-js: 3.29.1 + core-js: 3.30.0 dev: true /@storybook/core-events@7.0.0-rc.10: @@ -11357,10 +11415,10 @@ packages: /@storybook/csf-tools@7.0.0-rc.10: resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==} dependencies: - '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/generator': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 '@storybook/csf': 0.1.1-next.0 '@storybook/types': 7.0.0-rc.10 fs-extra: 11.1.1 @@ -11554,7 +11612,7 @@ packages: react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) transitivePeerDependencies: - '@preact/preset-vite' - '@storybook/mdx1-csf' @@ -11609,7 +11667,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.29.1 + core-js: 3.30.0 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -11635,7 +11693,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - core-js: 3.29.1 + core-js: 3.30.0 find-up: 4.1.0 dev: true @@ -11673,7 +11731,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.29.1 + core-js: 3.30.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -11712,7 +11770,7 @@ packages: file-system-cache: 2.1.1 dev: true - /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.57.0)(vite@4.0.3): + /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.58.0)(vite@4.0.3): resolution: {integrity: sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -11728,15 +11786,15 @@ packages: deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.26.7 - svelte: 3.57.0 - svelte-hmr: 0.15.1(svelte@3.57.0) - vite: 4.0.3(@types/node@18.15.10) + svelte: 3.58.0 + svelte-hmr: 0.15.1(svelte@3.58.0) + vite: 4.0.3(@types/node@18.15.11) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.0.3(svelte@3.57.0)(vite@4.2.1): - resolution: {integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==} + /@sveltejs/vite-plugin-svelte@2.0.4(svelte@3.58.0)(vite@4.2.1): + resolution: {integrity: sha512-pjqhW00KwK2uzDGEr+yJBwut+D+4XfJO/+bHHdHzPRXn9+1Jeq5JcFHyrUiYaXgHtyhX0RsllCTm4ssAx4ZY7Q==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 @@ -11745,17 +11803,17 @@ packages: debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.29.0 - svelte: 3.57.0 - svelte-hmr: 0.15.1(svelte@3.57.0) - vite: 4.2.1(@types/node@18.15.10) + magic-string: 0.30.0 + svelte: 3.58.0 + svelte-hmr: 0.15.1(svelte@3.58.0) + vite: 4.2.1(@types/node@18.15.11) vitefu: 0.2.4(vite@4.2.1) transitivePeerDependencies: - supports-color dev: true - /@swc/core-darwin-arm64@1.3.42: - resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==} + /@swc/core-darwin-arm64@1.3.49: + resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -11763,8 +11821,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.42: - resolution: {integrity: sha512-bjsWtHMb6wJK1+RGlBs2USvgZ0txlMk11y0qBLKo32gLKTqzUwRw0Fmfzuf6Ue2a/w//7eqMlPFEre4LvJajGw==} + /@swc/core-darwin-x64@1.3.49: + resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -11772,8 +11830,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.42: - resolution: {integrity: sha512-Oe0ggMz3MyqXNfeVmY+bBTL0hFSNY3bx8dhcqsh4vXk/ZVGse94QoC4dd92LuPHmKT0x6nsUzB86x2jU9QHW5g==} + /@swc/core-linux-arm-gnueabihf@1.3.49: + resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -11781,8 +11839,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.42: - resolution: {integrity: sha512-ZJsa8NIW1RLmmHGTJCbM7OPSbBZ9rOMrLqDtUOGrT0uoJXZnnQqolflamB5wviW0X6h3Z3/PSTNGNDCJ3u3Lqg==} + /@swc/core-linux-arm64-gnu@1.3.49: + resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -11790,8 +11848,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.42: - resolution: {integrity: sha512-YpZwlFAfOp5vkm/uVUJX1O7N3yJDO1fDQRWqsOPPNyIJkI2ydlRQtgN6ZylC159Qv+TimfXnGTlNr7o3iBAqjg==} + /@swc/core-linux-arm64-musl@1.3.49: + resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -11799,8 +11857,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.42: - resolution: {integrity: sha512-0ccpKnsZbyHBzaQFdP8U9i29nvOfKitm6oJfdJzlqsY/jCqwvD8kv2CAKSK8WhJz//ExI2LqNrDI0yazx5j7+A==} + /@swc/core-linux-x64-gnu@1.3.49: + resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -11808,8 +11866,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.42: - resolution: {integrity: sha512-7eckRRuTZ6+3K21uyfXXgc2ZCg0mSWRRNwNT3wap2bYkKPeqTgb8pm8xYSZNEiMuDonHEat6XCCV36lFY6kOdQ==} + /@swc/core-linux-x64-musl@1.3.49: + resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -11817,8 +11875,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.42: - resolution: {integrity: sha512-t27dJkdw0GWANdN4TV0lY/V5vTYSx5SRjyzzZolep358ueCGuN1XFf1R0JcCbd1ojosnkQg2L7A7991UjXingg==} + /@swc/core-win32-arm64-msvc@1.3.49: + resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -11826,8 +11884,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.42: - resolution: {integrity: sha512-xfpc/Zt/aMILX4IX0e3loZaFyrae37u3MJCv1gJxgqrpeLi7efIQr3AmERkTK3mxTO6R5urSliWw2W3FyZ7D3Q==} + /@swc/core-win32-ia32-msvc@1.3.49: + resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -11835,8 +11893,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.42: - resolution: {integrity: sha512-ra2K4Tu++EJLPhzZ6L8hWUsk94TdK/2UKhL9dzCBhtzKUixsGCEqhtqH1zISXNvW8qaVLFIMUP37ULe80/IJaA==} + /@swc/core-win32-x64-msvc@1.3.49: + resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -11844,21 +11902,26 @@ packages: dev: true optional: true - /@swc/core@1.3.42: - resolution: {integrity: sha512-nVFUd5+7tGniM2cT3LXaqnu3735Cu4az8A9gAKK+8sdpASI52SWuqfDBmjFCK9xG90MiVDVp2PTZr0BWqCIzpw==} + /@swc/core@1.3.49: + resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} engines: {node: '>=10'} requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.42 - '@swc/core-darwin-x64': 1.3.42 - '@swc/core-linux-arm-gnueabihf': 1.3.42 - '@swc/core-linux-arm64-gnu': 1.3.42 - '@swc/core-linux-arm64-musl': 1.3.42 - '@swc/core-linux-x64-gnu': 1.3.42 - '@swc/core-linux-x64-musl': 1.3.42 - '@swc/core-win32-arm64-msvc': 1.3.42 - '@swc/core-win32-ia32-msvc': 1.3.42 - '@swc/core-win32-x64-msvc': 1.3.42 + '@swc/core-darwin-arm64': 1.3.49 + '@swc/core-darwin-x64': 1.3.49 + '@swc/core-linux-arm-gnueabihf': 1.3.49 + '@swc/core-linux-arm64-gnu': 1.3.49 + '@swc/core-linux-arm64-musl': 1.3.49 + '@swc/core-linux-x64-gnu': 1.3.49 + '@swc/core-linux-x64-musl': 1.3.49 + '@swc/core-win32-arm64-msvc': 1.3.49 + '@swc/core-win32-ia32-msvc': 1.3.49 + '@swc/core-win32-x64-msvc': 1.3.49 dev: true /@t3-oss/env-core@0.3.1(typescript@4.9.5)(zod@3.21.4): @@ -11871,41 +11934,41 @@ packages: zod: 3.21.4 dev: false - /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.2.7): + /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.3.1): resolution: {integrity: sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==} peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' dependencies: - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) dev: false - /@tanstack/match-sorter-utils@8.7.6: - resolution: {integrity: sha512-2AMpRiA6QivHOUiBpQAVxjiHAA68Ei23ZUMNaRJrN6omWiSFLoYrxGcT6BXtuzp0Jw4h6HZCmGGIM/gbwebO2A==} + /@tanstack/match-sorter-utils@8.8.4: + resolution: {integrity: sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==} engines: {node: '>=12'} dependencies: remove-accents: 0.4.2 dev: true - /@tanstack/query-core@4.27.0: - resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} + /@tanstack/query-core@4.29.1: + resolution: {integrity: sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg==} - /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.28.0)(react-dom@18.2.0)(react@18.2.0): + /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-YeYFBnfqvb+ZlA0IiJqiHNNSzepNhI1p2o9i8NlhQli9+Zrn230M47OBaBUs8qr3DD1dC2zGB1Dis50Ktz8gAA==} peerDependencies: '@tanstack/react-query': 4.22.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/match-sorter-utils': 8.7.6 - '@tanstack/react-query': 4.28.0(react-dom@18.2.0)(react@18.2.0) + '@tanstack/match-sorter-utils': 8.8.4 + '@tanstack/react-query': 4.29.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) superjson: 1.12.2 use-sync-external-store: 1.2.0(react@18.2.0) dev: true - /@tanstack/react-query@4.28.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-8cGBV5300RHlvYdS4ea+G1JcZIt5CIuprXYFnsWggkmGoC0b5JaqG0fIX3qwDL9PTNkKvG76NGThIWbpXivMrQ==} + /@tanstack/react-query@4.29.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11916,7 +11979,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.27.0 + '@tanstack/query-core': 4.29.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) @@ -11933,13 +11996,13 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@tanstack/svelte-query@4.27.0(svelte@3.57.0): - resolution: {integrity: sha512-FmrviPCoWbgBOLgG4uOG4EHi80DDzvD4XK+0nQBTLb4c2cKyN7c98MLgG58yHbdFEPQyhhcJlqagXP18vWWS9w==} + /@tanstack/svelte-query@4.29.1(svelte@3.58.0): + resolution: {integrity: sha512-V+Ueq8fWHx6W9kBlVfrdFJbSUodJknOdgGKV90lNYM1WFeoOzqihXDOgeJHUaT+JKs96sRBQJAVN7NIbBR0iMw==} peerDependencies: svelte: ^3.54.0 dependencies: - '@tanstack/query-core': 4.27.0 - svelte: 3.57.0 + '@tanstack/query-core': 4.29.1 + svelte: 3.58.0 dev: false /@tanstack/table-core@8.9.2: @@ -12002,14 +12065,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/svelte@3.2.2(svelte@3.57.0): + /@testing-library/svelte@3.2.2(svelte@3.58.0): resolution: {integrity: sha512-IKwZgqbekC3LpoRhSwhd0JswRGxKdAGkf39UiDXTywK61YyLXbCYoR831e/UUC6EeNW4hiHPY+2WuovxOgI5sw==} engines: {node: '>= 10'} peerDependencies: svelte: 3.x dependencies: '@testing-library/dom': 8.20.0 - svelte: 3.57.0 + svelte: 3.58.0 dev: true /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0): @@ -12093,8 +12156,8 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -12102,30 +12165,30 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.21.4 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.21.4 /@types/bcrypt@5.0.0: resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/chai-subset@1.3.3: @@ -12148,7 +12211,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/cookie-session@2.0.44: @@ -12219,7 +12282,7 @@ packages: /@types/docker-modem@3.0.2: resolution: {integrity: sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@types/ssh2': 1.11.11 dev: true @@ -12227,7 +12290,7 @@ packages: resolution: {integrity: sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==} dependencies: '@types/docker-modem': 3.0.2 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/doctrine@0.0.3: @@ -12245,12 +12308,12 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.21.3 + '@types/eslint': 8.37.0 '@types/estree': 1.0.0 dev: true - /@types/eslint@8.21.3: - resolution: {integrity: sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==} + /@types/eslint@8.37.0: + resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 @@ -12276,7 +12339,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -12298,7 +12361,7 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/geojson@7946.0.10: @@ -12309,20 +12372,20 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/hast@2.3.4: @@ -12392,13 +12455,13 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/jsonwebtoken@9.0.1: resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} @@ -12407,7 +12470,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: false /@types/leaflet@1.9.3: @@ -12419,11 +12482,11 @@ packages: /@types/lodash.keyby@4.6.7: resolution: {integrity: sha512-3qSHbbxLfXlARIKsaijZPb/5ZHDajv1vRg7OlAOuBNwN29PESS3sEOPfG1s2kzSuZnKtxtXZd1lvGj5JasN91w==} dependencies: - '@types/lodash': 4.14.191 + '@types/lodash': 4.14.192 dev: true - /@types/lodash@4.14.191: - resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} + /@types/lodash@4.14.192: + resolution: {integrity: sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==} dev: true /@types/mdast@3.0.11: @@ -12431,8 +12494,8 @@ packages: dependencies: '@types/unist': 2.0.6 - /@types/mdx@2.0.3: - resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} + /@types/mdx@2.0.4: + resolution: {integrity: sha512-qCYrNdpKwN6YO6FVnx+ulfqifKlE3lQGsNhvDaW9Oxzyob/cRLBJWow8GHBBD4NxQ7BVvtsATgLsX0vZAWmtrg==} /@types/mime-types@2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} @@ -12485,7 +12548,7 @@ packages: /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 form-data: 3.0.1 dev: true @@ -12497,8 +12560,8 @@ packages: resolution: {integrity: sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA==} dev: true - /@types/node@18.15.10: - resolution: {integrity: sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==} + /@types/node@18.15.11: + resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} /@types/node@20.3.1: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} @@ -12598,38 +12661,38 @@ packages: dependencies: '@types/react': 18.0.37 - /@types/react@17.0.53: - resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} + /@types/react@17.0.58: + resolution: {integrity: sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.1 + csstype: 3.1.2 dev: false - /@types/react@18.0.29: - resolution: {integrity: sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==} + /@types/react@18.0.35: + resolution: {integrity: sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.1 + csstype: 3.1.2 /@types/react@18.0.37: resolution: {integrity: sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.1 + csstype: 3.1.2 /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/resolve@1.20.2: @@ -12639,14 +12702,14 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: false /@types/sass@1.45.0: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: - sass: 1.60.0 + sass: 1.62.0 dev: true /@types/scheduler@0.16.3: @@ -12668,31 +12731,31 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 /@types/ssh2-streams@0.1.9: resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/ssh2@0.5.52: resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@types/ssh2-streams': 0.1.9 dev: true /@types/ssh2@1.11.11: resolution: {integrity: sha512-LdnE7UBpvHCgUznvn2fwLt2hkaENcKPFqOyXGkvyTLfxCXBN6roc1RmECNYuzzbHePzD3PaAov5rri9hehzx9Q==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/stack-utils@2.0.1: @@ -12703,7 +12766,7 @@ packages: resolution: {integrity: sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /@types/supertest@2.0.11: @@ -12722,6 +12785,10 @@ packages: resolution: {integrity: sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==} dev: false + /@types/triple-beam@1.3.2: + resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} + dev: false + /@types/unist@2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} @@ -12743,7 +12810,7 @@ packages: /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: false /@types/yargs-parser@21.0.0: @@ -12761,14 +12828,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs@17.0.23: - resolution: {integrity: sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==} + /@types/yargs@17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==} + /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -12778,25 +12845,25 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/type-utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/type-utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.4.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==} + /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -12806,24 +12873,24 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/type-utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/type-utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.4.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12834,17 +12901,17 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/type-utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.4.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -12862,7 +12929,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 + '@eslint-community/regexpp': 4.5.0 '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@5.0.2) '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) @@ -12872,14 +12939,14 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.4.0 tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.33.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/experimental-utils@4.33.0(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -12889,16 +12956,16 @@ packages: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) - eslint: 8.36.0 + eslint: 8.38.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.36.0) + eslint-utils: 3.0.0(eslint@8.38.0) transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.56.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} + /@typescript-eslint/parser@5.58.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -12907,9 +12974,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 typescript: 4.9.5 @@ -12917,8 +12984,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.56.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} + /@typescript-eslint/parser@5.58.0(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -12927,17 +12994,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12951,7 +13018,7 @@ packages: '@typescript-eslint/types': 5.59.0 '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -12985,12 +13052,12 @@ packages: '@typescript-eslint/visitor-keys': 4.33.0 dev: true - /@typescript-eslint/scope-manager@5.56.0: - resolution: {integrity: sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==} + /@typescript-eslint/scope-manager@5.58.0: + resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/visitor-keys': 5.56.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 dev: true /@typescript-eslint/scope-manager@5.59.0: @@ -13001,8 +13068,8 @@ packages: '@typescript-eslint/visitor-keys': 5.59.0 dev: true - /@typescript-eslint/type-utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} + /@typescript-eslint/type-utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -13011,8 +13078,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 tsutils: 3.21.0(typescript@4.9.5) @@ -13021,8 +13088,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} + /@typescript-eslint/type-utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -13031,17 +13098,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/type-utils@5.59.0(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13052,9 +13119,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -13086,8 +13153,8 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types@5.56.0: - resolution: {integrity: sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==} + /@typescript-eslint/types@5.58.0: + resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -13117,8 +13184,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.56.0(typescript@4.9.5): - resolution: {integrity: sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==} + /@typescript-eslint/typescript-estree@5.58.0(typescript@4.9.5): + resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -13126,8 +13193,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/visitor-keys': 5.56.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/visitor-keys': 5.58.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -13180,8 +13247,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + /@typescript-eslint/utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -13189,9 +13256,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) eslint: 8.22.0 eslint-scope: 5.1.1 semver: 7.5.3 @@ -13200,19 +13267,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + /@typescript-eslint/utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/scope-manager': 5.58.0 + '@typescript-eslint/types': 5.58.0 + '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + eslint: 8.38.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13220,19 +13287,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/types': 5.59.0 '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) - eslint: 8.36.0 + eslint: 8.38.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13268,12 +13335,12 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /@typescript-eslint/visitor-keys@5.56.0: - resolution: {integrity: sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==} + /@typescript-eslint/visitor-keys@5.58.0: + resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.56.0 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 5.58.0 + eslint-visitor-keys: 3.4.0 dev: true /@typescript-eslint/visitor-keys@5.59.0: @@ -13281,16 +13348,18 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.59.0 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.0 dev: true - /@vitejs/plugin-react-swc@3.2.0(vite@4.2.1): - resolution: {integrity: sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==} + /@vitejs/plugin-react-swc@3.3.0(vite@4.2.1): + resolution: {integrity: sha512-Ycg+n2eyCOTpn/wRy+evVo859+hw7qCj9iaX5CMny6x1fx1Uoq0xBG+a98lFtwLNGfGEnpI0F26YigRuxCRkwg==} peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.42 - vite: 4.2.1(@types/node@18.15.10) + '@swc/core': 1.3.49 + vite: 4.2.1(@types/node@18.15.11) + transitivePeerDependencies: + - '@swc/helpers' dev: true /@vitejs/plugin-react@3.1.0(vite@4.2.1): @@ -13304,7 +13373,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) transitivePeerDependencies: - supports-color dev: true @@ -13414,7 +13483,7 @@ packages: /@vscode/emmet-helper@2.8.6: resolution: {integrity: sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==} dependencies: - emmet: 2.3.6 + emmet: 2.4.2 jsonc-parser: 2.3.1 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 @@ -13531,8 +13600,8 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@xmldom/xmldom@0.8.6: - resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==} + /@xmldom/xmldom@0.8.7: + resolution: {integrity: sha512-sI1Ly2cODlWStkINzqGrZ8K6n+MTSbAeQnAipGyL+KZCXuHaRlj2gyyy8B/9MvsFFqN7XHryQnB2QwhzvJXovg==} engines: {node: '>=10.0.0'} /@xstate/inspect@0.7.1(ws@8.13.0)(xstate@4.37.1): @@ -13550,7 +13619,7 @@ packages: xstate: 4.37.1 dev: true - /@xstate/svelte@2.0.1(svelte@3.57.0)(xstate@4.37.1): + /@xstate/svelte@2.0.1(svelte@3.58.0)(xstate@4.37.1): resolution: {integrity: sha512-A4QSCt4EpbyzbPIPGCRLoRn50VUq6gXcmJPIwgBaCTsTRsPsp8KSvltDqS2msBKEDr4FHWXEXOC4QVGDWFL5dg==} peerDependencies: '@xstate/fsm': ^2.0.0 @@ -13562,7 +13631,7 @@ packages: xstate: optional: true dependencies: - svelte: 3.57.0 + svelte: 3.58.0 xstate: 4.37.1 dev: false @@ -13588,16 +13657,16 @@ packages: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true - /@yarnpkg/parsers@3.0.0-rc.40: - resolution: {integrity: sha512-sKbi5XhHKXCjzb5m0ftGuQuODM2iUXEsrCSl8MkKexNWHepCmU3IPaGTPC5gHZy4sOvsb9JqTLaZEez+kDzG+Q==} + /@yarnpkg/parsers@3.0.0-rc.42: + resolution: {integrity: sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA==} engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 tslib: 2.5.2 dev: true - /@zerodevx/svelte-toast@0.8.0: - resolution: {integrity: sha512-PAcQQGhGYkdZJqPY7obnGIdlBoeoMteogYoN/nJn87CI5LYgRz6X9ST4AA65jyGlybWnniYzlrTT/dFepvuC/g==} + /@zerodevx/svelte-toast@0.8.2: + resolution: {integrity: sha512-EDtZ/Hw37T/UWCQ5drhMss0J9vItYUSDivQ3+mET5My6No7YNiNQklj2bkE61UAzut2TjHJfOJNBZsj78ODFtw==} dev: false /@zkochan/js-yaml@0.0.6: @@ -13678,16 +13747,10 @@ packages: dependencies: acorn: 8.8.2 - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} + dev: true /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -13697,6 +13760,7 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} @@ -13733,17 +13797,6 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.11.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.11.0 - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -13790,15 +13843,6 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: @@ -13816,23 +13860,23 @@ packages: uri-js: 4.4.1 dev: false - /algoliasearch@4.16.0: - resolution: {integrity: sha512-HAjKJ6bBblaXqO4dYygF4qx251GuJ6zCZt+qbJ+kU7sOC+yc84pawEjVpJByh+cGP2APFCsao2Giz50cDlKNPA==} + /algoliasearch@4.17.0: + resolution: {integrity: sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==} dependencies: - '@algolia/cache-browser-local-storage': 4.16.0 - '@algolia/cache-common': 4.16.0 - '@algolia/cache-in-memory': 4.16.0 - '@algolia/client-account': 4.16.0 - '@algolia/client-analytics': 4.16.0 - '@algolia/client-common': 4.16.0 - '@algolia/client-personalization': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/logger-common': 4.16.0 - '@algolia/logger-console': 4.16.0 - '@algolia/requester-browser-xhr': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/requester-node-http': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/cache-browser-local-storage': 4.17.0 + '@algolia/cache-common': 4.17.0 + '@algolia/cache-in-memory': 4.17.0 + '@algolia/client-account': 4.17.0 + '@algolia/client-analytics': 4.17.0 + '@algolia/client-common': 4.17.0 + '@algolia/client-personalization': 4.17.0 + '@algolia/client-search': 4.17.0 + '@algolia/logger-common': 4.17.0 + '@algolia/logger-console': 4.17.0 + '@algolia/requester-browser-xhr': 4.17.0 + '@algolia/requester-common': 4.17.0 + '@algolia/requester-node-http': 4.17.0 + '@algolia/transporter': 4.17.0 dev: false /ansi-align@3.0.1: @@ -13885,7 +13929,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -14105,13 +14148,13 @@ packages: astrojs-compiler-sync: 0.3.2(@astrojs/compiler@0.32.0) debug: 4.3.4(supports-color@8.1.1) eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 transitivePeerDependencies: - supports-color dev: true - /astro@2.6.6(@types/node@18.15.10): + /astro@2.6.6(@types/node@18.15.11): resolution: {integrity: sha512-npeTXVaSOWKYYF6Znj6Yfxfq+WIFZ9u/Q+vtFP3nXbl7/XimvE+LbmWoK+hPFBOXC/KRLHxqQSltXJX5ALFmFg==} engines: {node: '>=16.12.0', npm: '>=6.14.0'} hasBin: true @@ -14128,10 +14171,10 @@ packages: '@astrojs/telemetry': 2.1.1 '@astrojs/webapi': 2.2.0 '@babel/core': 7.22.5 - '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 + '@babel/generator': 7.21.4 + '@babel/parser': 7.21.4 '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@babel/traverse': 7.21.3 + '@babel/traverse': 7.21.4 '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/yargs-parser': 21.0.0 @@ -14145,7 +14188,7 @@ packages: deepmerge-ts: 4.3.0 devalue: 4.3.2 diff: 5.1.0 - es-module-lexer: 1.2.0 + es-module-lexer: 1.2.1 esbuild: 0.17.19 estree-walker: 3.0.0 execa: 6.1.0 @@ -14163,7 +14206,7 @@ packages: preferred-pm: 3.0.3 prompts: 2.4.2 rehype: 12.0.1 - semver: 7.3.8 + semver: 7.4.0 server-destroy: 1.0.1 shiki: 0.14.2 slash: 4.0.0 @@ -14174,7 +14217,7 @@ packages: typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) vitefu: 0.2.4(vite@4.3.9) yargs-parser: 21.1.1 zod: 3.21.4 @@ -14208,7 +14251,6 @@ packages: /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -14226,7 +14268,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001470 + caniuse-lite: 1.0.30001478 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -14242,7 +14284,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001470 + caniuse-lite: 1.0.30001478 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -14306,7 +14348,7 @@ packages: '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 - resolve: 1.22.1 + resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: false @@ -14381,14 +14423,14 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-jsx-dom-expressions@0.35.19(@babel/core@7.22.5): - resolution: {integrity: sha512-Y1Qg6Yt5XaRfGewxmF0ac6bnqo2xdsIdPd1J6/El4E+7m5Ej76jcHYeHWJsoPbVmbZXc5TGenwZMP9ueHjja/g==} + /babel-plugin-jsx-dom-expressions@0.36.9(@babel/core@7.22.5): + resolution: {integrity: sha512-4ACO10PoUvqRcBEErbhVGv5vAHXgkz7epvULHfqJXw5TPtDYwjhmhGxGNGSK6220ec/b85ElLrGHlqQiJxI0WQ==} peerDependencies: '@babel/core': ^7.20.12 dependencies: '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) '@babel/types': 7.22.5 html-entities: 2.3.3 validate-html-nesting: 1.2.1 @@ -14399,7 +14441,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) semver: 6.3.0 @@ -14407,14 +14449,14 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3): + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.21.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -14425,7 +14467,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.21.4 '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) semver: 6.3.0 @@ -14440,19 +14482,19 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) - core-js-compat: 3.29.1 + core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3): + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) - core-js-compat: 3.29.1 + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true @@ -14464,7 +14506,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) - core-js-compat: 3.29.1 + core-js-compat: 3.30.0 transitivePeerDependencies: - supports-color dev: true @@ -14480,13 +14522,13 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3): + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) + '@babel/core': 7.21.4 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) transitivePeerDependencies: - supports-color dev: true @@ -14544,13 +14586,13 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-solid@1.6.13(@babel/core@7.22.5): - resolution: {integrity: sha512-W78rLK4xv48k2Jb/VFynu42oCQufcDYFz6gmhMYslKy/PJCfNxdp85QCg1wTcrmCoPQK2TcHMVcL8nVvvTBHxQ==} + /babel-preset-solid@1.7.3(@babel/core@7.22.5): + resolution: {integrity: sha512-HOdyrij99zo+CBrmtDxSexBAl54vCBCfBoyueLBvcfVniaEXNd4ftKqSN6XQcLvFfCY28UFO+DHaigXzWKOfzg==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - babel-plugin-jsx-dom-expressions: 0.35.19(@babel/core@7.22.5) + babel-plugin-jsx-dom-expressions: 0.36.9(@babel/core@7.22.5) dev: false /backo2@1.0.2: @@ -14800,8 +14842,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001470 - electron-to-chromium: 1.4.340 + caniuse-lite: 1.0.30001478 + electron-to-chromium: 1.4.361 node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.5) @@ -14976,8 +15018,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001470: - resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} + /caniuse-lite@1.0.30001478: + resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} /caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -15123,7 +15165,7 @@ packages: resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} dependencies: '@types/validator': 13.7.14 - libphonenumber-js: 1.10.24 + libphonenumber-js: 1.10.26 validator: 13.9.0 /class-variance-authority@0.6.0(typescript@4.9.5): @@ -15204,8 +15246,8 @@ packages: engines: {node: '>=6'} dev: true - /cli-spinners@2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + /cli-spinners@2.8.0: + resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} engines: {node: '>=6'} /cli-table3@0.6.3: @@ -15328,12 +15370,18 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: true /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + /color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + dev: false + /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -15355,6 +15403,13 @@ packages: engines: {node: '>=0.1.90'} dev: true + /colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + dev: false + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -15380,7 +15435,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -15502,7 +15556,7 @@ packages: date-fns: 2.29.3 lodash: 4.17.21 rxjs: 7.8.0 - shell-quote: 1.8.0 + shell-quote: 1.8.1 spawn-command: 0.0.2-1 supports-color: 8.1.1 tree-kill: 1.2.2 @@ -15626,14 +15680,14 @@ packages: is-what: 4.1.8 dev: true - /core-js-compat@3.29.1: - resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} + /core-js-compat@3.30.0: + resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} dependencies: browserslist: 4.21.5 dev: true - /core-js@3.29.1: - resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==} + /core-js@3.30.0: + resolution: {integrity: sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==} requiresBuild: true dev: true @@ -15647,7 +15701,7 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.10)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -15656,9 +15710,9 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) typescript: 4.9.5 dev: true @@ -15799,8 +15853,8 @@ packages: cssom: 0.3.8 dev: true - /csstype@3.1.1: - resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} @@ -15930,7 +15984,7 @@ packages: css-selector-tokenizer: 0.8.0 postcss: 8.4.21 postcss-js: 4.0.1(postcss@8.4.21) - tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: true @@ -16171,9 +16225,6 @@ packages: object-keys: 1.1.1 dev: true - /defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - /defu@6.1.2: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} dev: true @@ -16261,15 +16312,6 @@ packages: - supports-color dev: true - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.8 - /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false @@ -16323,7 +16365,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) readable-stream: 3.6.2 split-ca: 1.0.1 - ssh2: 1.14.0 + ssh2: 1.13.0 transitivePeerDependencies: - supports-color dev: true @@ -16507,7 +16549,7 @@ packages: '@one-ini/wasm': 0.1.1 commander: 10.0.0 minimatch: 6.1.6 - semver: 7.3.8 + semver: 7.4.0 dev: true /ee-first@1.1.1: @@ -16521,8 +16563,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.340: - resolution: {integrity: sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==} + /electron-to-chromium@1.4.361: + resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -16540,11 +16582,11 @@ packages: engines: {node: '>=10'} dev: true - /emmet@2.3.6: - resolution: {integrity: sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==} + /emmet@2.4.2: + resolution: {integrity: sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w==} dependencies: - '@emmetio/abbreviation': 2.2.3 - '@emmetio/css-abbreviation': 2.1.4 + '@emmetio/abbreviation': 2.3.1 + '@emmetio/css-abbreviation': 2.1.6 dev: false /emoji-regex@8.0.0: @@ -16553,6 +16595,10 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + dev: false + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -16660,8 +16706,8 @@ packages: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.2.0: - resolution: {integrity: sha512-2BMfqBDeVCcOlLaL1ZAfp+D868SczNpKArrTM3dhpd7dK/OVlogzY15qpUngt+LMTq5UC/csb9vVQAgupucSbA==} + /es-module-lexer@1.2.1: + resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: false /es-set-tostringtag@2.0.1: @@ -16964,34 +17010,34 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild@0.17.14: - resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} + /esbuild@0.17.16: + resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.14 - '@esbuild/android-arm64': 0.17.14 - '@esbuild/android-x64': 0.17.14 - '@esbuild/darwin-arm64': 0.17.14 - '@esbuild/darwin-x64': 0.17.14 - '@esbuild/freebsd-arm64': 0.17.14 - '@esbuild/freebsd-x64': 0.17.14 - '@esbuild/linux-arm': 0.17.14 - '@esbuild/linux-arm64': 0.17.14 - '@esbuild/linux-ia32': 0.17.14 - '@esbuild/linux-loong64': 0.17.14 - '@esbuild/linux-mips64el': 0.17.14 - '@esbuild/linux-ppc64': 0.17.14 - '@esbuild/linux-riscv64': 0.17.14 - '@esbuild/linux-s390x': 0.17.14 - '@esbuild/linux-x64': 0.17.14 - '@esbuild/netbsd-x64': 0.17.14 - '@esbuild/openbsd-x64': 0.17.14 - '@esbuild/sunos-x64': 0.17.14 - '@esbuild/win32-arm64': 0.17.14 - '@esbuild/win32-ia32': 0.17.14 - '@esbuild/win32-x64': 0.17.14 + '@esbuild/android-arm': 0.17.16 + '@esbuild/android-arm64': 0.17.16 + '@esbuild/android-x64': 0.17.16 + '@esbuild/darwin-arm64': 0.17.16 + '@esbuild/darwin-x64': 0.17.16 + '@esbuild/freebsd-arm64': 0.17.16 + '@esbuild/freebsd-x64': 0.17.16 + '@esbuild/linux-arm': 0.17.16 + '@esbuild/linux-arm64': 0.17.16 + '@esbuild/linux-ia32': 0.17.16 + '@esbuild/linux-loong64': 0.17.16 + '@esbuild/linux-mips64el': 0.17.16 + '@esbuild/linux-ppc64': 0.17.16 + '@esbuild/linux-riscv64': 0.17.16 + '@esbuild/linux-s390x': 0.17.16 + '@esbuild/linux-x64': 0.17.16 + '@esbuild/netbsd-x64': 0.17.16 + '@esbuild/openbsd-x64': 0.17.16 + '@esbuild/sunos-x64': 0.17.16 + '@esbuild/win32-arm64': 0.17.16 + '@esbuild/win32-ia32': 0.17.16 + '@esbuild/win32-x64': 0.17.16 /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} @@ -17060,13 +17106,13 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@6.15.0(eslint@8.36.0): + /eslint-config-prettier@6.15.0(eslint@8.38.0): resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==} hasBin: true peerDependencies: eslint: '>=3.14.1' dependencies: - eslint: 8.36.0 + eslint: 8.38.0 get-stdin: 6.0.0 dev: true @@ -17079,16 +17125,16 @@ packages: eslint: 8.22.0 dev: true - /eslint-config-prettier@8.8.0(eslint@8.36.0): + /eslint-config-prettier@8.8.0(eslint@8.38.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.36.0 + eslint: 8.38.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -17098,19 +17144,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - eslint: 8.36.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) - eslint-plugin-n: 15.6.1(eslint@8.36.0) - eslint-plugin-promise: 6.1.1(eslint@8.36.0) + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + eslint: 8.38.0 + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0) + eslint-plugin-n: 15.7.0(eslint@8.38.0) + eslint-plugin-promise: 6.1.1(eslint@8.38.0) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0): + /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -17118,23 +17164,23 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) - eslint-plugin-n: 15.6.1(eslint@8.36.0) - eslint-plugin-promise: 6.1.1(eslint@8.36.0) + eslint: 8.38.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0) + eslint-plugin-n: 15.7.0(eslint@8.38.0) + eslint-plugin-promise: 6.1.1(eslint@8.38.0) dev: true /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - is-core-module: 2.11.0 - resolve: 1.22.1 + is-core-module: 2.12.0 + resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0): + /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0): resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -17143,18 +17189,72 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.12.0 - eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) - get-tsconfig: 4.4.0 - globby: 13.1.3 - is-core-module: 2.11.0 + eslint: 8.38.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) + get-tsconfig: 4.5.0 + globby: 13.1.4 + is-core-module: 2.12.0 + is-glob: 4.0.3 + synckit: 0.8.5 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0): + resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4(supports-color@8.1.1) + enhanced-resolve: 5.12.0 + eslint: 8.38.0 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + get-tsconfig: 4.5.0 + globby: 13.1.4 + is-core-module: 2.12.0 is-glob: 4.0.3 synckit: 0.8.5 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.38.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17175,16 +17275,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.36.0 + eslint: 8.38.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17205,7 +17305,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) debug: 3.2.7 eslint: 8.22.0 eslint-import-resolver-node: 0.3.7 @@ -17213,7 +17313,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17234,54 +17334,54 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.36.0 + eslint: 8.38.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-astro@0.21.1(eslint@8.36.0): + /eslint-plugin-astro@0.21.1(eslint@8.38.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=7.0.0' dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 - '@typescript-eslint/types': 5.56.0 + '@jridgewell/sourcemap-codec': 1.4.15 + '@typescript-eslint/types': 5.58.0 astro-eslint-parser: 0.9.5 - eslint: 8.36.0 - eslint-utils: 3.0.0(eslint@8.36.0) + eslint: 8.38.0 + eslint-utils: 3.0.0(eslint@8.38.0) postcss: 8.4.24 postcss-selector-parser: 6.0.11 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es@4.1.0(eslint@8.36.0): + /eslint-plugin-es@4.1.0(eslint@8.38.0): resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.36.0 + eslint: 8.38.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.36.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.38.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.36.0 + eslint: 8.38.0 ignore: 5.2.4 dev: true - /eslint-plugin-functional@3.7.2(eslint@8.36.0)(typescript@4.9.5): + /eslint-plugin-functional@3.7.2(eslint@8.38.0)(typescript@4.9.5): resolution: {integrity: sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg==} engines: {node: '>=10.18.0'} peerDependencies: @@ -17294,18 +17394,51 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.38.0)(typescript@4.9.5) array.prototype.flatmap: 1.3.1 deepmerge: 4.3.1 escape-string-regexp: 4.0.0 - eslint: 8.36.0 + eslint: 8.38.0 object.fromentries: 2.0.6 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.38.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) + has: 1.0.3 + is-core-module: 2.12.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.2 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17315,21 +17448,21 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.36.0 + eslint: 8.38.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) has: 1.0.3 - is-core-module: 2.11.0 + is-core-module: 2.12.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17338,7 +17471,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17348,7 +17481,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -17356,13 +17489,13 @@ packages: doctrine: 2.1.0 eslint: 8.22.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) has: 1.0.3 - is-core-module: 2.11.0 + is-core-module: 2.12.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17371,7 +17504,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17381,21 +17514,21 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.36.0 + eslint: 8.38.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0) has: 1.0.3 - is-core-module: 2.11.0 + is-core-module: 2.12.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17404,30 +17537,30 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.6.1(eslint@8.36.0): - resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} + /eslint-plugin-n@15.7.0(eslint@8.38.0): + resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '>=7.0.0' dependencies: builtins: 5.0.1 - eslint: 8.36.0 - eslint-plugin-es: 4.1.0(eslint@8.36.0) - eslint-utils: 3.0.0(eslint@8.36.0) + eslint: 8.38.0 + eslint-plugin-es: 4.1.0(eslint@8.38.0) + eslint-utils: 3.0.0(eslint@8.38.0) ignore: 5.2.4 - is-core-module: 2.11.0 + is-core-module: 2.12.0 minimatch: 3.1.2 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.5.3 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.36.0): + /eslint-plugin-promise@6.1.1(eslint@8.38.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.36.0 + eslint: 8.38.0 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.22.0): @@ -17487,7 +17620,7 @@ packages: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -17496,28 +17629,28 @@ packages: - typescript dev: true - /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.57.0): + /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.58.0): resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: eslint: 8.22.0 - svelte: 3.57.0 + svelte: 3.58.0 dev: true - /eslint-plugin-tailwindcss@3.10.1(tailwindcss@3.2.7): - resolution: {integrity: sha512-NLPZ6b6nd/8CgGNMQ6NDiPUfBLQpSGu/u9RyX3MCZOwzNs2dFt1OamNAiRuo3Ixh7Gv4t5UcAcdNt8z74UDJkA==} + /eslint-plugin-tailwindcss@3.11.0(tailwindcss@3.3.1): + resolution: {integrity: sha512-RaraOG4D6VXutKnoNvFQ4+frTWGJDKtezy1yCrGFS7Um1to/npDNdh2GL19IRoGB/eanbtwhxFXy+xyEw0grAg==} engines: {node: '>=12.13.0'} peerDependencies: tailwindcss: ^3.2.2 dependencies: fast-glob: 3.2.12 postcss: 8.4.24 - tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) dev: false - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17527,12 +17660,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17542,12 +17675,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + eslint: 8.38.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.38.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17557,8 +17690,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5) + eslint: 8.38.0 eslint-rule-composer: 0.3.0 dev: true @@ -17598,13 +17731,13 @@ packages: eslint: 8.22.0 eslint-visitor-keys: 2.1.0 - /eslint-utils@3.0.0(eslint@8.36.0): + /eslint-utils@3.0.0(eslint@8.38.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.36.0 + eslint: 8.38.0 eslint-visitor-keys: 2.1.0 dev: true @@ -17616,12 +17749,8 @@ packages: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - /eslint-visitor-keys@3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.0: + resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint@8.22.0: @@ -17640,8 +17769,8 @@ packages: escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 eslint-utils: 3.0.0(eslint@8.22.0) - eslint-visitor-keys: 3.3.0 - espree: 9.5.0 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -17671,63 +17800,14 @@ packages: transitivePeerDependencies: - supports-color - /eslint@8.36.0: - resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) - '@eslint-community/regexpp': 4.4.1 - '@eslint/eslintrc': 2.0.1 - '@eslint/js': 8.36.0 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.3.0 - espree: 9.5.0 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.20.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.4.0 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /eslint@8.38.0: resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) - '@eslint-community/regexpp': 4.4.1 - '@eslint/eslintrc': 2.0.3 + '@eslint-community/regexpp': 4.5.0 + '@eslint/eslintrc': 2.0.2 '@eslint/js': 8.38.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 @@ -17739,8 +17819,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -17769,21 +17849,13 @@ packages: - supports-color dev: true - /espree@9.5.0: - resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} + /espree@9.5.1: + resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.1 - - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.0 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -18212,14 +18284,18 @@ packages: dependencies: pend: 1.2.0 - /felte@1.2.7(svelte@3.57.0): + /fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + dev: false + + /felte@1.2.7(svelte@3.58.0): resolution: {integrity: sha512-VfCkYBODReCUrYeRMmJ9lRs7O/pC4PYKMTT7E2K6m9UzmTGpm3Ql3C518J3gUVVG5ZeEeSEifUaqmrAcaWB89w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/core': 1.3.7 - svelte: 3.57.0 + svelte: 3.58.0 dev: false /fetch-blob@3.2.0: @@ -18409,11 +18485,15 @@ packages: /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /flow-parser@0.202.1: - resolution: {integrity: sha512-IA8mhyNEUtzAKh+lj1yNDLFiUr1NSwPC+exQgghQNARFU/DeWGpoNmuYYzMDFIYsOdVdDoTJTxRc+/cS9CVvNg==} + /flow-parser@0.203.1: + resolution: {integrity: sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==} engines: {node: '>=0.4.0'} dev: true + /fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + dev: false + /follow-redirects@1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -18458,7 +18538,7 @@ packages: cosmiconfig: 7.1.0 deepmerge: 4.3.1 fs-extra: 10.1.0 - memfs: 3.4.13 + memfs: 3.5.0 minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.1.1 @@ -18549,15 +18629,6 @@ packages: universalify: 2.0.0 dev: true - /fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -18741,8 +18812,8 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-tsconfig@4.4.0: - resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} + /get-tsconfig@4.5.0: + resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} dev: true /giget@1.1.2: @@ -18826,6 +18897,16 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -18847,14 +18928,14 @@ packages: once: 1.4.0 dev: true - /glob@9.3.2: - resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==} + /glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 7.4.3 - minipass: 4.2.5 - path-scurry: 1.6.3 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.6.4 dev: true /global-dirs@0.1.1: @@ -18922,8 +19003,8 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} + /globby@13.1.4: + resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 @@ -18936,12 +19017,12 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - /goober@2.1.12(csstype@3.1.1): + /goober@2.1.12(csstype@3.1.2): resolution: {integrity: sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==} peerDependencies: csstype: ^3.0.10 dependencies: - csstype: 3.1.1 + csstype: 3.1.2 dev: false /gopd@1.0.1: @@ -19211,8 +19292,8 @@ packages: /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /helmet@6.0.1: - resolution: {integrity: sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==} + /helmet@6.1.5: + resolution: {integrity: sha512-UgAvdoG0BhF9vcCh/j0bWtElo2ZHHk6OzC98NLCM6zK03DEVSM0vUAtT7iR+oTo2Mi6sGelAH3tL6B/uUWxV4g==} engines: {node: '>=14.0.0'} dev: false @@ -19278,7 +19359,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.8 + terser: 5.16.9 dev: true /html-parse-stringify@3.0.1: @@ -19397,8 +19478,8 @@ packages: - encoding dev: false - /i18next@22.4.13: - resolution: {integrity: sha512-GX7flMHRRqQA0I1yGLmaZ4Hwt1JfLqagk8QPDPZsqekbKtXsuIngSVWM/s3SLgNkrEXjA+0sMGNuOEkkmyqmWg==} + /i18next@22.4.14: + resolution: {integrity: sha512-VtLPtbdwGn0+DAeE00YkiKKXadkwg+rBUV+0v8v0ikEjwdiJ0gmYChVE4GIa9HXymY6wKapkL93vGT7xpq6aTw==} dependencies: '@babel/runtime': 7.21.0 dev: false @@ -19628,7 +19709,6 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -19670,8 +19750,8 @@ packages: ci-info: 3.8.0 dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module@2.12.0: + resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 @@ -19920,7 +20000,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -20065,7 +20144,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.22.5 - '@babel/parser': 7.21.3 + '@babel/parser': 7.21.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -20152,7 +20231,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -20180,7 +20259,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -20230,7 +20309,7 @@ packages: - utf-8-validate dev: true - /jest-cli@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): + /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -20247,7 +20326,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -20319,7 +20398,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -20327,7 +20406,7 @@ packages: - utf-8-validate dev: true - /jest-config@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): + /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -20342,7 +20421,7 @@ packages: '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 @@ -20362,7 +20441,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -20402,7 +20481,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -20480,7 +20559,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -20498,7 +20577,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -20510,7 +20589,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -20536,7 +20615,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.10 + '@types/node': 18.15.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -20556,7 +20635,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.10 + '@types/node': 18.15.11 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -20577,7 +20656,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -20676,7 +20755,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 dev: true /jest-mock@29.5.0: @@ -20684,7 +20763,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-util: 29.5.0 dev: true @@ -20754,7 +20833,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) jest-util: 27.5.1 jest-validate: 27.5.1 - resolve: 1.22.1 + resolve: 1.22.2 resolve.exports: 1.1.1 slash: 3.0.0 dev: true @@ -20769,7 +20848,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 - resolve: 1.22.1 + resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 dev: true @@ -20783,7 +20862,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -20815,7 +20894,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -20876,7 +20955,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -20899,7 +20978,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 graceful-fs: 4.2.11 dev: true @@ -20909,7 +20988,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/transform': 27.5.1 @@ -20939,8 +21018,8 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 @@ -20969,7 +21048,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -20981,7 +21060,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -21018,7 +21097,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.10 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -21031,7 +21110,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.10 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -21043,7 +21122,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -21052,7 +21131,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -21061,7 +21140,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -21088,7 +21167,7 @@ packages: - utf-8-validate dev: true - /jest@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): + /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -21101,7 +21180,7 @@ packages: '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color @@ -21128,6 +21207,10 @@ packages: - ts-node dev: true + /jiti@1.18.2: + resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} + hasBin: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -21178,13 +21261,43 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) - '@babel/preset-env': 7.20.2(@babel/core@7.22.5) - '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) + '@babel/preset-env': 7.20.2(@babel/core@7.21.4) + '@babel/preset-flow': 7.21.4(@babel/core@7.22.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) + '@babel/register': 7.21.0(@babel/core@7.22.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) + chalk: 4.1.2 + flow-parser: 0.203.1 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /jscodeshift@0.14.0(@babel/preset-env@7.21.4): + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/preset-env': 7.21.4(@babel/core@7.22.5) + '@babel/preset-flow': 7.21.4(@babel/core@7.22.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) '@babel/register': 7.21.0(@babel/core@7.22.5) babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) chalk: 4.1.2 - flow-parser: 0.202.1 + flow-parser: 0.203.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -21219,7 +21332,7 @@ packages: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.4 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 @@ -21261,7 +21374,7 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.4 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -21308,7 +21421,7 @@ packages: dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork '@types/json-schema': 7.0.11 - '@types/lodash': 4.14.191 + '@types/lodash': 4.14.192 '@types/prettier': 2.7.2 cli-color: 2.0.3 get-stdin: 8.0.0 @@ -21437,6 +21550,10 @@ packages: /kolorist@1.7.0: resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==} + /kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + dev: false + /lazy-universal-dotenv@4.0.0: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} engines: {node: '>=14.0.0'} @@ -21477,8 +21594,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /libphonenumber-js@1.10.24: - resolution: {integrity: sha512-3Dk8f5AmrcWqg+oHhmm9hwSTqpWHBdSqsHmjCJGroULFubi0+x7JEIGmRZCuL3TI8Tx39xaKqfnhsDQ4ALa/Nw==} + /libphonenumber-js@1.10.26: + resolution: {integrity: sha512-oB3l4J5gEhMV+ymmlIjWedsbCpsNRqbEZ/E/MpN2QVyinKNra6DcuXywxSk/72M3DZDoH/6kzurOq1erznBMwQ==} /lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -21492,7 +21609,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lint-staged@11.2.6: resolution: {integrity: sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==} @@ -21686,6 +21802,17 @@ packages: wrap-ansi: 6.2.0 dev: true + /logform@2.5.1: + resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} + dependencies: + '@colors/colors': 1.5.0 + '@types/triple-beam': 1.3.2 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.3.0 + dev: false + /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: false @@ -21735,9 +21862,9 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + /lru-cache@9.0.1: + resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} + engines: {node: 14 || >=16.14} dev: true /lru-queue@0.1.0: @@ -21795,13 +21922,20 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 /magic-string@0.29.0: resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /magic-string@0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /make-dir@1.3.0: @@ -21907,7 +22041,7 @@ packages: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.1.1 + mdast-util-to-string: 3.2.0 micromark: 3.1.0 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-decode-string: 1.0.2 @@ -21925,7 +22059,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 - micromark-extension-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.0 dev: false /mdast-util-gfm-autolink-literal@1.0.3: @@ -22066,7 +22200,7 @@ packages: '@types/unist': 2.0.6 longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 - mdast-util-to-string: 3.1.1 + mdast-util-to-string: 3.2.0 micromark-util-decode-string: 1.0.2 unist-util-visit: 4.1.2 zwitch: 2.0.4 @@ -22076,8 +22210,8 @@ packages: resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} dev: true - /mdast-util-to-string@3.1.1: - resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==} + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: '@types/mdast': 3.0.11 @@ -22085,8 +22219,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - /memfs@3.4.13: - resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} + /memfs@3.5.0: + resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 @@ -22184,8 +22318,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-frontmatter@1.0.1: - resolution: {integrity: sha512-9OJhCXkrpj8qIXW5AAgRZGvS8Q4GTMdH5+Ljt98kV4XQVflRGeEhNRYp6O/zCvf8c8lZ+wc4uwmbly27pS/s4Q==} + /micromark-extension-frontmatter@1.1.0: + resolution: {integrity: sha512-0nLelmvXR5aZ+F2IL6/Ed4cDnHLpL/VD/EELKuclsTWHrLI8UgxGHEmeoumeX2FXiM6z2WrBIOEcbKUZR8RYNg==} dependencies: fault: 2.0.1 micromark-util-character: 1.1.0 @@ -22203,8 +22337,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-footnote@1.0.4: - resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} + /micromark-extension-gfm-footnote@1.1.0: + resolution: {integrity: sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==} dependencies: micromark-core-commonmark: 1.0.6 micromark-factory-space: 1.0.0 @@ -22216,8 +22350,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-strikethrough@1.0.4: - resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} + /micromark-extension-gfm-strikethrough@1.0.5: + resolution: {integrity: sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==} dependencies: micromark-util-chunked: 1.0.0 micromark-util-classify-character: 1.0.0 @@ -22237,14 +22371,14 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-tagfilter@1.0.1: - resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: micromark-util-types: 1.0.2 dev: false - /micromark-extension-gfm-task-list-item@1.0.3: - resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} + /micromark-extension-gfm-task-list-item@1.0.4: + resolution: {integrity: sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 @@ -22257,11 +22391,11 @@ packages: resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} dependencies: micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.0.4 - micromark-extension-gfm-strikethrough: 1.0.4 + micromark-extension-gfm-footnote: 1.1.0 + micromark-extension-gfm-strikethrough: 1.0.5 micromark-extension-gfm-table: 1.0.5 - micromark-extension-gfm-tagfilter: 1.0.1 - micromark-extension-gfm-task-list-item: 1.0.3 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.4 micromark-util-combine-extensions: 1.0.0 micromark-util-types: 1.0.2 dev: false @@ -22588,13 +22722,20 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.3: - resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==} + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true + /minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -22617,9 +22758,14 @@ packages: dependencies: yallist: 4.0.0 - /minipass@4.2.5: - resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} + /minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -22753,14 +22899,14 @@ packages: - supports-color dev: true - /multer-s3@3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): + /multer-s3@3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==} engines: {node: '>= 12.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 dependencies: '@aws-sdk/client-s3': 3.325.0 - '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) + '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) file-type: 3.9.0 html-comment-regex: 1.1.2 run-parallel: 1.2.0 @@ -22789,7 +22935,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -22824,11 +22969,22 @@ packages: '@nestjs/graphql': optional: true dependencies: - '@nestjs/graphql': 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + '@nestjs/graphql': 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) accesscontrol: 2.2.1 dev: false - /nestjs-prisma@0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0): + /nestjs-cls@3.5.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): + resolution: {integrity: sha512-C7JX4Q8scpmCl4fZsNjx2JS50rL1fhdx2mckkZo300dUviVLiYMmy5Q0bXnrwW2cquk78mi9Vd3WlGuYCrExDQ==} + engines: {node: '>=12.17.0'} + peerDependencies: + '@nestjs/common': '> 7.0.0 < 11' + '@nestjs/core': '> 7.0.0 < 11' + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + dev: false + + /nestjs-prisma@0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0): resolution: {integrity: sha512-tqOcoJQh4U8Y7akyCwluo1VFqhqjqYy8JAYYfrKRhvZ7N4trt3wYXXllRGH3LeLaom09QchHP9WEo/BAV9JMjg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -22837,7 +22993,7 @@ packages: dependencies: '@angular-devkit/core': 13.3.11 '@angular-devkit/schematics': 13.3.11 - '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@prisma/client': 4.13.0(prisma@4.13.0) '@schematics/angular': 13.3.11 prisma: 4.13.0 @@ -22982,7 +23138,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 + resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -22992,7 +23148,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.11.0 + is-core-module: 2.12.0 semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -23052,8 +23208,8 @@ packages: boolbase: 1.0.0 dev: true - /nwsapi@2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi@2.2.4: + resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true /nx@15.0.2: @@ -23073,7 +23229,7 @@ packages: '@nrwl/tao': 15.0.2 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.0-rc.40 + '@yarnpkg/parsers': 3.0.0-rc.42 '@zkochan/js-yaml': 0.0.6 axios: 1.4.0 chalk: 4.1.0 @@ -23208,6 +23364,12 @@ packages: dependencies: wrappy: 1.0.2 + /one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + dependencies: + fn.name: 1.1.0 + dev: false + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -23272,7 +23434,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.7.0 + cli-spinners: 2.8.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -23285,7 +23447,7 @@ packages: dependencies: chalk: 5.2.0 cli-cursor: 4.0.0 - cli-spinners: 2.7.0 + cli-spinners: 2.8.0 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 @@ -23551,12 +23713,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.6.3: - resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==} + /path-scurry@1.6.4: + resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 7.18.3 - minipass: 4.2.5 + lru-cache: 9.0.1 + minipass: 5.0.0 dev: true /path-to-regexp@0.1.7: @@ -23650,7 +23812,6 @@ packages: /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} - dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -23680,8 +23841,8 @@ packages: pathe: 1.1.0 dev: true - /playwright-core@1.32.1: - resolution: {integrity: sha512-KZYUQC10mXD2Am1rGlidaalNGYk3LU1vZqqNk0gT4XPty1jOqgup8KDP8l2CUlqoNKhXM5IfGjWgW37xvGllBA==} + /playwright-core@1.32.3: + resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} engines: {node: '>=14'} hasBin: true dev: true @@ -23713,7 +23874,7 @@ packages: postcss: 8.4.21 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 /postcss-import@14.1.0(postcss@8.4.24): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} @@ -23724,7 +23885,7 @@ packages: postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -23758,7 +23919,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.21 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) yaml: 1.10.2 /postcss-load-config@3.1.4(postcss@8.4.24)(ts-node@10.9.1): @@ -23775,7 +23936,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.24 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) yaml: 1.10.2 /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): @@ -23792,7 +23953,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.24 - ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) yaml: 2.3.1 dev: false @@ -23890,28 +24051,28 @@ packages: synckit: 0.8.5 dev: false - /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.57.0): + /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.58.0): resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: prettier: 2.8.7 - svelte: 3.57.0 + svelte: 3.58.0 dev: true - /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.57.0): + /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0): resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: prettier: 2.8.8 - svelte: 3.57.0 + svelte: 3.58.0 dev: true - /prettier-plugin-tailwindcss@0.2.5(prettier@2.8.7): - resolution: {integrity: sha512-vZ/iKieyCx0WTxHbkf5E1rBlv/ybFk8WTT4hL5W2jlVxum2Zbe0jMUpuQdDrpa4z2vnPiJ5KIWCqL/kd16fKYg==} + /prettier-plugin-tailwindcss@0.2.7(prettier@2.8.7): + resolution: {integrity: sha512-jQopIOgjLpX+y8HeD56XZw7onupRTC0cw7eKKUimI7vhjkPF5/1ltW5LyqaPtSyc8HvEpvNZsvvsGFa2qpa59w==} engines: {node: '>=12.17.0'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -24265,7 +24426,7 @@ packages: estree-to-babel: 3.2.1 neo-async: 2.6.2 node-dir: 0.1.17 - resolve: 1.22.1 + resolve: 1.22.2 strip-indent: 3.0.0 transitivePeerDependencies: - supports-color @@ -24302,21 +24463,21 @@ packages: react: 18.2.0 dev: false - /react-hot-toast@2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0): + /react-hot-toast@2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==} engines: {node: '>=10'} peerDependencies: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.1.12(csstype@3.1.1) + goober: 2.1.12(csstype@3.1.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - csstype dev: false - /react-i18next@12.2.0(i18next@22.4.13)(react-dom@18.2.0)(react@18.2.0): + /react-i18next@12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} peerDependencies: i18next: '>= 19.0.0' @@ -24331,7 +24492,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 html-parse-stringify: 3.0.1 - i18next: 22.4.13 + i18next: 22.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -24390,7 +24551,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar@2.3.4(@types/react@18.0.29)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -24400,9 +24561,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.29)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) tslib: 2.5.2 dev: false @@ -24441,7 +24602,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.0.37)(react@18.2.0) dev: false - /react-remove-scroll@2.5.5(@types/react@18.0.29)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -24451,13 +24612,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.29)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.29)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.0.35)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) tslib: 2.5.2 - use-callback-ref: 1.3.0(@types/react@18.0.29)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.29)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.0.35)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.35)(react@18.2.0) dev: false /react-remove-scroll@2.5.5(@types/react@18.0.37)(react@18.2.0): @@ -24536,7 +24697,7 @@ packages: react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) dev: false - /react-style-singleton@2.2.1(@types/react@18.0.29)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -24546,7 +24707,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -24719,7 +24880,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.1 + resolve: 1.22.2 dev: true /redent@3.0.0: @@ -24859,7 +25020,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-frontmatter: 1.0.1 - micromark-extension-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.0 unified: 10.1.2 dev: false @@ -24916,7 +25077,7 @@ packages: '@types/hast': 2.3.4 '@types/mdast': 3.0.11 github-slugger: 1.5.0 - mdast-util-to-string: 3.1.1 + mdast-util-to-string: 3.2.0 unified: 10.1.2 unist-util-visit: 4.1.2 dev: true @@ -25003,15 +25164,15 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.11.0 + is-core-module: 2.12.0 path-parse: 1.0.7 dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.12.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -25019,7 +25180,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.12.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -25107,7 +25268,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 9.3.2 + glob: 9.3.5 dev: true /rimraf@4.4.1: @@ -25115,7 +25276,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 9.3.2 + glob: 9.3.5 dev: true /rollup-plugin-dts@4.2.2(rollup@2.70.2)(typescript@4.9.5): @@ -25147,11 +25308,11 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.21.4 jest-worker: 26.6.2 rollup: 2.70.2 serialize-javascript: 4.0.0 - terser: 5.16.8 + terser: 5.16.9 dev: true /rollup-plugin-typescript-paths@1.4.0(typescript@4.9.5): @@ -25267,6 +25428,11 @@ packages: is-regex: 1.1.4 dev: true + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -25284,9 +25450,9 @@ packages: dependencies: suf-log: 2.5.3 - /sass@1.60.0: - resolution: {integrity: sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==} - engines: {node: '>=12.0.0'} + /sass@1.62.0: + resolution: {integrity: sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==} + engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.5.3 @@ -25373,6 +25539,14 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver@7.4.0: + resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} @@ -25438,6 +25612,11 @@ packages: resolution: {integrity: sha512-1chMo1dST4pFA9RDXAtF0Rbjaut4is7bzFbI1Z26IuMub68pNCILku85aYmeFhvnY//BXUPUhoRMjYcsT93J/Q==} dev: false + /seroval@0.5.1: + resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} + engines: {node: '>=10'} + dev: false + /serve-favicon@2.5.0: resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} engines: {node: '>= 0.8.0'} @@ -25520,8 +25699,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shell-quote@1.8.0: - resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -25533,6 +25712,15 @@ packages: rechoir: 0.6.2 dev: true + /shiki@0.14.1: + resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} + dependencies: + ansi-sequence-parser: 1.1.0 + jsonc-parser: 3.2.0 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + dev: true + /shiki@0.14.2: resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: @@ -25540,6 +25728,7 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 + dev: false /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -25559,7 +25748,6 @@ packages: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 - dev: true /simple-update-notifier@1.1.0: resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} @@ -25574,7 +25762,7 @@ packages: dependencies: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 - totalist: 3.0.0 + totalist: 3.0.1 dev: false /sisteransi@1.0.5: @@ -25656,10 +25844,11 @@ packages: resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==} dev: true - /solid-js@1.6.15: - resolution: {integrity: sha512-xEuMUIdDf4YRFT4i3XEJCNg4Y21lZiWWPSEqj0R3UnLLpENGJVXkqpmbIyRU5CuMImKPIEu5CYgmFKL7Npfe1A==} + /solid-js@1.7.3: + resolution: {integrity: sha512-4hwaF/zV/xbNeBBIYDyu3dcReOZBECbO//mrra6GqOrKy4Soyo+fnKjpZSa0nODm6j1aL0iQRh/7ofYowH+jzw==} dependencies: - csstype: 3.1.1 + csstype: 3.1.2 + seroval: 0.5.1 dev: false /sorcery@0.10.0: @@ -25778,11 +25967,11 @@ packages: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} dependencies: '@types/ssh2': 0.5.52 - ssh2: 1.14.0 + ssh2: 1.13.0 dev: true - /ssh2@1.14.0: - resolution: {integrity: sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==} + /ssh2@1.13.0: + resolution: {integrity: sha512-CIZBFRRY1y9mAZSqBGFE4EB4dNJad2ysT2PqO8OpkiI3UTB/gUZwE5EaN16qVyQ6s/M7EgC/iaV/MnjdlvnuzA==} engines: {node: '>=10.16.0'} requiresBuild: true dependencies: @@ -25793,6 +25982,10 @@ packages: nan: 2.17.0 dev: true + /stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + dev: false + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -26080,6 +26273,19 @@ packages: - utf-8-validate dev: false + /sucrase@3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.5 + ts-interface-checker: 0.1.13 + /suf-log@2.5.3: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: @@ -26187,20 +26393,20 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0): + /svelte-check@2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0): resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} hasBin: true peerDependencies: svelte: ^3.24.0 dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.18 chokidar: 3.5.3 fast-glob: 3.2.12 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 3.57.0 - svelte-preprocess: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) + svelte: 3.58.0 + svelte-preprocess: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' @@ -26215,16 +26421,16 @@ packages: - sugarss dev: true - /svelte-hmr@0.15.1(svelte@3.57.0): + /svelte-hmr@0.15.1(svelte@3.58.0): resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: '>=3.19.0' dependencies: - svelte: 3.57.0 + svelte: 3.58.0 dev: true - /svelte-preprocess@4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5): + /svelte-preprocess@4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -26265,7 +26471,7 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.21.4 '@types/pug': 2.0.6 '@types/sass': 1.45.0 detect-indent: 6.1.0 @@ -26273,20 +26479,20 @@ packages: postcss: 8.4.21 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.57.0 + svelte: 3.58.0 typescript: 4.9.5 dev: true - /svelte@3.57.0: - resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} + /svelte@3.58.0: + resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==} engines: {node: '>= 8'} /swagger-ui-dist@4.15.5: resolution: {integrity: sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==} dev: true - /swagger-ui-dist@4.18.1: - resolution: {integrity: sha512-n7AT4wzKIPpHy/BGflJOepGMrbY/7Cd5yVd9ptVczaJGAKScbVJrZxFbAE2ZSZa8KmqdQ0+pOs3/5mWY5tSMZQ==} + /swagger-ui-dist@4.18.2: + resolution: {integrity: sha512-oVBoBl9Dg+VJw8uRWDxlyUyHoNEDC0c1ysT6+Boy6CTgr2rUcLcfPon4RvxgS2/taNW6O0+US+Z/dlAsWFjOAQ==} dev: false /swagger-ui-express@4.6.2(express@4.18.2): @@ -26296,7 +26502,7 @@ packages: express: '>=4.0.0' dependencies: express: 4.18.2 - swagger-ui-dist: 4.18.1 + swagger-ui-dist: 4.18.2 dev: false /symbol-observable@1.2.0: @@ -26324,24 +26530,24 @@ packages: '@pkgr/utils': 2.3.1 tslib: 2.5.2 - /tailwind-merge@1.10.0: - resolution: {integrity: sha512-WFnDXSS4kFTZwjKg5/oZSGzBRU/l+qcbv5NVTzLUQvJ9yovDAP05h0F2+ZFW0Lw9EcgRoc2AfURUdZvnEFrXKg==} + /tailwind-merge@1.12.0: + resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==} dev: false /tailwind-merge@1.13.2: resolution: {integrity: sha512-R2/nULkdg1VR/EL4RXg4dEohdoxNUJGLMnWIQnPKL+O9Twu7Cn3Rxi4dlXkDzZrEGtR+G+psSXFouWlpTyLhCQ==} dev: false - /tailwindcss-animate@1.0.5(tailwindcss@3.2.7): + /tailwindcss-animate@1.0.5(tailwindcss@3.3.1): resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) dev: false - /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): - resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + /tailwindcss@3.3.1(postcss@8.4.21)(ts-node@10.9.1): + resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -26350,12 +26556,12 @@ packages: arg: 5.0.2 chokidar: 3.5.3 color-name: 1.1.4 - detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 + jiti: 1.18.2 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -26369,12 +26575,13 @@ packages: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.1 + resolve: 1.22.2 + sucrase: 3.32.0 transitivePeerDependencies: - ts-node - /tailwindcss@3.2.7(postcss@8.4.24)(ts-node@10.9.1): - resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + /tailwindcss@3.3.1(postcss@8.4.24)(ts-node@10.9.1): + resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -26383,12 +26590,12 @@ packages: arg: 5.0.2 chokidar: 3.5.3 color-name: 1.1.4 - detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 + jiti: 1.18.2 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -26402,7 +26609,8 @@ packages: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.1 + resolve: 1.22.2 + sucrase: 3.32.0 transitivePeerDependencies: - ts-node @@ -26459,7 +26667,7 @@ packages: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.2.5 + minipass: 4.2.8 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -26555,31 +26763,31 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 - terser: 5.16.8 + terser: 5.16.9 webpack: 5.76.2 dev: true - /terser@5.16.8: - resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==} + /terser@5.16.9: + resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 + '@jridgewell/source-map': 0.3.3 acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true - /tesseract.js-core@4.0.2: - resolution: {integrity: sha512-ZVyYPN+ZAos31ZErqzcFme6XaOA8xrZxisNyk3nTicHVPSqtQH7UgZ36XoZZY0Exeugr5A+Uxv5ll9aMd1c0jg==} + /tesseract.js-core@4.0.3: + resolution: {integrity: sha512-NqSqnq0dNhlQYw9JYWUh0rymN0gG/GaLmP2gdRnxUIivzYkPa0aYQW4WSRO6lGKIabyqxa2j2sELBujyOFYVgQ==} dev: false - /tesseract.js@4.0.2(eslint@8.22.0): - resolution: {integrity: sha512-OKc6N68czBa8QnoBwx+kAUG4OyqskXa1O7wSrOXOEYZ0TQcGa3daRVIsRhtVAmNMTrvZnOsg49kfNrw0BZaFEA==} + /tesseract.js@4.0.3(eslint@8.22.0): + resolution: {integrity: sha512-hgFhIx1pqtZD95/xG6mhETpy5lbIzgBoBGPUntb2uIXVk7KcfHo3+ObgPxNZtLOI7LfXXfBvgfraQVmQSo7m9g==} requiresBuild: true dependencies: babel-eslint: 10.1.0(eslint@8.22.0) @@ -26592,7 +26800,7 @@ packages: opencollective-postinstall: 2.0.3 regenerator-runtime: 0.13.11 resolve-url: 0.2.1 - tesseract.js-core: 4.0.2 + tesseract.js-core: 4.0.3 wasm-feature-detect: 1.5.1 zlibjs: 0.3.1 transitivePeerDependencies: @@ -26638,6 +26846,10 @@ packages: engines: {node: '>=0.10'} dev: true + /text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + dev: false + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -26646,13 +26858,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} @@ -26775,8 +26985,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - /totalist@3.0.0: - resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} dev: false @@ -26827,6 +27037,10 @@ packages: escape-string-regexp: 1.0.5 dev: false + /triple-beam@1.3.0: + resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} + dev: false + /trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} @@ -26843,6 +27057,9 @@ packages: typescript: 4.9.5 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /ts-jest@27.0.3(jest@27.0.6)(typescript@4.9.5): resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -26860,7 +27077,7 @@ packages: lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.3.8 + semver: 7.4.0 typescript: 4.9.5 yargs-parser: 20.2.9 dev: true @@ -26889,12 +27106,12 @@ packages: '@babel/core': 7.22.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.8 + semver: 7.4.0 typescript: 4.9.5 yargs-parser: 21.1.1 dev: true @@ -26928,7 +27145,7 @@ packages: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.8 + semver: 7.4.0 typescript: 5.0.2 yargs-parser: 21.1.1 dev: true @@ -26943,7 +27160,7 @@ packages: chalk: 4.1.2 enhanced-resolve: 5.12.0 micromatch: 4.0.5 - semver: 7.3.8 + semver: 7.4.0 typescript: 4.9.5 webpack: 5.76.2 dev: true @@ -26955,7 +27172,7 @@ packages: code-block-writer: 11.0.3 dev: true - /ts-node@10.9.1(@types/node@18.15.10)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@18.15.11)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -26974,7 +27191,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.10 + '@types/node': 18.15.11 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -27040,7 +27257,7 @@ packages: '@types/json5': 0.0.30 '@types/resolve': 1.20.2 json5: 2.2.3 - resolve: 1.22.1 + resolve: 1.22.2 strip-bom: 4.0.0 type-fest: 0.13.1 dev: false @@ -27198,10 +27415,10 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typedoc-plugin-markdown@3.14.0(typedoc@0.23.28): - resolution: {integrity: sha512-UyQLkLRkfTFhLdhSf3RRpA3nNInGn+k6sll2vRXjflaMNwQAAiB61SYbisNZTg16t4K1dt1bPQMMGLrxS0GZ0Q==} + /typedoc-plugin-markdown@3.15.1(typedoc@0.23.28): + resolution: {integrity: sha512-TaXE8gc8s5YepU1Ogyqfkh+khPE1/n4rV5vaoZCNyXvSLv62jWmHf443lHiQh7r07qAimUOKAndaaufAeIUSiQ==} peerDependencies: - typedoc: '>=0.23.0' + typedoc: '>=0.24.0' dependencies: handlebars: 4.7.7 typedoc: 0.23.28(typescript@4.9.5) @@ -27216,8 +27433,8 @@ packages: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 7.4.3 - shiki: 0.14.2 + minimatch: 7.4.6 + shiki: 0.14.1 typescript: 4.9.5 dev: true @@ -27252,7 +27469,13 @@ packages: resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==} engines: {node: '>=8'} dependencies: - '@lukeed/csprng': 1.0.1 + '@lukeed/csprng': 1.1.0 + + /uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + dependencies: + '@lukeed/csprng': 1.1.0 /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -27471,7 +27694,7 @@ packages: engines: {node: '>= 4'} dev: false - /use-callback-ref@1.3.0(@types/react@18.0.29)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -27481,7 +27704,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 tslib: 2.5.2 dev: false @@ -27501,7 +27724,7 @@ packages: tslib: 2.5.2 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.29)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -27510,7 +27733,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 react: 18.2.0 dev: false @@ -27557,7 +27780,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /use-sidecar@1.1.2(@types/react@18.0.29)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.0.35)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -27567,7 +27790,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.29 + '@types/react': 18.0.35 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.5.2 @@ -27671,7 +27894,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -27740,7 +27963,7 @@ packages: d3-timer: 3.0.1 dev: false - /vite-node@0.28.5(@types/node@18.15.10): + /vite-node@0.28.5(@types/node@18.15.11): resolution: {integrity: sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==} engines: {node: '>=v14.16.0'} hasBin: true @@ -27752,7 +27975,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' - less @@ -27763,7 +27986,7 @@ packages: - terser dev: true - /vite-node@0.29.8(@types/node@18.15.10): + /vite-node@0.29.8(@types/node@18.15.11): resolution: {integrity: sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==} engines: {node: '>=v14.16.0'} hasBin: true @@ -27773,7 +27996,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' - less @@ -27837,21 +28060,21 @@ packages: vscode-uri: 3.0.7 dev: true - /vite-plugin-dts@1.7.3(@types/node@18.15.10)(vite@4.0.3): + /vite-plugin-dts@1.7.3(@types/node@18.15.11)(vite@4.0.3): resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.34.4(@types/node@18.15.10) + '@microsoft/api-extractor': 7.34.4(@types/node@18.15.11) '@rollup/pluginutils': 5.0.2(rollup@2.70.2) - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 fs-extra: 10.1.0 kolorist: 1.7.0 ts-morph: 17.0.1 - vite: 4.0.3(@types/node@18.15.10) + vite: 4.0.3(@types/node@18.15.11) transitivePeerDependencies: - '@types/node' - rollup @@ -27875,7 +28098,7 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.0.3(@types/node@18.15.10) + vite: 4.0.3(@types/node@18.15.11) dev: true /vite-plugin-terminal@1.1.0(vite@4.2.1): @@ -27889,14 +28112,14 @@ packages: kolorist: 1.7.0 sirv: 2.0.2 ufo: 1.1.1 - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) transitivePeerDependencies: - rollup - supports-color dev: false - /vite-tsconfig-paths@4.0.7(typescript@4.9.5)(vite@4.2.1): - resolution: {integrity: sha512-MwIYaby6kcbQGZqMH+gAK6h0UYQGOkjsuAgw4q6bP/5vWkn8VKvnmLuCQHA2+IzHAJHnE8OFTO4lnJLFMf9+7Q==} + /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.2.1): + resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -27906,13 +28129,13 @@ packages: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) transitivePeerDependencies: - supports-color - typescript dev: false - /vite@3.2.5(@types/node@18.15.10): + /vite@3.2.5(@types/node@18.15.11): resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -27937,15 +28160,15 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 esbuild: 0.15.18 postcss: 8.4.24 - resolve: 1.22.1 + resolve: 1.22.2 rollup: 2.79.1 optionalDependencies: fsevents: 2.3.2 - /vite@4.0.3(@types/node@18.15.10): + /vite@4.0.3(@types/node@18.15.11): resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -27970,16 +28193,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 esbuild: 0.16.17 postcss: 8.4.24 - resolve: 1.22.1 + resolve: 1.22.2 rollup: 3.20.2 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.2.1(@types/node@18.15.10): + /vite@4.2.1(@types/node@18.15.11): resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28004,15 +28227,15 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.10 - esbuild: 0.17.14 - postcss: 8.4.24 - resolve: 1.22.1 + '@types/node': 18.15.11 + esbuild: 0.17.16 + postcss: 8.4.21 + resolve: 1.22.2 rollup: 3.20.2 optionalDependencies: fsevents: 2.3.2 - /vite@4.3.9(@types/node@18.15.10): + /vite@4.3.9(@types/node@18.15.11): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28037,7 +28260,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.10 + '@types/node': 18.15.11 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 @@ -28085,7 +28308,7 @@ packages: vite: optional: true dependencies: - vite: 3.2.5(@types/node@18.15.10) + vite: 3.2.5(@types/node@18.15.11) dev: false /vitefu@0.2.4(vite@4.2.1): @@ -28096,7 +28319,7 @@ packages: vite: optional: true dependencies: - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@18.15.11) dev: true /vitefu@0.2.4(vite@4.3.9): @@ -28107,7 +28330,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) dev: false /vitest@0.24.5(jsdom@20.0.3): @@ -28134,7 +28357,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.10 + '@types/node': 18.15.11 chai: 4.3.7 debug: 4.3.4(supports-color@8.1.1) jsdom: 20.0.3 @@ -28143,7 +28366,7 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 3.2.5(@types/node@18.15.10) + vite: 3.2.5(@types/node@18.15.11) transitivePeerDependencies: - less - sass @@ -28177,7 +28400,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@vitest/expect': 0.28.5 '@vitest/runner': 0.28.5 '@vitest/spy': 0.28.5 @@ -28197,8 +28420,8 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.10) - vite-node: 0.28.5(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) + vite-node: 0.28.5(@types/node@18.15.11) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -28242,7 +28465,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.10 + '@types/node': 18.15.11 '@vitest/expect': 0.29.8 '@vitest/runner': 0.29.8 '@vitest/spy': 0.29.8 @@ -28261,8 +28484,8 @@ packages: tinybench: 2.4.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.10) - vite-node: 0.29.8(@types/node@18.15.10) + vite: 4.3.9(@types/node@18.15.11) + vite-node: 0.29.8(@types/node@18.15.11) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -28652,6 +28875,32 @@ packages: execa: 4.1.0 dev: true + /winston-transport@4.5.0: + resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} + engines: {node: '>= 6.4.0'} + dependencies: + logform: 2.5.1 + readable-stream: 3.6.2 + triple-beam: 1.3.0 + dev: false + + /winston@3.9.0: + resolution: {integrity: sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@colors/colors': 1.5.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.4 + is-stream: 2.0.1 + logform: 2.5.1 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.4.3 + stack-trace: 0.0.10 + triple-beam: 1.3.0 + winston-transport: 4.5.0 + dev: false + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 4e0327c1b5..9296152de2 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -73,6 +73,7 @@ "lodash": "^4.17.21", "multer-s3": "3.0.1", "nest-access-control": "2.2.0", + "nestjs-cls": "^3.5.0", "nestjs-prisma": "0.20.0", "passport": "0.6.0", "passport-http": "0.3.0", @@ -82,6 +83,7 @@ "rxjs": "^7.8.0", "swagger-ui-express": "4.6.2", "tmp": "^0.2.1", + "winston": "^3.9.0", "zod": "^3.21.4" }, "devDependencies": { diff --git a/services/workflows-service/src/app.module.ts b/services/workflows-service/src/app.module.ts index 45562aeccf..a40c5979e1 100644 --- a/services/workflows-service/src/app.module.ts +++ b/services/workflows-service/src/app.module.ts @@ -1,4 +1,4 @@ -import { MiddlewareConsumer, Module, Scope } from '@nestjs/common'; +import { MiddlewareConsumer, Module } from '@nestjs/common'; import { APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core'; import { UserModule } from './user/user.module'; import { WorkflowModule } from './workflow/workflow.module'; @@ -21,6 +21,9 @@ import { env } from '@/env'; import { SentryModule } from '@/sentry/sentry.module'; import { RequestIdMiddleware } from '@/common/middlewares/request-id.middleware'; import { LogRequestInterceptor } from '@/common/interceptors/log-request.interceptor'; +import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; +import { ClsModule } from 'nestjs-cls'; +import { FiltersModule } from '@/common/filters/filters.module'; @Module({ controllers: [], @@ -54,6 +57,11 @@ import { LogRequestInterceptor } from '@/common/interceptors/log-request.interce ServeStaticModule.forRootAsync({ useClass: ServeStaticOptionsService, }), + ClsModule.forRoot({ + global: true, + }), + AppLoggerModule, + FiltersModule, ], providers: [ { diff --git a/services/workflows-service/src/common/abstract-logger/abstract-logger.ts b/services/workflows-service/src/common/abstract-logger/abstract-logger.ts new file mode 100644 index 0000000000..4417af2dda --- /dev/null +++ b/services/workflows-service/src/common/abstract-logger/abstract-logger.ts @@ -0,0 +1,11 @@ +export interface LogPayload { + [k: string]: any; +} + +export abstract class IAppLogger { + abstract log(message: string, payload: LogPayload): void; + abstract info(message: string, payload: LogPayload): void; + abstract warn(message: string, payload: LogPayload): void; + abstract debug(message: string, payload: LogPayload): void; + abstract error(message: string, payload: LogPayload): void; +} diff --git a/services/workflows-service/src/common/app-logger/app-logger.module.ts b/services/workflows-service/src/common/app-logger/app-logger.module.ts new file mode 100644 index 0000000000..b711f4d53e --- /dev/null +++ b/services/workflows-service/src/common/app-logger/app-logger.module.ts @@ -0,0 +1,10 @@ +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { WinstonLogger } from '@/common/utils/winston-logger/winston-logger'; +import { Global, Module } from '@nestjs/common'; + +@Global() +@Module({ + providers: [{ useClass: WinstonLogger, provide: 'LOGGER' }, AppLoggerService], + exports: [AppLoggerService], +}) +export class AppLoggerModule {} diff --git a/services/workflows-service/src/common/app-logger/app-logger.service.ts b/services/workflows-service/src/common/app-logger/app-logger.service.ts new file mode 100644 index 0000000000..8a38d7c5f3 --- /dev/null +++ b/services/workflows-service/src/common/app-logger/app-logger.service.ts @@ -0,0 +1,33 @@ +import { IAppLogger, LogPayload } from '@/common/abstract-logger/abstract-logger'; +import { Inject, Injectable, LoggerService } from '@nestjs/common'; +import { ClsService } from 'nestjs-cls'; + +@Injectable() +export class AppLoggerService implements LoggerService { + constructor( + @Inject('LOGGER') private readonly logger: IAppLogger, + private readonly cls: ClsService, + ) {} + + log(message: string, payload: LogPayload = {}) { + this.logger.info(message, { ...this.getLogMetadata(), logData: payload }); + } + + error(message: string, payload: LogPayload = {}) { + this.logger.error(message, { ...this.getLogMetadata(), logData: payload }); + } + + warn(message: string, payload: LogPayload = {}) { + this.logger.warn(message, { ...this.getLogMetadata(), logData: payload }); + } + + debug(message: string, payload: LogPayload = {}) { + this.logger.debug(message, { ...this.getLogMetadata(), logData: payload }); + } + + private getLogMetadata() { + return { + requestId: this.cls.get('requestId'), + }; + } +} diff --git a/services/workflows-service/src/common/filters/AllExceptions.filter.ts b/services/workflows-service/src/common/filters/AllExceptions.filter.ts index 3d5f8d1660..79fe76cd88 100644 --- a/services/workflows-service/src/common/filters/AllExceptions.filter.ts +++ b/services/workflows-service/src/common/filters/AllExceptions.filter.ts @@ -1,10 +1,13 @@ -import { Catch, ArgumentsHost, Logger } from '@nestjs/common'; -import { BaseExceptionFilter } from '@nestjs/core'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { Catch, ArgumentsHost } from '@nestjs/common'; +import { BaseExceptionFilter, HttpAdapterHost } from '@nestjs/core'; import { Response } from 'express'; @Catch() export class AllExceptionsFilter extends BaseExceptionFilter { - private readonly logger = new Logger(AllExceptionsFilter.name); + constructor(private readonly logger: AppLoggerService, applicationRef?: HttpAdapterHost) { + super(applicationRef?.httpAdapter); + } catch(exception: unknown, host: ArgumentsHost) { // if (host.getType() === 'http') return; diff --git a/services/workflows-service/src/common/filters/HttpExceptions.filter.ts b/services/workflows-service/src/common/filters/HttpExceptions.filter.ts index 07d45025f7..adbb608169 100644 --- a/services/workflows-service/src/common/filters/HttpExceptions.filter.ts +++ b/services/workflows-service/src/common/filters/HttpExceptions.filter.ts @@ -1,5 +1,5 @@ import { ArgumentsHost, Catch, HttpException, HttpServer, HttpStatus } from '@nestjs/common'; -import { BaseExceptionFilter } from '@nestjs/core'; +import { BaseExceptionFilter, HttpAdapterHost } from '@nestjs/core'; import { Prisma } from '@prisma/client'; import { Response } from 'express'; @@ -28,8 +28,8 @@ export class HttpExceptionFilter extends BaseExceptionFilter { * @param applicationRef */ // eslint-disable-next-line @typescript-eslint/no-useless-constructor - constructor(applicationRef?: HttpServer) { - super(applicationRef); + constructor(applicationRef?: HttpAdapterHost) { + super(applicationRef?.httpAdapter); } /** diff --git a/services/workflows-service/src/common/filters/filters.module.ts b/services/workflows-service/src/common/filters/filters.module.ts new file mode 100644 index 0000000000..f99396087e --- /dev/null +++ b/services/workflows-service/src/common/filters/filters.module.ts @@ -0,0 +1,14 @@ +import { AllExceptionsFilter } from '@/common/filters/AllExceptions.filter'; +import { HttpExceptionFilter } from '@/common/filters/HttpExceptions.filter'; +import { PrismaClientValidationFilter } from '@/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter'; +import { Module } from '@nestjs/common'; +import { APP_FILTER } from '@nestjs/core'; + +@Module({ + providers: [ + { provide: APP_FILTER, useClass: AllExceptionsFilter }, + { provide: APP_FILTER, useClass: HttpExceptionFilter }, + { provide: APP_FILTER, useClass: PrismaClientValidationFilter }, + ], +}) +export class FiltersModule {} diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts index 10111bdc04..96b7ae4521 100644 --- a/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter.ts @@ -1,15 +1,18 @@ import { PrismaValidationExceptionParser } from './utils/PrismaValidationExceptionParser'; -import { ArgumentsHost, Catch, HttpStatus, Logger } from '@nestjs/common'; +import { ArgumentsHost, Catch, HttpStatus, Injectable, Logger } from '@nestjs/common'; import { BaseExceptionFilter } from '@nestjs/core'; import { Prisma } from '@prisma/client'; import { PrismaClientValidationError } from '@prisma/client/runtime'; import { PrismaValidationExceptionParseResult } from '@/common/filters/prisma-client-validation-filter/utils/types'; import { InvalidArgumentParser } from '@/common/filters/prisma-client-validation-filter/utils/parsers/invalid-argument-parser/invalid-argument.parser'; import { UnknownArgumentParser } from '@/common/filters/prisma-client-validation-filter/utils/parsers/unknown-argument-parser/unknown-argument-parser'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; @Catch(Prisma.PrismaClientValidationError) export class PrismaClientValidationFilter extends BaseExceptionFilter { - private readonly logger = new Logger(PrismaClientValidationFilter.name); + constructor(private readonly logger: AppLoggerService) { + super(); + } catch(exception: PrismaClientValidationError, host: ArgumentsHost) { const context = host.switchToHttp(); diff --git a/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.module.ts b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.module.ts new file mode 100644 index 0000000000..318e5d98eb --- /dev/null +++ b/services/workflows-service/src/common/filters/prisma-client-validation-filter/PrismaClientValidation.module.ts @@ -0,0 +1,8 @@ +import { PrismaClientValidationFilter } from '@/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter'; +import { Module } from '@nestjs/common'; +import { APP_FILTER } from '@nestjs/core'; + +@Module({ + providers: [{ provide: APP_FILTER, useClass: PrismaClientValidationFilter }], +}) +export class PrismaClientValidationModule {} diff --git a/services/workflows-service/src/common/interceptors/log-request.interceptor.ts b/services/workflows-service/src/common/interceptors/log-request.interceptor.ts index 362e37c753..baaae5a64a 100644 --- a/services/workflows-service/src/common/interceptors/log-request.interceptor.ts +++ b/services/workflows-service/src/common/interceptors/log-request.interceptor.ts @@ -1,10 +1,11 @@ import { CallHandler, ExecutionContext, Injectable, Logger, NestInterceptor } from '@nestjs/common'; import { tap } from 'rxjs'; import { Response } from 'express'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; @Injectable() export class LogRequestInterceptor implements NestInterceptor { - private readonly logger = new Logger(LogRequestInterceptor.name); + constructor(private readonly logger: AppLoggerService) {} intercept(context: ExecutionContext, next: CallHandler) { return next.handle().pipe( diff --git a/services/workflows-service/src/common/middlewares/request-id.middleware.ts b/services/workflows-service/src/common/middlewares/request-id.middleware.ts index ca5455ff32..563153b0f3 100644 --- a/services/workflows-service/src/common/middlewares/request-id.middleware.ts +++ b/services/workflows-service/src/common/middlewares/request-id.middleware.ts @@ -1,10 +1,12 @@ -import { Injectable, Logger, NestMiddleware, Scope } from '@nestjs/common'; +import { Injectable, NestMiddleware, Scope } from '@nestjs/common'; import { NextFunction, Request, Response } from 'express'; import { randomUUID } from 'crypto'; +import { ClsService } from 'nestjs-cls'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; @Injectable({ scope: Scope.REQUEST }) export class RequestIdMiddleware implements NestMiddleware { - private readonly logger = new Logger(RequestIdMiddleware.name); + constructor(private readonly cls: ClsService, private readonly logger: AppLoggerService) {} use(request: Request, response: Response, next: NextFunction) { request.id = randomUUID(); @@ -14,6 +16,8 @@ export class RequestIdMiddleware implements NestMiddleware { delete cleanHeaders.authorization; delete cleanHeaders.cookie; + this.cls.set('requestId', request.id); + this.logger.log(`Incoming request`, { request: { id: request.id, diff --git a/services/workflows-service/src/common/utils/winston-logger/winston-logger.ts b/services/workflows-service/src/common/utils/winston-logger/winston-logger.ts new file mode 100644 index 0000000000..060613ca77 --- /dev/null +++ b/services/workflows-service/src/common/utils/winston-logger/winston-logger.ts @@ -0,0 +1,40 @@ +import { IAppLogger, LogPayload } from '@/common/abstract-logger/abstract-logger'; +import { createLogger, format, transports, Logger as TWinstonLogger } from 'winston'; + +export class WinstonLogger implements IAppLogger { + private logger: TWinstonLogger; + + constructor() { + this.logger = createLogger({ + format: format.combine(format.json(), format.timestamp()), + transports: [ + new transports.Console({ + format: + process.env.NODE_ENV === 'production' + ? format.simple() + : format.combine(format.colorize(), format.simple()), + }), + ], + }); + } + + log(message: string, payload: LogPayload = {}) { + this.logger.info(message, payload); + } + + info(message: string, payload: LogPayload = {}) { + this.logger.info(message, payload); + } + + error(message: string, payload: LogPayload = {}) { + this.logger.error(message, payload); + } + + warn(message: string, payload: LogPayload = {}) { + this.logger.warn(message, payload); + } + + debug(message: string, payload: LogPayload = {}) { + this.logger.debug(message, payload); + } +} diff --git a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts index 1cef3fee54..2315812918 100644 --- a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts +++ b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts @@ -19,6 +19,8 @@ import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data. import { WorkflowService } from '@/workflow/workflow.service'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { PrismaService } from '@/prisma/prisma.service'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; describe('#EndUserControllerExternal', () => { let app: INestApplication; diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index b47c0eed21..58d46fa08a 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -12,18 +12,18 @@ import { ConfigService } from '@nestjs/config'; import * as Sentry from '@sentry/node'; import { AxiosInstance, isAxiosError } from 'axios'; import { WorkflowConfig } from '@/workflow/schemas/zod-schemas'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; import { getDocumentId } from '@ballerine/common'; @Injectable() export class DocumentChangedWebhookCaller { - private readonly logger = new Logger(DocumentChangedWebhookCaller.name); - #__axios: AxiosInstance; constructor( private httpService: HttpService, private workflowEventEmitter: WorkflowEventEmitterService, private configService: ConfigService, + private readonly logger: AppLoggerService, ) { this.#__axios = this.httpService.axiosRef; diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 91460fd2da..572f70c718 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -1,8 +1,7 @@ import passport from 'passport'; import cookieSession from 'cookie-session'; -import { HttpAdapterHost, NestFactory } from '@nestjs/core'; +import { NestFactory } from '@nestjs/core'; import { SwaggerModule } from '@nestjs/swagger'; -import { HttpExceptionFilter } from '@/common/filters/HttpExceptions.filter'; import { AppModule } from './app.module'; import { swaggerDocumentOptions, swaggerPath, swaggerSetupOptions } from './swagger'; import { ValidationPipe, VersioningType } from '@nestjs/common'; @@ -11,9 +10,8 @@ import { PathItemObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.in // @ts-ignore - there is an issue with helemet types import helmet from 'helmet'; import { env } from '@/env'; -import { AllExceptionsFilter } from '@/common/filters/AllExceptions.filter'; import { NextFunction, Request, Response } from 'express'; -import { PrismaClientValidationFilter } from '@/common/filters/prisma-client-validation-filter/PrismaClientValidation.filter'; +import { ClsMiddleware } from 'nestjs-cls'; // This line is used to improve Sentry's stack traces // https://docs.sentry.io/platforms/node/typescript/#changing-events-frames @@ -38,6 +36,8 @@ async function main() { }, }); + app.use(new ClsMiddleware({}).use); + app.use(helmet()); app.use( cookieSession({ @@ -99,11 +99,6 @@ async function main() { SwaggerModule.setup(swaggerPath, app, document, swaggerSetupOptions); - const { httpAdapter } = app.get(HttpAdapterHost); - app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); - app.useGlobalFilters(new HttpExceptionFilter(httpAdapter)); - app.useGlobalFilters(new PrismaClientValidationFilter()); - app.enableShutdownHooks(); void app.listen(env.PORT); diff --git a/services/workflows-service/src/serve-static-options.service.ts b/services/workflows-service/src/serve-static-options.service.ts index a8caccda60..b2cb7c0ea5 100644 --- a/services/workflows-service/src/serve-static-options.service.ts +++ b/services/workflows-service/src/serve-static-options.service.ts @@ -2,6 +2,7 @@ import * as path from 'path'; import { Injectable, Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { ServeStaticModuleOptions, ServeStaticModuleOptionsFactory } from '@nestjs/serve-static'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; const SERVE_STATIC_ROOT_PATH_VAR = 'SERVE_STATIC_ROOT_PATH'; const DEFAULT_STATIC_MODULE_OPTIONS_LIST: ServeStaticModuleOptions[] = [ @@ -13,9 +14,10 @@ const DEFAULT_STATIC_MODULE_OPTIONS_LIST: ServeStaticModuleOptions[] = [ @Injectable() export class ServeStaticOptionsService implements ServeStaticModuleOptionsFactory { - private readonly logger = new Logger(ServeStaticOptionsService.name); - - constructor(private readonly configService: ConfigService) {} + constructor( + private readonly configService: ConfigService, + private readonly logger: AppLoggerService, + ) {} createLoggerOptions(): ServeStaticModuleOptions[] { const serveStaticRootPath = this.configService.get(SERVE_STATIC_ROOT_PATH_VAR) as string; diff --git a/services/workflows-service/src/test/helpers/nest-app-helper.ts b/services/workflows-service/src/test/helpers/nest-app-helper.ts index 8a38ad60fc..36b55807b1 100644 --- a/services/workflows-service/src/test/helpers/nest-app-helper.ts +++ b/services/workflows-service/src/test/helpers/nest-app-helper.ts @@ -8,6 +8,15 @@ import { EndUserModule } from '@/end-user/end-user.module'; import { EndUserService } from '@/end-user/end-user.service'; import { InstanceLink } from '@nestjs/core/injector/instance-links-host'; import console from 'console'; +import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; +import { ClsModule } from 'nestjs-cls'; + +export const commonTestingModules = [ + ClsModule.forRoot({ + global: true, + }), + AppLoggerModule, +]; const acGuard = { canActivate: () => { @@ -34,7 +43,7 @@ export const fetchServiceFromModule = async <T>( ) => { const moduleRef = await Test.createTestingModule({ providers: [service, ...dependencies], - imports: [...modules], + imports: [...modules, ...commonTestingModules], }).compile(); return moduleRef.get<typeof service>(service); @@ -50,7 +59,7 @@ export const initiateNestApp = async ( const moduleRef = await Test.createTestingModule({ providers: providers, controllers: controllers, - imports: [ACLModule, ...modules], + imports: [ACLModule, ...modules, ...commonTestingModules], }) .overrideGuard(ACGuard) .useValue(acGuard) diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts index 218e5b2eae..35510e68ca 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.unit.test.ts @@ -11,6 +11,9 @@ import { WorkflowService } from './workflow.service'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { EndUserModel } from '@/end-user/end-user.model'; import { BusinessModel } from '@/business/business.model'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { commonTestingModules } from '@/test/helpers/nest-app-helper'; +import { Test, TestingModule } from '@nestjs/testing'; class FakeWorkflowRuntimeDataRepo extends BaseFakeRepository { constructor() { @@ -71,6 +74,13 @@ describe('WorkflowControllerInternal', () => { let endUserRepo; let eventEmitterSpy; const numbUserInfo = Symbol(); + let testingModule: TestingModule; + + beforeAll(async () => { + testingModule = await Test.createTestingModule({ + imports: commonTestingModules, + }).compile(); + }); beforeEach(() => { const workflowDefinitionRepo = new FakeWorkflowDefinitionRepo(); @@ -93,6 +103,7 @@ describe('WorkflowControllerInternal', () => { {} as any, {} as any, eventEmitterSpy, + testingModule.get(AppLoggerService), ); const filterService = {} as any; const rolesBuilder = {} as any; diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index bbf9ece012..31a23d28a9 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -60,6 +60,7 @@ import { getDocumentsByCountry, TDefaultSchemaDocumentPage, } from '@ballerine/common'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; import { WorkflowAssignee, @@ -107,8 +108,6 @@ const policies = { @Injectable() export class WorkflowService { - private readonly logger = new Logger(WorkflowService.name); - constructor( protected readonly workflowDefinitionRepository: WorkflowDefinitionRepository, protected readonly workflowRuntimeDataRepository: WorkflowRuntimeDataRepository, @@ -117,6 +116,7 @@ export class WorkflowService { protected readonly storageService: StorageService, protected readonly fileService: FileService, protected readonly workflowEventEmitter: WorkflowEventEmitterService, + private readonly logger: AppLoggerService, ) {} async createWorkflowDefinition(data: WorkflowDefinitionCreateDto) { diff --git a/services/workflows-service/src/workflow/workflow.service.unit.test.ts b/services/workflows-service/src/workflow/workflow.service.unit.test.ts index c817aaa574..f01f07d41b 100644 --- a/services/workflows-service/src/workflow/workflow.service.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.service.unit.test.ts @@ -11,6 +11,9 @@ import { BaseFakeRepository } from '../../../../test-utils/src/base-fake-reposit import { WorkflowService } from './workflow.service'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { DocumentChangedWebhookCaller } from '../events/document-changed-webhook-caller'; +import { Test, TestingModule } from '@nestjs/testing'; +import { commonTestingModules } from '@/test/helpers/nest-app-helper'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; class FakeWorkflowRuntimeDataRepo extends BaseFakeRepository { constructor() { @@ -80,6 +83,13 @@ describe('WorkflowService', () => { let endUserRepo; const numbUserInfo = Symbol(); let fakeHttpService; + let testingModule: TestingModule; + + beforeAll(async () => { + testingModule = await Test.createTestingModule({ + imports: commonTestingModules, + }).compile(); + }); beforeEach(() => { const workflowDefinitionRepo = new FakeWorkflowDefinitionRepo(); @@ -124,6 +134,7 @@ describe('WorkflowService', () => { fakeHttpService, eventEmitter as any, env as any, + testingModule.get(AppLoggerService), ); service = new WorkflowService( @@ -134,6 +145,7 @@ describe('WorkflowService', () => { {} as any, {} as any, eventEmitter as any, + testingModule.get(AppLoggerService), ); }); From d93e8bd56be01817fd526807978e7a19fd6ed7bd Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:33:19 +0300 Subject: [PATCH 074/123] feat: updated jq with jmespath (#600) * feat: updated jq with jmespath * fixed tests * removed jq transformer --- packages/workflow-core/package.json | 3 +- .../external-plugin/api-plugin.test.ts | 39 +- .../external-plugin/webhook-plugin.test.ts | 4 +- ...transformer.ts => jmespath-transformer.ts} | 9 +- packages/workflow-core/src/lib/utils/types.ts | 4 +- .../workflow-core/src/lib/workflow-runner.ts | 4 +- pnpm-lock.yaml | 4368 +++++++---------- .../workflows/e2e-dynamic-url-example.ts | 18 +- 8 files changed, 1902 insertions(+), 2547 deletions(-) rename packages/workflow-core/src/lib/utils/context-transformers/{qj-transformer.ts => jmespath-transformer.ts} (62%) diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 3aafac5b5e..adecdd7e03 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -31,8 +31,8 @@ "dependencies": { "@ballerine/common": "0.5.3", "ajv": "^8.12.0", + "jmespath": "^0.16.0", "json-logic-js": "^2.0.2", - "node-jq": "^2.3.5", "xstate": "^4.35.2" }, "devDependencies": { @@ -46,6 +46,7 @@ "@rollup/plugin-replace": "4.0.0", "@rollup/plugin-terser": "^0.4.0", "@types/babel__core": "^7.20.0", + "@types/jmespath": "^0.15.0", "@types/fs-extra": "^11.0.1", "@types/json-logic-js": "^2.0.1", "@types/node": "^18.14.0", diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts index 0578ff7600..0fc6de5537 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.test.ts @@ -53,12 +53,12 @@ describe('workflow-runner', () => { errorAction: 'API_CALL_FAILURE', request: { transform: { - transformer: 'jq', - mapping: '{data: .entity.id}', + transformer: 'jmespath', + mapping: '{data: entity.id}', }, }, response: { - transform: { transformer: 'jq', mapping: '{result: .}' }, + transform: { transformer: 'jmespath', mapping: '{result: @}' }, }, }, ]; @@ -89,23 +89,22 @@ describe('workflow-runner', () => { }); }); - // describe('when api invalid jq transformation of request', () => { - // const apiPluginsSchemasCopy = structuredClone(apiPluginsSchemas); - // apiPluginsSchemasCopy[0].request.transform.mapping = 'dsa: .unknwonvalue.id}'; - // const workflow = createWorkflowRunner(definition, apiPluginsSchemasCopy); - // TODO: fix later - // it('it returns error for transformation and transition to testManually', async () => { - // await workflow.sendEvent('CHECK_BUSINESS_SCORE'); - // - // expect(workflow.state).toEqual('testManually'); - // expect(workflow.context.pluginsOutput).toEqual({ - // ballerineEnrichment: { - // error: - // 'Error transforming data: write EPIPE for transformer mapping: dsa: .unknwonvalue.id}', - // }, - // }); - // }); - // }); + describe('when api invalid jmespath transformation of request', () => { + const apiPluginsSchemasCopy = structuredClone(apiPluginsSchemas); + apiPluginsSchemasCopy[0].request.transform.mapping = 'dsa: .unknwonvalue.id}'; + const workflow = createWorkflowRunner(definition, apiPluginsSchemasCopy); + it('it returns error for transformation and transition to testManually', async () => { + await workflow.sendEvent('CHECK_BUSINESS_SCORE'); + + expect(workflow.state).toEqual('testManually'); + expect(workflow.context.pluginsOutput).toEqual({ + ballerineEnrichment: { + error: + 'Error transforming data: Unexpected token type: Colon, value: : for transformer mapping: dsa: .unknwonvalue.id}', + }, + }); + }); + }); describe('when api plugin has schema', () => { describe('when api request invalid for schema', () => { diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts index 3e8e4dc662..ea4c67372a 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts @@ -48,8 +48,8 @@ describe('workflow-runner', () => { stateNames: ['success', 'type'], request: { transform: { - transformer: 'jq', - mapping: '{id: .entity.id}' + transformer: 'jmespath', + mapping: '{id: entity.id}' }, }, }, diff --git a/packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts b/packages/workflow-core/src/lib/utils/context-transformers/jmespath-transformer.ts similarity index 62% rename from packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts rename to packages/workflow-core/src/lib/utils/context-transformers/jmespath-transformer.ts index a3e1d865b4..eb8e01a3db 100644 --- a/packages/workflow-core/src/lib/utils/context-transformers/qj-transformer.ts +++ b/packages/workflow-core/src/lib/utils/context-transformers/jmespath-transformer.ts @@ -1,9 +1,8 @@ -import { run } from 'node-jq'; import { BaseContextTransformer, TTransformationLogic } from './types'; import { TContext } from '../types'; - -export class JQTransformer extends BaseContextTransformer { - name = 'jq-transformer'; +import { search } from 'jmespath'; +export class JmespathTransformer extends BaseContextTransformer { + name = 'jmespath-transformer'; mapping: TTransformationLogic; constructor(mapping: TTransformationLogic) { @@ -12,7 +11,7 @@ export class JQTransformer extends BaseContextTransformer { } async transform(context: TContext, options: {}) { - const response = await run(this.mapping, context, options); + const response = await search(context, this.mapping); return response; } diff --git a/packages/workflow-core/src/lib/utils/types.ts b/packages/workflow-core/src/lib/utils/types.ts index 6f611bd690..7ed33cce66 100644 --- a/packages/workflow-core/src/lib/utils/types.ts +++ b/packages/workflow-core/src/lib/utils/types.ts @@ -1,7 +1,7 @@ -import { JQTransformer } from './context-transformers/qj-transformer'; import { JsonSchemaValidator } from './context-validator/json-schema-validator'; import { AnyRecord } from '@ballerine/common'; +import { JmespathTransformer } from './context-transformers/jmespath-transformer'; export type TContext = AnyRecord; -export type TTransformers = JQTransformer; +export type TTransformers = JmespathTransformer; export type TValidators = JsonSchemaValidator; diff --git a/packages/workflow-core/src/lib/workflow-runner.ts b/packages/workflow-core/src/lib/workflow-runner.ts index 8cb989ee3f..708a149e21 100644 --- a/packages/workflow-core/src/lib/workflow-runner.ts +++ b/packages/workflow-core/src/lib/workflow-runner.ts @@ -12,7 +12,7 @@ import type { WorkflowRunnerArgs, } from './types'; import { Error as ErrorEnum } from './types'; -import { JQTransformer } from './utils/context-transformers/qj-transformer'; +import { JmespathTransformer } from './utils/context-transformers/jmespath-transformer'; import { JsonSchemaValidator } from './utils/context-validator/json-schema-validator'; import { StatePlugin } from './plugins/types'; import { ApiPlugin, IApiPluginParams } from './plugins/external-plugin/api-plugin'; @@ -101,7 +101,7 @@ export class WorkflowRunner { } fetchTransformer(transformer) { - if (transformer.transformer == 'jq') return new JQTransformer(transformer.mapping); + if (transformer.transformer == 'jmespath') return new JmespathTransformer(transformer.mapping); throw new Error(`Transformer ${transformer.name} is not supported`); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c2c5db80a8..538ade4c18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,10 +32,10 @@ importers: version: 2.26.1 '@commitlint/cli': specifier: ^17.5.0 - version: 17.6.0 + version: 17.5.0 '@commitlint/config-conventional': specifier: ^17.4.4 - version: 17.6.0 + version: 17.4.4 commitizen: specifier: ^4.3.0 version: 4.3.0 @@ -77,19 +77,19 @@ importers: version: 3.1.0(react-hook-form@7.43.9) '@lukemorales/query-key-factory': specifier: ^1.0.3 - version: 1.2.0(@tanstack/query-core@4.29.1) + version: 1.2.0(@tanstack/query-core@4.27.0) '@radix-ui/react-checkbox': specifier: ^1.0.1 version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.2 - version: 1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.0.5 - version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-hover-card': specifier: ^1.0.2 - version: 1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-label': specifier: ^2.0.1 version: 2.0.1(react-dom@18.2.0)(react@18.2.0) @@ -98,7 +98,7 @@ importers: version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^1.2.1 - version: 1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + version: 1.2.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-separator': specifier: ^1.0.2 version: 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -107,7 +107,7 @@ importers: version: 1.0.1(react@18.2.0) '@tanstack/react-query': specifier: ^4.19.1 - version: 4.29.1(react-dom@18.2.0)(react@18.2.0) + version: 4.28.0(react-dom@18.2.0)(react@18.2.0) class-variance-authority: specifier: ^0.6.0 version: 0.6.0(typescript@4.9.5) @@ -119,7 +119,7 @@ importers: version: 1.11.7 eslint-plugin-tailwindcss: specifier: ^3.8.0 - version: 3.11.0(tailwindcss@3.3.1) + version: 3.10.1(tailwindcss@3.2.7) face-api.js: specifier: ^0.22.2 version: 0.22.2 @@ -128,7 +128,7 @@ importers: version: 8.5.5(react-dom@18.2.0)(react@18.2.0) i18next: specifier: ^22.4.9 - version: 22.4.14 + version: 22.4.13 i18next-browser-languagedetector: specifier: ^7.0.1 version: 7.0.1 @@ -161,10 +161,10 @@ importers: version: 7.43.9(react@18.2.0) react-hot-toast: specifier: ^2.4.0 - version: 2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) + version: 2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) react-i18next: specifier: ^12.1.4 - version: 12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0) + version: 12.2.0(i18next@22.4.13)(react-dom@18.2.0)(react@18.2.0) react-image-crop: specifier: ^10.0.9 version: 10.0.9(react@18.2.0) @@ -179,13 +179,13 @@ importers: version: 3.0.8(react-dom@18.2.0)(react@18.2.0) tailwind-merge: specifier: ^1.10.0 - version: 1.12.0 + version: 1.10.0 tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.5(tailwindcss@3.3.1) + version: 1.0.5(tailwindcss@3.2.7) tesseract.js: specifier: ^4.0.1 - version: 4.0.3(eslint@8.22.0) + version: 4.0.2(eslint@8.22.0) vite-plugin-terminal: specifier: ^1.1.0 version: 1.1.0(vite@4.2.1) @@ -198,7 +198,7 @@ importers: version: 7.6.0 '@playwright/test': specifier: ^1.32.1 - version: 1.32.3 + version: 1.32.1 '@storybook/addon-a11y': specifier: ^6.5.16 version: 6.5.16(react-dom@18.2.0)(react@18.2.0) @@ -225,7 +225,7 @@ importers: version: 0.0.14-next.1 '@tanstack/react-query-devtools': specifier: 4.22.0 - version: 4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.0(@tanstack/react-query@4.28.0)(react-dom@18.2.0)(react@18.2.0) '@testing-library/jest-dom': specifier: ^5.16.4 version: 5.16.5 @@ -237,13 +237,13 @@ importers: version: 1.9.3 '@types/node': specifier: ^18.11.13 - version: 18.15.11 + version: 18.15.10 '@types/qs': specifier: ^6.9.7 version: 6.9.7 '@types/react': specifier: ^18.0.14 - version: 18.0.35 + version: 18.0.29 '@types/react-dom': specifier: ^18.0.5 version: 18.0.11 @@ -252,13 +252,13 @@ importers: version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.30.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.30.0 - version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.22.0)(typescript@4.9.5) '@vitejs/plugin-react-swc': specifier: ^3.0.1 - version: 3.3.0(vite@4.2.1) + version: 3.2.0(vite@4.2.1) autoprefixer: specifier: ^10.4.7 version: 10.4.14(postcss@8.4.21) @@ -273,7 +273,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -285,7 +285,7 @@ importers: version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) postcss: specifier: ^8.4.14 version: 8.4.21 @@ -294,19 +294,19 @@ importers: version: 2.8.7 prettier-plugin-tailwindcss: specifier: ^0.2.1 - version: 0.2.7(prettier@2.8.7) + version: 0.2.5(prettier@2.8.7) storybook: specifier: ^7.0.0-rc.10 version: 7.0.0-rc.10 tailwindcss: specifier: ^3.2.4 - version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^4.0.4 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.29.8 version: 0.29.8 @@ -315,7 +315,7 @@ importers: dependencies: '@lukemorales/query-key-factory': specifier: ^1.0.3 - version: 1.2.0(@tanstack/query-core@4.29.1) + version: 1.2.0(@tanstack/query-core@4.27.0) '@radix-ui/react-dialog': specifier: ^1.0.2 version: 1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) @@ -333,10 +333,10 @@ importers: version: 1.0.1(react@18.2.0) '@tailwindcss/line-clamp': specifier: ^0.4.4 - version: 0.4.4(tailwindcss@3.3.1) + version: 0.4.4(tailwindcss@3.2.7) '@tanstack/react-query': specifier: ^4.28.0 - version: 4.29.1(react-dom@18.2.0)(react@18.2.0) + version: 4.28.0(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-table': specifier: ^8.9.2 version: 8.9.2(react-dom@18.2.0)(react@18.2.0) @@ -381,7 +381,7 @@ importers: version: 1.13.2 tailwindcss-animate: specifier: ^1.0.5 - version: 1.0.5(tailwindcss@3.3.1) + version: 1.0.5(tailwindcss@3.2.7) use-query-params: specifier: ^2.2.1 version: 2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0) @@ -442,7 +442,7 @@ importers: version: 8.4.24 tailwindcss: specifier: ^3.2.7 - version: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) + version: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) ts-jest: specifier: ^29.1.0 version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.0.2) @@ -466,7 +466,7 @@ importers: version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 - version: 1.1.5(svelte@3.58.0) + version: 1.1.5(svelte@3.57.0) '@felte/validator-zod': specifier: ^1.0.13 version: 1.0.13(zod@3.21.4) @@ -475,22 +475,22 @@ importers: version: 4.5.15 '@tanstack/svelte-query': specifier: ^4.27.0 - version: 4.29.1(svelte@3.58.0) + version: 4.27.0(svelte@3.57.0) '@xstate/svelte': specifier: ^2.0.1 - version: 2.0.1(svelte@3.58.0)(xstate@4.37.1) + version: 2.0.1(svelte@3.57.0)(xstate@4.37.1) clsx: specifier: ^1.2.1 version: 1.2.1 felte: specifier: ^1.2.7 - version: 1.2.7(svelte@3.58.0) + version: 1.2.7(svelte@3.57.0) tailwind-merge: specifier: ^1.8.1 - version: 1.12.0 + version: 1.10.0 vite-tsconfig-paths: specifier: ^4.0.7 - version: 4.2.0(typescript@4.9.5)(vite@4.2.1) + version: 4.0.7(typescript@4.9.5)(vite@4.2.1) xstate: specifier: 4.37.1 version: 4.37.1 @@ -503,7 +503,7 @@ importers: version: 1.3.7 '@sveltejs/vite-plugin-svelte': specifier: ^2.0.2 - version: 2.0.4(svelte@3.58.0)(vite@4.2.1) + version: 2.0.3(svelte@3.57.0)(vite@4.2.1) '@tsconfig/svelte': specifier: ^3.0.0 version: 3.0.0 @@ -521,16 +521,16 @@ importers: version: 2.8.8 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.8)(svelte@3.58.0) + version: 2.10.0(prettier@2.8.8)(svelte@3.57.0) svelte: specifier: ^3.55.1 - version: 3.58.0 + version: 3.57.0 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) + version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) tailwindcss: specifier: ^3.2.4 - version: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -539,7 +539,7 @@ importers: version: 4.9.5 vite: specifier: ^4.1.0 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) packages/common: dependencies: @@ -564,7 +564,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -582,13 +582,13 @@ importers: version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.15.10 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -600,22 +600,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.15.0(eslint@8.36.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.36.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -645,13 +645,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -679,7 +679,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-node-resolve': specifier: 13.2.1 version: 13.2.1(rollup@2.70.2) @@ -697,10 +697,10 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -712,22 +712,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.15.0(eslint@8.36.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.36.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -751,13 +751,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -770,12 +770,12 @@ importers: ajv: specifier: ^8.12.0 version: 8.12.0 + jmespath: + specifier: ^0.16.0 + version: 0.16.0 json-logic-js: specifier: ^2.0.2 version: 2.0.2 - node-jq: - specifier: ^2.3.5 - version: 2.3.5 xstate: specifier: ^4.35.2 version: 4.37.1 @@ -794,7 +794,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -806,25 +806,28 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.1(rollup@2.70.2) + version: 0.4.0(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 '@types/fs-extra': specifier: ^11.0.1 version: 11.0.1 + '@types/jmespath': + specifier: ^0.15.0 + version: 0.15.0 '@types/json-logic-js': specifier: ^2.0.1 version: 2.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.15.10 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -836,22 +839,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.15.0(eslint@8.36.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.36.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -887,13 +890,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -905,7 +908,7 @@ importers: version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 - version: 0.8.2 + version: 0.8.0 compressorjs: specifier: ^1.1.1 version: 1.2.1 @@ -921,19 +924,19 @@ importers: devDependencies: '@babel/core': specifier: ^7.18.5 - version: 7.21.4 + version: 7.21.3 '@playwright/test': specifier: ^1.27.1 - version: 1.32.3 + version: 1.32.1 '@sveltejs/vite-plugin-svelte': specifier: 1.0.8 - version: 1.0.8(svelte@3.58.0)(vite@4.0.3) + version: 1.0.8(svelte@3.57.0)(vite@4.0.3) '@testing-library/jest-dom': specifier: ^5.16.5 version: 5.16.5 '@testing-library/svelte': specifier: ^3.2.2 - version: 3.2.2(svelte@3.58.0) + version: 3.2.2(svelte@3.57.0) '@tsconfig/svelte': specifier: ^2.0.1 version: 2.0.1 @@ -945,16 +948,16 @@ importers: version: 4.6.7 '@types/node': specifier: ^18.11.9 - version: 18.15.11 + version: 18.15.10 '@types/testing-library__jest-dom': specifier: ^5.14.5 version: 5.14.5 '@typescript-eslint/eslint-plugin': specifier: ^5.41.0 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.41.0 - version: 5.58.0(eslint@8.22.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.22.0)(typescript@4.9.5) editorconfig: specifier: ^1.0.1 version: 1.0.2 @@ -969,10 +972,10 @@ importers: version: 0.6.11(eslint@8.22.0)(typescript@4.9.5) eslint-plugin-svelte3: specifier: ^4.0.0 - version: 4.0.0(eslint@8.22.0)(svelte@3.58.0) + version: 4.0.0(eslint@8.22.0)(svelte@3.57.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0) jsdom: specifier: ^20.0.2 version: 20.0.3 @@ -984,34 +987,34 @@ importers: version: 2.8.7 prettier-plugin-svelte: specifier: ^2.8.0 - version: 2.10.0(prettier@2.8.7)(svelte@3.58.0) + version: 2.10.0(prettier@2.8.7)(svelte@3.57.0) rollup-plugin-visualizer: specifier: ^5.8.3 version: 5.9.0 svelte: specifier: ^3.39.0 - version: 3.58.0 + version: 3.57.0 svelte-check: specifier: ^2.2.7 - version: 2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0) + version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) svelte-preprocess: specifier: ^4.9.8 - version: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) + version: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) typedoc: specifier: ^0.23.23 version: 0.23.28(typescript@4.9.5) typedoc-plugin-markdown: specifier: ^3.14.0 - version: 3.15.1(typedoc@0.23.28) + version: 3.14.0(typedoc@0.23.28) typescript: specifier: ^4.5.4 version: 4.9.5 vite: specifier: 4.0.3 - version: 4.0.3(@types/node@18.15.11) + version: 4.0.3(@types/node@18.15.10) vite-plugin-dts: specifier: ^1.6.6 - version: 1.7.3(@types/node@18.15.11)(vite@4.0.3) + version: 1.7.3(@types/node@18.15.10)(vite@4.0.3) vite-plugin-html: specifier: ^3.2.0 version: 3.2.0(vite@4.0.3) @@ -1045,7 +1048,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -1057,7 +1060,7 @@ importers: version: 4.0.0(rollup@2.70.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.1(rollup@2.70.2) + version: 0.4.0(rollup@2.70.2) '@types/babel__core': specifier: ^7.20.0 version: 7.20.0 @@ -1066,13 +1069,13 @@ importers: version: 11.0.1 '@types/node': specifier: ^18.14.0 - version: 18.15.11 + version: 18.15.10 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1087,22 +1090,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.15.0(eslint@8.36.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.36.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -1138,13 +1141,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1175,7 +1178,7 @@ importers: version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.0)(rollup@2.70.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@2.70.2) + version: 24.0.1(rollup@2.70.2) '@rollup/plugin-json': specifier: ^6.0.0 version: 6.0.0(rollup@2.70.2) @@ -1196,10 +1199,10 @@ importers: version: 2.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.48.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.48.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) '@vitest/coverage-istanbul': specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) @@ -1211,22 +1214,22 @@ importers: version: 3.3.0 eslint: specifier: ^8.32.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^6.11.0 - version: 6.15.0(eslint@8.38.0) + version: 6.15.0(eslint@8.36.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.38.0) + version: 3.2.0(eslint@8.36.0) eslint-plugin-functional: specifier: ^3.0.2 - version: 3.7.2(eslint@8.38.0)(typescript@4.9.5) + version: 3.7.2(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-import: specifier: ^2.22.0 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) fs-extra: specifier: ^11.1.0 version: 11.1.1 @@ -1250,13 +1253,13 @@ importers: version: 5.6.0(rollup@2.70.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 vite: specifier: ^4.1.1 - version: 4.2.1(@types/node@18.15.11) + version: 4.2.1(@types/node@18.15.10) vitest: specifier: ^0.28.5 version: 0.28.5(jsdom@20.0.3) @@ -1265,7 +1268,7 @@ importers: dependencies: '@nestjs/common': specifier: ^9.3.12 - version: 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) @@ -1302,7 +1305,7 @@ importers: version: 9.3.0 '@nestjs/schematics': specifier: ^9.0.0 - version: 9.1.0(chokidar@3.5.3)(typescript@4.9.5) + version: 9.0.4(chokidar@3.5.3)(typescript@4.9.5) '@nestjs/testing': specifier: ^9.3.12 version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) @@ -1314,31 +1317,31 @@ importers: version: 26.0.24 '@types/node': specifier: ^18.14.6 - version: 18.15.11 + version: 18.15.10 '@types/supertest': specifier: 2.0.11 version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) eslint: specifier: ^8.35.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.38.0) + version: 8.8.0(eslint@8.36.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0) + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) jest: specifier: 29.5.0 - version: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + version: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) prettier: specifier: ^2.8.4 version: 2.8.8 @@ -1353,7 +1356,7 @@ importers: version: 9.2.3(typescript@4.9.5)(webpack@5.76.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) tsconfig-paths: specifier: 4.2.0 version: 4.2.0 @@ -1368,7 +1371,7 @@ importers: version: 3.325.0 '@aws-sdk/lib-storage': specifier: 3.325.0 - version: 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1380,40 +1383,40 @@ importers: version: 7.6.0 '@nestjs/axios': specifier: ^2.0.0 - version: 2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/common': specifier: ^9.3.12 - version: 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/config': specifier: 2.3.1 - version: 2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/devtools-integration': specifier: ^0.1.4 - version: 0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) + version: 0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) '@nestjs/event-emitter': specifier: ^1.4.1 - version: 1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13) + version: 1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13) '@nestjs/graphql': specifier: ^10.0.0 - version: 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + version: 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) '@nestjs/jwt': specifier: 10.0.3 - version: 10.0.3(@nestjs/common@9.4.0) + version: 10.0.3(@nestjs/common@9.3.12) '@nestjs/passport': specifier: 9.0.3 - version: 9.0.3(@nestjs/common@9.4.0)(passport@0.6.0) + version: 9.0.3(@nestjs/common@9.3.12)(passport@0.6.0) '@nestjs/platform-express': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@nestjs/serve-static': specifier: 3.0.1 - version: 3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2) + version: 3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2) '@nestjs/testing': specifier: ^9.3.12 - version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0) + version: 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(@nestjs/platform-express@9.3.12) '@prisma/client': specifier: ^4.13.0 version: 4.13.0(prisma@4.13.0) @@ -1464,22 +1467,22 @@ importers: version: 4.17.1 helmet: specifier: ^6.0.1 - version: 6.1.5 + version: 6.0.1 lodash: specifier: ^4.17.21 version: 4.17.21 multer-s3: specifier: 3.0.1 - version: 3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + version: 3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) nest-access-control: specifier: 2.2.0 version: 2.2.0(@nestjs/graphql@10.0.0) nestjs-cls: specifier: ^3.5.0 - version: 3.5.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) + version: 3.5.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) nestjs-prisma: specifier: 0.20.0 - version: 0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0) + version: 0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0) passport: specifier: 0.6.0 version: 0.6.0 @@ -1516,7 +1519,7 @@ importers: version: 9.3.0 '@nestjs/swagger': specifier: 6.2.1 - version: 6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + version: 6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) '@types/bcrypt': specifier: 5.0.0 version: 5.0.0 @@ -1531,7 +1534,7 @@ importers: version: 26.0.24 '@types/lodash': specifier: ^4.14.191 - version: 4.14.192 + version: 4.14.191 '@types/multer': specifier: ^1.4.7 version: 1.4.7 @@ -1540,7 +1543,7 @@ importers: version: 3.0.0 '@types/node': specifier: ^18.14.6 - version: 18.15.11 + version: 18.15.10 '@types/normalize-path': specifier: 3.0.0 version: 3.0.0 @@ -1561,28 +1564,28 @@ importers: version: 2.0.11 '@typescript-eslint/eslint-plugin': specifier: ^5.54.1 - version: 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/parser': specifier: ^5.54.1 - version: 5.58.0(eslint@8.38.0)(typescript@4.9.5) + version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) dotenv: specifier: ^16.0.3 version: 16.0.3 eslint: specifier: ^8.35.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^8.7.0 - version: 8.8.0(eslint@8.38.0) + version: 8.8.0(eslint@8.36.0) eslint-import-resolver-typescript: specifier: ^3.5.3 - version: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + version: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0) jest: specifier: 27.0.6 version: 27.0.6(ts-node@10.9.1) @@ -1609,7 +1612,7 @@ importers: version: 27.0.3(jest@27.0.6)(typescript@4.9.5) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) type-fest: specifier: 0.11.0 version: 0.11.0 @@ -1621,19 +1624,19 @@ importers: dependencies: '@algolia/client-search': specifier: ^4.13.1 - version: 4.17.0 + version: 4.16.0 '@astrojs/mdx': specifier: 0.19.7 version: 0.19.7(astro@2.6.6) '@astrojs/react': specifier: ^2.2.1 - version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) + version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.22.5)(solid-js@1.7.3)(vite@3.2.5) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5) '@astrojs/tailwind': specifier: ^4.0.0 - version: 4.0.0(astro@2.6.6)(tailwindcss@3.3.1)(ts-node@10.9.1) + version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) '@ballerine/common': specifier: 0.5.3 version: link:../../packages/common @@ -1642,19 +1645,19 @@ importers: version: 3.3.3 '@docsearch/react': specifier: ^3.1.0 - version: 3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0) + version: 3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) '@types/node': specifier: ^18.0.0 - version: 18.15.11 + version: 18.15.10 '@types/react': specifier: ^17.0.45 - version: 17.0.58 + version: 17.0.53 '@types/react-dom': specifier: ^18.0.0 version: 18.0.11 astro: specifier: ^2.6.6 - version: 2.6.6(@types/node@18.15.11) + version: 2.6.6(@types/node@18.15.10) react: specifier: ^18.2.0 version: 18.2.0 @@ -1666,10 +1669,10 @@ importers: version: 0.14.2 solid-js: specifier: ^1.4.3 - version: 1.7.3 + version: 1.6.15 vite: specifier: ~3.2.5 - version: 3.2.5(@types/node@18.15.11) + version: 3.2.5(@types/node@18.15.10) devDependencies: '@types/html-escaper': specifier: ^3.0.0 @@ -1679,19 +1682,19 @@ importers: version: 1.0.2 eslint: specifier: ^8.28.0 - version: 8.38.0 + version: 8.36.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.38.0) + version: 8.8.0(eslint@8.36.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 - version: 0.21.1(eslint@8.38.0) + version: 0.21.1(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.38.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -1714,117 +1717,117 @@ packages: '@algolia/autocomplete-shared': 1.7.4 dev: false - /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0): + /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0): resolution: {integrity: sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: '@algolia/autocomplete-shared': 1.7.4 - '@algolia/client-search': 4.17.0 - algoliasearch: 4.17.0 + '@algolia/client-search': 4.16.0 + algoliasearch: 4.16.0 dev: false /@algolia/autocomplete-shared@1.7.4: resolution: {integrity: sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==} dev: false - /@algolia/cache-browser-local-storage@4.17.0: - resolution: {integrity: sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==} + /@algolia/cache-browser-local-storage@4.16.0: + resolution: {integrity: sha512-jVrk0YB3tjOhD5/lhBtYCVCeLjZmVpf2kdi4puApofytf/R0scjWz0GdozlW4HhU+Prxmt/c9ge4QFjtv5OAzQ==} dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/cache-common': 4.16.0 dev: false - /@algolia/cache-common@4.17.0: - resolution: {integrity: sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==} + /@algolia/cache-common@4.16.0: + resolution: {integrity: sha512-4iHjkSYQYw46pITrNQgXXhvUmcekI8INz1m+SzmqLX8jexSSy4Ky4zfGhZzhhhLHXUP3+x/PK/c0qPjxEvRwKQ==} dev: false - /@algolia/cache-in-memory@4.17.0: - resolution: {integrity: sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==} + /@algolia/cache-in-memory@4.16.0: + resolution: {integrity: sha512-p7RYykvA6Ip6QENxrh99nOD77otVh1sJRivcgcVpnjoZb5sIN3t33eUY1DpB9QSBizcrW+qk19rNkdnZ43a+PQ==} dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/cache-common': 4.16.0 dev: false - /@algolia/client-account@4.17.0: - resolution: {integrity: sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==} + /@algolia/client-account@4.16.0: + resolution: {integrity: sha512-eydcfpdIyuWoKgUSz5iZ/L0wE/Wl7958kACkvTHLDNXvK/b8Z1zypoJavh6/km1ZNQmFpeYS2jrmq0kUSFn02w==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.16.0 + '@algolia/client-search': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false - /@algolia/client-analytics@4.17.0: - resolution: {integrity: sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==} + /@algolia/client-analytics@4.16.0: + resolution: {integrity: sha512-cONWXH3BfilgdlCofUm492bJRWtpBLVW/hsUlfoFtiX1u05xoBP7qeiDwh9RR+4pSLHLodYkHAf5U4honQ55Qg==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.16.0 + '@algolia/client-search': 4.16.0 + '@algolia/requester-common': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false - /@algolia/client-common@4.17.0: - resolution: {integrity: sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==} + /@algolia/client-common@4.16.0: + resolution: {integrity: sha512-QVdR4019ukBH6f5lFr27W60trRxQF1SfS1qo0IP6gjsKhXhUVJuHxOCA6ArF87jrNkeuHEoRoDU+GlvaecNo8g==} dependencies: - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/requester-common': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false - /@algolia/client-personalization@4.17.0: - resolution: {integrity: sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==} + /@algolia/client-personalization@4.16.0: + resolution: {integrity: sha512-irtLafssDGPuhYqIwxqOxiWlVYvrsBD+EMA1P9VJtkKi3vSNBxiWeQ0f0Tn53cUNdSRNEssfoEH84JL97SV2SQ==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.16.0 + '@algolia/requester-common': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false - /@algolia/client-search@4.17.0: - resolution: {integrity: sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==} + /@algolia/client-search@4.16.0: + resolution: {integrity: sha512-xsfrAE1jO/JDh1wFrRz+alVyW+aA6qnkzmbWWWZWEgVF3EaFqzIf9r1l/aDtDdBtNTNhX9H3Lg31+BRtd5izQA==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.16.0 + '@algolia/requester-common': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false - /@algolia/logger-common@4.17.0: - resolution: {integrity: sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==} + /@algolia/logger-common@4.16.0: + resolution: {integrity: sha512-U9H8uCzSDuePJmbnjjTX21aPDRU6x74Tdq3dJmdYu2+pISx02UeBJm4kSgc9RW5jcR5j35G9gnjHY9Q3ngWbyQ==} dev: false - /@algolia/logger-console@4.17.0: - resolution: {integrity: sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==} + /@algolia/logger-console@4.16.0: + resolution: {integrity: sha512-+qymusiM+lPZKrkf0tDjCQA158eEJO2IU+Nr/sJ9TFyI/xkFPjNPzw/Qbc8Iy/xcOXGlc6eMgmyjtVQqAWq6UA==} dependencies: - '@algolia/logger-common': 4.17.0 + '@algolia/logger-common': 4.16.0 dev: false - /@algolia/requester-browser-xhr@4.17.0: - resolution: {integrity: sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==} + /@algolia/requester-browser-xhr@4.16.0: + resolution: {integrity: sha512-gK+kvs6LHl/PaOJfDuwjkopNbG1djzFLsVBklGBsSU6h6VjFkxIpo6Qq80IK14p9cplYZfhfaL12va6Q9p3KVQ==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/requester-common': 4.16.0 dev: false - /@algolia/requester-common@4.17.0: - resolution: {integrity: sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==} + /@algolia/requester-common@4.16.0: + resolution: {integrity: sha512-3Zmcs/iMubcm4zqZ3vZG6Zum8t+hMWxGMzo0/uY2BD8o9q5vMxIYI0c4ocdgQjkXcix189WtZNkgjSOBzSbkdw==} dev: false - /@algolia/requester-node-http@4.17.0: - resolution: {integrity: sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==} + /@algolia/requester-node-http@4.16.0: + resolution: {integrity: sha512-L8JxM2VwZzh8LJ1Zb8TFS6G3icYsCKZsdWW+ahcEs1rGWmyk9SybsOe1MLnjonGBaqPWJkn9NjS7mRdjEmBtKA==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/requester-common': 4.16.0 dev: false - /@algolia/transporter@4.17.0: - resolution: {integrity: sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==} + /@algolia/transporter@4.16.0: + resolution: {integrity: sha512-H9BVB2EAjT65w7XGBNf5drpsW39x2aSZ942j4boSAAJPPlLmjtj5IpAP7UAtsV8g9Beslonh0bLa1XGmE/P0BA==} dependencies: - '@algolia/cache-common': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/requester-common': 4.17.0 + '@algolia/cache-common': 4.16.0 + '@algolia/logger-common': 4.16.0 + '@algolia/requester-common': 4.16.0 dev: false - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.9 /@angular-devkit/core@13.3.11: resolution: {integrity: sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==} @@ -1843,6 +1846,23 @@ packages: source-map: 0.7.3 dev: false + /@angular-devkit/core@15.0.4(chokidar@3.5.3): + resolution: {integrity: sha512-4ITpRAevd652SxB+qNesIQ9qfbm7wT5UBU5kJOPPwGL77I21g8CQpkmV1n5VSacPvC9Zbz90feOWexf7w7JzcA==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + ajv: 8.11.0 + ajv-formats: 2.1.1(ajv@8.11.0) + chokidar: 3.5.3 + jsonc-parser: 3.2.0 + rxjs: 6.6.7 + source-map: 0.7.4 + dev: true + /@angular-devkit/core@15.2.4(chokidar@3.5.3): resolution: {integrity: sha512-yl+0j1bMwJLKShsyCXw77tbJG8Sd21+itisPLL2MgEpLNAO252kr9zG4TLlFRJyKVftm2l1h78KjqvM5nbOXNg==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1888,6 +1908,19 @@ packages: - chokidar dev: false + /@angular-devkit/schematics@15.0.4(chokidar@3.5.3): + resolution: {integrity: sha512-/gXiLFS0+xFdx6wPoBpe/c6/K9I5edMpaASqPf4XheKtrsSvL+qTlIi3nsbfItzOiDXbaBmlbxGfkMHz/yg0Ig==} + engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + dependencies: + '@angular-devkit/core': 15.0.4(chokidar@3.5.3) + jsonc-parser: 3.2.0 + magic-string: 0.26.7 + ora: 5.4.1 + rxjs: 6.6.7 + transitivePeerDependencies: + - chokidar + dev: true + /@angular-devkit/schematics@15.2.4(chokidar@3.5.3): resolution: {integrity: sha512-/W7/vvn59PAVLzhcvD4/N/E8RDhub8ny1A7I96LTRjC5o+yvVV16YJ4YJzolrRrIEN01KmLVQJ9A58VCaweMgw==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1926,7 +1959,7 @@ packages: hasBin: true dependencies: '@astrojs/compiler': 1.5.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 '@vscode/emmet-helper': 2.8.6 events: 3.3.0 prettier: 2.8.8 @@ -1946,7 +1979,7 @@ packages: astro: ^2.5.0 dependencies: '@astrojs/prism': 2.1.2 - astro: 2.6.6(@types/node@18.15.11) + astro: 2.6.6(@types/node@18.15.10) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 rehype-raw: 6.1.1 @@ -1971,7 +2004,7 @@ packages: '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 acorn: 8.8.2 - es-module-lexer: 1.2.1 + es-module-lexer: 1.2.0 estree-util-visit: 1.2.1 github-slugger: 1.5.0 gray-matter: 4.0.3 @@ -1997,7 +2030,7 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): + /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nq5Zr8iWdwjSp5fh1NReaCplwsnL4w5PXAY5XWu1jE/frxEfF/ycGHrrhwWW0uJHX9G+kUtmQLR0GBhlR4FmAw==} engines: {node: '>=16.12.0'} peerDependencies: @@ -2006,9 +2039,9 @@ packages: react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.4) - '@types/react': 17.0.58 + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) + '@types/react': 17.0.53 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2016,31 +2049,31 @@ packages: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.7.3)(vite@3.2.5): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: solid-js: ^1.4.3 dependencies: - babel-preset-solid: 1.7.3(@babel/core@7.22.5) - solid-js: 1.7.3 + babel-preset-solid: 1.6.13(@babel/core@7.22.5) + solid-js: 1.6.15 vitefu: 0.2.4(vite@3.2.5) transitivePeerDependencies: - '@babel/core' - vite dev: false - /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.3.1)(ts-node@10.9.1): + /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1): resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} peerDependencies: astro: ^2.6.5 tailwindcss: ^3.0.24 dependencies: - astro: 2.6.6(@types/node@18.15.11) + astro: 2.6.6(@types/node@18.15.10) autoprefixer: 10.4.14(postcss@8.4.24) postcss: 8.4.24 postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) - tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: false @@ -2142,11 +2175,11 @@ packages: '@aws-sdk/types': 3.310.0 tslib: 2.5.2 - /@aws-sdk/abort-controller@3.329.0: - resolution: {integrity: sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw==} + /@aws-sdk/abort-controller@3.347.0: + resolution: {integrity: sha512-P/2qE6ntYEmYG4Ez535nJWZbXqgbkJx8CMz7ChEuEg3Gp3dvVYEKg+iEUEvlqQ2U5dWP5J3ehw5po9t86IsVPQ==} engines: {node: '>=14.0.0'} dependencies: - '@aws-sdk/types': 3.329.0 + '@aws-sdk/types': 3.347.0 tslib: 2.5.2 dev: false @@ -2512,14 +2545,14 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): + /@aws-sdk/lib-storage@3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-QobsFsDDoOs26nLmxo8nTTCwjJmO4jmElqU4R2r2mlf4g3ClSm5+W79jbqbfDKlEGbN4TtDr+FzWYiULOl/TIg==} engines: {node: '>=14.0.0'} peerDependencies: '@aws-sdk/abort-controller': ^3.0.0 '@aws-sdk/client-s3': ^3.0.0 dependencies: - '@aws-sdk/abort-controller': 3.329.0 + '@aws-sdk/abort-controller': 3.347.0 '@aws-sdk/client-s3': 3.325.0 '@aws-sdk/middleware-endpoint': 3.325.0 '@aws-sdk/smithy-client': 3.325.0 @@ -2794,8 +2827,8 @@ packages: dependencies: tslib: 2.5.2 - /@aws-sdk/types@3.329.0: - resolution: {integrity: sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==} + /@aws-sdk/types@3.347.0: + resolution: {integrity: sha512-GkCMy79mdjU9OTIe5KT58fI/6uqdf8UmMdWqVHmFJ+UpEzOci7L/uw4sOXWo7xpPzLs6cJ7s5ouGZW4GRPmHFA==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.5.2 @@ -2968,11 +3001,12 @@ packages: dependencies: tslib: 2.5.2 - /@babel/code-frame@7.21.4: - resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + /@babel/code-frame@7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 + dev: true /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} @@ -2980,9 +3014,10 @@ packages: dependencies: '@babel/highlight': 7.22.5 - /@babel/compat-data@7.21.4: - resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} + /@babel/compat-data@7.21.0: + resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} + dev: true /@babel/compat-data@7.22.5: resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} @@ -2992,16 +3027,16 @@ packages: resolution: {integrity: sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.3 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -3011,20 +3046,20 @@ packages: - supports-color dev: true - /@babel/core@7.21.4: - resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} + /@babel/core@7.21.3: + resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.3 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -3032,12 +3067,13 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /@babel/core@7.22.5: resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) @@ -3055,13 +3091,13 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.21.4: - resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} + /@babel/generator@7.21.3: + resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.4 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 /@babel/generator@7.22.5: @@ -3069,8 +3105,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.18.6: @@ -3087,13 +3123,13 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.17.9): + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 @@ -3101,26 +3137,27 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3): + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 + dev: true - /@babel/helper-compilation-targets@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.22.5 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 @@ -3142,14 +3179,14 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.4): + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.3): resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.22.5 browserslist: 4.21.5 lru-cache: 5.1.1 @@ -3169,65 +3206,65 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.17.9): + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3): + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.17.9): + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3237,19 +3274,19 @@ packages: regexpu-core: 5.3.2 dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.21.3): + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.3.2 dev: true - /@babel/helper-create-regexp-features-plugin@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==} + /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3269,23 +3306,23 @@ packages: '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.4): + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3301,7 +3338,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3310,6 +3347,7 @@ packages: /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} @@ -3361,14 +3399,7 @@ packages: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 - dev: false - - /@babel/helper-module-imports@7.21.4: - resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} @@ -3381,15 +3412,16 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.21.4 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-module-transforms@7.22.5: resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} @@ -3425,22 +3457,22 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.4): + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3455,7 +3487,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 transitivePeerDependencies: @@ -3466,7 +3498,7 @@ packages: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.22.5 @@ -3481,6 +3513,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} @@ -3500,6 +3533,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true /@babel/helper-split-export-declaration@7.22.5: resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} @@ -3526,6 +3560,7 @@ packages: /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.22.5: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} @@ -3548,10 +3583,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true /@babel/helpers@7.22.5: resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} @@ -3570,6 +3606,7 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} @@ -3579,12 +3616,12 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.21.4: - resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} + /@babel/parser@7.21.3: + resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.22.5 /@babel/parser@7.22.5: resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} @@ -3603,13 +3640,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -3635,16 +3672,16 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.22.5): @@ -3674,17 +3711,17 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true @@ -3711,20 +3748,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -3737,7 +3774,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -3750,23 +3787,23 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true @@ -3778,7 +3815,7 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: @@ -3796,15 +3833,15 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.22.5): @@ -3829,15 +3866,15 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4): + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.5): @@ -3862,15 +3899,15 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.22.5): @@ -3895,15 +3932,15 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): @@ -3928,15 +3965,15 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): @@ -3961,15 +3998,15 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): @@ -3989,26 +4026,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): @@ -4017,9 +4054,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) @@ -4036,15 +4073,15 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.5): @@ -4070,16 +4107,16 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) dev: true /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): @@ -4101,20 +4138,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -4127,7 +4164,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -4141,24 +4178,24 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.4): + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true @@ -4171,7 +4208,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: @@ -4185,18 +4222,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4207,7 +4244,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4220,12 +4257,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.4): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4256,12 +4293,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4284,13 +4321,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4313,12 +4350,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4340,12 +4377,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4358,8 +4395,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} + /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4368,13 +4405,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.4): + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4406,12 +4443,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4424,18 +4461,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.4): - resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4452,12 +4479,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4479,12 +4506,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4506,12 +4533,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4533,12 +4560,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4560,12 +4587,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4587,12 +4614,12 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4615,13 +4642,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4645,13 +4672,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.4): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4665,8 +4692,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.17.9): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.17.9): + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4675,8 +4702,8 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.22.5): + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4695,13 +4722,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4722,23 +4749,23 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.21.4 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-module-imports': 7.21.4 + '@babel/core': 7.21.3 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.4) + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true @@ -4750,7 +4777,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-imports': 7.21.4 + '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) transitivePeerDependencies: @@ -4767,13 +4794,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4797,13 +4824,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4825,7 +4852,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -4837,15 +4864,15 @@ packages: - supports-color dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 @@ -4888,13 +4915,13 @@ packages: '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 dev: true @@ -4920,13 +4947,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4947,18 +4974,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4969,7 +4996,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -4983,13 +5010,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5014,13 +5041,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5044,7 +5071,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.5) dev: true /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.17.9): @@ -5057,13 +5084,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.4): + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3): resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5084,19 +5111,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5108,7 +5135,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5123,13 +5150,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5153,13 +5180,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5186,13 +5213,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.3): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: @@ -5226,13 +5253,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.4): + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3): resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 @@ -5269,13 +5296,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.4): + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.3): resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 @@ -5312,13 +5339,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: @@ -5345,18 +5372,18 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3): resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5367,7 +5394,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5381,13 +5408,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5414,13 +5441,13 @@ packages: - supports-color dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: @@ -5450,13 +5477,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.4): + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3): resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5480,13 +5507,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5520,20 +5547,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.21.4): - resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.4 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.4) - '@babel/types': 7.22.5 - dev: false - /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} engines: {node: '>=6.9.0'} @@ -5544,7 +5557,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) '@babel/types': 7.22.5 /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): @@ -5558,13 +5571,13 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.4): + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 dev: true @@ -5590,13 +5603,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5620,13 +5633,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5651,13 +5664,13 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.4): + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.3): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5683,13 +5696,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5713,13 +5726,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5743,13 +5756,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.4): + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5771,9 +5784,9 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.17.9) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true @@ -5786,9 +5799,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true @@ -5803,13 +5816,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3): resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5830,18 +5843,18 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.17.9) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.4): + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5852,7 +5865,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-regexp-features-plugin': 7.21.4(@babel/core@7.22.5) + '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5862,9 +5875,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.21.4(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.21.0 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.17.9) @@ -5931,104 +5944,104 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.17.9) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.17.9) '@babel/preset-modules': 0.1.5(@babel/core@7.17.9) - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.9) babel-plugin-polyfill-corejs3: 0.5.3(@babel/core@7.17.9) babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.9) - core-js-compat: 3.30.0 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-env@7.20.2(@babel/core@7.21.4): + /@babel/preset-env@7.20.2(@babel/core@7.21.3): resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.22.5 - '@babel/core': 7.21.4 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.4) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.4) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.4) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.4) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.4) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.4) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.4) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.4) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.4) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.4) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.4) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.4) - core-js-compat: 3.30.0 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-env@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==} + /@babel/preset-env@7.20.2(@babel/core@7.22.5): + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6107,14 +6120,14 @@ packages: babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) - core-js-compat: 3.30.0 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-flow@7.21.4(@babel/core@7.22.5): - resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} + /@babel/preset-flow@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6134,20 +6147,20 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.21.4): + /@babel/preset-modules@0.1.5(@babel/core@7.21.3): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.4) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.4) - '@babel/types': 7.21.4 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true @@ -6160,7 +6173,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true @@ -6186,7 +6199,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.22.5 + '@babel/helper-validator-option': 7.21.0 '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -6220,9 +6233,10 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 + dev: true /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} @@ -6232,8 +6246,8 @@ packages: '@babel/parser': 7.22.5 '@babel/types': 7.22.5 - /@babel/traverse@7.21.4: - resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} + /@babel/traverse@7.21.3: + resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 @@ -6266,8 +6280,8 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.21.4: - resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} + /@babel/types@7.21.3: + resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -6518,15 +6532,15 @@ packages: engines: {node: '>=0.1.90'} requiresBuild: true - /@commitlint/cli@17.6.0: - resolution: {integrity: sha512-JaZeZ1p6kfkSiZlDoQjK09AuiI9zYQMiIUJzTOM8qNRHFOXOPmiTM56nI67yzeUSNTFu6M/DRqjmdjtA5q3hEg==} + /@commitlint/cli@17.5.0: + resolution: {integrity: sha512-yNW3+M7UM1ioK28LKTrryIVB5qGpXlEv8+rJQiWPMZNayy9/1XR5+lL8qBTNlgopYtZWWnIm5RETcAN29ZTL/A==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.6.0 + '@commitlint/lint': 17.4.4 '@commitlint/load': 17.5.0 - '@commitlint/read': 17.5.1 + '@commitlint/read': 17.4.4 '@commitlint/types': 17.4.4 execa: 5.1.1 lodash.isfunction: 3.0.9 @@ -6538,8 +6552,8 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@17.6.0: - resolution: {integrity: sha512-2Y9M7MN942bTK5h70fJGknhXA02+OtWCkKeIzTSwsdwz1V7y6bxYv24x052E9XHKtZHJfvM3iLuTOsjRvLqWtA==} + /@commitlint/config-conventional@17.4.4: + resolution: {integrity: sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 @@ -6586,13 +6600,13 @@ packages: semver: 7.3.8 dev: true - /@commitlint/lint@17.6.0: - resolution: {integrity: sha512-6cEXxpxZd7fbtYMxeosOum/Nnwu3VdSuZcrFSqP9lWNsrHRv4ijVsnLeomvo6WHPchGOeEWAazAI7Q6Ap22fJw==} + /@commitlint/lint@17.4.4: + resolution: {integrity: sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw==} engines: {node: '>=v14'} dependencies: '@commitlint/is-ignored': 17.4.4 '@commitlint/parse': 17.4.4 - '@commitlint/rules': 17.6.0 + '@commitlint/rules': 17.4.4 '@commitlint/types': 17.4.4 dev: true @@ -6604,15 +6618,15 @@ packages: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.10)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' @@ -6633,8 +6647,8 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read@17.5.1: - resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} + /@commitlint/read@17.4.4: + resolution: {integrity: sha512-B2TvUMJKK+Svzs6eji23WXsRJ8PAD+orI44lVuVNsm5zmI7O8RSGJMvdEZEikiA4Vohfb+HevaPoWZ7PiFZ3zA==} engines: {node: '>=v14'} dependencies: '@commitlint/top-level': 17.4.0 @@ -6656,8 +6670,8 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.6.0: - resolution: {integrity: sha512-Ka7AsRFvkKMYYE7itgo7hddRGCiV+0BgbTIAq4PWmnkHAECxYpdqMVzW5jaATmXZfwfRRTB57e7KZWj6EPmK1A==} + /@commitlint/rules@17.4.4: + resolution: {integrity: sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.4.4 @@ -6709,7 +6723,7 @@ packages: resolution: {integrity: sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==} dev: false - /@docsearch/react@3.3.3(@algolia/client-search@4.17.0)(@types/react@17.0.58)(react-dom@18.2.0)(react@18.2.0): + /@docsearch/react@3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -6724,30 +6738,30 @@ packages: optional: true dependencies: '@algolia/autocomplete-core': 1.7.4 - '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.17.0)(algoliasearch@4.17.0) + '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0) '@docsearch/css': 3.3.3 - '@types/react': 17.0.58 - algoliasearch: 4.17.0 + '@types/react': 17.0.53 + algoliasearch: 4.16.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@algolia/client-search' dev: false - /@emmetio/abbreviation@2.3.1: - resolution: {integrity: sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g==} + /@emmetio/abbreviation@2.2.3: + resolution: {integrity: sha512-87pltuCPt99aL+y9xS6GPZ+Wmmyhll2WXH73gG/xpGcQ84DRnptBsI2r0BeIQ0EB/SQTOe2ANPqFqj3Rj5FOGA==} dependencies: - '@emmetio/scanner': 1.0.2 + '@emmetio/scanner': 1.0.0 dev: false - /@emmetio/css-abbreviation@2.1.6: - resolution: {integrity: sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw==} + /@emmetio/css-abbreviation@2.1.4: + resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==} dependencies: - '@emmetio/scanner': 1.0.2 + '@emmetio/scanner': 1.0.0 dev: false - /@emmetio/scanner@1.0.2: - resolution: {integrity: sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w==} + /@emmetio/scanner@1.0.0: + resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} dev: false /@emotion/is-prop-valid@0.8.8: @@ -6780,8 +6794,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.17.16: - resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==} + /@esbuild/android-arm64@0.17.14: + resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -6813,8 +6827,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.16: - resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==} + /@esbuild/android-arm@0.17.14: + resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -6838,8 +6852,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.16: - resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==} + /@esbuild/android-x64@0.17.14: + resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -6863,8 +6877,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.16: - resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==} + /@esbuild/darwin-arm64@0.17.14: + resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -6888,8 +6902,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.16: - resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==} + /@esbuild/darwin-x64@0.17.14: + resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -6913,8 +6927,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.16: - resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==} + /@esbuild/freebsd-arm64@0.17.14: + resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -6938,8 +6952,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.16: - resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==} + /@esbuild/freebsd-x64@0.17.14: + resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -6963,8 +6977,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.16: - resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==} + /@esbuild/linux-arm64@0.17.14: + resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -6988,8 +7002,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.16: - resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==} + /@esbuild/linux-arm@0.17.14: + resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -7013,8 +7027,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.16: - resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==} + /@esbuild/linux-ia32@0.17.14: + resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -7046,8 +7060,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.16: - resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==} + /@esbuild/linux-loong64@0.17.14: + resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -7071,8 +7085,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.16: - resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==} + /@esbuild/linux-mips64el@0.17.14: + resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -7096,8 +7110,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.16: - resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==} + /@esbuild/linux-ppc64@0.17.14: + resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -7121,8 +7135,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.16: - resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==} + /@esbuild/linux-riscv64@0.17.14: + resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -7146,8 +7160,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.16: - resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==} + /@esbuild/linux-s390x@0.17.14: + resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -7171,8 +7185,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.16: - resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==} + /@esbuild/linux-x64@0.17.14: + resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -7196,8 +7210,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.16: - resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==} + /@esbuild/netbsd-x64@0.17.14: + resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -7221,8 +7235,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.16: - resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==} + /@esbuild/openbsd-x64@0.17.14: + resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -7246,8 +7260,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.16: - resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==} + /@esbuild/sunos-x64@0.17.14: + resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -7271,8 +7285,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.16: - resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==} + /@esbuild/win32-arm64@0.17.14: + resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -7296,8 +7310,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.16: - resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==} + /@esbuild/win32-ia32@0.17.14: + resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -7321,8 +7335,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.16: - resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==} + /@esbuild/win32-x64@0.17.14: + resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -7344,7 +7358,17 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.22.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.36.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.36.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.38.0): @@ -7354,11 +7378,11 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.38.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + /@eslint-community/regexpp@4.4.1: + resolution: {integrity: sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -7368,7 +7392,23 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.5.2 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/eslintrc@2.0.1: + resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7377,14 +7417,15 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7395,6 +7436,11 @@ packages: - supports-color dev: true + /@eslint/js@8.36.0: + resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@eslint/js@8.38.0: resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7418,14 +7464,14 @@ packages: dependencies: '@felte/common': 1.1.4 - /@felte/reporter-svelte@1.1.5(svelte@3.58.0): + /@felte/reporter-svelte@1.1.5(svelte@3.57.0): resolution: {integrity: sha512-emV9eYpN6/JcUP5sDXC3zPFdTnEp4Tw3G7KyT/cSg9MSnhYz+6ZW7eBEGsFSS0dJHocIliZPk+T4ROKdQgFG+w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/common': 1.1.4 - svelte: 3.58.0 + svelte: 3.57.0 dev: false /@felte/validator-zod@1.0.13(zod@3.21.4): @@ -7452,13 +7498,13 @@ packages: '@floating-ui/core': 0.7.3 dev: false - /@floating-ui/dom@1.4.2: - resolution: {integrity: sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==} + /@floating-ui/dom@1.4.1: + resolution: {integrity: sha512-loCXUOLzIC3jp50RFOKXZ/kQjjz26ryr/23M+FWG9jrmAv8lRf3DUfC2AiVZ3+K316GOhB08CR+Povwz8e9mDw==} dependencies: '@floating-ui/core': 1.3.1 dev: false - /@floating-ui/react-dom@0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@floating-ui/react-dom@0.7.2(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} peerDependencies: react: '>=16.8.0' @@ -7467,7 +7513,7 @@ packages: '@floating-ui/dom': 0.5.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.35)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -7492,7 +7538,7 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.4.2 + '@floating-ui/dom': 1.4.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -7635,7 +7681,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -7647,7 +7693,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -7668,7 +7714,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -7713,14 +7759,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -7747,7 +7793,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-mock: 27.5.1 dev: true @@ -7757,7 +7803,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-mock: 29.5.0 dev: true @@ -7784,7 +7830,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -7795,8 +7841,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.2.0 - '@types/node': 18.15.11 + '@sinonjs/fake-timers': 10.1.0 + '@types/node': 18.15.10 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -7837,7 +7883,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -7875,8 +7921,8 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 18.15.11 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 18.15.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -7918,7 +7964,7 @@ packages: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -7994,7 +8040,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -8017,7 +8063,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -8028,7 +8074,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -8040,8 +8086,8 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.11 - '@types/yargs': 17.0.24 + '@types/node': 18.15.10 + '@types/yargs': 17.0.23 chalk: 4.1.2 dev: true @@ -8057,44 +8103,44 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@4.9.5) typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/gen-mapping@0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.3: - resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + /@jridgewell/source-map@0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -8102,8 +8148,8 @@ packages: /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -8116,17 +8162,17 @@ packages: resolution: {integrity: sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==} dev: false - /@lukeed/csprng@1.1.0: - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + /@lukeed/csprng@1.0.1: + resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==} engines: {node: '>=8'} - /@lukemorales/query-key-factory@1.2.0(@tanstack/query-core@4.29.1): + /@lukemorales/query-key-factory@1.2.0(@tanstack/query-core@4.27.0): resolution: {integrity: sha512-ilUedLpJdpOCMKgxoncRkYEFF7C+K//IK/QWXHs0G6HjmZunT9XcrpWHNc5RjrBBqPhdxYNa7aUoEhjonwl4eQ==} engines: {node: '>=14'} peerDependencies: '@tanstack/query-core': ^4.0.0 dependencies: - '@tanstack/query-core': 4.29.1 + '@tanstack/query-core': 4.27.0 dev: false /@manypkg/find-root@1.1.0: @@ -8171,7 +8217,7 @@ packages: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: '@types/estree-jsx': 1.0.0 - '@types/mdx': 2.0.4 + '@types/mdx': 2.0.3 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 @@ -8196,34 +8242,34 @@ packages: peerDependencies: react: '>=16' dependencies: - '@types/mdx': 2.0.4 + '@types/mdx': 2.0.3 '@types/react': 18.0.37 react: 18.2.0 dev: true - /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.11): + /@microsoft/api-extractor-model@7.26.4(@types/node@18.15.10): resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.34.4(@types/node@18.15.11): + /@microsoft/api-extractor@7.34.4(@types/node@18.15.10): resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.11) + '@microsoft/api-extractor-model': 7.26.4(@types/node@18.15.10) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) '@rushstack/rig-package': 0.3.18 '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.2 + resolve: 1.22.1 semver: 7.3.8 source-map: 0.6.1 typescript: 4.8.4 @@ -8304,7 +8350,7 @@ packages: dependencies: '@open-draft/until': 1.0.3 '@types/debug': 4.1.7 - '@xmldom/xmldom': 0.8.7 + '@xmldom/xmldom': 0.8.6 debug: 4.3.4(supports-color@8.1.1) headers-polyfill: 3.1.2 outvariant: 1.4.0 @@ -8321,7 +8367,7 @@ packages: tar-fs: 2.1.1 dev: true - /@nestjs/axios@2.0.0(@nestjs/common@9.4.0)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/axios@2.0.0(@nestjs/common@9.3.12)(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-F6oceoQLEn031uun8NiommeMkRIojQqVryxQy/mK7fx0CI0KbgkJL3SloCQcsOD+agoEnqKJKXZpEvL6FNswJg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -8329,7 +8375,7 @@ packages: reflect-metadata: ^0.1.12 rxjs: ^6.0.0 || ^7.0.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) axios: 1.4.0 reflect-metadata: 0.1.13 rxjs: 7.8.0 @@ -8343,7 +8389,7 @@ packages: '@angular-devkit/core': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) '@angular-devkit/schematics-cli': 15.2.4(chokidar@3.5.3) - '@nestjs/schematics': 9.1.0(chokidar@3.5.3)(typescript@4.9.5) + '@nestjs/schematics': 9.0.4(chokidar@3.5.3)(typescript@4.9.5) chalk: 4.1.2 chokidar: 3.5.3 cli-table3: 0.6.3 @@ -8369,30 +8415,8 @@ packages: - webpack-cli dev: true - /@nestjs/common@9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/common@9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-NtrUG2VgCbhmZEO1yRt/Utq16uFRV+xeHAOtdYIsfHGG0ssAV2lVLlvFFAQYh0SQ+KuYY1Gsxd3GK2JFoJCNqQ==} - peerDependencies: - cache-manager: <=5 - class-transformer: '*' - class-validator: '*' - reflect-metadata: ^0.1.12 - rxjs: ^7.1.0 - peerDependenciesMeta: - cache-manager: - optional: true - class-transformer: - optional: true - class-validator: - optional: true - dependencies: - iterare: 1.2.1 - reflect-metadata: 0.1.13 - rxjs: 7.8.0 - tslib: 2.5.0 - uid: 2.0.1 - - /@nestjs/common@9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-RUcVAQsEF4WPrmzFXEOUfZnPwrLTe1UVlzXTlSyfqfqbdWDPKDGlIPVelBLfc5/+RRUQ0I5iE4+CQvpCmkqldw==} peerDependencies: cache-manager: <=5 class-transformer: '*' @@ -8413,16 +8437,16 @@ packages: reflect-metadata: 0.1.13 rxjs: 7.8.0 tslib: 2.5.0 - uid: 2.0.2 + uid: 2.0.1 - /@nestjs/config@2.3.1(@nestjs/common@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + /@nestjs/config@2.3.1(@nestjs/common@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-Ckzel0NZ9CWhNsLfE1hxfDuxJuEbhQvGxSlmZ1/X8awjRmAA/g3kT6M1+MO1SHj1wMtPyUfd9WpwkiqFbiwQgA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.13 rxjs: ^6.0.0 || ^7.2.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) dotenv: 16.0.3 dotenv-expand: 10.0.0 lodash: 4.17.21 @@ -8449,7 +8473,7 @@ packages: '@nestjs/websockets': optional: true dependencies: - '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nuxtjs/opencollective': 0.3.2 @@ -8463,46 +8487,15 @@ packages: transitivePeerDependencies: - encoding - /@nestjs/core@9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): - resolution: {integrity: sha512-yTLryCgFD0462wPe4HIzhyTcDgibt8Stfwb5YzcX7Ma0NM4m8uBIpcPG109KBubp8ZmV85e5mw4rl20qLQQVsQ==} - requiresBuild: true - peerDependencies: - '@nestjs/common': ^9.0.0 - '@nestjs/microservices': ^9.0.0 - '@nestjs/platform-express': ^9.0.0 - '@nestjs/websockets': ^9.0.0 - reflect-metadata: ^0.1.12 - rxjs: ^7.1.0 - peerDependenciesMeta: - '@nestjs/microservices': - optional: true - '@nestjs/platform-express': - optional: true - '@nestjs/websockets': - optional: true - dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) - '@nuxtjs/opencollective': 0.3.2 - fast-safe-stringify: 2.1.1 - iterare: 1.2.1 - path-to-regexp: 3.2.0 - reflect-metadata: 0.1.13 - rxjs: 7.8.0 - tslib: 2.5.0 - uid: 2.0.2 - transitivePeerDependencies: - - encoding - - /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): + /@nestjs/devtools-integration@0.1.4(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): resolution: {integrity: sha512-jAKTrpc+Ilrb7CFV1ZuG9b4OYVlFPHUXna2H8BrmxKResyqnzlzR/YIUr8zJE7p15MipAjiVaLHHyEL0C9OYGA==} peerDependencies: '@nestjs/common': ^9.3.7 '@nestjs/core': ^9.3.7 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) chalk: 4.1.2 node-fetch: 2.6.9 reflect-metadata: 0.1.13 @@ -8510,20 +8503,20 @@ packages: - encoding dev: false - /@nestjs/event-emitter@1.4.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(reflect-metadata@0.1.13): + /@nestjs/event-emitter@1.4.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13): resolution: {integrity: sha512-PmLpzMYgEKJNxOUrRjb6kNSm2PC6J+BeLTuF/bkYViGM/mVGvYOgU5jq8DQnXmiSmDmyWN+tO2cHSnR7odJJRA==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.12 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) eventemitter2: 6.4.9 reflect-metadata: 0.1.13 dev: false - /@nestjs/graphql@10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): + /@nestjs/graphql@10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-fsOsoK2nMqmnBisrno+S+Yj/Qr/GLh2b3QCDEx4eooOEGM0+/NjCwmJ19iQ6nBLW6n4K8ZUvuCDMjg9ecaTZ+Q==} peerDependencies: '@apollo/subgraph': ^0.1.5 || ^0.3.0 @@ -8541,9 +8534,9 @@ packages: '@graphql-tools/merge': 8.2.2(graphql@16.6.0) '@graphql-tools/schema': 8.3.1(graphql@16.6.0) '@graphql-tools/utils': 8.6.1(graphql@16.6.0) - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) chokidar: 3.5.3 fast-glob: 3.2.11 graphql: 16.6.0 @@ -8564,17 +8557,17 @@ packages: - utf-8-validate dev: false - /@nestjs/jwt@10.0.3(@nestjs/common@9.4.0): + /@nestjs/jwt@10.0.3(@nestjs/common@9.3.12): resolution: {integrity: sha512-WO8MI3uEMOFKpbO+SAg6l4aRCr+9KvaL+raFMZaXuEUDphXek6pqdox+4tex9242pNSJUA0trfAMaiy/yVrXQg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@types/jsonwebtoken': 9.0.1 jsonwebtoken: 9.0.0 dev: false - /@nestjs/mapped-types@1.0.1(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.0.1(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 @@ -8587,13 +8580,13 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: false - /@nestjs/mapped-types@1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/mapped-types@1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} peerDependencies: '@nestjs/common': ^7.0.8 || ^8.0.0 || ^9.0.0 @@ -8606,19 +8599,19 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) class-transformer: 0.5.1 class-validator: 0.14.0 reflect-metadata: 0.1.13 dev: true - /@nestjs/passport@9.0.3(@nestjs/common@9.4.0)(passport@0.6.0): + /@nestjs/passport@9.0.3(@nestjs/common@9.3.12)(passport@0.6.0): resolution: {integrity: sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 passport: ^0.4.0 || ^0.5.0 || ^0.6.0 dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) passport: 0.6.0 dev: false @@ -8628,7 +8621,7 @@ packages: '@nestjs/common': ^9.0.0 '@nestjs/core': ^9.0.0 dependencies: - '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) body-parser: 1.20.2 cors: 2.8.5 @@ -8638,22 +8631,6 @@ packages: transitivePeerDependencies: - supports-color - /@nestjs/platform-express@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): - resolution: {integrity: sha512-PpnfghpNq7mwG43z3+pacHulsabUCBMla4nUikntXT525ORpZSDvh/nLi1HLfE4w5+FcINc8/RBOyYTeRVmiRQ==} - peerDependencies: - '@nestjs/common': ^9.0.0 - '@nestjs/core': ^9.0.0 - dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - body-parser: 1.20.2 - cors: 2.8.5 - express: 4.18.2 - multer: 1.4.4-lts.1 - tslib: 2.5.0 - transitivePeerDependencies: - - supports-color - /@nestjs/platform-ws@9.4.2(@nestjs/common@9.3.12)(@nestjs/websockets@9.4.2)(rxjs@7.8.0): resolution: {integrity: sha512-JURYiQ/0yoDD/Z14szKDMts6xUP7hI/z5CSBOSAEJk+GdhKB4VW6noTgZQu8KRSZxtLj5tm73JIaOMX9P97Buw==} peerDependencies: @@ -8661,7 +8638,7 @@ packages: '@nestjs/websockets': ^9.0.0 rxjs: ^7.1.0 dependencies: - '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/websockets': 9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0) rxjs: 7.8.0 tslib: 2.5.2 @@ -8671,13 +8648,14 @@ packages: - utf-8-validate dev: false - /@nestjs/schematics@9.1.0(chokidar@3.5.3)(typescript@4.9.5): - resolution: {integrity: sha512-/7CyMTnPJSK9/xD9CkCqwuHPOlHVlLC2RDnbdCJ7mIO07SdbBbY14msTqtYW9VRQtsjZPLh1GTChf7ryJUImwA==} + /@nestjs/schematics@9.0.4(chokidar@3.5.3)(typescript@4.9.5): + resolution: {integrity: sha512-egurCfAc4e5i1r2TmeAF0UrOKejFmT5oTdv4b7HcOVPupc3QGU7CbEfGleL3mkM5AjrixTQeMxU9bJ00ttAbGg==} peerDependencies: - typescript: '>=4.3.5' + typescript: ^4.3.5 dependencies: - '@angular-devkit/core': 15.2.4(chokidar@3.5.3) - '@angular-devkit/schematics': 15.2.4(chokidar@3.5.3) + '@angular-devkit/core': 15.0.4(chokidar@3.5.3) + '@angular-devkit/schematics': 15.0.4(chokidar@3.5.3) + fs-extra: 11.1.0 jsonc-parser: 3.2.0 pluralize: 8.0.0 typescript: 4.9.5 @@ -8685,7 +8663,7 @@ packages: - chokidar dev: true - /@nestjs/serve-static@3.0.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(express@4.18.2): + /@nestjs/serve-static@3.0.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(express@4.18.2): resolution: {integrity: sha512-i766UJPYOqvQ2BbRKh0/+Mmq5NkJnmKcShjWV1i5qpXyeM0KDZTn0n7g7ykWq/3LbQgjpMzrhYtGv35GX7GVQw==} peerDependencies: '@fastify/static': ^6.5.0 @@ -8701,13 +8679,13 @@ packages: fastify: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) express: 4.18.2 path-to-regexp: 0.2.5 dev: false - /@nestjs/swagger@6.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): + /@nestjs/swagger@6.2.1(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-9M2vkfJHIzLqDZwvM5TEZO0MxRCvIb0xVy0LsmWwxH1lrb0z/4MhU+r2CWDhBtTccVJrKxVPiU2s3T3b9uUJbg==} peerDependencies: '@fastify/static': ^6.0.0 @@ -8724,9 +8702,9 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/mapped-types': 1.2.2(@nestjs/common@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) class-transformer: 0.5.1 class-validator: 0.14.0 js-yaml: 4.1.0 @@ -8749,30 +8727,10 @@ packages: '@nestjs/platform-express': optional: true dependencies: - '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/platform-express': 9.3.12(@nestjs/common@9.3.12)(@nestjs/core@9.3.12) tslib: 2.5.0 - dev: true - - /@nestjs/testing@9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/platform-express@9.4.0): - resolution: {integrity: sha512-xZWp363P4otcebg++gSjUcdCfTK0RorORzyFq3aLaSAQOlq8kxfFDRIKzEATR4aOUfqTMMsAA8lhnMJWf35N6A==} - peerDependencies: - '@nestjs/common': ^9.0.0 - '@nestjs/core': ^9.0.0 - '@nestjs/microservices': ^9.0.0 - '@nestjs/platform-express': ^9.0.0 - peerDependenciesMeta: - '@nestjs/microservices': - optional: true - '@nestjs/platform-express': - optional: true - dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/platform-express': 9.4.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0) - tslib: 2.5.0 - dev: false /@nestjs/websockets@9.4.2(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(reflect-metadata@0.1.13)(rxjs@7.8.0): resolution: {integrity: sha512-u1Txsb+rHWOG0mHxTfNt/64eyYSCGg6t/k736P2bdYP1fP4ETo/Z/F4Othau8q0MsWvKi3ZgYRQbhcefaudQww==} @@ -8786,7 +8744,7 @@ packages: '@nestjs/platform-socket.io': optional: true dependencies: - '@nestjs/common': 9.3.12(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) iterare: 1.2.1 object-hash: 3.0.0 @@ -8871,13 +8829,13 @@ packages: tiny-glob: 0.2.9 tslib: 2.5.2 - /@playwright/test@1.32.3: - resolution: {integrity: sha512-BvWNvK0RfBriindxhLVabi8BRe3X0J9EVjKlcmhxjg4giWBD/xleLcg2dz7Tx0agu28rczjNIPQWznwzDwVsZQ==} + /@playwright/test@1.32.1: + resolution: {integrity: sha512-FTwjCuhlm1qHUGf4hWjfr64UMJD/z0hXYbk+O387Ioe6WdyZQ+0TBDAc6P+pHjx2xCv1VYNgrKbYrNixFWy4Dg==} engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.15.11 - playwright-core: 1.32.3 + '@types/node': 18.15.10 + playwright-core: 1.32.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -8938,7 +8896,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -8952,8 +8910,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9014,7 +8972,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -9028,11 +8986,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9047,7 +9005,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -9057,7 +9015,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -9084,7 +9042,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -9094,7 +9052,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -9139,7 +9097,7 @@ packages: - '@types/react' dev: false - /@radix-ui/react-dialog@1.0.3(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.3(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-owNhq36kNPqC2/a+zJRioPg6HHnTn5B/sh/NjTY8r4W9g1L5VJlrzZIVcBr7R9Mg8iLjVmh6MGgMlfoVf/WO/A==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9161,7 +9119,7 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -9202,7 +9160,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -9212,7 +9170,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -9248,7 +9206,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -9263,11 +9221,11 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9298,7 +9256,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} peerDependencies: '@types/react': '*' @@ -9313,13 +9271,13 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9334,7 +9292,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -9344,7 +9302,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -9390,7 +9348,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -9404,10 +9362,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9436,7 +9394,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-hover-card@1.0.5(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-jXRuZEkxSWdHZbVyL0J46cm7pQjmOMpwJEFKY+VqAJnV+FxS+zIZExI1OCeIiDwCBzUy6If1FfouOsfqBxr86g==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9447,7 +9405,7 @@ packages: '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) '@radix-ui/react-dismissable-layer': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) @@ -9468,7 +9426,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -9478,8 +9436,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -9510,7 +9468,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} peerDependencies: '@types/react': '*' @@ -9525,27 +9483,27 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) dev: false /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): @@ -9583,14 +9541,14 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: '@babel/runtime': 7.21.0 - '@floating-ui/react-dom': 0.7.2(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 0.7.2(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-context': 1.0.0(react@18.2.0) @@ -9629,7 +9587,7 @@ packages: - '@types/react' dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -9644,16 +9602,16 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.35)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.0.29)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.35 + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9713,7 +9671,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -9727,8 +9685,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9768,7 +9726,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -9782,9 +9740,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9836,7 +9794,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -9850,8 +9808,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9878,7 +9836,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -9893,15 +9851,15 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -9927,7 +9885,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@1.2.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-select@1.2.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -9944,7 +9902,7 @@ packages: '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.1.1(@types/react@18.0.35)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.1(@types/react@18.0.29)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.2(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.1(react@18.2.0) @@ -9956,7 +9914,7 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -10027,7 +9985,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -10037,8 +9995,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10066,7 +10024,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -10076,7 +10034,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10104,7 +10062,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -10114,8 +10072,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10154,7 +10112,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -10164,8 +10122,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10193,7 +10151,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -10203,7 +10161,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10240,7 +10198,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -10251,7 +10209,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/rect': 1.0.1 - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10280,7 +10238,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.0.35)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -10290,8 +10248,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.35)(react@18.2.0) - '@types/react': 18.0.35 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.29)(react@18.2.0) + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -10363,14 +10321,14 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.21.4 + '@babel/helper-module-imports': 7.18.6 '@rollup/pluginutils': 3.1.0(rollup@2.70.2) '@types/babel__core': 7.20.0 rollup: 2.70.2 dev: true - /@rollup/plugin-commonjs@24.1.0(rollup@2.70.2): - resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==} + /@rollup/plugin-commonjs@24.0.1(rollup@2.70.2): + resolution: {integrity: sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0 @@ -10411,7 +10369,7 @@ packages: builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.1 rollup: 2.70.2 dev: true @@ -10439,8 +10397,8 @@ packages: magic-string: 0.27.0 dev: false - /@rollup/plugin-terser@0.4.1(rollup@2.70.2): - resolution: {integrity: sha512-aKS32sw5a7hy+fEXVy+5T95aDIwjpGHCTv833HXVtyKMDoVS7pBr5K3L9hEQoNqbJFjfANPrNpIXlTQ7is00eA==} + /@rollup/plugin-terser@0.4.0(rollup@2.70.2): + resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -10451,7 +10409,7 @@ packages: rollup: 2.70.2 serialize-javascript: 6.0.1 smob: 0.0.6 - terser: 5.16.9 + terser: 5.16.8 dev: true /@rollup/pluginutils@3.1.0(rollup@2.70.2): @@ -10488,7 +10446,7 @@ packages: picomatch: 2.3.1 rollup: 2.70.2 - /@rushstack/node-core-library@3.55.2(@types/node@18.15.11): + /@rushstack/node-core-library@3.55.2(@types/node@18.15.10): resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} peerDependencies: '@types/node': '*' @@ -10496,12 +10454,12 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.2 + resolve: 1.22.1 semver: 7.3.8 z-schema: 5.0.5 dev: true @@ -10509,7 +10467,7 @@ packages: /@rushstack/rig-package@0.3.18: resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} dependencies: - resolve: 1.22.2 + resolve: 1.22.1 strip-json-comments: 3.1.1 dev: true @@ -10637,9 +10595,8 @@ packages: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.2.0: - resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} - deprecated: Use version 10.1.0. Version 10.2.0 has potential breaking issues + /@sinonjs/fake-timers@10.1.0: + resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} dependencies: '@sinonjs/commons': 3.0.0 dev: true @@ -10670,7 +10627,7 @@ packages: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) axe-core: 4.6.3 - core-js: 3.30.0 + core-js: 3.29.1 global: 4.4.0 lodash: 4.17.21 react: 18.2.0 @@ -10995,7 +10952,7 @@ packages: '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@types/webpack-env': 1.18.0 - core-js: 3.30.0 + core-js: 3.29.1 global: 4.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -11015,7 +10972,7 @@ packages: '@storybook/router': 6.5.16(react-dom@18.2.0)(react@18.2.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.30.0 + core-js: 3.29.1 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -11046,7 +11003,7 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 '@storybook/theming': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.0.0-rc.10 - '@types/lodash': 4.14.192 + '@types/lodash': 4.14.191 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -11125,7 +11082,7 @@ packages: remark-slug: 7.0.1 rollup: 2.70.2 typescript: 4.9.5 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) transitivePeerDependencies: - supports-color dev: true @@ -11160,7 +11117,7 @@ packages: /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: - core-js: 3.30.0 + core-js: 3.29.1 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true @@ -11185,7 +11142,7 @@ packages: hasBin: true dependencies: '@babel/core': 7.22.5 - '@babel/preset-env': 7.21.4(@babel/core@7.22.5) + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) '@ndelangen/get-tarball': 3.0.7 '@storybook/codemod': 7.0.0-rc.10 '@storybook/core-common': 7.0.0-rc.10 @@ -11209,7 +11166,7 @@ packages: get-port: 5.1.1 giget: 1.1.2 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.21.4) + jscodeshift: 0.14.0(@babel/preset-env@7.20.2) leven: 3.1.0 prettier: 2.8.8 prompts: 2.4.2 @@ -11232,7 +11189,7 @@ packages: /@storybook/client-logger@6.5.16: resolution: {integrity: sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==} dependencies: - core-js: 3.30.0 + core-js: 3.29.1 global: 4.4.0 dev: true @@ -11251,9 +11208,9 @@ packages: /@storybook/codemod@7.0.0-rc.10: resolution: {integrity: sha512-BHAtI/G5/TyjV/714W06oMaEa3A7GGTGK4KGlEvC/g1i3bCeXMCGWCR1fp850OFX/AyQF5iETtAZx+vk7mvurQ==} dependencies: - '@babel/core': 7.21.4 - '@babel/preset-env': 7.20.2(@babel/core@7.21.4) - '@babel/types': 7.21.4 + '@babel/core': 7.21.3 + '@babel/preset-env': 7.20.2(@babel/core@7.21.3) + '@babel/types': 7.21.3 '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 '@storybook/node-logger': 7.0.0-rc.10 @@ -11277,7 +11234,7 @@ packages: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0) - core-js: 3.30.0 + core-js: 3.29.1 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -11340,7 +11297,7 @@ packages: /@storybook/core-events@6.5.16: resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==} dependencies: - core-js: 3.30.0 + core-js: 3.29.1 dev: true /@storybook/core-events@7.0.0-rc.10: @@ -11415,10 +11372,10 @@ packages: /@storybook/csf-tools@7.0.0-rc.10: resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==} dependencies: - '@babel/generator': 7.21.4 - '@babel/parser': 7.21.4 - '@babel/traverse': 7.21.4 - '@babel/types': 7.21.4 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 '@storybook/csf': 0.1.1-next.0 '@storybook/types': 7.0.0-rc.10 fs-extra: 11.1.1 @@ -11612,7 +11569,7 @@ packages: react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) transitivePeerDependencies: - '@preact/preset-vite' - '@storybook/mdx1-csf' @@ -11667,7 +11624,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.30.0 + core-js: 3.29.1 memoizerific: 1.11.3 qs: 6.11.2 react: 18.2.0 @@ -11693,7 +11650,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - core-js: 3.30.0 + core-js: 3.29.1 find-up: 4.1.0 dev: true @@ -11731,7 +11688,7 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.30.0 + core-js: 3.29.1 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -11770,7 +11727,7 @@ packages: file-system-cache: 2.1.1 dev: true - /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.58.0)(vite@4.0.3): + /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.57.0)(vite@4.0.3): resolution: {integrity: sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -11786,15 +11743,15 @@ packages: deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.26.7 - svelte: 3.58.0 - svelte-hmr: 0.15.1(svelte@3.58.0) - vite: 4.0.3(@types/node@18.15.11) + svelte: 3.57.0 + svelte-hmr: 0.15.1(svelte@3.57.0) + vite: 4.0.3(@types/node@18.15.10) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.0.4(svelte@3.58.0)(vite@4.2.1): - resolution: {integrity: sha512-pjqhW00KwK2uzDGEr+yJBwut+D+4XfJO/+bHHdHzPRXn9+1Jeq5JcFHyrUiYaXgHtyhX0RsllCTm4ssAx4ZY7Q==} + /@sveltejs/vite-plugin-svelte@2.0.3(svelte@3.57.0)(vite@4.2.1): + resolution: {integrity: sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 @@ -11803,17 +11760,17 @@ packages: debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.0 - svelte: 3.58.0 - svelte-hmr: 0.15.1(svelte@3.58.0) - vite: 4.2.1(@types/node@18.15.11) + magic-string: 0.29.0 + svelte: 3.57.0 + svelte-hmr: 0.15.1(svelte@3.57.0) + vite: 4.2.1(@types/node@18.15.10) vitefu: 0.2.4(vite@4.2.1) transitivePeerDependencies: - supports-color dev: true - /@swc/core-darwin-arm64@1.3.49: - resolution: {integrity: sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==} + /@swc/core-darwin-arm64@1.3.42: + resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -11821,8 +11778,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.49: - resolution: {integrity: sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==} + /@swc/core-darwin-x64@1.3.42: + resolution: {integrity: sha512-bjsWtHMb6wJK1+RGlBs2USvgZ0txlMk11y0qBLKo32gLKTqzUwRw0Fmfzuf6Ue2a/w//7eqMlPFEre4LvJajGw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -11830,8 +11787,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.49: - resolution: {integrity: sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==} + /@swc/core-linux-arm-gnueabihf@1.3.42: + resolution: {integrity: sha512-Oe0ggMz3MyqXNfeVmY+bBTL0hFSNY3bx8dhcqsh4vXk/ZVGse94QoC4dd92LuPHmKT0x6nsUzB86x2jU9QHW5g==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -11839,8 +11796,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.49: - resolution: {integrity: sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==} + /@swc/core-linux-arm64-gnu@1.3.42: + resolution: {integrity: sha512-ZJsa8NIW1RLmmHGTJCbM7OPSbBZ9rOMrLqDtUOGrT0uoJXZnnQqolflamB5wviW0X6h3Z3/PSTNGNDCJ3u3Lqg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -11848,8 +11805,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.49: - resolution: {integrity: sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==} + /@swc/core-linux-arm64-musl@1.3.42: + resolution: {integrity: sha512-YpZwlFAfOp5vkm/uVUJX1O7N3yJDO1fDQRWqsOPPNyIJkI2ydlRQtgN6ZylC159Qv+TimfXnGTlNr7o3iBAqjg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -11857,8 +11814,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.49: - resolution: {integrity: sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==} + /@swc/core-linux-x64-gnu@1.3.42: + resolution: {integrity: sha512-0ccpKnsZbyHBzaQFdP8U9i29nvOfKitm6oJfdJzlqsY/jCqwvD8kv2CAKSK8WhJz//ExI2LqNrDI0yazx5j7+A==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -11866,8 +11823,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.49: - resolution: {integrity: sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==} + /@swc/core-linux-x64-musl@1.3.42: + resolution: {integrity: sha512-7eckRRuTZ6+3K21uyfXXgc2ZCg0mSWRRNwNT3wap2bYkKPeqTgb8pm8xYSZNEiMuDonHEat6XCCV36lFY6kOdQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -11875,8 +11832,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.49: - resolution: {integrity: sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==} + /@swc/core-win32-arm64-msvc@1.3.42: + resolution: {integrity: sha512-t27dJkdw0GWANdN4TV0lY/V5vTYSx5SRjyzzZolep358ueCGuN1XFf1R0JcCbd1ojosnkQg2L7A7991UjXingg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -11884,8 +11841,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.49: - resolution: {integrity: sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==} + /@swc/core-win32-ia32-msvc@1.3.42: + resolution: {integrity: sha512-xfpc/Zt/aMILX4IX0e3loZaFyrae37u3MJCv1gJxgqrpeLi7efIQr3AmERkTK3mxTO6R5urSliWw2W3FyZ7D3Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -11893,8 +11850,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.49: - resolution: {integrity: sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==} + /@swc/core-win32-x64-msvc@1.3.42: + resolution: {integrity: sha512-ra2K4Tu++EJLPhzZ6L8hWUsk94TdK/2UKhL9dzCBhtzKUixsGCEqhtqH1zISXNvW8qaVLFIMUP37ULe80/IJaA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -11902,26 +11859,21 @@ packages: dev: true optional: true - /@swc/core@1.3.49: - resolution: {integrity: sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==} + /@swc/core@1.3.42: + resolution: {integrity: sha512-nVFUd5+7tGniM2cT3LXaqnu3735Cu4az8A9gAKK+8sdpASI52SWuqfDBmjFCK9xG90MiVDVp2PTZr0BWqCIzpw==} engines: {node: '>=10'} requiresBuild: true - peerDependencies: - '@swc/helpers': ^0.5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.49 - '@swc/core-darwin-x64': 1.3.49 - '@swc/core-linux-arm-gnueabihf': 1.3.49 - '@swc/core-linux-arm64-gnu': 1.3.49 - '@swc/core-linux-arm64-musl': 1.3.49 - '@swc/core-linux-x64-gnu': 1.3.49 - '@swc/core-linux-x64-musl': 1.3.49 - '@swc/core-win32-arm64-msvc': 1.3.49 - '@swc/core-win32-ia32-msvc': 1.3.49 - '@swc/core-win32-x64-msvc': 1.3.49 + '@swc/core-darwin-arm64': 1.3.42 + '@swc/core-darwin-x64': 1.3.42 + '@swc/core-linux-arm-gnueabihf': 1.3.42 + '@swc/core-linux-arm64-gnu': 1.3.42 + '@swc/core-linux-arm64-musl': 1.3.42 + '@swc/core-linux-x64-gnu': 1.3.42 + '@swc/core-linux-x64-musl': 1.3.42 + '@swc/core-win32-arm64-msvc': 1.3.42 + '@swc/core-win32-ia32-msvc': 1.3.42 + '@swc/core-win32-x64-msvc': 1.3.42 dev: true /@t3-oss/env-core@0.3.1(typescript@4.9.5)(zod@3.21.4): @@ -11934,41 +11886,41 @@ packages: zod: 3.21.4 dev: false - /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.3.1): + /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.2.7): resolution: {integrity: sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==} peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' dependencies: - tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false - /@tanstack/match-sorter-utils@8.8.4: - resolution: {integrity: sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==} + /@tanstack/match-sorter-utils@8.7.6: + resolution: {integrity: sha512-2AMpRiA6QivHOUiBpQAVxjiHAA68Ei23ZUMNaRJrN6omWiSFLoYrxGcT6BXtuzp0Jw4h6HZCmGGIM/gbwebO2A==} engines: {node: '>=12'} dependencies: remove-accents: 0.4.2 dev: true - /@tanstack/query-core@4.29.1: - resolution: {integrity: sha512-vkPewLEG8ua0efo3SsVT0BcBtkq5RZX8oPhDAyKL+k/rdOYSQTEocfGEXSaBwIwsXeOGBUpfKqI+UmHvNqdWXg==} + /@tanstack/query-core@4.27.0: + resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} - /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.29.1)(react-dom@18.2.0)(react@18.2.0): + /@tanstack/react-query-devtools@4.22.0(@tanstack/react-query@4.28.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-YeYFBnfqvb+ZlA0IiJqiHNNSzepNhI1p2o9i8NlhQli9+Zrn230M47OBaBUs8qr3DD1dC2zGB1Dis50Ktz8gAA==} peerDependencies: '@tanstack/react-query': 4.22.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.29.1(react-dom@18.2.0)(react@18.2.0) + '@tanstack/match-sorter-utils': 8.7.6 + '@tanstack/react-query': 4.28.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) superjson: 1.12.2 use-sync-external-store: 1.2.0(react@18.2.0) dev: true - /@tanstack/react-query@4.29.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/crv1v+OeuGG6EOvaQmyeo9GCKtH4jbmuhZkvk9ulufRiHcTr/A9+YP9GevEAZzUTdzXMwenpTbyxBGvG2xXvw==} + /@tanstack/react-query@4.28.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-8cGBV5300RHlvYdS4ea+G1JcZIt5CIuprXYFnsWggkmGoC0b5JaqG0fIX3qwDL9PTNkKvG76NGThIWbpXivMrQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11979,7 +11931,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.29.1 + '@tanstack/query-core': 4.27.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) @@ -11996,13 +11948,13 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@tanstack/svelte-query@4.29.1(svelte@3.58.0): - resolution: {integrity: sha512-V+Ueq8fWHx6W9kBlVfrdFJbSUodJknOdgGKV90lNYM1WFeoOzqihXDOgeJHUaT+JKs96sRBQJAVN7NIbBR0iMw==} + /@tanstack/svelte-query@4.27.0(svelte@3.57.0): + resolution: {integrity: sha512-FmrviPCoWbgBOLgG4uOG4EHi80DDzvD4XK+0nQBTLb4c2cKyN7c98MLgG58yHbdFEPQyhhcJlqagXP18vWWS9w==} peerDependencies: svelte: ^3.54.0 dependencies: - '@tanstack/query-core': 4.29.1 - svelte: 3.58.0 + '@tanstack/query-core': 4.27.0 + svelte: 3.57.0 dev: false /@tanstack/table-core@8.9.2: @@ -12065,14 +12017,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/svelte@3.2.2(svelte@3.58.0): + /@testing-library/svelte@3.2.2(svelte@3.57.0): resolution: {integrity: sha512-IKwZgqbekC3LpoRhSwhd0JswRGxKdAGkf39UiDXTywK61YyLXbCYoR831e/UUC6EeNW4hiHPY+2WuovxOgI5sw==} engines: {node: '>= 10'} peerDependencies: svelte: 3.x dependencies: '@testing-library/dom': 8.20.0 - svelte: 3.58.0 + svelte: 3.57.0 dev: true /@testing-library/user-event@13.5.0(@testing-library/dom@8.20.0): @@ -12156,8 +12108,8 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -12165,30 +12117,30 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.4 - '@babel/types': 7.21.4 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.21.4 + '@babel/types': 7.21.3 /@types/bcrypt@5.0.0: resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/chai-subset@1.3.3: @@ -12211,7 +12163,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/cookie-session@2.0.44: @@ -12282,7 +12234,7 @@ packages: /@types/docker-modem@3.0.2: resolution: {integrity: sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@types/ssh2': 1.11.11 dev: true @@ -12290,7 +12242,7 @@ packages: resolution: {integrity: sha512-7CC5yIpQi+bHXwDK43b/deYXteP3Lem9gdocVVHJPSRJJLMfbiOchQV3rDmAPkMw+n3GIVj7m1six3JW+VcwwA==} dependencies: '@types/docker-modem': 3.0.2 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/doctrine@0.0.3: @@ -12308,12 +12260,12 @@ packages: /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: - '@types/eslint': 8.37.0 + '@types/eslint': 8.21.3 '@types/estree': 1.0.0 dev: true - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + /@types/eslint@8.21.3: + resolution: {integrity: sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==} dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 @@ -12339,7 +12291,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -12361,7 +12313,7 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/geojson@7946.0.10: @@ -12372,20 +12324,20 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/hast@2.3.4: @@ -12430,6 +12382,10 @@ packages: pretty-format: 26.6.2 dev: true + /@types/jmespath@0.15.0: + resolution: {integrity: sha512-uaht4XcYSq5ZrPriQW8C+g5DhptewRd1E84ph7L167sCyzLObz+U3JTpmYq/CNkvjNsz2mtyQoHPNEYQYTzWmg==} + dev: true + /@types/js-levenshtein@1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} @@ -12455,24 +12411,18 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/jsonwebtoken@9.0.1: resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 18.15.11 - dev: false - /@types/leaflet@1.9.3: resolution: {integrity: sha512-Caa1lYOgKVqDkDZVWkto2Z5JtVo09spEaUt2S69LiugbBpoqQu92HYFMGUbYezZbnBkyOxMNPXHSgRrRY5UyIA==} dependencies: @@ -12482,11 +12432,11 @@ packages: /@types/lodash.keyby@4.6.7: resolution: {integrity: sha512-3qSHbbxLfXlARIKsaijZPb/5ZHDajv1vRg7OlAOuBNwN29PESS3sEOPfG1s2kzSuZnKtxtXZd1lvGj5JasN91w==} dependencies: - '@types/lodash': 4.14.192 + '@types/lodash': 4.14.191 dev: true - /@types/lodash@4.14.192: - resolution: {integrity: sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==} + /@types/lodash@4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: true /@types/mdast@3.0.11: @@ -12494,8 +12444,8 @@ packages: dependencies: '@types/unist': 2.0.6 - /@types/mdx@2.0.4: - resolution: {integrity: sha512-qCYrNdpKwN6YO6FVnx+ulfqifKlE3lQGsNhvDaW9Oxzyob/cRLBJWow8GHBBD4NxQ7BVvtsATgLsX0vZAWmtrg==} + /@types/mdx@2.0.3: + resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} /@types/mime-types@2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} @@ -12548,7 +12498,7 @@ packages: /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 form-data: 3.0.1 dev: true @@ -12560,8 +12510,8 @@ packages: resolution: {integrity: sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA==} dev: true - /@types/node@18.15.11: - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + /@types/node@18.15.10: + resolution: {integrity: sha512-9avDaQJczATcXgfmMAW3MIWArOO7A+m90vuCFLr8AotWf8igO/mRoYukrk2cqZVtv38tHs33retzHEilM7FpeQ==} /@types/node@20.3.1: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} @@ -12661,55 +12611,49 @@ packages: dependencies: '@types/react': 18.0.37 - /@types/react@17.0.58: - resolution: {integrity: sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==} + /@types/react@17.0.53: + resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.2 + csstype: 3.1.1 dev: false - /@types/react@18.0.35: - resolution: {integrity: sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==} + /@types/react@18.0.29: + resolution: {integrity: sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.2 + csstype: 3.1.1 /@types/react@18.0.37: resolution: {integrity: sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.2 + csstype: 3.1.1 /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: false - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 18.15.11 - dev: false - /@types/sass@1.45.0: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: - sass: 1.62.0 + sass: 1.60.0 dev: true /@types/scheduler@0.16.3: @@ -12731,31 +12675,31 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/set-cookie-parser@2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 /@types/ssh2-streams@0.1.9: resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/ssh2@0.5.52: resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@types/ssh2-streams': 0.1.9 dev: true /@types/ssh2@1.11.11: resolution: {integrity: sha512-LdnE7UBpvHCgUznvn2fwLt2hkaENcKPFqOyXGkvyTLfxCXBN6roc1RmECNYuzzbHePzD3PaAov5rri9hehzx9Q==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/stack-utils@2.0.1: @@ -12766,7 +12710,7 @@ packages: resolution: {integrity: sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /@types/supertest@2.0.11: @@ -12810,7 +12754,7 @@ packages: /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: false /@types/yargs-parser@21.0.0: @@ -12828,14 +12772,14 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.23: + resolution: {integrity: sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} + /@typescript-eslint/eslint-plugin@5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -12845,25 +12789,25 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/type-utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + semver: 7.3.8 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==} + /@typescript-eslint/eslint-plugin@5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -12873,24 +12817,24 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/type-utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/type-utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + semver: 7.3.8 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5): + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12901,17 +12845,17 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/type-utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + semver: 7.3.8 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -12929,7 +12873,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 + '@eslint-community/regexpp': 4.4.1 '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@5.0.2) '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) @@ -12939,14 +12883,14 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.4.0 + semver: 7.3.8 tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils@4.33.0(eslint@8.38.0)(typescript@4.9.5): + /@typescript-eslint/experimental-utils@4.33.0(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -12956,16 +12900,16 @@ packages: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) - eslint: 8.38.0 + eslint: 8.36.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.38.0) + eslint-utils: 3.0.0(eslint@8.36.0) transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} + /@typescript-eslint/parser@5.56.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -12974,9 +12918,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 typescript: 4.9.5 @@ -12984,8 +12928,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==} + /@typescript-eslint/parser@5.56.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -12994,17 +12938,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@4.9.5): + /@typescript-eslint/parser@5.59.0(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13018,7 +12962,7 @@ packages: '@typescript-eslint/types': 5.59.0 '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -13052,12 +12996,12 @@ packages: '@typescript-eslint/visitor-keys': 4.33.0 dev: true - /@typescript-eslint/scope-manager@5.58.0: - resolution: {integrity: sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==} + /@typescript-eslint/scope-manager@5.56.0: + resolution: {integrity: sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/visitor-keys': 5.58.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/visitor-keys': 5.56.0 dev: true /@typescript-eslint/scope-manager@5.59.0: @@ -13068,8 +13012,8 @@ packages: '@typescript-eslint/visitor-keys': 5.59.0 dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} + /@typescript-eslint/type-utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -13078,8 +13022,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.22.0 tsutils: 3.21.0(typescript@4.9.5) @@ -13088,8 +13032,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==} + /@typescript-eslint/type-utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -13098,17 +13042,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@5.59.0(eslint@8.38.0)(typescript@4.9.5): + /@typescript-eslint/type-utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13119,9 +13063,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 + eslint: 8.36.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -13153,8 +13097,8 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types@5.58.0: - resolution: {integrity: sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==} + /@typescript-eslint/types@5.56.0: + resolution: {integrity: sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -13184,8 +13128,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.58.0(typescript@4.9.5): - resolution: {integrity: sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==} + /@typescript-eslint/typescript-estree@5.56.0(typescript@4.9.5): + resolution: {integrity: sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -13193,8 +13137,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/visitor-keys': 5.58.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/visitor-keys': 5.56.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -13247,8 +13191,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.58.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} + /@typescript-eslint/utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -13256,9 +13200,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) eslint: 8.22.0 eslint-scope: 5.1.1 semver: 7.5.3 @@ -13267,19 +13211,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.58.0(eslint@8.38.0)(typescript@4.9.5): - resolution: {integrity: sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==} + /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.58.0 - '@typescript-eslint/types': 5.58.0 - '@typescript-eslint/typescript-estree': 5.58.0(typescript@4.9.5) - eslint: 8.38.0 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + eslint: 8.36.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13287,19 +13231,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@4.9.5): + /@typescript-eslint/utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/types': 5.59.0 '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) - eslint: 8.38.0 + eslint: 8.36.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13335,12 +13279,12 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /@typescript-eslint/visitor-keys@5.58.0: - resolution: {integrity: sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==} + /@typescript-eslint/visitor-keys@5.56.0: + resolution: {integrity: sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.58.0 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.56.0 + eslint-visitor-keys: 3.4.1 dev: true /@typescript-eslint/visitor-keys@5.59.0: @@ -13348,18 +13292,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.59.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true - /@vitejs/plugin-react-swc@3.3.0(vite@4.2.1): - resolution: {integrity: sha512-Ycg+n2eyCOTpn/wRy+evVo859+hw7qCj9iaX5CMny6x1fx1Uoq0xBG+a98lFtwLNGfGEnpI0F26YigRuxCRkwg==} + /@vitejs/plugin-react-swc@3.2.0(vite@4.2.1): + resolution: {integrity: sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==} peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.49 - vite: 4.2.1(@types/node@18.15.11) - transitivePeerDependencies: - - '@swc/helpers' + '@swc/core': 1.3.42 + vite: 4.2.1(@types/node@18.15.10) dev: true /@vitejs/plugin-react@3.1.0(vite@4.2.1): @@ -13373,7 +13315,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) transitivePeerDependencies: - supports-color dev: true @@ -13483,7 +13425,7 @@ packages: /@vscode/emmet-helper@2.8.6: resolution: {integrity: sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==} dependencies: - emmet: 2.4.2 + emmet: 2.3.6 jsonc-parser: 2.3.1 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 @@ -13600,8 +13542,8 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@xmldom/xmldom@0.8.7: - resolution: {integrity: sha512-sI1Ly2cODlWStkINzqGrZ8K6n+MTSbAeQnAipGyL+KZCXuHaRlj2gyyy8B/9MvsFFqN7XHryQnB2QwhzvJXovg==} + /@xmldom/xmldom@0.8.6: + resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==} engines: {node: '>=10.0.0'} /@xstate/inspect@0.7.1(ws@8.13.0)(xstate@4.37.1): @@ -13619,7 +13561,7 @@ packages: xstate: 4.37.1 dev: true - /@xstate/svelte@2.0.1(svelte@3.58.0)(xstate@4.37.1): + /@xstate/svelte@2.0.1(svelte@3.57.0)(xstate@4.37.1): resolution: {integrity: sha512-A4QSCt4EpbyzbPIPGCRLoRn50VUq6gXcmJPIwgBaCTsTRsPsp8KSvltDqS2msBKEDr4FHWXEXOC4QVGDWFL5dg==} peerDependencies: '@xstate/fsm': ^2.0.0 @@ -13631,7 +13573,7 @@ packages: xstate: optional: true dependencies: - svelte: 3.58.0 + svelte: 3.57.0 xstate: 4.37.1 dev: false @@ -13657,16 +13599,16 @@ packages: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true - /@yarnpkg/parsers@3.0.0-rc.42: - resolution: {integrity: sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA==} + /@yarnpkg/parsers@3.0.0-rc.40: + resolution: {integrity: sha512-sKbi5XhHKXCjzb5m0ftGuQuODM2iUXEsrCSl8MkKexNWHepCmU3IPaGTPC5gHZy4sOvsb9JqTLaZEez+kDzG+Q==} engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 tslib: 2.5.2 dev: true - /@zerodevx/svelte-toast@0.8.2: - resolution: {integrity: sha512-EDtZ/Hw37T/UWCQ5drhMss0J9vItYUSDivQ3+mET5My6No7YNiNQklj2bkE61UAzut2TjHJfOJNBZsj78ODFtw==} + /@zerodevx/svelte-toast@0.8.0: + resolution: {integrity: sha512-PAcQQGhGYkdZJqPY7obnGIdlBoeoMteogYoN/nJn87CI5LYgRz6X9ST4AA65jyGlybWnniYzlrTT/dFepvuC/g==} dev: false /@zkochan/js-yaml@0.0.6: @@ -13747,10 +13689,16 @@ packages: dependencies: acorn: 8.8.2 - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true + /acorn-node@1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -13760,7 +13708,6 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} @@ -13797,6 +13744,17 @@ packages: indent-string: 4.0.0 dev: true + /ajv-formats@2.1.1(ajv@8.11.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.11.0 + dev: true + /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -13843,6 +13801,15 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /ajv@8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: @@ -13860,23 +13827,23 @@ packages: uri-js: 4.4.1 dev: false - /algoliasearch@4.17.0: - resolution: {integrity: sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==} + /algoliasearch@4.16.0: + resolution: {integrity: sha512-HAjKJ6bBblaXqO4dYygF4qx251GuJ6zCZt+qbJ+kU7sOC+yc84pawEjVpJByh+cGP2APFCsao2Giz50cDlKNPA==} dependencies: - '@algolia/cache-browser-local-storage': 4.17.0 - '@algolia/cache-common': 4.17.0 - '@algolia/cache-in-memory': 4.17.0 - '@algolia/client-account': 4.17.0 - '@algolia/client-analytics': 4.17.0 - '@algolia/client-common': 4.17.0 - '@algolia/client-personalization': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/logger-console': 4.17.0 - '@algolia/requester-browser-xhr': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/requester-node-http': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/cache-browser-local-storage': 4.16.0 + '@algolia/cache-common': 4.16.0 + '@algolia/cache-in-memory': 4.16.0 + '@algolia/client-account': 4.16.0 + '@algolia/client-analytics': 4.16.0 + '@algolia/client-common': 4.16.0 + '@algolia/client-personalization': 4.16.0 + '@algolia/client-search': 4.16.0 + '@algolia/logger-common': 4.16.0 + '@algolia/logger-console': 4.16.0 + '@algolia/requester-browser-xhr': 4.16.0 + '@algolia/requester-common': 4.16.0 + '@algolia/requester-node-http': 4.16.0 + '@algolia/transporter': 4.16.0 dev: false /ansi-align@3.0.1: @@ -13929,6 +13896,7 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -14148,13 +14116,13 @@ packages: astrojs-compiler-sync: 0.3.2(@astrojs/compiler@0.32.0) debug: 4.3.4(supports-color@8.1.1) eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 transitivePeerDependencies: - supports-color dev: true - /astro@2.6.6(@types/node@18.15.11): + /astro@2.6.6(@types/node@18.15.10): resolution: {integrity: sha512-npeTXVaSOWKYYF6Znj6Yfxfq+WIFZ9u/Q+vtFP3nXbl7/XimvE+LbmWoK+hPFBOXC/KRLHxqQSltXJX5ALFmFg==} engines: {node: '>=16.12.0', npm: '>=6.14.0'} hasBin: true @@ -14171,10 +14139,10 @@ packages: '@astrojs/telemetry': 2.1.1 '@astrojs/webapi': 2.2.0 '@babel/core': 7.22.5 - '@babel/generator': 7.21.4 - '@babel/parser': 7.21.4 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@babel/traverse': 7.21.4 + '@babel/traverse': 7.21.3 '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/yargs-parser': 21.0.0 @@ -14188,7 +14156,7 @@ packages: deepmerge-ts: 4.3.0 devalue: 4.3.2 diff: 5.1.0 - es-module-lexer: 1.2.1 + es-module-lexer: 1.2.0 esbuild: 0.17.19 estree-walker: 3.0.0 execa: 6.1.0 @@ -14206,7 +14174,7 @@ packages: preferred-pm: 3.0.3 prompts: 2.4.2 rehype: 12.0.1 - semver: 7.4.0 + semver: 7.3.8 server-destroy: 1.0.1 shiki: 0.14.2 slash: 4.0.0 @@ -14217,7 +14185,7 @@ packages: typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.3.9(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) vitefu: 0.2.4(vite@4.3.9) yargs-parser: 21.1.1 zod: 3.21.4 @@ -14268,7 +14236,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001478 + caniuse-lite: 1.0.30001470 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -14284,7 +14252,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001478 + caniuse-lite: 1.0.30001470 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -14348,7 +14316,7 @@ packages: '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 - resolve: 1.22.2 + resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: false @@ -14423,14 +14391,14 @@ packages: '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-jsx-dom-expressions@0.36.9(@babel/core@7.22.5): - resolution: {integrity: sha512-4ACO10PoUvqRcBEErbhVGv5vAHXgkz7epvULHfqJXw5TPtDYwjhmhGxGNGSK6220ec/b85ElLrGHlqQiJxI0WQ==} + /babel-plugin-jsx-dom-expressions@0.35.19(@babel/core@7.22.5): + resolution: {integrity: sha512-Y1Qg6Yt5XaRfGewxmF0ac6bnqo2xdsIdPd1J6/El4E+7m5Ej76jcHYeHWJsoPbVmbZXc5TGenwZMP9ueHjja/g==} peerDependencies: '@babel/core': ^7.20.12 dependencies: '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) '@babel/types': 7.22.5 html-entities: 2.3.3 validate-html-nesting: 1.2.1 @@ -14441,7 +14409,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) semver: 6.3.0 @@ -14449,14 +14417,14 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -14467,7 +14435,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.4 + '@babel/compat-data': 7.21.0 '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) semver: 6.3.0 @@ -14482,19 +14450,19 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) - core-js-compat: 3.30.0 + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.4): + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) - core-js-compat: 3.30.0 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true @@ -14506,7 +14474,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) - core-js-compat: 3.30.0 + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true @@ -14522,13 +14490,13 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.4): + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.4 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.4) + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) transitivePeerDependencies: - supports-color dev: true @@ -14586,13 +14554,13 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-solid@1.7.3(@babel/core@7.22.5): - resolution: {integrity: sha512-HOdyrij99zo+CBrmtDxSexBAl54vCBCfBoyueLBvcfVniaEXNd4ftKqSN6XQcLvFfCY28UFO+DHaigXzWKOfzg==} + /babel-preset-solid@1.6.13(@babel/core@7.22.5): + resolution: {integrity: sha512-W78rLK4xv48k2Jb/VFynu42oCQufcDYFz6gmhMYslKy/PJCfNxdp85QCg1wTcrmCoPQK2TcHMVcL8nVvvTBHxQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - babel-plugin-jsx-dom-expressions: 0.36.9(@babel/core@7.22.5) + babel-plugin-jsx-dom-expressions: 0.35.19(@babel/core@7.22.5) dev: false /backo2@1.0.2: @@ -14649,28 +14617,10 @@ packages: engines: {node: '>=0.6'} dev: true - /bin-build@3.0.0: - resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} - engines: {node: '>=4'} - dependencies: - decompress: 4.2.1 - download: 6.2.5 - execa: 0.7.0 - p-map-series: 1.0.0 - tempfile: 2.0.0 - dev: false - /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - /bl@1.2.3: - resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} - dependencies: - readable-stream: 2.3.8 - safe-buffer: 5.2.1 - dev: false - /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -14842,8 +14792,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001478 - electron-to-chromium: 1.4.361 + caniuse-lite: 1.0.30001470 + electron-to-chromium: 1.4.340 node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.5) @@ -14860,28 +14810,14 @@ packages: node-int64: 0.4.0 dev: true - /buffer-alloc-unsafe@1.1.0: - resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - dev: false - - /buffer-alloc@1.2.0: - resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} - dependencies: - buffer-alloc-unsafe: 1.1.0 - buffer-fill: 1.0.0 - dev: false - /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true /buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: false - /buffer-fill@1.0.0: - resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} - dev: false - /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -15018,18 +14954,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001478: - resolution: {integrity: sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==} - - /caw@2.0.1: - resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} - engines: {node: '>=4'} - dependencies: - get-proxy: 2.1.0 - isurl: 1.0.0 - tunnel-agent: 0.6.0 - url-to-options: 1.0.1 - dev: false + /caniuse-lite@1.0.30001470: + resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -15165,7 +15091,7 @@ packages: resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} dependencies: '@types/validator': 13.7.14 - libphonenumber-js: 1.10.26 + libphonenumber-js: 1.10.24 validator: 13.9.0 /class-variance-authority@0.6.0(typescript@4.9.5): @@ -15246,8 +15172,8 @@ packages: engines: {node: '>=6'} dev: true - /cli-spinners@2.8.0: - resolution: {integrity: sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==} + /cli-spinners@2.7.0: + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} /cli-table3@0.6.3: @@ -15431,10 +15357,12 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -15556,19 +15484,12 @@ packages: date-fns: 2.29.3 lodash: 4.17.21 rxjs: 7.8.0 - shell-quote: 1.8.1 + shell-quote: 1.8.0 spawn-command: 0.0.2-1 supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.7.1 - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: false - /connect-history-api-fallback@1.6.0: resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} engines: {node: '>=0.8'} @@ -15680,14 +15601,14 @@ packages: is-what: 4.1.8 dev: true - /core-js-compat@3.30.0: - resolution: {integrity: sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==} + /core-js-compat@3.29.1: + resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} dependencies: browserslist: 4.21.5 dev: true - /core-js@3.30.0: - resolution: {integrity: sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg==} + /core-js@3.29.1: + resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==} requiresBuild: true dev: true @@ -15701,7 +15622,7 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.11)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.10)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -15710,9 +15631,9 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) typescript: 4.9.5 dev: true @@ -15785,6 +15706,7 @@ packages: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 + dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -15853,8 +15775,8 @@ packages: cssom: 0.3.8 dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} @@ -15984,7 +15906,7 @@ packages: css-selector-tokenizer: 0.8.0 postcss: 8.4.21 postcss-js: 4.0.1(postcss@8.4.21) - tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: true @@ -16095,66 +16017,6 @@ packages: character-entities: 2.0.2 dev: false - /decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: false - - /decompress-tar@4.1.1: - resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} - engines: {node: '>=4'} - dependencies: - file-type: 5.2.0 - is-stream: 1.1.0 - tar-stream: 1.6.2 - dev: false - - /decompress-tarbz2@4.1.1: - resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 6.2.0 - is-stream: 1.1.0 - seek-bzip: 1.0.6 - unbzip2-stream: 1.4.3 - dev: false - - /decompress-targz@4.1.1: - resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - file-type: 5.2.0 - is-stream: 1.1.0 - dev: false - - /decompress-unzip@4.0.1: - resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} - engines: {node: '>=4'} - dependencies: - file-type: 3.9.0 - get-stream: 2.3.1 - pify: 2.3.0 - yauzl: 2.10.0 - dev: false - - /decompress@4.2.1: - resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} - engines: {node: '>=4'} - dependencies: - decompress-tar: 4.1.1 - decompress-tarbz2: 4.1.1 - decompress-targz: 4.1.1 - decompress-unzip: 4.0.1 - graceful-fs: 4.2.11 - make-dir: 1.3.0 - pify: 2.3.0 - strip-dirs: 2.1.0 - dev: false - /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true @@ -16225,6 +16087,9 @@ packages: object-keys: 1.1.1 dev: true + /defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + /defu@6.1.2: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} dev: true @@ -16312,6 +16177,15 @@ packages: - supports-color dev: true + /detective@5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 + /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false @@ -16365,7 +16239,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) readable-stream: 3.6.2 split-ca: 1.0.1 - ssh2: 1.13.0 + ssh2: 1.14.0 transitivePeerDependencies: - supports-color dev: true @@ -16489,32 +16363,11 @@ packages: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - /download@6.2.5: - resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==} - engines: {node: '>=4'} - dependencies: - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 5.2.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 7.1.0 - make-dir: 1.3.0 - p-event: 1.3.0 - pify: 3.0.0 - dev: false - /dset@3.1.2: resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} engines: {node: '>=4'} dev: false - /duplexer3@0.1.5: - resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - dev: false - /duplexer@0.1.1: resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} dev: true @@ -16549,7 +16402,7 @@ packages: '@one-ini/wasm': 0.1.1 commander: 10.0.0 minimatch: 6.1.6 - semver: 7.4.0 + semver: 7.3.8 dev: true /ee-first@1.1.1: @@ -16563,8 +16416,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.361: - resolution: {integrity: sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA==} + /electron-to-chromium@1.4.340: + resolution: {integrity: sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==} /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -16582,11 +16435,11 @@ packages: engines: {node: '>=10'} dev: true - /emmet@2.4.2: - resolution: {integrity: sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w==} + /emmet@2.3.6: + resolution: {integrity: sha512-pLS4PBPDdxuUAmw7Me7+TcHbykTsBKN/S9XJbUOMFQrNv9MoshzyMFK/R57JBm94/6HSL4vHnDeEmxlC82NQ4A==} dependencies: - '@emmetio/abbreviation': 2.3.1 - '@emmetio/css-abbreviation': 2.1.6 + '@emmetio/abbreviation': 2.2.3 + '@emmetio/css-abbreviation': 2.1.4 dev: false /emoji-regex@8.0.0: @@ -16607,6 +16460,7 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: true /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} @@ -16706,8 +16560,8 @@ packages: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + /es-module-lexer@1.2.0: + resolution: {integrity: sha512-2BMfqBDeVCcOlLaL1ZAfp+D868SczNpKArrTM3dhpd7dK/OVlogzY15qpUngt+LMTq5UC/csb9vVQAgupucSbA==} dev: false /es-set-tostringtag@2.0.1: @@ -17010,34 +16864,34 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /esbuild@0.17.16: - resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==} + /esbuild@0.17.14: + resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.16 - '@esbuild/android-arm64': 0.17.16 - '@esbuild/android-x64': 0.17.16 - '@esbuild/darwin-arm64': 0.17.16 - '@esbuild/darwin-x64': 0.17.16 - '@esbuild/freebsd-arm64': 0.17.16 - '@esbuild/freebsd-x64': 0.17.16 - '@esbuild/linux-arm': 0.17.16 - '@esbuild/linux-arm64': 0.17.16 - '@esbuild/linux-ia32': 0.17.16 - '@esbuild/linux-loong64': 0.17.16 - '@esbuild/linux-mips64el': 0.17.16 - '@esbuild/linux-ppc64': 0.17.16 - '@esbuild/linux-riscv64': 0.17.16 - '@esbuild/linux-s390x': 0.17.16 - '@esbuild/linux-x64': 0.17.16 - '@esbuild/netbsd-x64': 0.17.16 - '@esbuild/openbsd-x64': 0.17.16 - '@esbuild/sunos-x64': 0.17.16 - '@esbuild/win32-arm64': 0.17.16 - '@esbuild/win32-ia32': 0.17.16 - '@esbuild/win32-x64': 0.17.16 + '@esbuild/android-arm': 0.17.14 + '@esbuild/android-arm64': 0.17.14 + '@esbuild/android-x64': 0.17.14 + '@esbuild/darwin-arm64': 0.17.14 + '@esbuild/darwin-x64': 0.17.14 + '@esbuild/freebsd-arm64': 0.17.14 + '@esbuild/freebsd-x64': 0.17.14 + '@esbuild/linux-arm': 0.17.14 + '@esbuild/linux-arm64': 0.17.14 + '@esbuild/linux-ia32': 0.17.14 + '@esbuild/linux-loong64': 0.17.14 + '@esbuild/linux-mips64el': 0.17.14 + '@esbuild/linux-ppc64': 0.17.14 + '@esbuild/linux-riscv64': 0.17.14 + '@esbuild/linux-s390x': 0.17.14 + '@esbuild/linux-x64': 0.17.14 + '@esbuild/netbsd-x64': 0.17.14 + '@esbuild/openbsd-x64': 0.17.14 + '@esbuild/sunos-x64': 0.17.14 + '@esbuild/win32-arm64': 0.17.14 + '@esbuild/win32-ia32': 0.17.14 + '@esbuild/win32-x64': 0.17.14 /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} @@ -17106,13 +16960,13 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@6.15.0(eslint@8.38.0): + /eslint-config-prettier@6.15.0(eslint@8.36.0): resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==} hasBin: true peerDependencies: eslint: '>=3.14.1' dependencies: - eslint: 8.38.0 + eslint: 8.36.0 get-stdin: 6.0.0 dev: true @@ -17125,16 +16979,16 @@ packages: eslint: 8.22.0 dev: true - /eslint-config-prettier@8.8.0(eslint@8.38.0): + /eslint-config-prettier@8.8.0(eslint@8.36.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.38.0 + eslint: 8.36.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@4.9.5): + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -17144,19 +16998,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) - eslint: 8.38.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) - eslint-plugin-promise: 6.1.1(eslint@8.38.0) + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + eslint: 8.36.0 + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-n: 15.6.1(eslint@8.36.0) + eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): + /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0): resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -17164,23 +17018,23 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.38.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) - eslint-plugin-promise: 6.1.1(eslint@8.38.0) + eslint: 8.36.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-n: 15.6.1(eslint@8.36.0) + eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - is-core-module: 2.12.0 - resolve: 1.22.2 + is-core-module: 2.11.0 + resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0): + /eslint-import-resolver-typescript@3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0): resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -17189,72 +17043,18 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.12.0 - eslint: 8.38.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) - get-tsconfig: 4.5.0 - globby: 13.1.4 - is-core-module: 2.12.0 - is-glob: 4.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0): - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4(supports-color@8.1.1) - enhanced-resolve: 5.12.0 - eslint: 8.38.0 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) - get-tsconfig: 4.5.0 - globby: 13.1.4 - is-core-module: 2.12.0 + eslint: 8.36.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + get-tsconfig: 4.4.0 + globby: 13.1.3 + is-core-module: 2.11.0 is-glob: 4.0.3 synckit: 0.8.5 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.38.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.38.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17275,16 +17075,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.38.0 + eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.58.0)(eslint-plugin-import@2.27.5)(eslint@8.38.0) + eslint-import-resolver-typescript: 3.5.3(eslint-plugin-import@2.27.5)(eslint@8.36.0) transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17305,7 +17105,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) debug: 3.2.7 eslint: 8.22.0 eslint-import-resolver-node: 0.3.7 @@ -17313,7 +17113,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17334,54 +17134,54 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.38.0 + eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-astro@0.21.1(eslint@8.38.0): + /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=7.0.0' dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@typescript-eslint/types': 5.58.0 + '@jridgewell/sourcemap-codec': 1.4.14 + '@typescript-eslint/types': 5.56.0 astro-eslint-parser: 0.9.5 - eslint: 8.38.0 - eslint-utils: 3.0.0(eslint@8.38.0) + eslint: 8.36.0 + eslint-utils: 3.0.0(eslint@8.36.0) postcss: 8.4.24 postcss-selector-parser: 6.0.11 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es@4.1.0(eslint@8.38.0): + /eslint-plugin-es@4.1.0(eslint@8.36.0): resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.38.0 + eslint: 8.36.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.38.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.36.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.38.0 + eslint: 8.36.0 ignore: 5.2.4 dev: true - /eslint-plugin-functional@3.7.2(eslint@8.38.0)(typescript@4.9.5): + /eslint-plugin-functional@3.7.2(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg==} engines: {node: '>=10.18.0'} peerDependencies: @@ -17394,51 +17194,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.36.0)(typescript@4.9.5) array.prototype.flatmap: 1.3.1 deepmerge: 4.3.1 escape-string-regexp: 4.0.0 - eslint: 8.38.0 + eslint: 8.36.0 object.fromentries: 2.0.6 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.38.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.38.0) - has: 1.0.3 - is-core-module: 2.12.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17448,21 +17215,21 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.38.0 + eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.38.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) has: 1.0.3 - is-core-module: 2.12.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17471,7 +17238,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.22.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17481,7 +17248,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -17489,13 +17256,13 @@ packages: doctrine: 2.1.0 eslint: 8.22.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) has: 1.0.3 - is-core-module: 2.12.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17504,7 +17271,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.38.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17514,21 +17281,21 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.38.0 + eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.38.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) has: 1.0.3 - is-core-module: 2.12.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.2 + resolve: 1.22.1 semver: 6.3.0 tsconfig-paths: 3.14.2 transitivePeerDependencies: @@ -17537,30 +17304,30 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.7.0(eslint@8.38.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} + /eslint-plugin-n@15.6.1(eslint@8.36.0): + resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '>=7.0.0' dependencies: builtins: 5.0.1 - eslint: 8.38.0 - eslint-plugin-es: 4.1.0(eslint@8.38.0) - eslint-utils: 3.0.0(eslint@8.38.0) + eslint: 8.36.0 + eslint-plugin-es: 4.1.0(eslint@8.36.0) + eslint-utils: 3.0.0(eslint@8.36.0) ignore: 5.2.4 - is-core-module: 2.12.0 + is-core-module: 2.11.0 minimatch: 3.1.2 - resolve: 1.22.2 + resolve: 1.22.1 semver: 7.5.3 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.38.0): + /eslint-plugin-promise@6.1.1(eslint@8.36.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.38.0 + eslint: 8.36.0 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.22.0): @@ -17620,7 +17387,7 @@ packages: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.58.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -17629,28 +17396,28 @@ packages: - typescript dev: true - /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.58.0): + /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.57.0): resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: eslint: 8.22.0 - svelte: 3.58.0 + svelte: 3.57.0 dev: true - /eslint-plugin-tailwindcss@3.11.0(tailwindcss@3.3.1): - resolution: {integrity: sha512-RaraOG4D6VXutKnoNvFQ4+frTWGJDKtezy1yCrGFS7Um1to/npDNdh2GL19IRoGB/eanbtwhxFXy+xyEw0grAg==} + /eslint-plugin-tailwindcss@3.10.1(tailwindcss@3.2.7): + resolution: {integrity: sha512-NLPZ6b6nd/8CgGNMQ6NDiPUfBLQpSGu/u9RyX3MCZOwzNs2dFt1OamNAiRuo3Ixh7Gv4t5UcAcdNt8z74UDJkA==} engines: {node: '>=12.13.0'} peerDependencies: tailwindcss: ^3.2.2 dependencies: fast-glob: 3.2.12 postcss: 8.4.24 - tailwindcss: 3.3.1(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.22.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.22.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17660,12 +17427,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.58.0)(eslint@8.38.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.56.0)(eslint@8.36.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17675,12 +17442,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@4.9.5) - eslint: 8.38.0 + '@typescript-eslint/eslint-plugin': 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@4.9.5) + eslint: 8.36.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.38.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17690,8 +17457,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5) - eslint: 8.38.0 + '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) + eslint: 8.36.0 eslint-rule-composer: 0.3.0 dev: true @@ -17731,13 +17498,13 @@ packages: eslint: 8.22.0 eslint-visitor-keys: 2.1.0 - /eslint-utils@3.0.0(eslint@8.38.0): + /eslint-utils@3.0.0(eslint@8.36.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.38.0 + eslint: 8.36.0 eslint-visitor-keys: 2.1.0 dev: true @@ -17749,8 +17516,12 @@ packages: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint@8.22.0: @@ -17769,8 +17540,8 @@ packages: escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 eslint-utils: 3.0.0(eslint@8.22.0) - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.3.0 + espree: 9.5.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -17800,14 +17571,63 @@ packages: transitivePeerDependencies: - supports-color + /eslint@8.36.0: + resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/regexpp': 4.4.1 + '@eslint/eslintrc': 2.0.1 + '@eslint/js': 8.36.0 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.3.0 + espree: 9.5.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.0 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /eslint@8.38.0: resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 + '@eslint-community/regexpp': 4.4.1 + '@eslint/eslintrc': 2.0.3 '@eslint/js': 8.38.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 @@ -17819,8 +17639,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -17849,13 +17669,21 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.5.0: + resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) + eslint-visitor-keys: 3.4.1 + + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -17975,19 +17803,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - /execa@0.7.0: - resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} - engines: {node: '>=4'} - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - dev: false - /execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} @@ -18141,21 +17956,6 @@ packages: transitivePeerDependencies: - supports-color - /ext-list@2.2.2: - resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} - engines: {node: '>=0.10.0'} - dependencies: - mime-db: 1.52.0 - dev: false - - /ext-name@5.0.0: - resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} - engines: {node: '>=4'} - dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - dev: false - /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: @@ -18283,19 +18083,20 @@ packages: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: pend: 1.2.0 + dev: true /fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: false - /felte@1.2.7(svelte@3.58.0): + /felte@1.2.7(svelte@3.57.0): resolution: {integrity: sha512-VfCkYBODReCUrYeRMmJ9lRs7O/pC4PYKMTT7E2K6m9UzmTGpm3Ql3C518J3gUVVG5ZeEeSEifUaqmrAcaWB89w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: svelte: ^3.31.0 dependencies: '@felte/core': 1.3.7 - svelte: 3.58.0 + svelte: 3.57.0 dev: false /fetch-blob@3.2.0: @@ -18339,36 +18140,12 @@ packages: engines: {node: '>=0.10.0'} dev: false - /file-type@5.2.0: - resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} - engines: {node: '>=4'} - dev: false - - /file-type@6.2.0: - resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} - engines: {node: '>=4'} - dev: false - /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 dev: true - /filename-reserved-regex@2.0.0: - resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} - engines: {node: '>=4'} - dev: false - - /filenamify@2.1.0: - resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} - engines: {node: '>=4'} - dependencies: - filename-reserved-regex: 2.0.0 - strip-outer: 1.0.1 - trim-repeated: 1.0.0 - dev: false - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -18485,8 +18262,8 @@ packages: /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /flow-parser@0.203.1: - resolution: {integrity: sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==} + /flow-parser@0.202.1: + resolution: {integrity: sha512-IA8mhyNEUtzAKh+lj1yNDLFiUr1NSwPC+exQgghQNARFU/DeWGpoNmuYYzMDFIYsOdVdDoTJTxRc+/cS9CVvNg==} engines: {node: '>=0.4.0'} dev: true @@ -18538,7 +18315,7 @@ packages: cosmiconfig: 7.1.0 deepmerge: 4.3.1 fs-extra: 10.1.0 - memfs: 3.5.0 + memfs: 3.4.13 minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.1.1 @@ -18619,6 +18396,7 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -18629,6 +18407,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@11.1.0: + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -18763,13 +18550,6 @@ packages: engines: {node: '>=8'} dev: true - /get-proxy@2.1.0: - resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} - engines: {node: '>=4'} - dependencies: - npm-conf: 1.1.3 - dev: false - /get-stdin@6.0.0: resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} engines: {node: '>=4'} @@ -18780,19 +18560,6 @@ packages: engines: {node: '>=10'} dev: true - /get-stream@2.3.1: - resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} - engines: {node: '>=0.10.0'} - dependencies: - object-assign: 4.1.1 - pinkie-promise: 2.0.1 - dev: false - - /get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} - dev: false - /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -18812,8 +18579,8 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-tsconfig@4.5.0: - resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} + /get-tsconfig@4.4.0: + resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} dev: true /giget@1.1.2: @@ -18897,16 +18664,6 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -18928,14 +18685,14 @@ packages: once: 1.4.0 dev: true - /glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + /glob@9.3.2: + resolution: {integrity: sha512-BTv/JhKXFEHsErMte/AnfiSv8yYOLLiyH2lTg8vn02O21zWFgHPTfxtgn1QRe7NRgggUhC8hacR2Re94svHqeA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 8.0.4 - minipass: 4.2.8 - path-scurry: 1.6.4 + minimatch: 7.4.3 + minipass: 4.2.5 + path-scurry: 1.6.3 dev: true /global-dirs@0.1.1: @@ -19003,8 +18760,8 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@13.1.4: - resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} + /globby@13.1.3: + resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 @@ -19017,12 +18774,12 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - /goober@2.1.12(csstype@3.1.2): + /goober@2.1.12(csstype@3.1.1): resolution: {integrity: sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==} peerDependencies: csstype: ^3.0.10 dependencies: - csstype: 3.1.2 + csstype: 3.1.1 dev: false /gopd@1.0.1: @@ -19030,28 +18787,6 @@ packages: dependencies: get-intrinsic: 1.2.0 - /got@7.1.0: - resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} - engines: {node: '>=4'} - dependencies: - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - decompress-response: 3.3.0 - duplexer3: 0.1.5 - get-stream: 3.0.0 - is-plain-obj: 1.1.0 - is-retry-allowed: 1.2.0 - is-stream: 1.1.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - p-cancelable: 0.3.0 - p-timeout: 1.2.1 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 1.0.0 - url-to-options: 1.0.1 - dev: false - /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -19158,20 +18893,10 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-symbol-support-x@1.4.2: - resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} - dev: false - /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has-to-string-tag-x@1.4.1: - resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} - dependencies: - has-symbol-support-x: 1.4.2 - dev: false - /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} @@ -19292,8 +19017,8 @@ packages: /headers-polyfill@3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} - /helmet@6.1.5: - resolution: {integrity: sha512-UgAvdoG0BhF9vcCh/j0bWtElo2ZHHk6OzC98NLCM6zK03DEVSM0vUAtT7iR+oTo2Mi6sGelAH3tL6B/uUWxV4g==} + /helmet@6.0.1: + resolution: {integrity: sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==} engines: {node: '>=14.0.0'} dev: false @@ -19359,7 +19084,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.9 + terser: 5.16.8 dev: true /html-parse-stringify@3.0.1: @@ -19478,8 +19203,8 @@ packages: - encoding dev: false - /i18next@22.4.14: - resolution: {integrity: sha512-VtLPtbdwGn0+DAeE00YkiKKXadkwg+rBUV+0v8v0ikEjwdiJ0gmYChVE4GIa9HXymY6wKapkL93vGT7xpq6aTw==} + /i18next@22.4.13: + resolution: {integrity: sha512-GX7flMHRRqQA0I1yGLmaZ4Hwt1JfLqagk8QPDPZsqekbKtXsuIngSVWM/s3SLgNkrEXjA+0sMGNuOEkkmyqmWg==} dependencies: '@babel/runtime': 7.21.0 dev: false @@ -19565,6 +19290,7 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -19750,8 +19476,8 @@ packages: ci-info: 3.8.0 dev: true - /is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} + /is-core-module@2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 @@ -19790,11 +19516,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /is-extglob@1.0.0: - resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} - engines: {node: '>=0.10.0'} - dev: false - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -19823,13 +19544,6 @@ packages: dependencies: has-tostringtag: 1.0.0 - /is-glob@2.0.1: - resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 1.0.0 - dev: false - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -19854,13 +19568,6 @@ packages: engines: {node: '>=12'} dev: false - /is-invalid-path@0.1.0: - resolution: {integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-glob: 2.0.1 - dev: false - /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -19877,10 +19584,6 @@ packages: define-properties: 1.2.0 dev: true - /is-natural-number@4.0.1: - resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} - dev: false - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -19910,10 +19613,6 @@ packages: engines: {node: '>=8'} dev: true - /is-object@1.0.2: - resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} - dev: false - /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} @@ -19927,6 +19626,7 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + dev: true /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} @@ -19977,11 +19677,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} - engines: {node: '>=0.10.0'} - dev: false - /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true @@ -19992,11 +19687,6 @@ packages: call-bind: 1.0.2 dev: true - /is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - dev: false - /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -20065,13 +19755,6 @@ packages: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-valid-path@0.1.1: - resolution: {integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==} - engines: {node: '>=0.10.0'} - dependencies: - is-invalid-path: 0.1.0 - dev: false - /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -20144,7 +19827,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.22.5 - '@babel/parser': 7.21.4 + '@babel/parser': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -20180,14 +19863,6 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /isurl@1.0.0: - resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} - engines: {node: '>= 4'} - dependencies: - has-to-string-tag-x: 1.4.1 - is-object: 1.0.2 - dev: false - /iterall@1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} dev: false @@ -20231,7 +19906,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -20259,7 +19934,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -20309,7 +19984,7 @@ packages: - utf-8-validate dev: true - /jest-cli@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-cli@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -20326,7 +20001,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -20398,7 +20073,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -20406,7 +20081,7 @@ packages: - utf-8-validate dev: true - /jest-config@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest-config@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -20421,7 +20096,7 @@ packages: '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 @@ -20441,7 +20116,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -20481,7 +20156,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -20559,7 +20234,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -20577,7 +20252,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -20589,7 +20264,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -20615,7 +20290,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.11 + '@types/node': 18.15.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -20635,7 +20310,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.15.11 + '@types/node': 18.15.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -20656,7 +20331,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -20755,7 +20430,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 dev: true /jest-mock@29.5.0: @@ -20763,7 +20438,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-util: 29.5.0 dev: true @@ -20833,7 +20508,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) jest-util: 27.5.1 jest-validate: 27.5.1 - resolve: 1.22.2 + resolve: 1.22.1 resolve.exports: 1.1.1 slash: 3.0.0 dev: true @@ -20848,7 +20523,7 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 - resolve: 1.22.2 + resolve: 1.22.1 resolve.exports: 2.0.2 slash: 3.0.0 dev: true @@ -20862,7 +20537,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -20894,7 +20569,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -20955,7 +20630,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -20978,7 +20653,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 graceful-fs: 4.2.11 dev: true @@ -20988,7 +20663,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/transform': 27.5.1 @@ -21018,8 +20693,8 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 @@ -21048,7 +20723,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -21060,7 +20735,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -21097,7 +20772,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.15.11 + '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -21110,7 +20785,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.11 + '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -21122,7 +20797,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -21131,7 +20806,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -21140,7 +20815,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -21167,7 +20842,7 @@ packages: - utf-8-validate dev: true - /jest@29.5.0(@types/node@18.15.11)(ts-node@10.9.1): + /jest@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -21180,7 +20855,7 @@ packages: '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest-cli: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color @@ -21207,14 +20882,15 @@ packages: - ts-node dev: true - /jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true - /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true + /jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + dev: false + /joi@17.9.2: resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} dependencies: @@ -21261,43 +20937,13 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) - '@babel/preset-env': 7.20.2(@babel/core@7.21.4) - '@babel/preset-flow': 7.21.4(@babel/core@7.22.5) - '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) - '@babel/register': 7.21.0(@babel/core@7.22.5) - babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) - chalk: 4.1.2 - flow-parser: 0.203.1 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.21.5 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /jscodeshift@0.14.0(@babel/preset-env@7.21.4): - resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) - '@babel/preset-env': 7.21.4(@babel/core@7.22.5) - '@babel/preset-flow': 7.21.4(@babel/core@7.22.5) + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) + '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) '@babel/register': 7.21.0(@babel/core@7.22.5) babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) chalk: 4.1.2 - flow-parser: 0.203.1 + flow-parser: 0.202.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -21332,7 +20978,7 @@ packages: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.4 + nwsapi: 2.2.2 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 @@ -21374,7 +21020,7 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.4 + nwsapi: 2.2.2 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -21421,7 +21067,7 @@ packages: dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork '@types/json-schema': 7.0.11 - '@types/lodash': 4.14.192 + '@types/lodash': 4.14.191 '@types/prettier': 2.7.2 cli-color: 2.0.3 get-stdin: 8.0.0 @@ -21594,8 +21240,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /libphonenumber-js@1.10.26: - resolution: {integrity: sha512-oB3l4J5gEhMV+ymmlIjWedsbCpsNRqbEZ/E/MpN2QVyinKNra6DcuXywxSk/72M3DZDoH/6kzurOq1erznBMwQ==} + /libphonenumber-js@1.10.24: + resolution: {integrity: sha512-3Dk8f5AmrcWqg+oHhmm9hwSTqpWHBdSqsHmjCJGroULFubi0+x7JEIGmRZCuL3TI8Tx39xaKqfnhsDQ4ALa/Nw==} /lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -21609,6 +21255,7 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lint-staged@11.2.6: resolution: {integrity: sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==} @@ -21840,16 +21487,12 @@ packages: tslib: 2.5.2 dev: true - /lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - dev: false - /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 + dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -21862,9 +21505,9 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache@9.0.1: - resolution: {integrity: sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg==} - engines: {node: 14 || >=16.14} + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} dev: true /lru-queue@0.1.0: @@ -21922,29 +21565,15 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.4.14 /magic-string@0.29.0: resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /make-dir@1.3.0: - resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} - engines: {node: '>=4'} - dependencies: - pify: 3.0.0 - dev: false - /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -22041,7 +21670,7 @@ packages: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.2.0 + mdast-util-to-string: 3.1.1 micromark: 3.1.0 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-decode-string: 1.0.2 @@ -22059,7 +21688,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 - micromark-extension-frontmatter: 1.1.0 + micromark-extension-frontmatter: 1.0.1 dev: false /mdast-util-gfm-autolink-literal@1.0.3: @@ -22200,7 +21829,7 @@ packages: '@types/unist': 2.0.6 longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 - mdast-util-to-string: 3.2.0 + mdast-util-to-string: 3.1.1 micromark-util-decode-string: 1.0.2 unist-util-visit: 4.1.2 zwitch: 2.0.4 @@ -22210,8 +21839,8 @@ packages: resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} dev: true - /mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + /mdast-util-to-string@3.1.1: + resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==} dependencies: '@types/mdast': 3.0.11 @@ -22219,8 +21848,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - /memfs@3.5.0: - resolution: {integrity: sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==} + /memfs@3.4.13: + resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.0.3 @@ -22318,8 +21947,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-frontmatter@1.1.0: - resolution: {integrity: sha512-0nLelmvXR5aZ+F2IL6/Ed4cDnHLpL/VD/EELKuclsTWHrLI8UgxGHEmeoumeX2FXiM6z2WrBIOEcbKUZR8RYNg==} + /micromark-extension-frontmatter@1.0.1: + resolution: {integrity: sha512-9OJhCXkrpj8qIXW5AAgRZGvS8Q4GTMdH5+Ljt98kV4XQVflRGeEhNRYp6O/zCvf8c8lZ+wc4uwmbly27pS/s4Q==} dependencies: fault: 2.0.1 micromark-util-character: 1.1.0 @@ -22337,8 +21966,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-footnote@1.1.0: - resolution: {integrity: sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==} + /micromark-extension-gfm-footnote@1.0.4: + resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} dependencies: micromark-core-commonmark: 1.0.6 micromark-factory-space: 1.0.0 @@ -22350,8 +21979,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-strikethrough@1.0.5: - resolution: {integrity: sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==} + /micromark-extension-gfm-strikethrough@1.0.4: + resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} dependencies: micromark-util-chunked: 1.0.0 micromark-util-classify-character: 1.0.0 @@ -22371,14 +22000,14 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + /micromark-extension-gfm-tagfilter@1.0.1: + resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} dependencies: micromark-util-types: 1.0.2 dev: false - /micromark-extension-gfm-task-list-item@1.0.4: - resolution: {integrity: sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==} + /micromark-extension-gfm-task-list-item@1.0.3: + resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 @@ -22391,11 +22020,11 @@ packages: resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} dependencies: micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.1.0 - micromark-extension-gfm-strikethrough: 1.0.5 + micromark-extension-gfm-footnote: 1.0.4 + micromark-extension-gfm-strikethrough: 1.0.4 micromark-extension-gfm-table: 1.0.5 - micromark-extension-gfm-tagfilter: 1.0.2 - micromark-extension-gfm-task-list-item: 1.0.4 + micromark-extension-gfm-tagfilter: 1.0.1 + micromark-extension-gfm-task-list-item: 1.0.3 micromark-util-combine-extensions: 1.0.0 micromark-util-types: 1.0.2 dev: false @@ -22681,11 +22310,6 @@ packages: engines: {node: '>=12'} dev: false - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: false - /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: @@ -22722,20 +22346,13 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + /minimatch@7.4.3: + resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -22758,14 +22375,9 @@ packages: dependencies: yallist: 4.0.0 - /minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + /minipass@4.2.5: + resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} engines: {node: '>=8'} - dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -22899,14 +22511,14 @@ packages: - supports-color dev: true - /multer-s3@3.0.1(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0): + /multer-s3@3.0.1(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0): resolution: {integrity: sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==} engines: {node: '>= 12.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 dependencies: '@aws-sdk/client-s3': 3.325.0 - '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.329.0)(@aws-sdk/client-s3@3.325.0) + '@aws-sdk/lib-storage': 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) file-type: 3.9.0 html-comment-regex: 1.1.2 run-parallel: 1.2.0 @@ -22935,6 +22547,7 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -22969,22 +22582,22 @@ packages: '@nestjs/graphql': optional: true dependencies: - '@nestjs/graphql': 10.0.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) + '@nestjs/graphql': 10.0.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12)(class-transformer@0.5.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13) accesscontrol: 2.2.1 dev: false - /nestjs-cls@3.5.0(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): + /nestjs-cls@3.5.0(@nestjs/common@9.3.12)(@nestjs/core@9.3.12): resolution: {integrity: sha512-C7JX4Q8scpmCl4fZsNjx2JS50rL1fhdx2mckkZo300dUviVLiYMmy5Q0bXnrwW2cquk78mi9Vd3WlGuYCrExDQ==} engines: {node: '>=12.17.0'} peerDependencies: '@nestjs/common': '> 7.0.0 < 11' '@nestjs/core': '> 7.0.0 < 11' dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/core': 9.3.12(@nestjs/common@9.3.12)(@nestjs/platform-express@9.3.12)(@nestjs/websockets@9.4.2)(reflect-metadata@0.1.13)(rxjs@7.8.0) dev: false - /nestjs-prisma@0.20.0(@nestjs/common@9.4.0)(@prisma/client@4.13.0)(prisma@4.13.0): + /nestjs-prisma@0.20.0(@nestjs/common@9.3.12)(@prisma/client@4.13.0)(prisma@4.13.0): resolution: {integrity: sha512-tqOcoJQh4U8Y7akyCwluo1VFqhqjqYy8JAYYfrKRhvZ7N4trt3wYXXllRGH3LeLaom09QchHP9WEo/BAV9JMjg==} peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -22993,7 +22606,7 @@ packages: dependencies: '@angular-devkit/core': 13.3.11 '@angular-devkit/schematics': 13.3.11 - '@nestjs/common': 9.4.0(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + '@nestjs/common': 9.3.12(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@prisma/client': 4.13.0(prisma@4.13.0) '@schematics/angular': 13.3.11 prisma: 4.13.0 @@ -23042,12 +22655,6 @@ packages: engines: {node: '>=10.5.0'} dev: true - /node-downloader-helper@2.1.7: - resolution: {integrity: sha512-3dBuMF/XPy5WFi3XiiXaglafzoycRH5GjmRz1nAt2uI9D+TcBrc+n/AzH8bzLHR85Wsf6vZSZblzw+MiUS/WNQ==} - engines: {node: '>=14.18'} - hasBin: true - dev: false - /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: @@ -23110,19 +22717,6 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-jq@2.3.5: - resolution: {integrity: sha512-V2qmX4oXvrITgxeR8WZTELVGFGx2auO+qvxs7Q4Isovh2UGkO1Fl3OACrxPZ2dgikJT5KbwYvK8PwGyc2hfRIg==} - engines: {npm: '>=6.0.0'} - requiresBuild: true - dependencies: - bin-build: 3.0.0 - is-valid-path: 0.1.1 - joi: 17.9.2 - node-downloader-helper: 2.1.7 - strip-final-newline: 2.0.0 - tempfile: 3.0.0 - dev: false - /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} @@ -23138,7 +22732,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 + resolve: 1.22.1 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -23148,7 +22742,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.12.0 + is-core-module: 2.11.0 semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -23165,21 +22759,6 @@ packages: resolution: {integrity: sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==} dev: false - /npm-conf@1.1.3: - resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} - engines: {node: '>=4'} - dependencies: - config-chain: 1.1.13 - pify: 3.0.0 - dev: false - - /npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - dependencies: - path-key: 2.0.1 - dev: false - /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -23208,8 +22787,8 @@ packages: boolbase: 1.0.0 dev: true - /nwsapi@2.2.4: - resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} + /nwsapi@2.2.2: + resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true /nx@15.0.2: @@ -23229,7 +22808,7 @@ packages: '@nrwl/tao': 15.0.2 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.0-rc.42 + '@yarnpkg/parsers': 3.0.0-rc.40 '@zkochan/js-yaml': 0.0.6 axios: 1.4.0 chalk: 4.1.0 @@ -23434,7 +23013,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.8.0 + cli-spinners: 2.7.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -23447,7 +23026,7 @@ packages: dependencies: chalk: 5.2.0 cli-cursor: 4.0.0 - cli-spinners: 2.8.0 + cli-spinners: 2.7.0 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 @@ -23475,18 +23054,6 @@ packages: /outvariant@1.4.0: resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} - /p-cancelable@0.3.0: - resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} - engines: {node: '>=4'} - dev: false - - /p-event@1.3.0: - resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==} - engines: {node: '>=4'} - dependencies: - p-timeout: 1.2.1 - dev: false - /p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -23494,11 +23061,6 @@ packages: p-map: 2.1.0 dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: false - /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -23536,13 +23098,6 @@ packages: dependencies: p-limit: 3.1.0 - /p-map-series@1.0.0: - resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==} - engines: {node: '>=4'} - dependencies: - p-reduce: 1.0.0 - dev: false - /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} @@ -23555,18 +23110,6 @@ packages: aggregate-error: 3.1.0 dev: true - /p-reduce@1.0.0: - resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==} - engines: {node: '>=4'} - dev: false - - /p-timeout@1.2.1: - resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==} - engines: {node: '>=4'} - dependencies: - p-finally: 1.0.0 - dev: false - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -23696,11 +23239,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: false - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -23713,12 +23251,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.6.4: - resolution: {integrity: sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg==} + /path-scurry@1.6.3: + resolution: {integrity: sha512-RAmB+n30SlN+HnNx6EbcpoDy9nwdpcGPnEKrJnu6GZoDWBdIjo1UQMVtW2ybtC7LC2oKLcMq8y5g8WnKLiod9g==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 9.0.1 - minipass: 5.0.0 + lru-cache: 7.18.3 + minipass: 4.2.5 dev: true /path-to-regexp@0.1.7: @@ -23764,6 +23302,7 @@ packages: /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -23788,30 +23327,14 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: false - /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - /pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - dependencies: - pinkie: 2.0.4 - dev: false - - /pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - dev: false - /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} + dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -23841,8 +23364,8 @@ packages: pathe: 1.1.0 dev: true - /playwright-core@1.32.3: - resolution: {integrity: sha512-SB+cdrnu74ZIn5Ogh/8278ngEh9NEEV0vR4sJFmK04h2iZpybfbqBY0bX6+BLYWVdV12JLLI+JEFtSnYgR+mWg==} + /playwright-core@1.32.1: + resolution: {integrity: sha512-KZYUQC10mXD2Am1rGlidaalNGYk3LU1vZqqNk0gT4XPty1jOqgup8KDP8l2CUlqoNKhXM5IfGjWgW37xvGllBA==} engines: {node: '>=14'} hasBin: true dev: true @@ -23874,7 +23397,7 @@ packages: postcss: 8.4.21 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.1 /postcss-import@14.1.0(postcss@8.4.24): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} @@ -23885,7 +23408,7 @@ packages: postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.1 /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -23919,7 +23442,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.21 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 1.10.2 /postcss-load-config@3.1.4(postcss@8.4.24)(ts-node@10.9.1): @@ -23936,7 +23459,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.24 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 1.10.2 /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): @@ -23953,7 +23476,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.24 - ts-node: 10.9.1(@types/node@18.15.11)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 2.3.1 dev: false @@ -24027,11 +23550,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prepend-http@1.0.4: - resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} - engines: {node: '>=0.10.0'} - dev: false - /prettier-plugin-astro@0.10.0: resolution: {integrity: sha512-dPzop0gKZyVGpTDQmfy+e7FKXC9JT3mlpfYA2diOVz+Ui+QR1U4G/s+OesKl2Hib2JJOtAYJs/l+ovgT0ljlFA==} engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} @@ -24051,28 +23569,28 @@ packages: synckit: 0.8.5 dev: false - /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.58.0): + /prettier-plugin-svelte@2.10.0(prettier@2.8.7)(svelte@3.57.0): resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: prettier: 2.8.7 - svelte: 3.58.0 + svelte: 3.57.0 dev: true - /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.58.0): + /prettier-plugin-svelte@2.10.0(prettier@2.8.8)(svelte@3.57.0): resolution: {integrity: sha512-GXMY6t86thctyCvQq+jqElO+MKdB09BkL3hexyGP3Oi8XLKRFaJP1ud/xlWCZ9ZIa2BxHka32zhHfcuU+XsRQg==} peerDependencies: prettier: ^1.16.4 || ^2.0.0 svelte: ^3.2.0 dependencies: prettier: 2.8.8 - svelte: 3.58.0 + svelte: 3.57.0 dev: true - /prettier-plugin-tailwindcss@0.2.7(prettier@2.8.7): - resolution: {integrity: sha512-jQopIOgjLpX+y8HeD56XZw7onupRTC0cw7eKKUimI7vhjkPF5/1ltW5LyqaPtSyc8HvEpvNZsvvsGFa2qpa59w==} + /prettier-plugin-tailwindcss@0.2.5(prettier@2.8.7): + resolution: {integrity: sha512-vZ/iKieyCx0WTxHbkf5E1rBlv/ybFk8WTT4hL5W2jlVxum2Zbe0jMUpuQdDrpa4z2vnPiJ5KIWCqL/kd16fKYg==} engines: {node: '>=12.17.0'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -24225,10 +23743,6 @@ packages: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false - /proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: false - /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -24241,6 +23755,7 @@ packages: /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -24426,7 +23941,7 @@ packages: estree-to-babel: 3.2.1 neo-async: 2.6.2 node-dir: 0.1.17 - resolve: 1.22.2 + resolve: 1.22.1 strip-indent: 3.0.0 transitivePeerDependencies: - supports-color @@ -24463,21 +23978,21 @@ packages: react: 18.2.0 dev: false - /react-hot-toast@2.4.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): + /react-hot-toast@2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==} engines: {node: '>=10'} peerDependencies: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.1.12(csstype@3.1.2) + goober: 2.1.12(csstype@3.1.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - csstype dev: false - /react-i18next@12.2.0(i18next@22.4.14)(react-dom@18.2.0)(react@18.2.0): + /react-i18next@12.2.0(i18next@22.4.13)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} peerDependencies: i18next: '>= 19.0.0' @@ -24492,7 +24007,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 html-parse-stringify: 3.0.1 - i18next: 22.4.14 + i18next: 22.4.13 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -24551,7 +24066,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar@2.3.4(@types/react@18.0.35)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -24561,9 +24076,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.29)(react@18.2.0) tslib: 2.5.2 dev: false @@ -24602,7 +24117,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.0.37)(react@18.2.0) dev: false - /react-remove-scroll@2.5.5(@types/react@18.0.35)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -24612,13 +24127,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.35)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.35)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.0.29)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.29)(react@18.2.0) tslib: 2.5.2 - use-callback-ref: 1.3.0(@types/react@18.0.35)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.35)(react@18.2.0) + use-callback-ref: 1.3.0(@types/react@18.0.29)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.29)(react@18.2.0) dev: false /react-remove-scroll@2.5.5(@types/react@18.0.37)(react@18.2.0): @@ -24697,7 +24212,7 @@ packages: react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) dev: false - /react-style-singleton@2.2.1(@types/react@18.0.35)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -24707,7 +24222,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -24880,7 +24395,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.2 + resolve: 1.22.1 dev: true /redent@3.0.0: @@ -25020,7 +24535,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-frontmatter: 1.0.1 - micromark-extension-frontmatter: 1.1.0 + micromark-extension-frontmatter: 1.0.1 unified: 10.1.2 dev: false @@ -25077,7 +24592,7 @@ packages: '@types/hast': 2.3.4 '@types/mdast': 3.0.11 github-slugger: 1.5.0 - mdast-util-to-string: 3.2.0 + mdast-util-to-string: 3.1.1 unified: 10.1.2 unist-util-visit: 4.1.2 dev: true @@ -25164,15 +24679,15 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.12.0 + is-core-module: 2.11.0 path-parse: 1.0.7 dev: true - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + /resolve@1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -25180,7 +24695,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -25268,7 +24783,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 9.3.5 + glob: 9.3.2 dev: true /rimraf@4.4.1: @@ -25276,7 +24791,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 9.3.5 + glob: 9.3.2 dev: true /rollup-plugin-dts@4.2.2(rollup@2.70.2)(typescript@4.9.5): @@ -25308,11 +24823,11 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.18.6 jest-worker: 26.6.2 rollup: 2.70.2 serialize-javascript: 4.0.0 - terser: 5.16.9 + terser: 5.16.8 dev: true /rollup-plugin-typescript-paths@1.4.0(typescript@4.9.5): @@ -25450,9 +24965,9 @@ packages: dependencies: suf-log: 2.5.3 - /sass@1.62.0: - resolution: {integrity: sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==} - engines: {node: '>=14.0.0'} + /sass@1.60.0: + resolution: {integrity: sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==} + engines: {node: '>=12.0.0'} hasBin: true dependencies: chokidar: 3.5.3 @@ -25500,13 +25015,6 @@ packages: resolution: {integrity: sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q==} dev: false - /seek-bzip@1.0.6: - resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} - hasBin: true - dependencies: - commander: 2.20.3 - dev: false - /semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} dev: true @@ -25539,14 +25047,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true - - /semver@7.4.0: - resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} @@ -25612,11 +25112,6 @@ packages: resolution: {integrity: sha512-1chMo1dST4pFA9RDXAtF0Rbjaut4is7bzFbI1Z26IuMub68pNCILku85aYmeFhvnY//BXUPUhoRMjYcsT93J/Q==} dev: false - /seroval@0.5.1: - resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} - engines: {node: '>=10'} - dev: false - /serve-favicon@2.5.0: resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} engines: {node: '>= 0.8.0'} @@ -25684,6 +25179,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 + dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -25694,13 +25190,14 @@ packages: /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + /shell-quote@1.8.0: + resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -25712,15 +25209,6 @@ packages: rechoir: 0.6.2 dev: true - /shiki@0.14.1: - resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} - dependencies: - ansi-sequence-parser: 1.1.0 - jsonc-parser: 3.2.0 - vscode-oniguruma: 1.7.0 - vscode-textmate: 8.0.0 - dev: true - /shiki@0.14.2: resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: @@ -25728,7 +25216,6 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: false /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -25762,7 +25249,7 @@ packages: dependencies: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 - totalist: 3.0.1 + totalist: 3.0.0 dev: false /sisteransi@1.0.5: @@ -25844,11 +25331,10 @@ packages: resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==} dev: true - /solid-js@1.7.3: - resolution: {integrity: sha512-4hwaF/zV/xbNeBBIYDyu3dcReOZBECbO//mrra6GqOrKy4Soyo+fnKjpZSa0nODm6j1aL0iQRh/7ofYowH+jzw==} + /solid-js@1.6.15: + resolution: {integrity: sha512-xEuMUIdDf4YRFT4i3XEJCNg4Y21lZiWWPSEqj0R3UnLLpENGJVXkqpmbIyRU5CuMImKPIEu5CYgmFKL7Npfe1A==} dependencies: - csstype: 3.1.2 - seroval: 0.5.1 + csstype: 3.1.1 dev: false /sorcery@0.10.0: @@ -25861,20 +25347,6 @@ packages: sourcemap-codec: 1.4.8 dev: true - /sort-keys-length@1.0.1: - resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} - engines: {node: '>=0.10.0'} - dependencies: - sort-keys: 1.1.2 - dev: false - - /sort-keys@1.1.2: - resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-obj: 1.1.0 - dev: false - /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -25967,11 +25439,11 @@ packages: resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} dependencies: '@types/ssh2': 0.5.52 - ssh2: 1.13.0 + ssh2: 1.14.0 dev: true - /ssh2@1.13.0: - resolution: {integrity: sha512-CIZBFRRY1y9mAZSqBGFE4EB4dNJad2ysT2PqO8OpkiI3UTB/gUZwE5EaN16qVyQ6s/M7EgC/iaV/MnjdlvnuzA==} + /ssh2@1.14.0: + resolution: {integrity: sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==} engines: {node: '>=10.16.0'} requiresBuild: true dependencies: @@ -26187,20 +25659,10 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - /strip-dirs@2.1.0: - resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} - dependencies: - is-natural-number: 4.0.1 - dev: false - - /strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - dev: false - /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -26230,13 +25692,6 @@ packages: acorn: 8.8.2 dev: true - /strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - dev: false - /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -26273,19 +25728,6 @@ packages: - utf-8-validate dev: false - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.5 - ts-interface-checker: 0.1.13 - /suf-log@2.5.3: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: @@ -26393,20 +25835,20 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-check@2.10.3(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0): + /svelte-check@2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0): resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} hasBin: true peerDependencies: svelte: ^3.24.0 dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.9 chokidar: 3.5.3 fast-glob: 3.2.12 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 3.58.0 - svelte-preprocess: 4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5) + svelte: 3.57.0 + svelte-preprocess: 4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' @@ -26421,16 +25863,16 @@ packages: - sugarss dev: true - /svelte-hmr@0.15.1(svelte@3.58.0): + /svelte-hmr@0.15.1(svelte@3.57.0): resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: '>=3.19.0' dependencies: - svelte: 3.58.0 + svelte: 3.57.0 dev: true - /svelte-preprocess@4.10.7(@babel/core@7.21.4)(postcss@8.4.21)(svelte@3.58.0)(typescript@4.9.5): + /svelte-preprocess@4.10.7(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5): resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -26471,7 +25913,7 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.21.4 + '@babel/core': 7.21.3 '@types/pug': 2.0.6 '@types/sass': 1.45.0 detect-indent: 6.1.0 @@ -26479,20 +25921,20 @@ packages: postcss: 8.4.21 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.58.0 + svelte: 3.57.0 typescript: 4.9.5 dev: true - /svelte@3.58.0: - resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==} + /svelte@3.57.0: + resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} engines: {node: '>= 8'} /swagger-ui-dist@4.15.5: resolution: {integrity: sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==} dev: true - /swagger-ui-dist@4.18.2: - resolution: {integrity: sha512-oVBoBl9Dg+VJw8uRWDxlyUyHoNEDC0c1ysT6+Boy6CTgr2rUcLcfPon4RvxgS2/taNW6O0+US+Z/dlAsWFjOAQ==} + /swagger-ui-dist@4.18.1: + resolution: {integrity: sha512-n7AT4wzKIPpHy/BGflJOepGMrbY/7Cd5yVd9ptVczaJGAKScbVJrZxFbAE2ZSZa8KmqdQ0+pOs3/5mWY5tSMZQ==} dev: false /swagger-ui-express@4.6.2(express@4.18.2): @@ -26502,7 +25944,7 @@ packages: express: '>=4.0.0' dependencies: express: 4.18.2 - swagger-ui-dist: 4.18.2 + swagger-ui-dist: 4.18.1 dev: false /symbol-observable@1.2.0: @@ -26530,24 +25972,24 @@ packages: '@pkgr/utils': 2.3.1 tslib: 2.5.2 - /tailwind-merge@1.12.0: - resolution: {integrity: sha512-Y17eDp7FtN1+JJ4OY0Bqv9OA41O+MS8c1Iyr3T6JFLnOgLg3EvcyMKZAnQ8AGyvB5Nxm3t9Xb5Mhe139m8QT/g==} + /tailwind-merge@1.10.0: + resolution: {integrity: sha512-WFnDXSS4kFTZwjKg5/oZSGzBRU/l+qcbv5NVTzLUQvJ9yovDAP05h0F2+ZFW0Lw9EcgRoc2AfURUdZvnEFrXKg==} dev: false /tailwind-merge@1.13.2: resolution: {integrity: sha512-R2/nULkdg1VR/EL4RXg4dEohdoxNUJGLMnWIQnPKL+O9Twu7Cn3Rxi4dlXkDzZrEGtR+G+psSXFouWlpTyLhCQ==} dev: false - /tailwindcss-animate@1.0.5(tailwindcss@3.3.1): + /tailwindcss-animate@1.0.5(tailwindcss@3.2.7): resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.3.1(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false - /tailwindcss@3.3.1(postcss@8.4.21)(ts-node@10.9.1): - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -26556,12 +25998,12 @@ packages: arg: 5.0.2 chokidar: 3.5.3 color-name: 1.1.4 + detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.18.2 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -26575,13 +26017,12 @@ packages: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.2 - sucrase: 3.32.0 + resolve: 1.22.1 transitivePeerDependencies: - ts-node - /tailwindcss@3.3.1(postcss@8.4.24)(ts-node@10.9.1): - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + /tailwindcss@3.2.7(postcss@8.4.24)(ts-node@10.9.1): + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -26590,12 +26031,12 @@ packages: arg: 5.0.2 chokidar: 3.5.3 color-name: 1.1.4 + detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.18.2 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -26609,8 +26050,7 @@ packages: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.2 - sucrase: 3.32.0 + resolve: 1.22.1 transitivePeerDependencies: - ts-node @@ -26637,19 +26077,6 @@ packages: tar-stream: 2.2.0 dev: true - /tar-stream@1.6.2: - resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} - engines: {node: '>= 0.8.0'} - dependencies: - bl: 1.2.3 - buffer-alloc: 1.2.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - readable-stream: 2.3.8 - to-buffer: 1.1.1 - xtend: 4.0.2 - dev: false - /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -26667,7 +26094,7 @@ packages: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.2.8 + minipass: 4.2.5 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -26691,14 +26118,10 @@ packages: memoizerific: 1.11.3 dev: true - /temp-dir@1.0.0: - resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} - engines: {node: '>=4'} - dev: false - /temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} + dev: true /temp@0.8.4: resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} @@ -26707,22 +26130,6 @@ packages: rimraf: 2.6.3 dev: true - /tempfile@2.0.0: - resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} - engines: {node: '>=4'} - dependencies: - temp-dir: 1.0.0 - uuid: 3.4.0 - dev: false - - /tempfile@3.0.0: - resolution: {integrity: sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==} - engines: {node: '>=8'} - dependencies: - temp-dir: 2.0.0 - uuid: 3.4.0 - dev: false - /tempy@1.0.1: resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} engines: {node: '>=10'} @@ -26763,31 +26170,31 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 - terser: 5.16.9 + terser: 5.16.8 webpack: 5.76.2 dev: true - /terser@5.16.9: - resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} + /terser@5.16.8: + resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.3 + '@jridgewell/source-map': 0.3.2 acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true - /tesseract.js-core@4.0.3: - resolution: {integrity: sha512-NqSqnq0dNhlQYw9JYWUh0rymN0gG/GaLmP2gdRnxUIivzYkPa0aYQW4WSRO6lGKIabyqxa2j2sELBujyOFYVgQ==} + /tesseract.js-core@4.0.2: + resolution: {integrity: sha512-ZVyYPN+ZAos31ZErqzcFme6XaOA8xrZxisNyk3nTicHVPSqtQH7UgZ36XoZZY0Exeugr5A+Uxv5ll9aMd1c0jg==} dev: false - /tesseract.js@4.0.3(eslint@8.22.0): - resolution: {integrity: sha512-hgFhIx1pqtZD95/xG6mhETpy5lbIzgBoBGPUntb2uIXVk7KcfHo3+ObgPxNZtLOI7LfXXfBvgfraQVmQSo7m9g==} + /tesseract.js@4.0.2(eslint@8.22.0): + resolution: {integrity: sha512-OKc6N68czBa8QnoBwx+kAUG4OyqskXa1O7wSrOXOEYZ0TQcGa3daRVIsRhtVAmNMTrvZnOsg49kfNrw0BZaFEA==} requiresBuild: true dependencies: babel-eslint: 10.1.0(eslint@8.22.0) @@ -26800,7 +26207,7 @@ packages: opencollective-postinstall: 2.0.3 regenerator-runtime: 0.13.11 resolve-url: 0.2.1 - tesseract.js-core: 4.0.3 + tesseract.js-core: 4.0.2 wasm-feature-detect: 1.5.1 zlibjs: 0.3.1 transitivePeerDependencies: @@ -26858,11 +26265,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} @@ -26889,11 +26298,6 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - /timed-out@4.0.1: - resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} - engines: {node: '>=0.10.0'} - dev: false - /timers-ext@0.1.7: resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} dependencies: @@ -26946,10 +26350,6 @@ packages: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true - /to-buffer@1.1.1: - resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} - dev: false - /to-camel-case@1.0.0: resolution: {integrity: sha512-nD8pQi5H34kyu1QDMFjzEIYqk0xa9Alt6ZfrdEMuHCFOfTLhDG5pgTu/aAM9Wt9lXILwlXmWP43b8sav0GNE8Q==} dependencies: @@ -26985,8 +26385,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - /totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + /totalist@3.0.0: + resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} engines: {node: '>=6'} dev: false @@ -27030,13 +26430,6 @@ packages: engines: {node: '>=8'} dev: true - /trim-repeated@1.0.0: - resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} - engines: {node: '>=0.10.0'} - dependencies: - escape-string-regexp: 1.0.5 - dev: false - /triple-beam@1.3.0: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} dev: false @@ -27057,9 +26450,6 @@ packages: typescript: 4.9.5 dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-jest@27.0.3(jest@27.0.6)(typescript@4.9.5): resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -27077,7 +26467,7 @@ packages: lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 - semver: 7.4.0 + semver: 7.3.8 typescript: 4.9.5 yargs-parser: 20.2.9 dev: true @@ -27106,12 +26496,12 @@ packages: '@babel/core': 7.22.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0(@types/node@18.15.11)(ts-node@10.9.1) + jest: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.4.0 + semver: 7.3.8 typescript: 4.9.5 yargs-parser: 21.1.1 dev: true @@ -27145,7 +26535,7 @@ packages: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.4.0 + semver: 7.3.8 typescript: 5.0.2 yargs-parser: 21.1.1 dev: true @@ -27160,7 +26550,7 @@ packages: chalk: 4.1.2 enhanced-resolve: 5.12.0 micromatch: 4.0.5 - semver: 7.4.0 + semver: 7.3.8 typescript: 4.9.5 webpack: 5.76.2 dev: true @@ -27172,7 +26562,7 @@ packages: code-block-writer: 11.0.3 dev: true - /ts-node@10.9.1(@types/node@18.15.11)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@18.15.10)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -27191,7 +26581,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.11 + '@types/node': 18.15.10 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -27257,7 +26647,7 @@ packages: '@types/json5': 0.0.30 '@types/resolve': 1.20.2 json5: 2.2.3 - resolve: 1.22.2 + resolve: 1.22.1 strip-bom: 4.0.0 type-fest: 0.13.1 dev: false @@ -27314,12 +26704,6 @@ packages: yargs: 17.7.1 dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - dependencies: - safe-buffer: 5.2.1 - dev: false - /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true @@ -27415,10 +26799,10 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typedoc-plugin-markdown@3.15.1(typedoc@0.23.28): - resolution: {integrity: sha512-TaXE8gc8s5YepU1Ogyqfkh+khPE1/n4rV5vaoZCNyXvSLv62jWmHf443lHiQh7r07qAimUOKAndaaufAeIUSiQ==} + /typedoc-plugin-markdown@3.14.0(typedoc@0.23.28): + resolution: {integrity: sha512-UyQLkLRkfTFhLdhSf3RRpA3nNInGn+k6sll2vRXjflaMNwQAAiB61SYbisNZTg16t4K1dt1bPQMMGLrxS0GZ0Q==} peerDependencies: - typedoc: '>=0.24.0' + typedoc: '>=0.23.0' dependencies: handlebars: 4.7.7 typedoc: 0.23.28(typescript@4.9.5) @@ -27433,8 +26817,8 @@ packages: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 7.4.6 - shiki: 0.14.1 + minimatch: 7.4.3 + shiki: 0.14.2 typescript: 4.9.5 dev: true @@ -27469,13 +26853,7 @@ packages: resolution: {integrity: sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==} engines: {node: '>=8'} dependencies: - '@lukeed/csprng': 1.1.0 - - /uid@2.0.2: - resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} - engines: {node: '>=8'} - dependencies: - '@lukeed/csprng': 1.1.0 + '@lukeed/csprng': 1.0.1 /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -27486,13 +26864,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - dependencies: - buffer: 5.7.1 - through: 2.3.8 - dev: false - /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} engines: {node: '>=14.0'} @@ -27675,13 +27046,6 @@ packages: dependencies: punycode: 2.3.0 - /url-parse-lax@1.0.0: - resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} - engines: {node: '>=0.10.0'} - dependencies: - prepend-http: 1.0.4 - dev: false - /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -27689,12 +27053,7 @@ packages: requires-port: 1.0.0 dev: true - /url-to-options@1.0.1: - resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} - engines: {node: '>= 4'} - dev: false - - /use-callback-ref@1.3.0(@types/react@18.0.35)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -27704,7 +27063,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 tslib: 2.5.2 dev: false @@ -27724,7 +27083,7 @@ packages: tslib: 2.5.2 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.35)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -27733,7 +27092,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 react: 18.2.0 dev: false @@ -27780,7 +27139,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /use-sidecar@1.1.2(@types/react@18.0.35)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -27790,7 +27149,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.35 + '@types/react': 18.0.29 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.5.2 @@ -27849,12 +27208,6 @@ packages: resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} dev: true - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - dev: false - /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -27894,7 +27247,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -27963,7 +27316,7 @@ packages: d3-timer: 3.0.1 dev: false - /vite-node@0.28.5(@types/node@18.15.11): + /vite-node@0.28.5(@types/node@18.15.10): resolution: {integrity: sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==} engines: {node: '>=v14.16.0'} hasBin: true @@ -27975,7 +27328,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' - less @@ -27986,7 +27339,7 @@ packages: - terser dev: true - /vite-node@0.29.8(@types/node@18.15.11): + /vite-node@0.29.8(@types/node@18.15.10): resolution: {integrity: sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==} engines: {node: '>=v14.16.0'} hasBin: true @@ -27996,7 +27349,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.9(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' - less @@ -28060,21 +27413,21 @@ packages: vscode-uri: 3.0.7 dev: true - /vite-plugin-dts@1.7.3(@types/node@18.15.11)(vite@4.0.3): + /vite-plugin-dts@1.7.3(@types/node@18.15.10)(vite@4.0.3): resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.34.4(@types/node@18.15.11) + '@microsoft/api-extractor': 7.34.4(@types/node@18.15.10) '@rollup/pluginutils': 5.0.2(rollup@2.70.2) - '@rushstack/node-core-library': 3.55.2(@types/node@18.15.11) + '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 fs-extra: 10.1.0 kolorist: 1.7.0 ts-morph: 17.0.1 - vite: 4.0.3(@types/node@18.15.11) + vite: 4.0.3(@types/node@18.15.10) transitivePeerDependencies: - '@types/node' - rollup @@ -28098,7 +27451,7 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.0.3(@types/node@18.15.11) + vite: 4.0.3(@types/node@18.15.10) dev: true /vite-plugin-terminal@1.1.0(vite@4.2.1): @@ -28112,14 +27465,14 @@ packages: kolorist: 1.7.0 sirv: 2.0.2 ufo: 1.1.1 - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) transitivePeerDependencies: - rollup - supports-color dev: false - /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.2.1): - resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} + /vite-tsconfig-paths@4.0.7(typescript@4.9.5)(vite@4.2.1): + resolution: {integrity: sha512-MwIYaby6kcbQGZqMH+gAK6h0UYQGOkjsuAgw4q6bP/5vWkn8VKvnmLuCQHA2+IzHAJHnE8OFTO4lnJLFMf9+7Q==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -28129,13 +27482,13 @@ packages: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) transitivePeerDependencies: - supports-color - typescript dev: false - /vite@3.2.5(@types/node@18.15.11): + /vite@3.2.5(@types/node@18.15.10): resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28160,15 +27513,15 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 esbuild: 0.15.18 postcss: 8.4.24 - resolve: 1.22.2 + resolve: 1.22.1 rollup: 2.79.1 optionalDependencies: fsevents: 2.3.2 - /vite@4.0.3(@types/node@18.15.11): + /vite@4.0.3(@types/node@18.15.10): resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28193,16 +27546,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 esbuild: 0.16.17 postcss: 8.4.24 - resolve: 1.22.2 + resolve: 1.22.1 rollup: 3.20.2 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.2.1(@types/node@18.15.11): + /vite@4.2.1(@types/node@18.15.10): resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28227,15 +27580,15 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 - esbuild: 0.17.16 - postcss: 8.4.21 - resolve: 1.22.2 + '@types/node': 18.15.10 + esbuild: 0.17.14 + postcss: 8.4.24 + resolve: 1.22.1 rollup: 3.20.2 optionalDependencies: fsevents: 2.3.2 - /vite@4.3.9(@types/node@18.15.11): + /vite@4.3.9(@types/node@18.15.10): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28260,7 +27613,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.11 + '@types/node': 18.15.10 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 @@ -28308,7 +27661,7 @@ packages: vite: optional: true dependencies: - vite: 3.2.5(@types/node@18.15.11) + vite: 3.2.5(@types/node@18.15.10) dev: false /vitefu@0.2.4(vite@4.2.1): @@ -28319,7 +27672,7 @@ packages: vite: optional: true dependencies: - vite: 4.2.1(@types/node@18.15.11) + vite: 4.2.1(@types/node@18.15.10) dev: true /vitefu@0.2.4(vite@4.3.9): @@ -28330,7 +27683,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) dev: false /vitest@0.24.5(jsdom@20.0.3): @@ -28357,7 +27710,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.15.10 chai: 4.3.7 debug: 4.3.4(supports-color@8.1.1) jsdom: 20.0.3 @@ -28366,7 +27719,7 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 3.2.5(@types/node@18.15.11) + vite: 3.2.5(@types/node@18.15.10) transitivePeerDependencies: - less - sass @@ -28400,7 +27753,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@vitest/expect': 0.28.5 '@vitest/runner': 0.28.5 '@vitest/spy': 0.28.5 @@ -28420,8 +27773,8 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.11) - vite-node: 0.28.5(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) + vite-node: 0.28.5(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -28465,7 +27818,7 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.15.11 + '@types/node': 18.15.10 '@vitest/expect': 0.29.8 '@vitest/runner': 0.29.8 '@vitest/spy': 0.29.8 @@ -28484,8 +27837,8 @@ packages: tinybench: 2.4.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.11) - vite-node: 0.29.8(@types/node@18.15.11) + vite: 4.3.9(@types/node@18.15.10) + vite-node: 0.29.8(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -28832,6 +28185,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -29044,6 +28398,7 @@ packages: /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -29129,6 +28484,7 @@ packages: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} diff --git a/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts index 670657e03d..94cb2f582c 100644 --- a/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts +++ b/services/workflows-service/scripts/workflows/e2e-dynamic-url-example.ts @@ -129,10 +129,10 @@ export const kybWithDynamicExternalRequestWorkflowExample = { errorAction: 'API_CALL_ERROR', request: { transform: { - transformer: 'jq', + transformer: 'jmespath', mapping: - '{ business_name: .entity .data .companyName, registration_number: .entity .data .registrationNumber}', - }, // JQ + '{ business_name: entity.data.companyName, registration_number: entity.data.registrationNumber}', + }, // jmespath schema: { $schema: 'http://json-schema.org/draft-07/schema#', type: 'object', @@ -149,8 +149,8 @@ export const kybWithDynamicExternalRequestWorkflowExample = { }, response: { transform: { - transformer: 'jq', - mapping: '.', // JQ + transformer: 'jmespath', + mapping: '@', // jmespath }, schema: { $schema: 'http://json-schema.org/draft-07/schema#', @@ -192,8 +192,8 @@ export const kybWithDynamicExternalRequestWorkflowExample = { }, request: { transform: { - transformer: 'jq', - mapping: '{success_result: .pluginsOutput .business_data_vendor}', + transformer: 'jmespath', + mapping: '{success_result: pluginsOutput.business_data_vendor}', }, }, }, @@ -204,8 +204,8 @@ export const kybWithDynamicExternalRequestWorkflowExample = { stateNames: ['auto_reject'], request: { transform: { - transformer: 'jq', - mapping: '{failing_result: .}', + transformer: 'jmespath', + mapping: '{failing_result: @}', }, }, }, From d5e8458a699976057aed67e5b7a3055f837c42a9 Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:02:30 +0300 Subject: [PATCH 075/123] Blokh/feat/plugins documentation (#611) * generated api plugin description and implementation * updated api plugin format * generated webhook plugin documentation --- .../docs/src/pages/en/learn/api-plugin.md | 99 +++++++++++++++++++ .../docs/src/pages/en/learn/webhook-plugin.md | 78 +++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 websites/docs/src/pages/en/learn/api-plugin.md create mode 100644 websites/docs/src/pages/en/learn/webhook-plugin.md diff --git a/websites/docs/src/pages/en/learn/api-plugin.md b/websites/docs/src/pages/en/learn/api-plugin.md new file mode 100644 index 0000000000..89e2090023 --- /dev/null +++ b/websites/docs/src/pages/en/learn/api-plugin.md @@ -0,0 +1,99 @@ +--- +title: Api Plugin +description: Learn how to configure a plugin for your workflow +layout: ../../../layouts/MainLayout.astro +--- + +## Description + +The API Plugin is a flexible extension that can be added to your workflow definition. It allows you to configure and make API requests directly from your workflows.<br>This guide will help you understand how to set up and use the API Plugin in your workflows. + +## Overview +The API Plugin serves several functions in your workflow: + +- Request Formatting: It allows you to shape the API request in the format your endpoint requires. +- Request Validation: You can validate the formatted request before sending it. +- API Call: It performs the actual API call. +- Response Formatting: It formats the received response in a way that suits your workflow. +- Response Validation: The formatted response is validated before further use. +- State Transitioning: Depending on the API response, it can move the workflow to different states. + +## Configuration + +- `name` (Required) - The name of the plugin. the name will also be used as the Api Plugin's response key in the workflow's context. +- `url` (Required) - The URL destination which the Api Plugin will generate the call to.<br>p.s you can transform the the url by wrapping the require variable path with Braces e.g.`https://example.com/identity/{entity.id}/location` +- `method` (Required) - The method of the Api Request ('POST' | 'PUT' | 'PATCH' | 'DELETE' | 'GET') +- `headers` (Optional) - The headers which the Api Plugin uses in order generate the call with (default: `{"Content-Type": "application/json"}`). you can also use the header's values as a secret when it is set. e.g. `{"Authorization": "secret.API_AUTHORIZATION_KEY"}` +- `stateNames` (Required) - The state names from Which the api request will be made from. +- `request` (Required) - The request Transformation and Validation configuration. + - `transform` (Required) - The request wrapper of the Transformer and Mapping configuration. + - `transformer` (Required) - The transformer function which will be used to transform the request before it is sent. (default [jmespath](https://jmespath.org/)) + - `mapping` (Required) - The transformation logic which will be used in order to transform the request before it is sent. + - `schema` (Optional) - The wrapper of the Validator configuration and Validation schema. + - `validator` - The validator function which will be used to validate the request after it is transformed and before it is sent. (default [json-schema](https://json-schema.org/)) + - `schema` - The Validation schema that the validator uses. +- `response` (Required) - The response wrapper of the Transformer and Mapping configuration. + - `transform` (Required) - The response wrapper of the Transformer and Mapping configuration. + - `transformer` (Required) - The transformer function which will be used to transform the response's body after it is received. (default [jmespath](https://jmespath.org/)) + - `mapping` (Required) - The transformation logic which will be used in order to transform the response after it is received. + - `schema` (Optional) - The wrapper of the Validator configuration and Validation schema. + - `validator` - The validator function which will be used to validate the response after it is transformed it is persisted to the context. (default [json-schema](https://json-schema.org/)) + - `schema` - The Validation schema that the validator uses. +- `successAction` (Required) - The State to which will the action will be transition if the api request was successful and it passed all the validations. +- `errorAction` (Required) - The State which the workflow will transition to if the api request failed or did not passed all the validations. + +## Code Example + +The following Plugin can be used to configure an extension in the workflow [configuration](#configuration) - [API reference](/en/learn/workflow_definitions) + +```json +{ + "name": "business_data_vendor", + "url": "https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_eu.json", + "method": "GET", + "stateNames": ["check_business_details"], + "successAction": "API_CALL_SUCCESS", + "errorAction": "API_CALL_ERROR", + "request": { + "transform": { + "transformer": "jmespath", + "mapping": "{ business_name: entity.data.companyName, registration_number: entity.data.registrationNumber}" + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "business_name": { "type": "string" }, + "registration_number": { "type": "string" } + }, + "required": ["business_name", "registration_number"] + } + }, + "response": { + "transform": { + "transformer": "jmespath", + "mapping": "@" + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "business_details": { + "type": "object", + "properties": { + "registered_name": { "type": "string" }, + "registration_number": { "type": "string" }, + "address": { "type": "object" }, + "contact_number": { "type": "string" } + } + }, + "name_fuzziness_score": { "type": "number", "minimum": 0, "maximum": 1 } + } + } + } +} +``` + +This configuration makes a GET request to an external API, transforms and validates the request and response data, and transitions to appropriate states based on the API call's success or failure. + +Understanding and leveraging the flexibility of the API Plugin can significantly expand the capabilities of your workflows. It allows you to connect your workflows with external APIs, retrieve and manipulate data, and make dynamic decisions based on the results. diff --git a/websites/docs/src/pages/en/learn/webhook-plugin.md b/websites/docs/src/pages/en/learn/webhook-plugin.md new file mode 100644 index 0000000000..ec60bef19a --- /dev/null +++ b/websites/docs/src/pages/en/learn/webhook-plugin.md @@ -0,0 +1,78 @@ +--- +title: Webhook Plugin +description: Learn how to configure a plugin for your workflow +layout: ../../../layouts/MainLayout.astro +--- + +## Description + +The Webhook Plugin is a handy extension that can be added to your workflow definition. It allows you to configure outgoing webhooks directly from your workflows to your required destination. +This guide will help you understand how to set up and use the Webhook Plugin in your workflows. + +Overview +The Webhook Plugin serves several functions in your workflow: + +Request Formatting: It enables you to shape the webhook request to match your endpoint's needs. +Request Validation: It lets you verify the formatted request before sending it out. +Webhook Call: It makes the actual webhook call. +Webhook Monitoring: It listens for a specific state in the workflow to initiate the webhook. + +The primary difference between the [API Plugin](/en/learn/api-plugin) and the Webhook Plugin is that the Webhook Plugin does not directly handle responses or transition states. Instead, it listens to specific states in the workflow to trigger webhook calls. + +## Configuration + +- `name` (Required) - The name of the plugin. the name will also be used as the Api Plugin's response key in the workflow's context. +- `url` (Required) - The URL destination which the Api Plugin will generate the call to.<br>p.s you can transform the the url by wrapping the require variable path with Braces e.g.`https://example.com/identity/{entity.id}/location` +- `method` (Required) - The method of the Api Request ('POST' | 'PUT' | 'PATCH' | 'DELETE' | 'GET') +- `headers` (Optional) - The headers which the Api Plugin uses in order generate the call with (default: `{"Content-Type": "application/json"}`). you can also use the header's values as a secret when it is set. e.g. `{"Authorization": "secret.API_AUTHORIZATION_KEY"}` +- `stateNames` (Required) - The state names from Which the api request will be made from. +- `request` (Required) - The request Transformation and Validation configuration. + - `transform` (Required) - The request wrapper of the Transformer and Mapping configuration. + - `transformer` (Required) - The transformer function which will be used to transform the request before it is sent. (default [jmespath](https://jmespath.org/)) + - `mapping` (Required) - The transformation logic which will be used in order to transform the request before it is sent. + - `schema` (Optional) - The wrapper of the Validator configuration and Validation schema. + - `validator` - The validator function which will be used to validate the request after it is transformed and before it is sent. (default [json-schema](https://json-schema.org/)) + - `schema` - The Validation schema that the validator uses. + +## Code Example + +The following Plugin can be used to configure an extension in the workflow [configuration](#configuration) - [API reference](/en/learn/workflow_definitions) + +```json + { + "name": "finish_webhook", + "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", + "method": "POST", + "stateNames": [ + "auto_approve", + "approve", + "reject" + ], + "headers": { + "authorization": "Bearer {secret.BUSINESS_DATA__VENDOR_API_KEY}" + }, + "request": { + "transform": { + "transformer": "jmespath", + "mapping": "{success_result: pluginsOutput.business_data_vendor}" + } + } + }, + { + "name": "fail_webhook", + "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", + "method": "POST", + "stateNames": [ + "auto_reject" + ], + "request": { + "transform": { + "transformer": "jmespath", + "mapping": "{failing_result: @}" + } + } + } + +``` + +By integrating the Webhook Plugin into your workflows, you can easily set up outgoing webhooks to interact with external systems based on the workflow's state, thereby extending the power and flexibility of your workflows. From 9b5c6c71837bd481666880817124444f41ae9b9e Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 28 Jun 2023 13:20:27 +0300 Subject: [PATCH 076/123] fix(docs): fixed docs (#612) * fix(docs): fixed docs * update workflows dashboard name --- README.md | 4 +- package.json | 4 +- services/websocket-service/package.json | 4 +- .../docs/src/pages/en/learn/installation.md | 55 +++---------------- .../en/learn/interacting_with_workflows.md | 6 +- .../docs/src/pages/en/learn/introduction.md | 4 +- .../pages/en/learn/understanding_workflows.md | 5 +- .../pages/en/learn/workflow_definitions.md | 6 +- 8 files changed, 23 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index ca6653995d..dd82e26510 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Ballerine is an open-source user risk decisioning infrastructure that helps comp ## Our vision for this project -Watch a brief video expalining what we're building. +Watch a brief video explaining what we're building. [Watch now](https://youtu.be/0SppYSZOatw) @@ -124,7 +124,7 @@ We believe in enabling companies to manage user identity and risk according to **Demo example video** -Watch a video of how the demo works, with explainations: +Watch a video of how the demo works, with explanations: [Watch now](https://youtu.be/EzBXhUM7gb8) <br/> diff --git a/package.json b/package.json index 4a3321fc36..c9148bbf1a 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ "playwright:install": "nx run-many --target=playwright:install", "dev": "nx run-many --target=dev --projects=@ballerine/workflows-service,@ballerine/backoffice-v2", "start": "nx run-many --target=start --projects=@ballerine/web-ui-sdk", - "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/workflows-websocket-service", + "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/websocket-service", "web-ui-sdk:dev": "nx run @ballerine/web-ui-sdk:dev", "web-ui-sdk:start": "nx run @ballerine/web-ui-sdk:start", "workflows-service:start": "nx run @ballerine/workflows-service:start", - "workflows-websocket-service:start": "nx run @ballerine/workflows-websocket-service:start", + "websocket-service:start": "nx run @ballerine/websocket-service:start", "workflow-browser-sdk:build": "nx run @ballerine/workflow-browser-sdk:build", "workflow-browser-sdk:dev": "nx run @ballerine/workflow-browser-sdk:dev", "workflow-browser-sdk:watch": "nx run @ballerine/workflow-browser-sdk:watch", diff --git a/services/websocket-service/package.json b/services/websocket-service/package.json index 3a98c85e08..9b77559e41 100644 --- a/services/websocket-service/package.json +++ b/services/websocket-service/package.json @@ -1,7 +1,7 @@ { - "name": "@ballerine/workflows-websocket-service", + "name": "@ballerine/websocket-service", "version": "0.0.1", - "description": "workflows-websocket-service", + "description": "websocket-service", "private": false, "scripts": { "build": "nest build", diff --git a/websites/docs/src/pages/en/learn/installation.md b/websites/docs/src/pages/en/learn/installation.md index 9d6725aaad..046f0678cf 100644 --- a/websites/docs/src/pages/en/learn/installation.md +++ b/websites/docs/src/pages/en/learn/installation.md @@ -8,13 +8,10 @@ layout: '../../../layouts/MainLayout.astro' ### Prerequisites Before you can install and use Ballerine, you will need the following: - -1. **Node.js**: Ballerine requires Node.js. If not installed, download and install it from [here](https://nodejs.org/). - -2. **pnpm**: This is a fast, disk space efficient package manager for JavaScript. You can install it globally with the following command: - ``` - npm install -g pnpm - ``` +## Install prerequisites: + - Node.js (Minimum version 18) (you can install node via NVM: [Install NVM](https://github.com/nvm-sh/nvm)) + - Latest PNPM version (Minimum version 8.0) ([Install PNPM](https://pnpm.io/installation)) + - Docker and docker compose ([Docker](https://docs.docker.com/desktop), [Docker Compose](https://docs.docker.com/compose/install)) ### Installation Steps @@ -38,9 +35,12 @@ Before you can install and use Ballerine, you will need the following: pnpm run monorepo:init ``` -5. **Start the API example**: To start the example API, use the following command: + +## Run one of the examples, or follow a guide from the [guide sections](https://docs.ballerine.com/en/learn/simple-kyb-guide/): + +**Start the KYC example**: To start the example API, use the following command: ```shell - pnpm run api-manual-review-example + pnpm run kyc-manual-review-example ``` After performing these steps, the backoffice should be running on http://localhost:5137/, and the workflow service will be accepting calls at http://localhost:3000/. @@ -49,40 +49,3 @@ The default username and password for the backoffice are: - Username: admin@admin.com - Password: admin - - - - -v2 - -To set up a local environment, follow these steps: - -1. #### Install prerequisites: - - Node.js (Minimum version 18) (you can install node via NVM: [Install NVM](https://github.com/nvm-sh/nvm)) - - Latest PNPM version (Minimum version 8.0) ([Install PNPM](https://pnpm.io/installation)) - - Docker and docker compose ([Docker](https://docs.docker.com/desktop), [Docker Compose](https://docs.docker.com/compose/install)) - -2. #### Clone and install the project: - 1. Clone the project: - ```sh - git clone https://github.com/ballerine-io/ballerine.git - ``` - 2. Install npm depenencies: - ```sh - pnpm install - ``` - 3. Initialize monorepo: - ```sh - pnpm monorepo:init - ``` - -3. #### Run the example - ```sh - pnpm kyc-manual-review-example - ``` - -Once the process is complete, _2 tabs_ will open in your browser: - -1. http://localhost:5173/ - for the _document collection flow_ -2. http://localhost:5137/ - for the _backffice_ -(It's recommended to have them positioned side-by-side). \ No newline at end of file diff --git a/websites/docs/src/pages/en/learn/interacting_with_workflows.md b/websites/docs/src/pages/en/learn/interacting_with_workflows.md index 08ffa750e9..c83e07a899 100644 --- a/websites/docs/src/pages/en/learn/interacting_with_workflows.md +++ b/websites/docs/src/pages/en/learn/interacting_with_workflows.md @@ -1,11 +1,9 @@ --- -title: SDK UI Flows -description: SDK UI flows documentation +title: Interacting with Workflows +description: Interacting with Workflows layout: ../../../layouts/MainLayout.astro --- -# Interacting with Workflows - Once a workflow is defined, you can create instances of it and interact with them in various ways. Each instance of a workflow is unique, with its own ID and context. ## Workflow Instances diff --git a/websites/docs/src/pages/en/learn/introduction.md b/websites/docs/src/pages/en/learn/introduction.md index 36299807b0..0aff709540 100644 --- a/websites/docs/src/pages/en/learn/introduction.md +++ b/websites/docs/src/pages/en/learn/introduction.md @@ -34,7 +34,7 @@ Ballerine is an open-source user risk decisioning infrastructure that helps comp ## Our vision for this project -Watch a brief video expalining what we're building. +Watch a brief video explaining what we're building. [Watch now](https://youtu.be/0SppYSZOatw) @@ -93,7 +93,7 @@ We believe in enabling companies to manage user identity and risk according to **Demo example video** -Watch a video of how the demo works, with explainations: +Watch a video of how the demo works, with explanations: [Watch now](https://youtu.be/EzBXhUM7gb8) <br/> diff --git a/websites/docs/src/pages/en/learn/understanding_workflows.md b/websites/docs/src/pages/en/learn/understanding_workflows.md index 7de5f71407..17f1f648aa 100644 --- a/websites/docs/src/pages/en/learn/understanding_workflows.md +++ b/websites/docs/src/pages/en/learn/understanding_workflows.md @@ -1,9 +1,8 @@ --- -title: SDK UI Flows -description: SDK UI flows documentation +title: Understanding Workflows +description: Understanding Workflows layout: ../../../layouts/MainLayout.astro --- -# Understanding Workflows A workflow, in a broad sense, is a series of steps or a process that takes an input and produces an output. It's a sequence of tasks or procedures that lead to some desired outcome. However, in the context of our system, workflows are not just mere sequences but orchestrated, complex processes that involve dynamic decision-making and interactions. A good example is the "Know Your Business (KYB)" process, as explained in our [KYB guide](../guides/KYB_Workflow_Implementation_Guide.md). diff --git a/websites/docs/src/pages/en/learn/workflow_definitions.md b/websites/docs/src/pages/en/learn/workflow_definitions.md index e8b0bab5c1..24089dd02f 100644 --- a/websites/docs/src/pages/en/learn/workflow_definitions.md +++ b/websites/docs/src/pages/en/learn/workflow_definitions.md @@ -1,11 +1,9 @@ --- -title: SDK UI Flows -description: SDK UI flows documentation +title: Workflow Definitions +description: Workflow Definitions layout: ../../../layouts/MainLayout.astro --- -# Workflow Definitions - A workflow definition is a JSON object that specifies the structure and behavior of a workflow. It outlines the states, transitions, actions, and events that the workflow is comprised of. ## Components of a Workflow Definition From a030e411ef3902a6a09193d9d3c19a1780776fac Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Wed, 28 Jun 2023 13:20:58 +0300 Subject: [PATCH 077/123] Illia rudniev/feat/overview page and charts (#596) * feat: added overview page & updated pie chart * feat: added sorting to worklofws table & added sorting to controller * fix: fixed sorting regexp cache bug * refactor: updated implementation of getSortingData helper & removed primitive return types --- apps/workflows-dashboard/package.json | 7 +- apps/workflows-dashboard/public/avatar.png | Bin 0 -> 8478 bytes apps/workflows-dashboard/src/App.tsx | 10 +- .../helpers/get-sorting-data-from-query.ts | 30 ++ .../src/common/hooks/useSorting/index.ts | 1 + .../src/common/hooks/useSorting/useSorting.ts | 35 ++ .../useSorting/utils/build-sorting-regex.ts | 5 + .../src/common/types/sorting-params.types.ts | 4 + .../src/components/atoms/Avatar/Avatar.tsx | 45 +++ .../src/components/atoms/Avatar/index.ts | 1 + .../components/atoms/Dropdown/Dropdown.tsx | 185 +++++++++++ .../src/components/atoms/Dropdown/index.ts | 1 + .../src/components/atoms/Input/Input.tsx | 24 ++ .../src/components/atoms/Input/index.ts | 1 + .../components/atoms/PieChart/PieChart.tsx | 41 +++ .../src/components/atoms/PieChart/index.ts | 2 + .../src/components/atoms/PieChart/types.ts | 5 + .../PieChart/utils/calculateChartDataSum.ts | 7 + .../src/components/atoms/Tabs/Tabs.tsx | 53 ++++ .../src/components/atoms/Tabs/index.ts | 1 + .../DashboardLayout/DashboardLayout.tsx | 20 +- .../components/molecules/Header/Header.tsx | 22 ++ .../Header/header-navigation-links.ts | 12 + .../src/components/molecules/Header/index.ts | 1 + .../molecules/Navigation/Navigation.tsx | 30 ++ .../components/molecules/Navigation/index.ts | 1 + .../UserNavigation/UserNavigation.tsx | 65 ++++ .../molecules/UserNavigation/index.ts | 1 + .../WorkflowsTable/WorkflowsTable.tsx | 35 +- .../molecules/WorkflowsTable/columns.tsx | 18 +- .../DataTableColumnHeader.tsx | 61 ++++ .../components/DataTableColumnHeader/index.ts | 1 + .../workflows/api/workflow/query-keys.ts | 7 +- .../workflows/api/workflow/workflow.api.ts | 11 +- .../workflows/api/workflow/workflow.types.ts | 2 + apps/workflows-dashboard/src/index.css | 45 ++- .../src/pages/Overview/Overview.tsx | 92 ++++++ .../OverviewChartMock/OverviewChartMock.tsx | 72 +++++ .../components/OverviewChartMock/index.ts | 1 + .../RecentSalesMock/RecentSalesMock.tsx | 63 ++++ .../components/RecentSalesMock/index.ts | 1 + .../hooks/useWorkflowsMetric/index.ts | 0 .../hooks/useWorkflowsMetric/types.ts | 0 .../useWorkflowsMetric/useWorkflowsMetric.ts | 2 +- .../src/pages/Overview/index.ts | 1 + .../src/pages/Workflows/Workflows.tsx | 48 +-- .../layouts/WorkflowsLayout/Footer.tsx | 2 +- .../layouts/WorkflowsLayout/Header.tsx | 2 +- .../layouts/WorkflowsLayout/Main.tsx | 2 +- .../WorkflowsLayout/WorkflowsLayout.tsx | 2 +- .../WorkflowStatusPieChart.tsx | 50 --- .../molecules/WorkflowStatusPieChart/index.ts | 1 - .../WorkflowMetrics/WorkflowMetrics.tsx | 45 ++- .../organisms/WorkflowMetrics/helpers.ts | 22 ++ .../WorkflowStatusChart}/Label.tsx | 0 .../WorkflowStatusChart.tsx | 30 ++ .../WorkflowChartDetails.tsx | 28 ++ .../components/WorkflowChartDetails/index.ts | 1 + .../organisms/WorkflowStatusChart/consts.ts | 3 + .../organisms/WorkflowStatusChart/helpers.ts | 22 ++ .../organisms/WorkflowStatusChart/index.ts | 3 + .../WorkflowsList/WorkflowsList.tsx | 14 +- .../WorkflowsList/index.ts | 0 .../hooks/useWorkflows/useWorkflows.ts | 5 +- apps/workflows-dashboard/src/router.tsx | 20 +- .../src/utils/calculate-hour-difference.ts | 2 +- pnpm-lock.yaml | 298 +++++++++++++++--- ....ts => get-workflows-runtime-input.dto.ts} | 24 +- ...ts => get-workflows-runtime-output.dto.ts} | 2 +- .../src/workflow/types/index.ts | 3 + .../workflow/workflow.controller.external.ts | 15 +- .../src/workflow/workflow.service.ts | 33 +- 72 files changed, 1476 insertions(+), 223 deletions(-) create mode 100644 apps/workflows-dashboard/public/avatar.png create mode 100644 apps/workflows-dashboard/src/common/hooks/useSorting/helpers/get-sorting-data-from-query.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useSorting/index.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useSorting/useSorting.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useSorting/utils/build-sorting-regex.ts create mode 100644 apps/workflows-dashboard/src/common/types/sorting-params.types.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Avatar/Avatar.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Avatar/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Dropdown/Dropdown.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Dropdown/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Input/Input.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Input/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/PieChart/index.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/PieChart/types.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/PieChart/utils/calculateChartDataSum.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Tabs/Tabs.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Tabs/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/Header/Header.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/Header/header-navigation-links.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/Header/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/Navigation/Navigation.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/Navigation/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/UserNavigation/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/Overview.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts rename apps/workflows-dashboard/src/pages/{Workflows => Overview}/hooks/useWorkflowsMetric/index.ts (100%) rename apps/workflows-dashboard/src/pages/{Workflows => Overview}/hooks/useWorkflowsMetric/types.ts (100%) rename apps/workflows-dashboard/src/pages/{Workflows => Overview}/hooks/useWorkflowsMetric/useWorkflowsMetric.ts (81%) create mode 100644 apps/workflows-dashboard/src/pages/Overview/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts rename apps/workflows-dashboard/src/pages/Workflows/components/{molecules/WorkflowStatusPieChart => organisms/WorkflowStatusChart}/Label.tsx (100%) create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/consts.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/helpers.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/index.ts rename apps/workflows-dashboard/src/pages/Workflows/components/{molecules => organisms}/WorkflowsList/WorkflowsList.tsx (57%) rename apps/workflows-dashboard/src/pages/Workflows/components/{molecules => organisms}/WorkflowsList/index.ts (100%) rename services/workflows-service/src/workflow/dtos/{get-workflows-runtime.dto.ts => get-workflows-runtime-input.dto.ts} (53%) rename services/workflows-service/src/workflow/dtos/{get-workflows-runtime-response.dto.ts => get-workflows-runtime-output.dto.ts} (92%) diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json index ad6e5f81cf..21ba36effc 100644 --- a/apps/workflows-dashboard/package.json +++ b/apps/workflows-dashboard/package.json @@ -12,11 +12,15 @@ }, "dependencies": { "@lukemorales/query-key-factory": "^1.0.3", + "@radix-ui/react-avatar": "^1.0.3", "@radix-ui/react-dialog": "^1.0.2", + "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-popover": "^1.0.6", "@radix-ui/react-select": "^1.2.1", "@radix-ui/react-separator": "^1.0.2", "@radix-ui/react-slot": "^1.0.1", + "@radix-ui/react-tabs": "^1.0.4", "@tailwindcss/line-clamp": "^0.4.4", "@tanstack/react-query": "^4.28.0", "@tanstack/react-table": "^8.9.2", @@ -34,7 +38,8 @@ "recharts": "^2.7.2", "tailwind-merge": "^1.13.2", "tailwindcss-animate": "^1.0.5", - "use-query-params": "^2.2.1" + "use-query-params": "^2.2.1", + "zod": "^3.21.4" }, "devDependencies": { "@types/axios": "^0.14.0", diff --git a/apps/workflows-dashboard/public/avatar.png b/apps/workflows-dashboard/public/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5cc9deacc539cb5f7213641fbdd6bedb5b3a24 GIT binary patch literal 8478 zcmV+(A>rPMP)<h;3K|Lk000e1NJLTq007DW007De1^@s6<YnKe000a<X+uL$Nkc;* zP;zf(X>4Tx07!|IR|i;A$rhell8}(l0tiS6y$K>UfRqqg0O{RENCJcsV<4#5kwpd9 zf{F!f=&Fcfr`ZuZi(>DK1r=poEZCJdDWL1V^1YL9?)~%6ng5(QcWxN~)Q@w;;#^b% zfILxwBsL^~k(`psAUy>L{851sFy->{#jNP)2mo#H{C9hI9r{AM;vm!dXa9dSO}-$X z2LKWcaXLSrmk03y0Pt#_SW*B0QO283DG<vrY(QHA6NGqy3}-5EwG5{#@E*BOd@LK{ zHULzpT&^S&0JTeyXB6@>p@v!?#7-i<Py~QF17hF2yh(hB(;&8iK4OSv`ponnbTa>@ znLeb+<z^0H#a!g35-7|U=W?h0pXK=9mX|9Xj9~>EHA@m2E1NT{+s&Lw;WA8xxL1@O z83nNx#2<uwxj)1xB}*EbpzucxdHHNuGoTBx6Q3Ix4zVG`!J^#A2qmAMAq?g~3|9y` zRan4@hgc8d1%mvbIHk`<$)s3iEVLm*!e%M?vs{Tht}NDlX-)!5ssB1lz)|XBYDHP` zNf1*YwkQ-PMnbFxv15KtT)5I_bWs*Na?nR2jg{qZ0dcHA6cV7&#|kqf!LdsJvb_Ak z`C=Qhgq%nv-dB(nAF8Mi*2d$?^M`Z6E(t`egh3raesaX%T=;^(AjRCVX97_|oKok5 zxF8@_F&3wYbEB31xS1d~M8=yz?3!N~ryPqX7Qh9m(8n{x1<~<}Jn^DzZdkM;AABi@ z0BjHl7(fbJI+z5qfv}^uu^0YR^aKMgkbq1e01irKa72>4M+A>?pa}d4kpScmjSG<X z3P2&`zYejAqXWp0_ZG@W<bWp-=YepL3;#>yqeMf|62W802>%hC3mXsSn+uz)|KIb2 z?01F*nFu8#9gN6OAM_*!5d(>##9*Q=Zh-sZ-gpE&`ordoGjY$sd3^ULJRx)v9ulq* zx(K%>3X3H_WjO|PLH%H5Ez*Ci1#Sg3-S7b12dYD5To*S04!A3f!@~VwWH-pNm3hmm z!uU!1Z!`GeYAF54PGpokjO<Ug`FW(8otoQ_imcW@)<=<R`cS>uLp?voXa7)rK0Js2 z?1?SF_G4$T6WBTIFxChd*fFdLYsZer@X+ddEMHxN(PHKK<Uk$aKjIBuSy?6Xo$8!= zoW3af3ItPS&uGA&B%US_W@Z&ISn!P?U~oh{#}N!?CubJ`WbYTn<Lga~{Jnwbwtwg5 z{Q-c_v4MesL*KcuV*u>+fVY41cg}_hUmdCdoNeYwC4~wOmmLW3DWMMUG<{$U%z+J@ zk27!w-oPIOfiMsS;z0_S0JG16>s$h+fEi#eC<WzUDOd^Cf(>9Z*ba7qeV`E>1}DI2 zZ~<Hb*T5aPdb+_2&<Eau&j^B$5E?>9^br%p60t{|5hmh`1R)VfERuqxA(@B>ks>pY zc}O`@fviO~A+^X}q!~GZoI^U1TgU^X2YHQrLNSzzYNJM|6*>}SqAWBVjYr3$ndoG+ z2rWSuqpQ&xbSK(?o<J|4*U&EX1=^1ROcm3`Ofd(HiLtRLEEUVZB-kvh46DRyuzIWo zUgs-V7uJh?#ECc^XW$NS1&87ZI1itU&%zhsYw_)P1Kx&T!5`p#_%{NLU`Vhhco8^+ zWI`rk3ZaxxN!Us_NH_)WrEbDIB9W*|v?hAMdohKWO`J|#L|jMQO*~HQBt9bclSm|e zl0C_X6h-2a3P`1-HKd)SW2DQZZqf%8RTUEzXO&=;R27j*u}Y=N4wa)SmsOssd?ss< zEy-TwC^DZsjl6`sh1^2ENbV+orf5>EDL#~VN;YLKWi_Rqa*A@7@<vrv)lAh>HAYpa zI!AT2>K@gzst;5@QnjddR5o=SRZ3k<-9|l5y+wUPqtUEr{<KtD0c|m@mUfbMpY}nG zuI8x5QRA!4R;yBLP`j-5Qk|@Bsm@ZLpkAb2slH$RqI$0eS;I<$t-;lprBS8PtZ_r5 zUz4smN;66`Pjivx4$X6#&$LKdR$4(?e613#%~~h59?>znIh{@C(dW^(&`;63wTar+ z+8pg{?Q-p1+8x?`I$AoeI*B?{b*glZ=yd5~x>mXz-CW%zy8Cpm>wX$$G>kP&Fl^zl z`eB!cz1JJA=dUNwE7RMpcTMk;K0`l9KSzI=exv?91KhyQAjV*d!Fq#J2ED_zhkFm_ z4KEwMZ}@FP)X>f_)^NJvX2W*Fej{U}5F@eC8l#g&y~eu6{>ItHD~yjC_n6R4d`*NV zD@=}=JZI=ISd3i8YDOEQ&(zQ~)KqG^$+W}tvzfJ7f?2WIZnJyl6mzC|hWQHfR`Wg! z6N@nxGc4*XZd;NqnU-0Wt1Qo0zPGZrO0t@7)oAt1TF;teU1VKneb<I&<7YG3rpD%~ zEzy=~n`67q_L3cH=Vq5>S7mq69<_J37uv70?;JrG;W<JyqGrSm2dV?hq0phu;en&B zV}xU|W258CkrpFUM=l$AX5=>~H>X^uElzhvX^jdSRXnO?)N5xuXP$GF^Hmp`OR&pq zmnN52uJ*11*Y&P9-RN#(+~&Krx_x!`aF@8(yZ3llc%*q$d)#1ZGozV{m}fl+o&lb- zJr8?+^m6wq@Y?6~m$!p=j`t4lXQQo03r24l{m946hwHP+r^}b&o94UGx69AekLy?C z_t4+mpYOlb|0&CsmCf48dKuspAPG1a@Sg3(p2<EQhy{iOmIZbMX$2(&tqr;#Y!;ju zTo>FI;ubPJ<aj6{G(2=!=nak$hsUYq^o4nZ%?xV`r-sLcuMK|~VHY8ZXc>c!2^+I~ z%-u-KNKs^C6o}$PEswevZ5=&1`cMopCOW1n=1J_R*cq{B;^=V`<95Woiw}rj5`QPb zCPA9eny8*QF0nT8eNtdjMN(Jt$mE&H7g7vTgegs_q}0UJt*QNEgT}5L+da;0T<N&$ z<E_U}9e-|u!GzoiM<%LI<WAh5Mo3Fa+mZH#8^x{R_NQ~wtJC{<Y~Cu~3%);p1;0n& zBd8EO&G5;n$at3Nles*zC(AFZGOJg}7OoY($_~xmko`U<DrZ~HKyFg*?mU&ew7h1K zmMBNmHpzI>)JdIUdvU3_YqHnmm6Q7<;gYTSNdEZzrUGsFA>S^wk^UlmQ0QA&Rrp~_ z;*|YUHK&TEwokL0ws6|hqTr(6rsLCj(_3el&X_yn!A#c7O|y_$>9bmAo6jzp-90B{ z&i1*KxjA!xFLo-fD1JLHX<kc-QOTT=N56#pQdg>0Dk;4&-+TUs1^5Etf{ukQ3)d|C zR>m(oU+z?1S^i}aZ_)W*NBz3`*MY?ui#wLMFIm5oxKy<C`ZB*|+bc9HiYgv0AG5q+ z1!G0oinl8#t~^)iTDf5rWtDVQ*XoGXO=~RHEM4<uZPwarRRLAIs|~9cR=;1zUw3)E z|N8n3MjOgEeA+17cym+8riL1;n##?@&4rtvY)Ra5<~QbVwOb9gmT&#KO|-3Rd+heM zT94Y=9fmuW)S-3Kx}Kfmc3#>QxT~q&p?=eD-QDGTz#i$I=X=xkUf&nKuXR6jfBgZ= z1JwuV2g@3ehG`9bjaiLdO({*C&0)>0E#55$4>=y%cG&cA)e)T|OO8^GmK+^8R&=cY zxcGSQiOds^S|_&NIhlO&YFkWO$EomBXHN&8K6!?9=Ga-Evxm=loohbNJl}Z1{X#># zTl>M^-F`pV;oi}3(c@y%CC^JOoufOCUiQ0u;!5C^(^olHFI<bf)_FbQ`pp~TZgkz` z-+Xo}_tvZ1g||Q7nRAzLx9pzAy~_KB_iO&J{bP5Rd)JW%fe+dr#y!0Ai1+Bl<NU{8 zx=WtWo>V?Hd0P9-`Pt!~;GRp*$3E|VA%5|>xAafVKdWEbygcxi|6lEW$$j0gB(DZu zFM6Z@X4_lWx2^rr{rBJHz5D#W?1TP??H`#R&wNVy^z`$TFQhN4zuJCn`4;}|?m*ta zfS4=c%0C4#*wBm&0A6ncfR+LP9q!L4V-@>9xgm-@s~my<gcW;4xw!*S55M1Idg0g2 z4FL9Rf!i;ruRacdXc_?Vo&a@m8ES)jHTk|$W<<CT*ckmaJue;n8&m8#f5`jiGmxpe zf}hX-0v8Q@R)Z)Rd;kCxoJmAMRCodHojZ0FNfL%H(`}3g?Ty#c3J@!h<c-(h%~%3+ zEMNsRD*#r|;I&8h3Xr_<kXFFO9IM3&H1S=OqEys7BC9g9BF@QM@2t!}<IjkE)xEQs zCP(tvfrP{B?LFBNTpWSa5V({CZLh<bY)>VeOBf}0M%)b%o=SKuVNZgKBakZsTS@p! z38xaa63pa<#PpYhD-VuAK|1hB^72eVuk=}zJ&EDHgoECg{02uLUj(+2^kWHZ8|80} zXTP32k<CX5PLd9g{8AAJ>`5-r^@nY_`Jv?kBzY_0?=9E;v?EX&0_gg`By1&INVp|U zM1fVm-@3~W9D(&9fc|eK+#*Z8jj|^<V1n*RaB&3Iiom60{DFjR0H973dI9#rMc+CC zD@Nd4@(x*cQgywa${Bn#7e~Mm*lhkGAYe#N0V7zHJ=y;tfvt-p;0Sz002gdu!e!_l zK9Yky2`-L+Bk&CY+Un0Z3>L-PCf~sEJx8F5z*Y|SA<BUSdb(U30Y{)2fn!{+qvmUV z))8<7t`RtZD2EP*Bj5;hB5(vz_BwCzi;jRJaNmjIO5h0eBXEz#{8j&beupElZUnF> zE{=dB(1U;zr3WCt><EB>6UFtw5g34g6J-EMev2dEL~$K(1O_1BL>T~*-{J^3QCtTc zfdL3OQ3inIw>Sb$6xRVqU;qL?4!Fl}nGu0|_wH>D4i0wV{{8!#a7+^R_V#Y2<nr=z zL)dP&yY0or#pe9{e0R*&#SQ_V!eWQz<d}|*jyAvi^2>%TB(V?(bb5Na`SZ^|cU#Eh zqC<eWULIz~KuB@*>eZ{OzyA8`Y7Y7E;ltJA$B(bXLU~zFD{CjooD~JiiqbA65c9X+ ze!CJk&IvP)Fiw;?hyp=AefqQ%KN{cbgc+s#qi*(EXk0CHg^QIMLF%k|@#2NMWc}sp zM2TThXbZf5|Guu1$sR*ytX>Q(3W?K+VqK6qSdliy(!pSjM<MY!Q7j7*Hzs$%x_D#% zJ6?Qu!fTX%fAu?za&xu%$P8IzOy|3NT2?BV#pOiN78tef$B!TTbT7;6CnqOPmai43 z6GcN5NJ8yfvfxf?Fe>C(C(6`<Tmwl$1@P?Iv$d1Oi86&Kv`I?0B!MJhyK*<oi86&K zIgOD7Mb~bb{<7i*z7u6EQA+3no=O_5=o%+h`ZRlC$ryR~@Zm<R$(Tnb-^-ekv$M0^ z8WX0?*VmXx8|h}f3TsznpmTRT`Go@?WcvQ`@$taB%eigsjkLk}pQG{4%wihOQ)_Kz z1-yOxHhTMMg^hc6y`;_?L>6Y-#uDO2$%m$8$bB(qEYn`0;uw;SLhc!+B!y&la>0tr z6@?>M5Nm?e%j(x(e~p&*`nw7~cA^X^+!$TKbGk3F+{V}>A5u0m-Qz^*0~!~`QXt(@ z-K?))zqZWEZnb6~euZ3jqVyG{r8Ob0rG0yAS8OF##fj2I6iaK80!cz%Ey+SVE5uvy z)``+pxF~^zq(qXCUrRS^1y;q05)`Mtr5#}<sVb6HMZlDvI(~&6J5kyS)N0%WH>d3# zOP{B`Wbth=;+Q%}x-<p@-|s|e1InTiPaJLWr*fWdY6~g+;}lMmCWXaSvXESq$HE2s z<Bva*uN0cfdf+)HN)u2PwQLU7B;?(qV!-_h@fEmrqBIq%MGc#aH3|8*SogowKx)WC ztgZh)iXhu0Qs7Oe2cP5X@iL2d@ck*=$d~W6B9=)TMUu}uQ5uQ`l1L9u!<FHuShJCv z$he9+$*hYhQJg3Zr7B&f4QI!lvZ$TMy-|O6)8eqPv1%>x*!RtKzZ0baX^X<n(V_qa zD=IZ&QORiDAM05sN&~W5w~Hma)Xq6deYx@2Jb;}Rzp?L}<9;Vf1Ij=D{By(E;io=- z{yhBV#O~A*h3q&{5-ZeL$<Y>c&i|KaVF^ogzuclkV4H=qMM&15D03$HpbSpD$%)bc zoYtZ=MCqq8N5F~FP=HR922fUh%83#|0o;9w0P4a~{<!e_lYG6_qTIcEcf(YU(5MaD zdS+?MR09NCnq+Nht*3o$$9E*d%=mPvARyE0D@XJ12Ex!)OII`7xdt#9Y?aB8s!Z?i z?=MbxRR$U!c8k&g%F?H()d}?phL8o)Fg=ECjNUb^H3hpE=~}u>cz?-j2qxvtV!_rN zaj+DCsr*8!N%?Fldy92AP4O0R&WTbl#5t7Q`W;rJ(S9c&r^RaZa_>2IqSOJhR^qwi z(|qt-yLb!2*6}Rl*ojgv$hj3e*88a4$E>o%h0_Y(3ajH;!m*E|NGX;obO?xb*$81a zLYUrc);kY+A85FNPKHvY$QnQjYjVD{wQ8!*_gNT=?*vHq@?_jKWfuEcA4h4Z{zTCm z&X#kEahgYu9^Lw@JFE|uM<a9#|Mb&OnkbTe)?Ke;izZ&eAO(YpxMl1k@&~TFt>#C& zI#ToQ*w3zVz!6_O_~X>BxqU6gN-1c!fWw<NZw9qt`ra!a!0Wpu>+41Olu{zM@+BkA zSN!dD(|303U7D%3F;Y*LSf^W<*UKRD<J$_Ad1k&Vs4jw36_5Ku-f8r@j6<Ma*#s<0 z*%s}3;Z{`ra4ED_VUAO&bCg;$ZFu3`yLX1Mr59DPjrmuvUTvh7yJ@WUK@U+}rXjF~ zc3yE71%;PCwb?aN#}qrgKVh)U!m<zt0VN_d326<%;#*=(@0jBpodKmwQA9!M==MbE z#|qB|(GrDe@bbU(A-cg^(g0yX;Pa%Z6NpNn^xiHCuo$ACWMf>dy7pFyqWvzH^sLpR zA9M^sS#v@NLb_;cLA=Am!%3Auh%3gHwn>}CjPbrD<GktZkwj#>&wmJNr26-9GOnVD z>MG_R>IiABNM8y)bEF|>of(t%A{z5F+^4uYZMBou_0oQ6vMpVl$J#JZ$a32!PoCVe zK3&hnxc2hp%NWrn8)w$F0)vPa!Ws@Kp<U4a2m9PLt+dH@R>lH{p>dQxZW45%vd!1s z5-T#aTzl`U5=Cn4-ut_5Sn4m@<|GX7swh$M``Nl)QcxRQE-U%+<;zV}TGxvPc(rrj zCgR9DG^%mS9z1vuy@7plauPW==|!JqZGh>w6s(98%`QlntUBrxYFs`P(KNSBow@4> zu;>A^6>Rf!y`DaOYE{-Z@l+L?eXY<tm4fn+7wtOuHY^}v6}J@f8!-)e5ru-W?i#JO zPXf?w$}#kO)k1|hm)vSQDBAM9qDFmQL_w)71=2OuidvTiw`WOWG`$;FNt>@G>{HBZ zQ~s6b@*xTeZ7FRe0Z^^Gvc%U&qyu5M=7w6H0obMrAcjR=i3^qwQ7o-V7fB$BcBDV% z=zLqvSnuFKf$5m2-yef4D{#T`Ad00mX;Yx8LSYd!f<>yv7kj_05^1aLW00lrUa&lf z(xwPglzB*jYQMpYg2pCCh`(=k0;I()3-^buHCeFIP45Zs%Y2(YQ2^gcs*@kP3XWbY zt<0e`eIyBaXv?=XS=!#yg>@#^(kF_A(xNb9{Ai0o$ENmyrBVzf33+dG!AOrqUU>(? zd*-MhEO8tdSNcTJHmpMdQhN>rWmnj{l2`o197~ZYB%@P?``VU&t*cp0OrcgKeWFlH zX=O^`Y2Q2Loo$L-Jx?2Js&v)%^<J~7?<mo#BtI#V)qPU9q9@aZ$%3M^qa#Rh<({}n zyD!U(&dl`#VmVqLWqpfwLMV|_US02LO+exoTFtSfd+}=)F2Ph6NW0Q;NblMhjA=_~ ztsKvHz0(43EK%Qky3&y1wd5^|v?~NRomAJLkBKRKm1WE`)qAziSL4Exh-;*_uGIEj zn9BH($*M`-gEvr;bk;DE(M7Lo{pK+}UG=<5VNb5XyBf~*_w*fGSdwacqpwqgna>uY z!M+cZxvwX0Q3Mc`TwGjCeja~)%DV8W&ow2KTG_&qG{xO^4hwAY<wvX_mZcO~)M5yT zo$qI~S0ffZPsA}srnZUdSj1R&Gqml1)v*xkc3K^y8IQXab;g7=5=KiDE2SMm7Sf8_ zVu9J1!Nf5NJ;o)}c4m;SC1z1u;NK8O*+j9hC;>ETS(K+f1s`9W_t2&Z_fFjs2l2&{ zzV=Bq-4<;XDvxTM8Ske}6s^*XsX@mU;uxhH5;uyewV+)Dn^I|L@h3gjI1Rxv!aZpd zMQi@&p6))SfUqL+MVT%gS6`b#67pg(u2M)lC2gW;*M+2Bqs6u&<X_WHz#3>}DoLkQ zI<cNfzI)hW&`uikf?rx93b>n!BCgGb{a8XbuVy+4(|EK~d18KIHWqG8@h08aVz5ms zbctFtv;{mhR-}U-Ez%TQXkS>Qc@6IG0G#xNKj0;*0<%ymrs~H|XIK1l5(EOat!nH_ zW7{=tJ7wtDP22kuIiEgJEY_o-Jk;cKgH9WSo;M4!lZPQ<NfPkVOzRKnO~s-s%0GRg zFlcBcbC4xi4~wqVvH8YLvQ|n9_m@rqg_5T5Z2Cl@;4N!p#wx4}4$A=vmmo(V6C{bD zj9{e|$QC1QGsc-dQ2@iDo48)sxI`%USg=tXtQ=z>5W|wh^)wDWj@<=2G#zdCO~H9= zxx~Ex&UNInNn1oYH)08*C6XDlbc0s^zwz$fyEn66!%SGxk(xYz{(K`9Nz`Ns0aWoH zA0L~nb5SKi`S9o(Ro=JAGum#-w%RV&^SF?6xingga<?eS4>(pU0dX%()^u0n%yl0N zNG)wKAe$=&bEZ2hqTm|6dGlsYe3E<@7(f#6aG4K*McgRK-sJbzr@3q0f?S@*)mqAh z(PFezx;1)MeKsqL66%gej~=bg1;dK)-;B6ia|<0ATCw;Hk~R(6=O@?f^5VswwHPhd z){=8PkM&%-Hs<|Wu^t3nK=+nYc5P<0bC9%!AM<&}X2_owBa7!5qtS{*Iu?#2U!nk< zMImaH!18$rLY`8pfwi*@u!;*SxyAeQCJF^mf@MjOAVImcGY^*d_py+6!)^XV0Su;< z&?}Uiq)ZTSwP*{b;zBA(QwC82S#lY@$DKieQgX4H6p8t8T3Na?qA6b!&Xq%yka;F7 zrf6M)^~gnWu+mx~&!Jp0-<C&|P#`G~2EsD)ITvyS?AWqwKr2|zYMdGGmrImTDEQe{ zt0emr2V&r^;8sy1hcx82wQBQGS>=}Zru1er&0Z3(7HJP`q-Ng;aW?nw-`{9PoEd2* zFjCIcd?qKdU&079K#MimNH?__^Zot(BIcy6iYWC`hd5!KNgz%2(>h<ie7RA4CLltB z>b4$VDaT?>OxFHTaWHwa6e+?qN?~|Dj4-h1>B2=V#qGM*Emtrn**6`q`l|`rY9-;C z<?LZ80G9{|;Br~COGui<9}z{!;^Zh--A0*=T7eJJUXwXl8^~fIr8MFL7H&}j5-Z<I zyTptntev6LqckbXmz2Ws{EWoF@-HW7n}}5^u?$?X)=Vyo(f8^gth8}TB*~SxQ6~5Y z`1APkY#Ce0^-CzYThfI)0fFX6aJOiilqyBm08&`y`C`5nbC;UdXE64Vi_0Md-{qrf z2`u(=oX<8wPwW+H#LLZ<Io7*}`ti6jvC?1>FJz`2VJ(_}^|Hv<3~@M7`am8^lAwI4 zHfR}4Y_f(S-BY*Z7c13=W9HYLC|w1}G>j>NLZ-5^4=aMp7)x?-IlIbvz%?gI7f4z+ zh3A>(-}R1I*Qn)j1!Gu|K)O<Uxf;sEiP8YdPO&Z4iwA|GMxU#(I|o6?*9zJt)e6pu z(nb^%!CLrqPpnzBxInQjNWg=9te{=uL}?>O^?b|^Rp1WMrHs|mC>-RVEflj2637v@ zsdiRW%g%b=2OI^_HW8w1PEJnRE}Ncb(2{U*ad9(%S)VT@q}YVO3Qck4ZvN=VG%+2K zk*2kNNxy1de7`bKNloqY4S_XU5~(wGobcJh9kpk!Q&T#!H2Kn+EeW7GQ94wIHQ$7_ z%i2jo`8!d1Sim2Nmhxqlo~$-r#;WqaERbdG;_Z@3yF`@XJ3OY2&VTdn^W0n6ILUYA zUekr|6{B`TUj(bTPB$!#*)>Q?({B>eMJLM8!hkF>$5v7xA(erA<7^d`-_UZuzR!s= z60qIKdWqHrS4%VaITpvv?suY0DX@~P%bfGjreK}OGfosuK|q)}r;k{=XWkYWrTe39 zcHgz3R}7-jGnR`x20@q}?{3y8-5+(c6QzYH!74$RR4t4XM5XJhhn+Yr#0hN}lyhl; zxDePah)UO04?9s>h!QMJaLeZUBcnh{$bowWVXJBJ{b~B{)9gia<`kyJ^G8O9hli>^ zGODMUX*SGDJ3Bku$lq1_l#@C@%3~*r5<t!4;tK7^!k-vP&A;JKj5x<WTS8UBd@HsD z)~>K+J{DV-cnCOA;$iDC7leS%9xkXbJuC4LaH7P+)?+RR0Vhg9h3Q#|hkz3$9=0BH zK?pce3Mx#`N<0LdDDklMm<vL{iBeEudRF2g;6#ast;bvt0#1~I3e&R^4*`gB883Q| z*%2rLflDV!5#{Kah>XA%qMS#5iAV1U<c`2+h;o*DE<F8?Kx70?-J(QB*rP83fm5d0 zBcCMfvE$+hI0Cm2*vip976p0tb>qK|fFn>t;3dbwqOg<>t8#lu9e21m0_#O!D_K95 zu<P{#2F6m}u;bzgI082az=<tK!J@E_e3Wpo+w&hsVBH98CHwmUg3v|@$B$$O>*C@F ztQi3~fXj6wKiuqn-QkA+NqAU0?}v`Snh^N6WcI(+4A+UmwQ~udB{*3?!)0v<Jdq6l zUe9zBQMd=PTuAt*guhF0aRf?7;8HU99|>=pGJ2=!WaZqR?0=BJ*2NJh6#)zb?elG0 z2J4Oa`h7gOFX6ca_FWu-k`Ta(yp-@j!d617^jVbZgL`stB;kdGJqa$3K&}XECE@QR zyp{l2dSwhzs*xSY!I6YR347P!o@`wlfz%Ly2!wM9XV=?P*^ZL`1M*d~!4vtPsQ>@~ M07*qoM6N<$g4*Ob-~a#s literal 0 HcmV?d00001 diff --git a/apps/workflows-dashboard/src/App.tsx b/apps/workflows-dashboard/src/App.tsx index 50038af4fd..3329aff8af 100644 --- a/apps/workflows-dashboard/src/App.tsx +++ b/apps/workflows-dashboard/src/App.tsx @@ -2,17 +2,9 @@ import { queryClient } from '@app/lib/react-query/query-client'; import { QueryClientProvider } from '@tanstack/react-query'; import { QueryParamProvider } from 'use-query-params'; import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; -import { Outlet, useNavigate } from 'react-router-dom'; -import { useEffect } from 'react'; +import { Outlet } from 'react-router-dom'; export function App() { - const navigate = useNavigate(); - - useEffect( - () => navigate({ pathname: '/workflows', search: location.search }, { replace: true }), - [navigate], - ); - return ( <QueryParamProvider adapter={ReactRouter6Adapter}> <QueryClientProvider client={queryClient}> diff --git a/apps/workflows-dashboard/src/common/hooks/useSorting/helpers/get-sorting-data-from-query.ts b/apps/workflows-dashboard/src/common/hooks/useSorting/helpers/get-sorting-data-from-query.ts new file mode 100644 index 0000000000..1b66ba8a56 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSorting/helpers/get-sorting-data-from-query.ts @@ -0,0 +1,30 @@ +import { z } from 'zod'; + +export interface SortingData { + key: string; + keyWithPrefix: string; + value: 'asc' | 'desc'; +} + +export function getSortingDataFromQuery(string: string, regex: RegExp): SortingData | null { + const sortingQuerySchema = z + .string() + .regex(regex) + .transform(sortingString => { + regex.lastIndex = 0; + const parseResult = regex.exec(sortingString); + if (!parseResult) return null; + const parseValues = [parseResult[1], parseResult[2], parseResult[3]]; + + const [keyWithPrefix, key, value] = parseValues; + + return { + keyWithPrefix, + key, + value: value as SortingData['value'], + }; + }) + .catch(null); + + return sortingQuerySchema.parse(string); +} diff --git a/apps/workflows-dashboard/src/common/hooks/useSorting/index.ts b/apps/workflows-dashboard/src/common/hooks/useSorting/index.ts new file mode 100644 index 0000000000..1ce5476513 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSorting/index.ts @@ -0,0 +1 @@ +export * from './useSorting'; diff --git a/apps/workflows-dashboard/src/common/hooks/useSorting/useSorting.ts b/apps/workflows-dashboard/src/common/hooks/useSorting/useSorting.ts new file mode 100644 index 0000000000..614cd4c914 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSorting/useSorting.ts @@ -0,0 +1,35 @@ +import { + getSortingDataFromQuery, + SortingData, +} from '@app/common/hooks/useSorting/helpers/get-sorting-data-from-query'; +import { buildSortingRegex } from '@app/common/hooks/useSorting/utils/build-sorting-regex'; +import { SortingParams } from '@app/common/types/sorting-params.types'; +import { useCallback, useMemo } from 'react'; +import { useSearchParams } from 'react-router-dom'; + +export function useSorting(prefix = 'order_by') { + const [searchParams, setSearchParams] = useSearchParams(); + + const parseResult: SortingData | null = useMemo(() => { + return getSortingDataFromQuery(searchParams.toString(), buildSortingRegex(prefix)); + }, [prefix, searchParams]); + + const setSorting = useCallback( + (key: string, value: 'asc' | 'desc') => { + if (parseResult) { + searchParams.delete(parseResult.keyWithPrefix); + } + + searchParams.set(`${prefix}_${key}`, value); + + setSearchParams(searchParams); + }, + [prefix, searchParams, parseResult, setSearchParams], + ); + + return { + sortingKey: parseResult?.key as SortingParams['orderBy'], + sortingDirection: parseResult?.value as SortingParams['orderDirection'], + setSorting, + }; +} diff --git a/apps/workflows-dashboard/src/common/hooks/useSorting/utils/build-sorting-regex.ts b/apps/workflows-dashboard/src/common/hooks/useSorting/utils/build-sorting-regex.ts new file mode 100644 index 0000000000..c9a1196e1a --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSorting/utils/build-sorting-regex.ts @@ -0,0 +1,5 @@ +export function buildSortingRegex(prefix: string): RegExp { + const regexp = new RegExp(`(${prefix}_(.+))=(asc|desc)`, 'g'); + + return regexp; +} diff --git a/apps/workflows-dashboard/src/common/types/sorting-params.types.ts b/apps/workflows-dashboard/src/common/types/sorting-params.types.ts new file mode 100644 index 0000000000..18ef1fbbfb --- /dev/null +++ b/apps/workflows-dashboard/src/common/types/sorting-params.types.ts @@ -0,0 +1,4 @@ +export interface SortingParams { + orderBy?: string; + orderDirection?: 'asc' | 'desc'; +} diff --git a/apps/workflows-dashboard/src/components/atoms/Avatar/Avatar.tsx b/apps/workflows-dashboard/src/components/atoms/Avatar/Avatar.tsx new file mode 100644 index 0000000000..ccfccd028c --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Avatar/Avatar.tsx @@ -0,0 +1,45 @@ +import * as React from 'react'; +import * as AvatarPrimitive from '@radix-ui/react-avatar'; + +import { cn } from '@app/lib/utils'; + +const Avatar = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Root + ref={ref} + className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)} + {...props} + /> +)); +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Image>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Image + ref={ref} + className={cn('aspect-square h-full w-full', className)} + {...props} + /> +)); +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef< + React.ElementRef<typeof AvatarPrimitive.Fallback>, + React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> +>(({ className, ...props }, ref) => ( + <AvatarPrimitive.Fallback + ref={ref} + className={cn( + 'bg-muted flex h-full w-full items-center justify-center rounded-full', + className, + )} + {...props} + /> +)); +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/apps/workflows-dashboard/src/components/atoms/Avatar/index.ts b/apps/workflows-dashboard/src/components/atoms/Avatar/index.ts new file mode 100644 index 0000000000..27700fe3f3 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Avatar/index.ts @@ -0,0 +1 @@ +export * from './Avatar'; diff --git a/apps/workflows-dashboard/src/components/atoms/Dropdown/Dropdown.tsx b/apps/workflows-dashboard/src/components/atoms/Dropdown/Dropdown.tsx new file mode 100644 index 0000000000..7ada347e5d --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Dropdown/Dropdown.tsx @@ -0,0 +1,185 @@ +import * as React from 'react'; +import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; +import { Check, ChevronRight, Circle } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + <DropdownMenuPrimitive.SubTrigger + ref={ref} + className={cn( + 'focus:bg-accent data-[state=open]:bg-accent flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none', + inset && 'pl-8', + className, + )} + {...props} + > + {children} + <ChevronRight className="ml-auto h-4 w-4" /> + </DropdownMenuPrimitive.SubTrigger> +)); +DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.SubContent + ref={ref} + className={cn( + 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg', + className, + )} + {...props} + /> +)); +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> +>(({ className, sideOffset = 4, ...props }, ref) => ( + <DropdownMenuPrimitive.Portal> + <DropdownMenuPrimitive.Content + ref={ref} + sideOffset={sideOffset} + className={cn( + 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md', + className, + )} + {...props} + /> + </DropdownMenuPrimitive.Portal> +)); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Item + ref={ref} + className={cn( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + inset && 'pl-8', + className, + )} + {...props} + /> +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> +>(({ className, children, checked, ...props }, ref) => ( + <DropdownMenuPrimitive.CheckboxItem + ref={ref} + className={cn( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + checked={checked} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Check className="h-4 w-4" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.CheckboxItem> +)); +DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> +>(({ className, children, ...props }, ref) => ( + <DropdownMenuPrimitive.RadioItem + ref={ref} + className={cn( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Circle className="h-2 w-2 fill-current" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.RadioItem> +)); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Label>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Label + ref={ref} + className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)} + {...props} + /> +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.Separator + ref={ref} + className={cn('bg-muted -mx-1 my-1 h-px', className)} + {...props} + /> +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => { + return ( + <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} /> + ); +}; +DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +}; diff --git a/apps/workflows-dashboard/src/components/atoms/Dropdown/index.ts b/apps/workflows-dashboard/src/components/atoms/Dropdown/index.ts new file mode 100644 index 0000000000..2f29bad4e6 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Dropdown/index.ts @@ -0,0 +1 @@ +export * from './Dropdown'; diff --git a/apps/workflows-dashboard/src/components/atoms/Input/Input.tsx b/apps/workflows-dashboard/src/components/atoms/Input/Input.tsx new file mode 100644 index 0000000000..e724d08473 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Input/Input.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; + +import { cn } from '@app/lib/utils'; + +export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {} + +const Input = React.forwardRef<HTMLInputElement, InputProps>( + ({ className, type, ...props }, ref) => { + return ( + <input + type={type} + className={cn( + 'border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring flex h-10 w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', + className, + )} + ref={ref} + {...props} + /> + ); + }, +); +Input.displayName = 'Input'; + +export { Input }; diff --git a/apps/workflows-dashboard/src/components/atoms/Input/index.ts b/apps/workflows-dashboard/src/components/atoms/Input/index.ts new file mode 100644 index 0000000000..ba9fe7ebc6 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Input/index.ts @@ -0,0 +1 @@ +export * from './Input'; diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx b/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx new file mode 100644 index 0000000000..2425e75196 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx @@ -0,0 +1,41 @@ +import { PieChartData } from '@app/components/atoms/PieChart/types'; +import { calculateChartDataSum } from '@app/components/atoms/PieChart/utils/calculateChartDataSum'; +import { useMemo } from 'react'; +import * as RechartPrimitive from 'recharts'; + +interface Props { + size: number; + outerRadius: number; + innerRadius: number; + data: PieChartData[]; +} + +export const PieChart = ({ size, data, outerRadius, innerRadius }: Props) => { + const totalValue = useMemo(() => calculateChartDataSum(data), [data]); + + return ( + <RechartPrimitive.PieChart + width={size} + height={size} + margin={{ top: 0, right: 0, bottom: 0, left: 0 }} + > + <RechartPrimitive.Pie + data={data} + outerRadius={outerRadius} + innerRadius={innerRadius} + fill="#000000" + dataKey="value" + > + {data.map((data, index) => ( + <RechartPrimitive.Cell + key={`cell-${index}`} + fill={data.fillColor ? data.fillColor : undefined} + /> + ))} + <RechartPrimitive.Label position={'center'} style={{ fontWeight: 'bold' }}> + {totalValue} + </RechartPrimitive.Label> + </RechartPrimitive.Pie> + </RechartPrimitive.PieChart> + ); +}; diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/index.ts b/apps/workflows-dashboard/src/components/atoms/PieChart/index.ts new file mode 100644 index 0000000000..eca21743b1 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/index.ts @@ -0,0 +1,2 @@ +export * from './PieChart'; +export * from './types'; diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts b/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts new file mode 100644 index 0000000000..9fdf107c38 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts @@ -0,0 +1,5 @@ +export interface PieChartData { + status: string; + value: number; + fillColor: string; +} diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/utils/calculateChartDataSum.ts b/apps/workflows-dashboard/src/components/atoms/PieChart/utils/calculateChartDataSum.ts new file mode 100644 index 0000000000..de7688df56 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/utils/calculateChartDataSum.ts @@ -0,0 +1,7 @@ +import { PieChartData } from '@app/components/atoms/PieChart/types'; + +export function calculateChartDataSum(chartData: PieChartData[]) { + const sum = chartData.reduce((sum, dataItem) => (sum += dataItem.value), 0); + + return sum; +} diff --git a/apps/workflows-dashboard/src/components/atoms/Tabs/Tabs.tsx b/apps/workflows-dashboard/src/components/atoms/Tabs/Tabs.tsx new file mode 100644 index 0000000000..775dea6049 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Tabs/Tabs.tsx @@ -0,0 +1,53 @@ +import * as React from 'react'; +import * as TabsPrimitive from '@radix-ui/react-tabs'; + +import { cn } from '@app/lib/utils'; + +const Tabs = TabsPrimitive.Root; + +const TabsList = React.forwardRef< + React.ElementRef<typeof TabsPrimitive.List>, + React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> +>(({ className, ...props }, ref) => ( + <TabsPrimitive.List + ref={ref} + className={cn( + 'bg-muted text-muted-foreground inline-flex h-10 items-center justify-center rounded-md p-1', + className, + )} + {...props} + /> +)); +TabsList.displayName = TabsPrimitive.List.displayName; + +const TabsTrigger = React.forwardRef< + React.ElementRef<typeof TabsPrimitive.Trigger>, + React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> +>(({ className, ...props }, ref) => ( + <TabsPrimitive.Trigger + ref={ref} + className={cn( + 'ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm', + className, + )} + {...props} + /> +)); +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; + +const TabsContent = React.forwardRef< + React.ElementRef<typeof TabsPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> +>(({ className, ...props }, ref) => ( + <TabsPrimitive.Content + ref={ref} + className={cn( + 'ring-offset-background focus-visible:ring-ring mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2', + className, + )} + {...props} + /> +)); +TabsContent.displayName = TabsPrimitive.Content.displayName; + +export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/apps/workflows-dashboard/src/components/atoms/Tabs/index.ts b/apps/workflows-dashboard/src/components/atoms/Tabs/index.ts new file mode 100644 index 0000000000..856dbbb347 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Tabs/index.ts @@ -0,0 +1 @@ +export * from './Tabs'; diff --git a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx index c1a7777c66..436a622b01 100644 --- a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx +++ b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx @@ -1,15 +1,21 @@ -import { Outlet } from 'react-router-dom'; +import { Header } from '@app/components/molecules/Header'; import { QueryParamProvider } from 'use-query-params'; import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; -export const DashboardLayout = () => { +interface Props { + pageName: string; + children: React.ReactNode; +} + +export const DashboardLayout = ({ pageName, children }: Props) => { return ( <div className="box-border flex h-screen flex-col"> - {/* <div>Navigation</div> */} - <div className="flex-1 overflow-auto"> - <QueryParamProvider adapter={ReactRouter6Adapter}> - <Outlet /> - </QueryParamProvider> + <Header /> + <div className="flex flex-1 flex-col gap-4 p-6"> + <h2 className="text-3xl font-bold tracking-tight ">{pageName}</h2> + <div className="flex-1 overflow-auto"> + <QueryParamProvider adapter={ReactRouter6Adapter}>{children}</QueryParamProvider> + </div> </div> </div> ); diff --git a/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx b/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx new file mode 100644 index 0000000000..a516dfbc62 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx @@ -0,0 +1,22 @@ +import { Input } from '@app/components/atoms/Input'; +import { headerNavigationLinks } from '@app/components/molecules/Header/header-navigation-links'; +import { Navigation } from '@app/components/molecules/Navigation'; +import { UserNavigation } from '@app/components/molecules/UserNavigation'; + +export const Header = () => { + return ( + <div className="border-b"> + <div className="flex h-16 flex-nowrap items-center justify-between px-4"> + <div className="flex flex-1 gap-4"> + <UserNavigation /> + <Navigation items={headerNavigationLinks} /> + </div> + <div className="flex gap-4"> + <div> + <Input placeholder="Search" /> + </div> + </div> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/molecules/Header/header-navigation-links.ts b/apps/workflows-dashboard/src/components/molecules/Header/header-navigation-links.ts new file mode 100644 index 0000000000..2963b14c96 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Header/header-navigation-links.ts @@ -0,0 +1,12 @@ +import { NavigationLink } from '@app/components/molecules/Navigation'; + +export const headerNavigationLinks: NavigationLink[] = [ + { + path: '/overview', + label: 'Overview', + }, + { + path: '/workflows', + label: 'Workflows', + }, +]; diff --git a/apps/workflows-dashboard/src/components/molecules/Header/index.ts b/apps/workflows-dashboard/src/components/molecules/Header/index.ts new file mode 100644 index 0000000000..266dec8a1b --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Header/index.ts @@ -0,0 +1 @@ +export * from './Header'; diff --git a/apps/workflows-dashboard/src/components/molecules/Navigation/Navigation.tsx b/apps/workflows-dashboard/src/components/molecules/Navigation/Navigation.tsx new file mode 100644 index 0000000000..d271383639 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Navigation/Navigation.tsx @@ -0,0 +1,30 @@ +import { memo } from 'react'; +import { NavLink } from 'react-router-dom'; + +export interface NavigationLink { + path: string; + label: string; +} + +interface Props { + items: NavigationLink[]; +} + +export const Navigation = memo(({ items }: Props) => { + return ( + <nav className="flex items-center space-x-4 lg:space-x-6"> + {items.map((navItem, index) => ( + <NavLink + key={`nav-item-${index}`} + className={({ isActive }) => + isActive + ? 'hover:text-primary text-sm font-medium transition-colors' + : 'text-muted-foreground hover:text-primary text-sm font-medium transition-colors' + } + to={navItem.path} + children={navItem.label} + /> + ))} + </nav> + ); +}); diff --git a/apps/workflows-dashboard/src/components/molecules/Navigation/index.ts b/apps/workflows-dashboard/src/components/molecules/Navigation/index.ts new file mode 100644 index 0000000000..95e14a93f1 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/Navigation/index.ts @@ -0,0 +1 @@ +export * from './Navigation'; diff --git a/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx b/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx new file mode 100644 index 0000000000..b8a1f3056b --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx @@ -0,0 +1,65 @@ +import { CreditCard, LogOut, PlusCircle, Settings, User } from 'lucide-react'; + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger, +} from '@app/components/atoms/Dropdown'; +import { Button } from '@app/components/atoms/Button'; +import { Avatar, AvatarFallback, AvatarImage } from '@app/components/atoms/Avatar'; + +export function UserNavigation() { + return ( + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" className="relative h-8 w-8 rounded-full"> + <Avatar className="h-6 w-6"> + <AvatarImage src="/avatar.png" alt="@shadcn" /> + <AvatarFallback>SC</AvatarFallback> + </Avatar> + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent className="w-56" align="end" forceMount> + <DropdownMenuLabel className="font-normal"> + <div className="flex flex-col space-y-1"> + <p className="text-sm font-medium leading-none">example</p> + <p className="text-muted-foreground text-xs leading-none">m@example.com</p> + </div> + </DropdownMenuLabel> + <DropdownMenuSeparator /> + <DropdownMenuGroup> + <DropdownMenuItem> + <User className="mr-2 h-4 w-4" /> + <span>Profile</span> + <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut> + </DropdownMenuItem> + <DropdownMenuItem> + <CreditCard className="mr-2 h-4 w-4" /> + <span>Billing</span> + <DropdownMenuShortcut>⌘B</DropdownMenuShortcut> + </DropdownMenuItem> + <DropdownMenuItem> + <Settings className="mr-2 h-4 w-4" /> + <span>Settings</span> + <DropdownMenuShortcut>⌘S</DropdownMenuShortcut> + </DropdownMenuItem> + <DropdownMenuItem> + <PlusCircle className="mr-2 h-4 w-4" /> + <span>New Team</span> + </DropdownMenuItem> + </DropdownMenuGroup> + <DropdownMenuSeparator /> + <DropdownMenuItem> + <LogOut className="mr-2 h-4 w-4" /> + <span>Log out</span> + <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut> + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + ); +} diff --git a/apps/workflows-dashboard/src/components/molecules/UserNavigation/index.ts b/apps/workflows-dashboard/src/components/molecules/UserNavigation/index.ts new file mode 100644 index 0000000000..e620fb00b3 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/UserNavigation/index.ts @@ -0,0 +1 @@ +export * from './UserNavigation'; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx index 90046b9cad..9fb3eec5dd 100644 --- a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx @@ -8,21 +8,48 @@ import { } from '@app/components/atoms/Table'; import { memo } from 'react'; import * as classnames from 'classnames'; -import { useReactTable, flexRender, getCoreRowModel } from '@tanstack/react-table'; +import { useReactTable, flexRender, getCoreRowModel, SortingState } from '@tanstack/react-table'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; import { defaultColumns } from '@app/components/molecules/WorkflowsTable/columns'; import Scrollbars from 'react-custom-scrollbars'; +export interface WorkflowsTableSorting { + key: string; + direction: 'asc' | 'desc'; +} + interface Props { items: IWorkflow[]; + sorting?: WorkflowsTableSorting; isFetching?: boolean; + onSort: (key: string, direction: 'asc' | 'desc') => void; } -export const WorkflowsTable = memo(({ items, isFetching }: Props) => { +export const WorkflowsTable = memo(({ items, isFetching, sorting, onSort }: Props) => { const table = useReactTable({ columns: defaultColumns, data: items, enableColumnResizing: true, + manualSorting: false, + state: { + sorting: sorting + ? [ + { + id: sorting.key, + desc: sorting.direction === 'desc', + }, + ] + : [], + }, + onSortingChange: updater => { + if (typeof updater === 'function') { + const newSortingValue = updater(table.getState().sorting); + table.setSorting(newSortingValue); + } else { + const sortingState = updater as SortingState; + onSort(sortingState[0].id, sortingState[0].desc ? 'desc' : 'asc'); + } + }, getCoreRowModel: getCoreRowModel(), }); @@ -65,13 +92,13 @@ export const WorkflowsTable = memo(({ items, isFetching }: Props) => { return ( <TableCell key={cell.id} - className="max-w-1/4 w-1/4 " + className="max-w-1/4 w-1/4 whitespace-nowrap" title={String(cell.getValue())} style={{ minWidth: `${cell.column.getSize()}px`, }} > - <div className="line-clamp-2 overflow-hidden text-ellipsis break-all"> + <div className="line-clamp-1 overflow-hidden text-ellipsis break-all"> {flexRender(cell.column.columnDef.cell, cell.getContext())} </div> </TableCell> diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx index 0db8b47961..7ec811bcec 100644 --- a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx @@ -1,4 +1,5 @@ import { HealthIndicator } from '@app/components/atoms/HealthIndicator'; +import { DataTableColumnHeader } from '@app/components/molecules/WorkflowsTable/components/DataTableColumnHeader'; import { formatDate } from '@app/components/molecules/WorkflowsTable/utils/format-date'; import { IWorkflow, IWorkflowAssignee } from '@app/domains/workflows/api/workflow'; import { getWorkflowHealthStatus } from '@app/utils/get-workflow-health-status'; @@ -14,8 +15,9 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ { accessorKey: 'workflowDefinitionName', cell: info => info.getValue<string>(), - header: 'Workflow Definition Name', - size: 200, + header: ({ column }) => ( + <DataTableColumnHeader column={column} title="Workflow Definition Name" /> + ), }, { accessorKey: 'status', @@ -25,13 +27,13 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ {info.getValue<string>() || ''} </div> ), - header: () => 'Status', + header: ({ column }) => <DataTableColumnHeader column={column} title="Status" />, size: 125, }, { accessorKey: 'state', cell: info => info.getValue<string>(), - header: 'State', + header: ({ column }) => <DataTableColumnHeader column={column} title="State" />, size: 125, }, { @@ -42,7 +44,7 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ return `${assignee.firstName} ${assignee.lastName}`; }, - header: 'Assign To', + header: ({ column }) => <DataTableColumnHeader column={column} title="Assign To" />, size: 125, }, { @@ -55,17 +57,17 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ { accessorKey: 'resolvedAt', cell: info => (info.getValue<Date>() ? formatDate(info.getValue<Date>()) : '-'), - header: 'Resolved At', + header: ({ column }) => <DataTableColumnHeader column={column} title="Resolved At" />, }, { accessorKey: 'createdBy', cell: info => info.getValue<string>(), - header: 'Created By', + header: ({ column }) => <DataTableColumnHeader column={column} title="Created By" />, }, { accessorKey: 'createdAt', cell: info => formatDate(info.getValue<Date>()), - header: 'Created At', + header: ({ column }) => <DataTableColumnHeader column={column} title="Created At" />, size: 240, }, ]; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx new file mode 100644 index 0000000000..18aa463ef8 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx @@ -0,0 +1,61 @@ +import { Column } from '@tanstack/react-table'; +import { ChevronsUpDown, EyeOff, SortAsc, SortDesc } from 'lucide-react'; + +import { cn } from '@app/lib/utils'; +import { Button } from '@app/components/atoms/Button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@app/components/atoms/Dropdown'; + +interface DataTableColumnHeaderProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> { + column: Column<TData, TValue>; + title: string; +} + +export function DataTableColumnHeader<TData, TValue>({ + column, + title, + className, +}: DataTableColumnHeaderProps<TData, TValue>) { + if (!column.getCanSort()) { + return <div className={cn(className)}>{title}</div>; + } + + return ( + <div className={cn('flex items-center space-x-2 whitespace-nowrap', className)}> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size="sm" className="data-[state=open]:bg-accent -ml-3 h-8"> + <span>{title}</span> + {column.getIsSorted() === 'desc' ? ( + <SortDesc className="ml-2 h-4 w-4" /> + ) : column.getIsSorted() === 'asc' ? ( + <SortAsc className="ml-2 h-4 w-4" /> + ) : ( + <ChevronsUpDown className="ml-2 h-4 w-4" /> + )} + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="start"> + <DropdownMenuItem onClick={() => column.toggleSorting(false)}> + <SortAsc className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Asc + </DropdownMenuItem> + <DropdownMenuItem onClick={() => column.toggleSorting(true)}> + <SortDesc className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Desc + </DropdownMenuItem> + <DropdownMenuSeparator /> + <DropdownMenuItem onClick={() => column.toggleVisibility(false)}> + <EyeOff className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Hide + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + </div> + ); +} diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/index.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/index.ts new file mode 100644 index 0000000000..6aa469ad2b --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/DataTableColumnHeader/index.ts @@ -0,0 +1 @@ +export * from './DataTableColumnHeader'; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts index 3417027d9b..e45d6b5f67 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts @@ -1,9 +1,10 @@ +import { SortingParams } from '@app/common/types/sorting-params.types'; import { fetchWorkflows, GetWorkflowsDto } from '@app/domains/workflows/api/workflow'; import { createQueryKeys } from '@lukemorales/query-key-factory'; export const workflowKeys = createQueryKeys('workflows', { - list: (query: GetWorkflowsDto) => ({ - queryKey: [{ query }], - queryFn: () => fetchWorkflows(query), + list: (query: GetWorkflowsDto, sorting: SortingParams) => ({ + queryKey: [{ query, sorting }], + queryFn: () => fetchWorkflows(query, sorting), }), }); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts index 88d653f1d5..c5b34ff02f 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts @@ -1,12 +1,19 @@ +import { SortingParams } from '@app/common/types/sorting-params.types'; import { GetWorkflowResponse, GetWorkflowsDto, } from '@app/domains/workflows/api/workflow/workflow.types'; import { request } from '@app/lib/request'; -export async function fetchWorkflows(query: GetWorkflowsDto): Promise<GetWorkflowResponse> { +export async function fetchWorkflows( + query: GetWorkflowsDto, + sortingParams: SortingParams, +): Promise<GetWorkflowResponse> { const result = await request.get<GetWorkflowResponse>('/external/workflows', { - params: query, + params: { + ...query, + ...sortingParams, + }, }); return result.data; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts index 70cd95edc8..eaed13d324 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts @@ -28,4 +28,6 @@ export interface GetWorkflowsDto { status?: IWorkflowStatus[]; page?: number; limit?: number; + orderBy?: string; + orderDirection?: 'asc' | 'desc'; } diff --git a/apps/workflows-dashboard/src/index.css b/apps/workflows-dashboard/src/index.css index 518c966f3f..a981db0980 100644 --- a/apps/workflows-dashboard/src/index.css +++ b/apps/workflows-dashboard/src/index.css @@ -6,16 +6,16 @@ @layer base { :root { --background: 0 0% 100%; - --foreground: 222.2 47.4% 11.2%; + --foreground: 222.2 84% 4.9%; --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; --popover: 0 0% 100%; - --popover-foreground: 222.2 47.4% 11.2%; + --popover-foreground: 222.2 84% 4.9%; --card: 0 0% 100%; - --card-foreground: 222.2 47.4% 11.2%; + --card-foreground: 222.2 84% 4.9%; --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; @@ -29,7 +29,7 @@ --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 100% 50%; + --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; --ring: 215 20.2% 65.1%; @@ -38,36 +38,34 @@ } .dark { - --background: 224 71% 4%; - --foreground: 213 31% 91%; + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; - --muted: 223 47% 11%; - --muted-foreground: 215.4 16.3% 56.9%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; - --popover: 224 71% 4%; - --popover-foreground: 215 20.2% 65.1%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; - --card: 224 71% 4%; - --card-foreground: 213 31% 91%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; - --border: 216 34% 17%; - --input: 216 34% 17%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 1.2%; + --primary-foreground: 222.2 47.4% 11.2%; - --secondary: 222.2 47.4% 11.2%; + --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; - --accent: 216 34% 17%; + --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; - --destructive: 0 63% 31%; - --destructive-foreground: 210 40% 98%; - - --ring: 216 34% 17%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 85.7% 97.3%; - --radius: 0.5rem; + --ring: 217.2 32.6% 17.5%; } } @@ -76,7 +74,6 @@ @apply border-border; } body { - @apply bg-background text-foreground; - font-feature-settings: 'rlig' 1, 'calt' 1; + @apply bg-background text-foreground font-inter; } } diff --git a/apps/workflows-dashboard/src/pages/Overview/Overview.tsx b/apps/workflows-dashboard/src/pages/Overview/Overview.tsx new file mode 100644 index 0000000000..cbd9ae8812 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/Overview.tsx @@ -0,0 +1,92 @@ +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from '@app/components/atoms/Card'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@app/components/atoms/Tabs'; +import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; +import { OverviewChartMock } from '@app/pages/Overview/components/OverviewChartMock'; +import { RecentSalesMock } from '@app/pages/Overview/components/RecentSalesMock'; +import { Activity, CreditCard, DollarSign, Users } from 'lucide-react'; + +export const Overview = () => { + return ( + <DashboardLayout pageName="Overview"> + <div className="flex h-full flex-col gap-4"> + <Tabs defaultValue="overview" className="flex flex-1 flex-col"> + <TabsList className="flex flex-row justify-start self-start"> + <TabsTrigger value="overview">Overview</TabsTrigger> + <TabsTrigger value="analytics">Analytics</TabsTrigger> + <TabsTrigger value="reports">Reports</TabsTrigger> + <TabsTrigger value="notifications">Notifications</TabsTrigger> + </TabsList> + <TabsContent value="overview" className="flex flex-1 flex-col space-y-4"> + <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4"> + <Card> + <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> + <CardTitle className="text-sm font-medium">Total Revenue</CardTitle> + <DollarSign className="text-muted-foreground h-4 w-4" /> + </CardHeader> + <CardContent> + <div className="text-2xl font-bold">$45,231.89</div> + <p className="text-muted-foreground text-xs">+20.1% from last month</p> + </CardContent> + </Card> + <Card> + <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> + <CardTitle className="text-sm font-medium">Subscriptions</CardTitle> + <Users className="text-muted-foreground h-4 w-4" /> + </CardHeader> + <CardContent> + <div className="text-2xl font-bold">+2350</div> + <p className="text-muted-foreground text-xs">+180.1% from last month</p> + </CardContent> + </Card> + <Card> + <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> + <CardTitle className="text-sm font-medium">Sales</CardTitle> + <CreditCard className="text-muted-foreground h-4 w-4" /> + </CardHeader> + <CardContent> + <div className="text-2xl font-bold">+12,234</div> + <p className="text-muted-foreground text-xs">+19% from last month</p> + </CardContent> + </Card> + <Card> + <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> + <CardTitle className="text-sm font-medium">Active Now</CardTitle> + <Activity className="text-muted-foreground h-4 w-4" /> + </CardHeader> + <CardContent> + <div className="text-2xl font-bold">+573</div> + <p className="text-muted-foreground text-xs">+201 since last hour</p> + </CardContent> + </Card> + </div> + <div className="grid flex-1 gap-4 md:grid-cols-2 lg:grid-cols-7"> + <Card className="col-span-4 flex flex-col"> + <CardHeader> + <CardTitle>Overview</CardTitle> + </CardHeader> + <CardContent className="flex-1 pl-2"> + <OverviewChartMock /> + </CardContent> + </Card> + <Card className="col-span-3"> + <CardHeader> + <CardTitle>Recent Sales</CardTitle> + <CardDescription>You made 265 sales this month.</CardDescription> + </CardHeader> + <CardContent> + <RecentSalesMock /> + </CardContent> + </Card> + </div> + </TabsContent> + </Tabs> + </div> + </DashboardLayout> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx new file mode 100644 index 0000000000..00de3f38eb --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx @@ -0,0 +1,72 @@ +'use client'; + +import { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from 'recharts'; + +const data = [ + { + name: 'Jan', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Feb', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Mar', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Apr', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'May', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Jun', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Jul', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Aug', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Sep', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Oct', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Nov', + total: Math.floor(Math.random() * 5000) + 1000, + }, + { + name: 'Dec', + total: Math.floor(Math.random() * 5000) + 1000, + }, +]; + +export function OverviewChartMock() { + return ( + <ResponsiveContainer width="100%" height={'100%'}> + <BarChart data={data}> + <XAxis dataKey="name" stroke="#888888" fontSize={12} tickLine={false} axisLine={false} /> + <YAxis + stroke="#888888" + fontSize={12} + tickLine={false} + axisLine={false} + tickFormatter={value => `$${value}`} + /> + <Bar dataKey="total" fill="#adfa1d" radius={[4, 4, 0, 0]} /> + </BarChart> + </ResponsiveContainer> + ); +} diff --git a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts new file mode 100644 index 0000000000..0635451a8b --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts @@ -0,0 +1 @@ +export * from './OverviewChartMock'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx new file mode 100644 index 0000000000..f9014e89d5 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx @@ -0,0 +1,63 @@ +import { Avatar, AvatarFallback, AvatarImage } from '@app/components/atoms/Avatar'; + +export function RecentSalesMock() { + return ( + <div className="space-y-8"> + <div className="flex items-center"> + <Avatar className="h-9 w-9"> + <AvatarImage src="/avatars/01.png" alt="Avatar" /> + <AvatarFallback>OM</AvatarFallback> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">Olivia Martin</p> + <p className="text-muted-foreground text-sm">olivia.martin@email.com</p> + </div> + <div className="ml-auto font-medium">+$1,999.00</div> + </div> + <div className="flex items-center"> + <Avatar className="flex h-9 w-9 items-center justify-center space-y-0 border"> + <AvatarImage src="/avatar.png" alt="Avatar" /> + <AvatarFallback>JL</AvatarFallback> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">Jackson Lee</p> + <p className="text-muted-foreground text-sm">jackson.lee@email.com</p> + </div> + <div className="ml-auto font-medium">+$39.00</div> + </div> + <div className="flex items-center"> + <Avatar className="h-9 w-9"> + <AvatarImage src="/avatar.png" alt="Avatar" /> + <AvatarFallback>IN</AvatarFallback> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">Isabella Nguyen</p> + <p className="text-muted-foreground text-sm">isabella.nguyen@email.com</p> + </div> + <div className="ml-auto font-medium">+$299.00</div> + </div> + <div className="flex items-center"> + <Avatar className="h-9 w-9"> + <AvatarImage src="/avatar.png" alt="Avatar" /> + <AvatarFallback>WK</AvatarFallback> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">William Kim</p> + <p className="text-muted-foreground text-sm">will@email.com</p> + </div> + <div className="ml-auto font-medium">+$99.00</div> + </div> + <div className="flex items-center"> + <Avatar className="h-9 w-9"> + <AvatarImage src="/avatar.png" alt="Avatar" /> + <AvatarFallback>SD</AvatarFallback> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">Sofia Davis</p> + <p className="text-muted-foreground text-sm">sofia.davis@email.com</p> + </div> + <div className="ml-auto font-medium">+$39.00</div> + </div> + </div> + ); +} diff --git a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts new file mode 100644 index 0000000000..9d1db08b25 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts @@ -0,0 +1 @@ +export * from './RecentSalesMock'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts similarity index 100% rename from apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/index.ts rename to apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts similarity index 100% rename from apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/types.ts rename to apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts similarity index 81% rename from apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts rename to apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts index 67caffa654..219a4f359a 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsMetric/useWorkflowsMetric.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts @@ -1,5 +1,5 @@ import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; -import { WorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric/types'; +import { WorkflowsMetric } from '@app/pages/Overview/hooks/useWorkflowsMetric/types'; import { useQuery } from '@tanstack/react-query'; export function useWorkflowsMetric() { diff --git a/apps/workflows-dashboard/src/pages/Overview/index.ts b/apps/workflows-dashboard/src/pages/Overview/index.ts new file mode 100644 index 0000000000..64d1896b62 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/index.ts @@ -0,0 +1 @@ +export * from './Overview'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx index 0dab44f582..c09cfe7826 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx @@ -4,18 +4,24 @@ import { FilterComponent } from '@app/pages/Workflows/components/organisms/Workf import { useWorkflows } from '@app/pages/Workflows/hooks/useWorkflows'; import { useWorkflowsFilters } from '@app/pages/Workflows/hooks/useWorkflowsFilters'; import { useCallback } from 'react'; -import { WorkflowsList } from '@app/pages/Workflows/components/molecules/WorkflowsList'; +import { WorkflowsList } from '@app/pages/Workflows/components/organisms/WorkflowsList'; import { WorkflowFilters } from '@app/pages/Workflows/components/organisms/WorkflowFilters'; import { WorkflowsLayout } from '@app/pages/Workflows/components/layouts/WorkflowsLayout'; +import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; import { WorkflowMetrics } from '@app/pages/Workflows/components/organisms/WorkflowMetrics'; -import { useWorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric'; +import { useSorting } from '@app/common/hooks/useSorting'; const filterComponents: FilterComponent[] = [StatusFilterComponent]; export const Workflows = () => { const { filters, setFilters } = useWorkflowsFilters(); - const { data, isLoading, isFetching } = useWorkflows(filters); - const { data: metric, isLoading: isLoadingMetric } = useWorkflowsMetric(); + const { sortingKey, sortingDirection } = useSorting('order_by'); + const { data, isLoading, isFetching } = useWorkflows( + filters, + sortingKey && sortingDirection + ? { orderBy: sortingKey, orderDirection: sortingDirection } + : undefined, + ); const handlePageChange = useCallback( (nextPage: number) => { @@ -25,21 +31,23 @@ export const Workflows = () => { ); return ( - <WorkflowsLayout> - <WorkflowsLayout.Header> - <WorkflowMetrics metric={metric} isLoading={isLoadingMetric} /> - <WorkflowFilters components={filterComponents} values={filters} onChange={setFilters} /> - </WorkflowsLayout.Header> - <WorkflowsLayout.Main> - <WorkflowsList workflows={data.results} isLoading={isLoading} isFetching={isFetching} /> - </WorkflowsLayout.Main> - <WorkflowsLayout.Footer> - <Pagination - totalPages={data.meta.pages || 1} - page={filters.page || 1} - onChange={handlePageChange} - /> - </WorkflowsLayout.Footer> - </WorkflowsLayout> + <DashboardLayout pageName="Workflows"> + <WorkflowsLayout> + <WorkflowsLayout.Header> + <WorkflowMetrics /> + <WorkflowFilters components={filterComponents} values={filters} onChange={setFilters} /> + </WorkflowsLayout.Header> + <WorkflowsLayout.Main> + <WorkflowsList workflows={data.results} isLoading={isLoading} isFetching={isFetching} /> + </WorkflowsLayout.Main> + <WorkflowsLayout.Footer> + <Pagination + totalPages={data.meta.pages || 1} + page={filters.page || 1} + onChange={handlePageChange} + /> + </WorkflowsLayout.Footer> + </WorkflowsLayout> + </DashboardLayout> ); }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx index 47be8df802..46d592c4d9 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Footer.tsx @@ -3,5 +3,5 @@ interface Props { } export const Footer = ({ children }: Props) => { - return <footer className="flex justify-center p-4">{children}</footer>; + return <footer className="flex justify-center">{children}</footer>; }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx index 417f7af394..29a147aeda 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Header.tsx @@ -3,5 +3,5 @@ interface Props { } export const Header = ({ children }: Props) => { - return <header className="flex flex-col gap-4 p-4">{children}</header>; + return <div className="flex flex-col gap-4">{children}</div>; }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx index 0d7e71ab71..efff452b92 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/Main.tsx @@ -3,5 +3,5 @@ interface Props { } export const Main = ({ children }: Props) => { - return <main className="flex flex-1 overflow-auto pl-4 pr-4">{children}</main>; + return <main className="flex flex-1 overflow-auto">{children}</main>; }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx index 688cac793c..bec58703d0 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsLayout/WorkflowsLayout.tsx @@ -7,7 +7,7 @@ interface Props { } export function WorkflowsLayout({ children }: Props) { - return <div className="flex h-full flex-col">{children}</div>; + return <div className="flex h-full flex-col gap-4">{children}</div>; } WorkflowsLayout.Header = Header; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx deleted file mode 100644 index 994bae9c62..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/WorkflowStatusPieChart.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -import { useMemo } from 'react'; -import { PieChart, Pie, Cell } from 'recharts'; - -export interface WorkflowStatusPieChartData { - status: IWorkflowStatus; - fillColor?: string; - value: number; -} - -const COLORS = ['#00C49F', '#FF8042', '#FFBB28']; - -interface Props { - data: WorkflowStatusPieChartData[]; - size: number; - useLabel?: boolean; -} - -export const WorkflowStatusPieChart = ({ data, size, useLabel }: Props) => { - const chartData = useMemo(() => { - return data.map(data => { - return { - name: data.status, - value: data.value, - }; - }); - }, [data]); - - return ( - <PieChart width={size} height={size}> - <Pie - data={chartData} - cx="50%" - cy="50%" - labelLine={false} - label={useLabel ? true : undefined} - outerRadius={80} - fill="#000000" - dataKey="value" - > - {data.map((data, index) => ( - <Cell - key={`cell-${index}`} - fill={data.fillColor ? data.fillColor : COLORS[index % COLORS.length]} - /> - ))} - </Pie> - </PieChart> - ); -}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts deleted file mode 100644 index e1fed7bdc8..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './WorkflowStatusPieChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx index 4f8a87f015..453de78930 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx @@ -1,44 +1,39 @@ -import { Card, CardContent, CardTitle } from '@app/components/atoms/Card'; +import { Card, CardContent } from '@app/components/atoms/Card'; import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { useWorkflowsMetric } from '@app/pages/Overview/hooks/useWorkflowsMetric'; +import { sortWorkflowChartDataByStatus } from '@app/pages/Workflows/components/organisms/WorkflowMetrics/helpers'; import { - WorkflowStatusPieChart, - WorkflowStatusPieChartData, -} from '@app/pages/Workflows/components/molecules/WorkflowStatusPieChart'; -import { WorkflowsMetric } from '@app/pages/Workflows/hooks/useWorkflowsMetric/types'; + getChartColorByWorkflowStatus, + getChartLabelByStatus, + WorkflowStatusChart, + WorkflowStatusChartData, +} from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; import { useMemo } from 'react'; -interface Props { - isLoading: boolean; - metric: WorkflowsMetric | null; -} +export const WorkflowMetrics = () => { + const { data: metric } = useWorkflowsMetric(); -export const WorkflowMetrics = ({ isLoading, metric }: Props) => { - const pieChartData: WorkflowStatusPieChartData[] = useMemo(() => { + const pieChartData: WorkflowStatusChartData[] = useMemo(() => { if (!metric) return []; - return Object.entries(metric.status).map(([key, value]) => { + const chartData = Object.entries(metric.status).map(([key, value]) => { return { status: key as IWorkflowStatus, value, + fillColor: getChartColorByWorkflowStatus(key as IWorkflowStatus), + label: getChartLabelByStatus(key as IWorkflowStatus), }; }); + + return sortWorkflowChartDataByStatus(chartData); }, [metric]); return ( - <div className="grid grid-cols-12"> - <div className="flex h-full min-w-[300px] max-w-[300px]"> + <div className="flex"> + <div className="flex h-full "> <Card className="font-inter flex w-full flex-col p-4"> - <CardTitle>Overview</CardTitle> - <CardContent className="flex flex-1 flex-col items-center justify-center p-0"> - <WorkflowStatusPieChart - size={240} - useLabel={isLoading ? false : true} - data={ - isLoading - ? [{ status: 'placeholder' as any, fillColor: 'grey', value: 100 }] - : pieChartData - } - /> + <CardContent className="flex flex-1 flex-col p-0"> + <WorkflowStatusChart size={160} innerRadius={60} outerRadius={80} data={pieChartData} /> </CardContent> </Card> </div> diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts new file mode 100644 index 0000000000..1a0e296627 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts @@ -0,0 +1,22 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; + +// Assigning level to each status +function getSortLevelByStatus(status: IWorkflowStatus) { + if (status === 'completed') return 1; + if (status === 'active') return 2; + if (status === 'failed') return 3; + + return 4; +} + +// sorting data by status level +// lower status levels going first after sort +export function sortWorkflowChartDataByStatus(data: WorkflowStatusChartData[]) { + return [...data].sort((dataA, dataB) => { + const dataASortLevel = getSortLevelByStatus(dataA.status); + const dataBSortLevel = getSortLevelByStatus(dataB.status); + + return dataASortLevel - dataBSortLevel; + }); +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/Label.tsx similarity index 100% rename from apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowStatusPieChart/Label.tsx rename to apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/Label.tsx diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx new file mode 100644 index 0000000000..84dcd741f9 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx @@ -0,0 +1,30 @@ +import { PieChart, PieChartData } from '@app/components/atoms/PieChart'; +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { WorkflowChartDetails } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails'; + +export interface WorkflowStatusChartData extends PieChartData { + status: IWorkflowStatus; + label: string; +} + +export type WorkflowStatusCount = Record<IWorkflowStatus, number>; + +interface Props { + data: WorkflowStatusChartData[]; + size: number; + innerRadius: number; + outerRadius: number; +} + +export const WorkflowStatusChart = ({ data, size, innerRadius, outerRadius }: Props) => { + return ( + <div className="align-center flex flex-row flex-nowrap gap-8"> + <div> + <PieChart data={data} size={size} innerRadius={innerRadius} outerRadius={outerRadius} /> + </div> + <div className="align-center flex flex-col justify-center"> + <WorkflowChartDetails data={data} /> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx new file mode 100644 index 0000000000..9299c98607 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx @@ -0,0 +1,28 @@ +import { calculateChartDataSum } from '@app/components/atoms/PieChart/utils/calculateChartDataSum'; +import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart'; +import { useMemo } from 'react'; + +interface Props { + data: WorkflowStatusChartData[]; +} + +export const WorkflowChartDetails = ({ data }: Props) => { + const totalValue = useMemo(() => calculateChartDataSum(data), [data]); + + return ( + <div className="flex flex-col gap-2"> + {data.map((item, index) => { + const percentOfTotal = ((item.value / totalValue) * 100).toFixed(2); + return ( + <div key={`chart-details-item-${index}`} className="flex flex-row items-center gap-4 "> + <div className={`h-1 w-4 rounded`} style={{ background: item.fillColor }} /> + <div className="flex text-xs"> + <div className="w-14">{percentOfTotal}%</div> + <span className="font-medium">{item.label}</span> + </div> + </div> + ); + })} + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/index.ts new file mode 100644 index 0000000000..e46932c334 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/index.ts @@ -0,0 +1 @@ +export * from './WorkflowChartDetails'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/consts.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/consts.ts new file mode 100644 index 0000000000..612614604f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/consts.ts @@ -0,0 +1,3 @@ +export const GREEN_CHART_HEX_COLOR = '#22c55e'; +export const ORANGE_CHART_HEX_COLOR = '#ea580c'; +export const RED_CHART_HEX_COLOR = '#dc2626'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/helpers.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/helpers.ts new file mode 100644 index 0000000000..b6813b2ed1 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/helpers.ts @@ -0,0 +1,22 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { GREEN_CHART_HEX_COLOR, ORANGE_CHART_HEX_COLOR, RED_CHART_HEX_COLOR } from './consts'; + +export function getChartColorByWorkflowStatus(status: IWorkflowStatus): string { + const fillColorMapByStatus: Record<IWorkflowStatus, string> = { + active: ORANGE_CHART_HEX_COLOR, + completed: GREEN_CHART_HEX_COLOR, + failed: RED_CHART_HEX_COLOR, + }; + + return fillColorMapByStatus[status]; +} + +export function getChartLabelByStatus(status: IWorkflowStatus): string { + const labelMapByStatus: Record<IWorkflowStatus, string> = { + active: 'Active', + completed: 'Completed', + failed: 'Failed', + }; + + return labelMapByStatus[status]; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/index.ts new file mode 100644 index 0000000000..5b3e988ce7 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/index.ts @@ -0,0 +1,3 @@ +export * from './WorkflowStatusChart'; +export * from './consts'; +export * from './helpers'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx similarity index 57% rename from apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx rename to apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx index 275ba2c807..ff4888995f 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/WorkflowsList.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx @@ -1,3 +1,4 @@ +import { useSorting } from '@app/common/hooks/useSorting'; import { LoadingSpinner } from '@app/components/atoms/LoadingSpinner'; import { WorkflowsTable } from '@app/components/molecules/WorkflowsTable'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; @@ -9,11 +10,22 @@ interface Props { } export const WorkflowsList = ({ workflows, isLoading, isFetching }: Props) => { + const { sortingKey, sortingDirection, setSorting } = useSorting(); + return isLoading ? ( <div className="flex w-full justify-center"> <LoadingSpinner /> </div> ) : ( - <WorkflowsTable items={workflows} isFetching={isFetching} /> + <WorkflowsTable + items={workflows} + isFetching={isFetching} + onSort={setSorting} + sorting={ + sortingKey && sortingDirection + ? { key: sortingKey, direction: sortingDirection } + : undefined + } + /> ); }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/index.ts similarity index 100% rename from apps/workflows-dashboard/src/pages/Workflows/components/molecules/WorkflowsList/index.ts rename to apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/index.ts diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts index a01b162cb3..6b131a50f8 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts @@ -1,14 +1,15 @@ +import { SortingParams } from '@app/common/types/sorting-params.types'; import { workflowKeys } from '@app/domains/workflows'; import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; import { useQuery } from '@tanstack/react-query'; -export function useWorkflows(query: WorkflowsFilterValues) { +export function useWorkflows(query: WorkflowsFilterValues, sortingParams?: SortingParams) { const { isFetching, isLoading, data = { results: [], meta: { pages: 0, total: 0 } }, } = useQuery({ - ...workflowKeys.list(query), + ...workflowKeys.list(query, sortingParams || {}), keepPreviousData: true, }); diff --git a/apps/workflows-dashboard/src/router.tsx b/apps/workflows-dashboard/src/router.tsx index 3cfea21ed1..ff7763cc48 100644 --- a/apps/workflows-dashboard/src/router.tsx +++ b/apps/workflows-dashboard/src/router.tsx @@ -1,7 +1,7 @@ import { App } from '@app/App'; -import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; +import { Overview } from '@app/pages/Overview'; import { Workflows } from '@app/pages/Workflows'; -import { createBrowserRouter } from 'react-router-dom'; +import { createBrowserRouter, Navigate } from 'react-router-dom'; export const router = createBrowserRouter([ { @@ -10,13 +10,15 @@ export const router = createBrowserRouter([ children: [ { path: '', - Component: DashboardLayout, - children: [ - { - path: 'workflows', - Component: Workflows, - }, - ], + element: <Navigate to="/overview" replace />, + }, + { + path: 'overview', + Component: Overview, + }, + { + path: 'workflows', + Component: Workflows, }, ], }, diff --git a/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts b/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts index a7e352c5d5..150d6e931f 100644 --- a/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts +++ b/apps/workflows-dashboard/src/utils/calculate-hour-difference.ts @@ -1,4 +1,4 @@ -export function calculateHourDifference(dateA: Date, dateB: Date): number { +export function calculateHourDifference(dateA: Date, dateB: Date) { const diff = Math.abs( Number(new Date(dateB.toISOString())) - Number(new Date(dateA.toISOString())), ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 538ade4c18..bc1f446e46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true @@ -316,9 +316,18 @@ importers: '@lukemorales/query-key-factory': specifier: ^1.0.3 version: 1.2.0(@tanstack/query-core@4.27.0) + '@radix-ui/react-avatar': + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.2 version: 1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.5 + version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-icons': + specifier: ^1.3.0 + version: 1.3.0(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.6 version: 1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) @@ -331,6 +340,9 @@ importers: '@radix-ui/react-slot': specifier: ^1.0.1 version: 1.0.1(react@18.2.0) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) '@tailwindcss/line-clamp': specifier: ^0.4.4 version: 0.4.4(tailwindcss@3.2.7) @@ -385,6 +397,9 @@ importers: use-query-params: specifier: ^2.2.1 version: 2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0) + zod: + specifier: ^3.21.4 + version: 3.21.4 devDependencies: '@types/axios': specifier: ^0.14.0 @@ -4872,13 +4887,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4892,13 +4907,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8938,6 +8953,30 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-avatar@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9ToF7YNex3Ste45LrAeTlKtONI9yVRt/zOS158iilIkW5K/Apeyb/TUQlcEFTEFvWr8Kzdi2ZYrm1/suiXPajQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-checkbox@1.0.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==} peerDependencies: @@ -8996,6 +9035,30 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: @@ -9174,6 +9237,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-direction@1.0.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react': 18.0.37 + react: 18.2.0 + dev: false + /@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} peerDependencies: @@ -9283,6 +9360,33 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: @@ -9416,6 +9520,14 @@ packages: - '@types/react' dev: false + /@radix-ui/react-icons@1.3.0(react@18.2.0): + resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x + dependencies: + react: 18.2.0 + dev: false + /@radix-ui/react-id@1.0.0(react@18.2.0): resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} peerDependencies: @@ -9506,6 +9618,44 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.0.29)(react@18.2.0) dev: false + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.0.37)(react@18.2.0) + dev: false + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} peerDependencies: @@ -9865,6 +10015,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-scroll-area@1.0.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sBX9j8Q+0/jReNObEAveKIGXJtk3xUoSIx4cMKygGtO128QJyVDn01XNOFsyvihKDCTcu7SINzQ2jPAZEhIQtw==} peerDependencies: @@ -10015,6 +10194,34 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.37)(react@18.2.0) + '@types/react': 18.0.37 + '@types/react-dom': 18.0.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: @@ -11098,11 +11305,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.39: - resolution: {integrity: sha512-hio7NEmRJds9AX+4uqt9r/sFDZyCvgCL404coKN6QnkP43JmyreowJG4NzicvB+mvJNLUAviVey6auiPoWlY7A==} + /@storybook/channel-postmessage@7.1.0-alpha.40: + resolution: {integrity: sha512-BzktCTkfAHjPM3pXF+9gqqV9yd95o0q6Yo502n+tnyvQl+LvsGEzVb1UXyaF2Vve0lfcqXz5Ge3W18zcm7x12g==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -11126,11 +11333,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.39: - resolution: {integrity: sha512-VHJ+WXd4YAkuNiE5wpQhVDVsnqHKajGB2bAVfjtBwLF/VixDhTK/O/+FWGClJuU7btocnYlgOg7R2d/mRZdbHQ==} + /@storybook/channels@7.1.0-alpha.40: + resolution: {integrity: sha512-GMbuR8M/idzCjwWVpBu6yCtkolFhfJDX7/61Y/RAfj8yToJ1BvfaO66Ur8pjfm6Y3q1gxJxvRNyFGAixUCqULw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -11199,8 +11406,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.39: - resolution: {integrity: sha512-x9QpVsCAlFuvzQzblIWV5E+ThB53cIBcyKFu2A9s9LiEO55hYz9G9FF9yGnwBMjQ0iZeqKuAtPy8TLj2wiugdQ==} + /@storybook/client-logger@7.1.0-alpha.40: + resolution: {integrity: sha512-j6nPSGAZM88nC5bKMhQfZW3jeK2XoizAZO9zbojb3znDMqbjPeOWqtc1JPOgsTS8bYEMgYfc727k75rqnaywGA==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -11304,8 +11511,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.39: - resolution: {integrity: sha512-LVYHbCq6tlzYKSb+k9/iI5B6EoZ10W0oGFAo/YCxHVyRQJ3fOQNmgYvLmnVjZ1V87AULCFMDyzDBuMGpqqwd0w==} + /@storybook/core-events@7.1.0-alpha.40: + resolution: {integrity: sha512-mP8OfPtHILDTrKrDv7u1V0qWjXwwRrh4ZYY5TOzOox5UmOy9/u02Yv7K8iDhmCYjMXmKOyzEKI9Wb/3URzAZBg==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -11441,14 +11648,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.39: - resolution: {integrity: sha512-zLOxqmt+oE4y8/K56zJdaDJmIzblqnylgTZfEVOZss0eW1A6vnTAv7C9mwsN4ZvHA0Q/tevLFcAET66GaoLGiQ==} + /@storybook/instrumenter@7.1.0-alpha.40: + resolution: {integrity: sha512-Pnl/r1d/Lgmp5nLLhQiYSjJVYJAJO2yuO20z7LpjkekgkdzLN8cMQvQyeHYQpamqpa+rd965kBfZ8mstCwfo2Q==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.39 + '@storybook/preview-api': 7.1.0-alpha.40 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -11517,16 +11724,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.39: - resolution: {integrity: sha512-lhTSV2s2AzqewjqRhcynMlHWf7ua2TgohXPy8eJ+l11HKV6ddISASEAGr0umK10OXpJweHPSR+VtyCMZG8tVpA==} + /@storybook/preview-api@7.1.0-alpha.40: + resolution: {integrity: sha512-dE+j+2hwg0GO43BctZGvkkJvDjLwUWJd0PSG07l26iAmNvDjMD9Npa3lii2mqDjrtdZWNSGNz7hhqt9WpWAYBQ==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.39 - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/channel-postmessage': 7.1.0-alpha.40 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.39 + '@storybook/types': 7.1.0-alpha.40 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -11674,8 +11881,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/instrumenter': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/instrumenter': 7.1.0-alpha.40 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -11718,13 +11925,13 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.39: - resolution: {integrity: sha512-OgWFn62Affl+tJDCcg5o+DB0PG6EQOwk0NsvwYjbLdw9+PEMRs4HCHRaBuwRbeEx6R6++v8fT4XI9QT5Zo0xzg==} + /@storybook/types@7.1.0-alpha.40: + resolution: {integrity: sha512-+q0COxGmoLFCYfULp2rTY3W5FVmbHxyxLM62uD2Jpf+PZ+gdNjvxj0KcvimfGLZkbCeqSYidsJl2hmMoQi+5Gg==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 dev: true /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.57.0)(vite@4.0.3): @@ -18130,6 +18337,13 @@ packages: ramda: 0.28.0 dev: true + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + dev: true + /file-type@12.4.2: resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} engines: {node: '>=8'} @@ -23859,6 +24073,10 @@ packages: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-input.dto.ts similarity index 53% rename from services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts rename to services/workflows-service/src/workflow/dtos/get-workflows-runtime-input.dto.ts index 886967dda2..dc6273ebbc 100644 --- a/services/workflows-service/src/workflow/dtos/get-workflows-runtime.dto.ts +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-input.dto.ts @@ -1,10 +1,11 @@ import { oneOf } from '@/common/decorators/one-of.decorator'; +import { SortOrder } from '@/common/query-filters/sort-order'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { WorkflowRuntimeDataStatus } from '@prisma/client'; import { Type } from 'class-transformer'; -import { IsNumber, IsOptional } from 'class-validator'; +import { IsNumber, IsOptional, IsString } from 'class-validator'; -export class GetWorkflowsRuntimeDto { +export class GetWorkflowsRuntimeInputDto { @IsOptional() @oneOf(Object.values(WorkflowRuntimeDataStatus), { each: true }) @ApiPropertyOptional() @@ -21,4 +22,23 @@ export class GetWorkflowsRuntimeDto { @IsNumber() @ApiPropertyOptional() limit?: number; + + @Type(() => String) + @ApiPropertyOptional({ + enum: [ + 'workflowDefinitionName', + 'status', + 'state', + 'assignee', + 'resolvedAt', + 'createdBy', + 'createdAt', + ], + }) + orderBy?: string; + + @ApiPropertyOptional({ + enum: ['asc', 'desc'], + }) + orderDirection?: SortOrder; } diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-output.dto.ts similarity index 92% rename from services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts rename to services/workflows-service/src/workflow/dtos/get-workflows-runtime-output.dto.ts index 11e91abbc5..2145792cab 100644 --- a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-response.dto.ts +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-output.dto.ts @@ -10,7 +10,7 @@ export class Pagination { total!: number; } -export class GetWorkflowsRuntimeResponseDto { +export class GetWorkflowsRuntimeOutputDto { @ApiProperty({ type: () => WorkflowRuntimeListItemModel, isArray: true }) @ValidateNested() results!: WorkflowRuntimeListItemModel[]; diff --git a/services/workflows-service/src/workflow/types/index.ts b/services/workflows-service/src/workflow/types/index.ts index a09c5ae9a6..3422710b3b 100644 --- a/services/workflows-service/src/workflow/types/index.ts +++ b/services/workflows-service/src/workflow/types/index.ts @@ -1,3 +1,4 @@ +import { SortOrder } from '@/common/query-filters/sort-order'; import { WorkflowRuntimeListItemModel } from '@/workflow/workflow-runtime-list-item.model'; import { Business, @@ -29,6 +30,8 @@ export interface ListWorkflowsRuntimeParams { page?: number; size?: number; status?: WorkflowRuntimeDataStatus[]; + orderBy?: string; + orderDirection?: SortOrder; } export interface ListRuntimeDataResult { diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 74bb3b5b02..1ef6f098d7 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -22,9 +22,9 @@ import { Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; -import { GetWorkflowsRuntimeDto } from '@/workflow/dtos/get-workflows-runtime.dto'; -import { GetWorkflowsRuntimeResponseDto } from '@/workflow/dtos/get-workflows-runtime-response.dto'; import { plainToClass } from 'class-transformer'; +import { GetWorkflowsRuntimeInputDto } from '@/workflow/dtos/get-workflows-runtime-input.dto'; +import { GetWorkflowsRuntimeOutputDto } from '@/workflow/dtos/get-workflows-runtime-output.dto'; @swagger.ApiBearerAuth() @swagger.ApiTags('external/workflows') @@ -37,21 +37,22 @@ export class WorkflowControllerExternal { ) {} // GET /workflows @common.Get('/') - @swagger.ApiOkResponse({ type: [GetWorkflowsRuntimeResponseDto] }) + @swagger.ApiOkResponse({ type: [GetWorkflowsRuntimeOutputDto] }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) @common.HttpCode(200) @UseKeyAuthInDevGuard() - @ApiNestedQuery(WorkflowDefinitionFindManyArgs) async listWorkflowRuntimeData( - @Query() query: GetWorkflowsRuntimeDto, - ): Promise<GetWorkflowsRuntimeResponseDto> { + @Query() query: GetWorkflowsRuntimeInputDto, + ): Promise<GetWorkflowsRuntimeOutputDto> { const results = await this.service.listRuntimeData({ page: query.page, size: query.limit, status: query.status, + orderBy: query.orderBy, + orderDirection: query.orderDirection, }); - return plainToClass(GetWorkflowsRuntimeResponseDto, results); + return plainToClass(GetWorkflowsRuntimeOutputDto, results); } @common.Get('/metrics') diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 31a23d28a9..6d45ca4e3a 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -67,6 +67,7 @@ import { WorkflowRuntimeListItemModel, } from '@/workflow/workflow-runtime-list-item.model'; import { plainToClass } from 'class-transformer'; +import { SortOrder } from '@/common/query-filters/sort-order'; type TEntityId = string; @@ -343,6 +344,8 @@ export class WorkflowService { page, size, status, + orderBy, + orderDirection, }: ListWorkflowsRuntimeParams): Promise<ListRuntimeDataResult> { const query = { where: { @@ -353,13 +356,14 @@ export class WorkflowService { const [workflowsRuntimeCount, workflowsRuntime] = await Promise.all([ this.workflowRuntimeDataRepository.count(query), this.workflowRuntimeDataRepository.findMany({ + ...query, skip: page && size ? (page - 1) * size : undefined, take: size, include: { workflowDefinition: true, assignee: true, }, - ...query, + orderBy: this._resolveOrderByParams(orderBy, orderDirection), }), ]); @@ -374,6 +378,33 @@ export class WorkflowService { return result; } + private _resolveOrderByParams( + orderBy: string | undefined, + orderDirection: SortOrder | undefined, + ): object { + if (!orderBy && !orderDirection) return {}; + + if (orderBy === 'assignee') { + return { + assignee: { + firstName: orderDirection, + }, + }; + } + + if (orderBy === 'workflowDefinitionName') { + return { + workflowDefinition: { + name: orderDirection, + }, + }; + } + + return { + [orderBy as string]: orderDirection, + }; + } + private workflowsRuntimeListItemsFactory( workflows: WorkflowRuntimeListQueryResult[], ): WorkflowRuntimeListItemModel[] { From 6ace54ceb0058b41530a02b18a28c0b3e3555ad0 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Wed, 28 Jun 2023 14:13:27 +0300 Subject: [PATCH 078/123] =?UTF-8?q?refactor:=20refactored=20way=20of=20aqu?= =?UTF-8?q?iring=20entity=20type=20&=20removed=20entity=20fro=E2=80=A6=20(?= =?UTF-8?q?#507)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: refactored way of aquiring entity type & removed entity from query & updated loaders * refactor: refactored getFiltersFromQuery to use getQueryData * refactor: removed useFilterEntity hook & replaced with useEntityType --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../organisms/Header/Header.Navbar.tsx | 4 +-- .../hooks/useEntityType/useEntityType.ts | 20 +++++++++++++++ .../common/hooks/useFilterId/useFilterId.tsx | 5 ++-- .../useSearchParamsByEntity.tsx | 5 ++-- .../get-entity-type-by-filter-id.ts | 6 +++++ .../get-filters-from-query.ts | 9 +++++++ .../hooks/useFilterEntity/useFilterEntity.tsx | 7 ------ .../useSelectEntityFilterOnMount.tsx | 8 +++--- .../useSelectEntityOnMount.tsx | 4 +-- .../src/domains/filters/types.ts | 7 ++++++ .../src/pages/Entities/Entities.loader.ts | 4 ++- .../pages/Entities/components/Cases/Cases.tsx | 2 +- .../Cases/hooks/useCases/useCases.tsx | 4 +-- .../hooks/useEntities/useEntities.tsx | 4 +-- .../Entity/components/Case/Case.Actions.tsx | 2 +- .../src/components/atoms/Table/Table.tsx | 2 +- packages/workflow-core/src/lib/index.ts | 8 +++--- .../lib/plugins/external-plugin/api-plugin.ts | 25 +++++++++++-------- .../external-plugin/webhook-plugin.test.ts | 16 ++++++------ .../plugins/external-plugin/webhook-plugin.ts | 15 ++++------- .../lib/utils/context-transformers/types.ts | 5 +--- 21 files changed, 99 insertions(+), 63 deletions(-) create mode 100644 apps/backoffice-v2/src/common/hooks/useEntityType/useEntityType.ts create mode 100644 apps/backoffice-v2/src/common/utils/get-entity-type-by-filter-id/get-entity-type-by-filter-id.ts create mode 100644 apps/backoffice-v2/src/common/utils/get-filters-from-query/get-filters-from-query.ts delete mode 100644 apps/backoffice-v2/src/domains/entities/hooks/useFilterEntity/useFilterEntity.tsx create mode 100644 apps/backoffice-v2/src/domains/filters/types.ts diff --git a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx index 2a45ba77fe..9edd2f5413 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Header/Header.Navbar.tsx @@ -51,9 +51,9 @@ export const Navbar: FunctionComponent = () => { </ul> ))} <ul className={`menu menu-compact w-full space-y-2`}> - {filters?.map(({ id, name, entity }) => ( + {filters?.map(({ id, name }) => ( <NavItem - href={`/en/case-management/entities?entity=${entity}&filterId=${id}`} + href={`/en/case-management/entities?filterId=${id}`} key={id} className={ctw(`capitalize`, { 'bg-muted font-bold': id === searchParams?.filterId, diff --git a/apps/backoffice-v2/src/common/hooks/useEntityType/useEntityType.ts b/apps/backoffice-v2/src/common/hooks/useEntityType/useEntityType.ts new file mode 100644 index 0000000000..a8568554e0 --- /dev/null +++ b/apps/backoffice-v2/src/common/hooks/useEntityType/useEntityType.ts @@ -0,0 +1,20 @@ +import { useMemo } from 'react'; +import { useFilterId } from '../useFilterId/useFilterId'; +import { useFiltersQuery } from '../../../domains/filters/hooks/queries/useFiltersQuery/useFiltersQuery'; + +export type TEntityType = 'individuals' | 'business'; + +export function useEntityType(defaultEntityType: TEntityType = 'individuals'): TEntityType { + const filterId = useFilterId(); + const { data: filters, isLoading } = useFiltersQuery(); + + const entityType = useMemo(() => { + if (isLoading || !Array.isArray(filters)) return null; + + const matchedFilter = filters.find(filter => filter.id === filterId); + + return matchedFilter ? (matchedFilter.entity as TEntityType) : null; + }, [filterId, filters, isLoading]); + + return entityType ? entityType : defaultEntityType; +} diff --git a/apps/backoffice-v2/src/common/hooks/useFilterId/useFilterId.tsx b/apps/backoffice-v2/src/common/hooks/useFilterId/useFilterId.tsx index 24ac924e7a..c068c76fb8 100644 --- a/apps/backoffice-v2/src/common/hooks/useFilterId/useFilterId.tsx +++ b/apps/backoffice-v2/src/common/hooks/useFilterId/useFilterId.tsx @@ -1,7 +1,8 @@ -import { useSearchParamsByEntity } from '../useSearchParamsByEntity/useSearchParamsByEntity'; +import { useSearchParams } from 'react-router-dom'; export const useFilterId = (): string | undefined => { - const [{ filterId }] = useSearchParamsByEntity(); + const [params] = useSearchParams(); + const filterId = params.get('filterId'); return filterId; }; diff --git a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx index b32f2416c1..503208da14 100644 --- a/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx +++ b/apps/backoffice-v2/src/common/hooks/useSearchParamsByEntity/useSearchParamsByEntity.tsx @@ -1,17 +1,16 @@ import { AnyZodObject } from 'zod'; -import { useSearchParams } from 'react-router-dom'; import { useZodSearchParams } from '../useZodSearchParams/useZodSearchParams'; import { IUseZodSearchParams } from '../useZodSearchParams/interfaces'; import { BusinessesSearchSchema, IndividualsSearchSchema } from './validation-schemas'; import { useAuthenticatedUserQuery } from '../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { useMemo } from 'react'; +import { useEntityType } from '../useEntityType/useEntityType'; export const useSearchParamsByEntity = <TSchema extends AnyZodObject>( schema?: TSchema, options: IUseZodSearchParams = {}, ) => { - const [searchParams] = useSearchParams(); - const entity = searchParams.get('entity'); + const entity = useEntityType(); const { data: session } = useAuthenticatedUserQuery(); const EntitySearchSchema = useMemo( () => diff --git a/apps/backoffice-v2/src/common/utils/get-entity-type-by-filter-id/get-entity-type-by-filter-id.ts b/apps/backoffice-v2/src/common/utils/get-entity-type-by-filter-id/get-entity-type-by-filter-id.ts new file mode 100644 index 0000000000..10a32eaa9d --- /dev/null +++ b/apps/backoffice-v2/src/common/utils/get-entity-type-by-filter-id/get-entity-type-by-filter-id.ts @@ -0,0 +1,6 @@ +import { getFiltersFromQuery } from '../get-filters-from-query/get-filters-from-query'; +import { TEntityType } from 'src/domains/entities/types'; + +export function getEntityTypeByFilterId(filterId: string): null | TEntityType { + return getFiltersFromQuery().find(filter => filter.id === filterId)?.entity || null; +} diff --git a/apps/backoffice-v2/src/common/utils/get-filters-from-query/get-filters-from-query.ts b/apps/backoffice-v2/src/common/utils/get-filters-from-query/get-filters-from-query.ts new file mode 100644 index 0000000000..3402b88516 --- /dev/null +++ b/apps/backoffice-v2/src/common/utils/get-filters-from-query/get-filters-from-query.ts @@ -0,0 +1,9 @@ +import { queryClient } from '../../../lib/react-query/query-client'; +import { filtersQueryKeys } from '../../../domains/filters/query-keys'; +import { TFilter } from 'src/domains/filters/types'; + +export function getFiltersFromQuery(): TFilter[] { + const filters = queryClient.getQueryData<TFilter[]>(filtersQueryKeys.list().queryKey); + + return filters ? filters : []; +} diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useFilterEntity/useFilterEntity.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useFilterEntity/useFilterEntity.tsx deleted file mode 100644 index be28a2e58b..0000000000 --- a/apps/backoffice-v2/src/domains/entities/hooks/useFilterEntity/useFilterEntity.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; - -export const useFilterEntity = (): string | undefined => { - const [{ entity }] = useSearchParamsByEntity(); - - return entity; -}; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx index 880244bacc..df08b085da 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx @@ -2,19 +2,19 @@ import { useFiltersQuery } from '../../../filters/hooks/queries/useFiltersQuery/ import { useEffect } from 'react'; import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; import { useNavigate, useParams } from 'react-router-dom'; +import { useEntityType } from '../../../../common/hooks/useEntityType/useEntityType'; export const useSelectEntityFilterOnMount = () => { const { data: filters } = useFiltersQuery(); const { locale } = useParams(); - const [{ entity, filterId }, setSearchParams] = useSearchParamsByEntity(); + const [{ filterId }, setSearchParams] = useSearchParamsByEntity(); + const entity = useEntityType(); const navigate = useNavigate(); const [firstFilter] = filters ?? []; useEffect(() => { if ((entity && filterId) || !firstFilter) return; - navigate( - `/${locale}/case-management/entities?entity=${firstFilter?.entity}&filterId=${firstFilter?.id}`, - ); + navigate(`/${locale}/case-management/entities?filterId=${firstFilter?.id}`); }, [entity, filterId, firstFilter, setSearchParams]); }; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx index f2590ce606..cdee4d9c05 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx @@ -1,9 +1,9 @@ import { useEffect } from 'react'; import { useParams } from 'react-router-dom'; import { useSelectEntity } from '../useSelectEntity/useSelectEntity'; -import { useFilterEntity } from '../useFilterEntity/useFilterEntity'; import { useWorkflowsQuery } from '../../../workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; +import { useEntityType } from '../../../../common/hooks/useEntityType/useEntityType'; /** * @description Sets the selected end user to the first end user in the array on mount if no user is currently selected. Returns the select end user handler. @@ -14,7 +14,7 @@ export const useSelectEntityOnMount = () => { const { data } = useWorkflowsQuery({ filterId, filter, sortBy, sortDir, page, pageSize }); const { data: workflows } = data || { data: [] }; const onSelectEntity = useSelectEntity(); - const entity = useFilterEntity(); + const entity = useEntityType(); const firstCaseId = workflows?.[0]?.id; useEffect(() => { diff --git a/apps/backoffice-v2/src/domains/filters/types.ts b/apps/backoffice-v2/src/domains/filters/types.ts new file mode 100644 index 0000000000..e822fd1a76 --- /dev/null +++ b/apps/backoffice-v2/src/domains/filters/types.ts @@ -0,0 +1,7 @@ +import { TEntityType } from 'src/domains/entities/types'; + +export interface TFilter { + id: string; + name: string; + entity: TEntityType; +} diff --git a/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts b/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts index e95b2488ed..47ae3da2eb 100644 --- a/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts +++ b/apps/backoffice-v2/src/pages/Entities/Entities.loader.ts @@ -4,11 +4,13 @@ import { usersQueryKeys } from '../../domains/users/query-keys'; import { LoaderFunction } from 'react-router-dom'; import { workflowsQueryKeys } from '../../domains/workflows/query-keys'; import { defaultDeserializer } from '../../common/hooks/useZodSearchParams/utils/default-deserializer'; +import { getEntityTypeByFilterId } from '../../common/utils/get-entity-type-by-filter-id/get-entity-type-by-filter-id'; export const entitiesLoader: LoaderFunction = async ({ request }) => { - const { entity, filterId, filter, sortBy, sortDir, page, pageSize } = defaultDeserializer( + const { filterId, filter, sortBy, sortDir, page, pageSize } = defaultDeserializer( request.url.split('?')[1], ); + const entity = getEntityTypeByFilterId(filterId); const authenticatedUser = authQueryKeys.authenticatedUser(); const session = await queryClient.ensureQueryData( authenticatedUser.queryKey, diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 9f7aa0400e..1f663c6383 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown dropdown-bottom dropdown-hover z-[60]"> + <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx index 9265b1e684..056a2eb2cc 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/hooks/useCases/useCases.tsx @@ -1,12 +1,12 @@ import { useDocumentListener } from '../../../../../../common/hooks/useDocumentListener/useDocumentListener'; import { useCallback, useRef } from 'react'; import { useUsersQuery } from '../../../../../../domains/users/hooks/queries/useUsersQuery/useUsersQuery'; -import { useFilterEntity } from '../../../../../../domains/entities/hooks/useFilterEntity/useFilterEntity'; +import { useEntityType } from '../../../../../../common/hooks/useEntityType/useEntityType'; import { useSearchParamsByEntity } from '../../../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; export const useCases = () => { const [{ filter, sortBy }] = useSearchParamsByEntity(); - const entity = useFilterEntity(); + const entity = useEntityType(); const sharedSortByOptions = [ { label: 'Created At', diff --git a/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx b/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx index e999b563db..8d53181fb2 100644 --- a/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx +++ b/apps/backoffice-v2/src/pages/Entities/hooks/useEntities/useEntities.tsx @@ -1,10 +1,10 @@ import { useSearch } from '../../../../common/hooks/useSearch/useSearch'; import { ChangeEventHandler, useCallback } from 'react'; import { createArrayOfNumbers } from '../../../../common/utils/create-array-of-numbers/create-array-of-numbers'; -import { useFilterEntity } from '../../../../domains/entities/hooks/useFilterEntity/useFilterEntity'; import { useSelectEntityOnMount } from '../../../../domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount'; import { useWorkflowsQuery } from '../../../../domains/workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; +import { useEntityType } from '../../../../common/hooks/useEntityType/useEntityType'; export const useEntities = () => { const [{ filterId, filter, sortBy, sortDir, page, pageSize }, setSearchParams] = @@ -21,7 +21,7 @@ export const useEntities = () => { meta: { totalPages }, data: cases, } = data || { meta: { totalPages: 0 }, data: [] }; - const entity = useFilterEntity(); + const entity = useEntityType(); const individualsSearchOptions = ['entity.name', 'entity.email']; const businessesSearchOptions = ['entity.name']; const { searched, onSearch, search } = useSearch({ diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 129ce91af5..88c66e4c3c 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -112,7 +112,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ </h2> </div> {showResolutionButtons && ( - <div className={`flex items-center space-x-6 pe-[3.35rem]`}> + <div className={`pe-[3.35rem] flex items-center space-x-6`}> <Button className={ctw({ // loading: debouncedIsLoadingRejectEntity, diff --git a/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx index 4e94717143..a8d3be4418 100644 --- a/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx +++ b/apps/workflows-dashboard/src/components/atoms/Table/Table.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>( ({ className, ...props }, ref) => ( - <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} /> + <table ref={ref} className={cn('caption-bottom w-full text-sm', className)} {...props} /> ), ); Table.displayName = 'Table'; diff --git a/packages/workflow-core/src/lib/index.ts b/packages/workflow-core/src/lib/index.ts index 553fe7f748..f0818a2e03 100644 --- a/packages/workflow-core/src/lib/index.ts +++ b/packages/workflow-core/src/lib/index.ts @@ -7,8 +7,8 @@ export { WorkflowEventWithoutState, WorkflowOptions, WorkflowRunnerArgs, - WorkflowContext + WorkflowContext, } from './types'; -export {StatePlugin} from "./plugins/types"; -export {PluginAction} from "./plugins/types"; -export {ExtensionRunOrder} from "./plugins/types"; +export { StatePlugin } from './plugins/types'; +export { PluginAction } from './plugins/types'; +export { ExtensionRunOrder } from './plugins/types'; diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts index 37bace299c..63485f2267 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/api-plugin.ts @@ -1,6 +1,6 @@ import { TContext, TTransformers, TValidators } from '../../utils/types'; import { AnyRecord, isErrorWithMessage } from '@ballerine/common'; -import * as process from "process"; +import * as process from 'process'; export interface IApiPluginParams { name: string; @@ -29,7 +29,10 @@ export class ApiPlugin { this.stateNames = pluginParams.stateNames; this.url = pluginParams.url; this.method = pluginParams.method; - this.headers = {'Content-Type': 'application/json', ...(pluginParams.headers || {})} as HeadersInit; + this.headers = { + 'Content-Type': 'application/json', + ...(pluginParams.headers || {}), + } as HeadersInit; this.request = pluginParams.request; this.response = pluginParams.response; this.successAction = pluginParams.successAction; @@ -49,7 +52,7 @@ export class ApiPlugin { this.replaceValuePlaceholders(this.url, context), this.method, requestPayload, - this.composeRequestHeaders(this.headers!, context) + this.composeRequestHeaders(this.headers!, context), ); if (apiResponse.ok) { @@ -126,7 +129,12 @@ export class ApiPlugin { } composeRequestHeaders(headers: HeadersInit, context: TContext) { - return Object.fromEntries(Object.entries(headers).map(header => [header[0], this.replaceValuePlaceholders(header[1], context)])); + return Object.fromEntries( + Object.entries(headers).map(header => [ + header[0], + this.replaceValuePlaceholders(header[1], context), + ]), + ); } replaceValuePlaceholders(content: string, context: TContext) { const placeholders = content.match(/{(.*?)}/g); @@ -136,9 +144,9 @@ export class ApiPlugin { placeholders.forEach(placeholder => { const variableKey = placeholder.replace(/{|}/g, ''); const isPlaceholderSecret = variableKey.includes('secret.'); - const placeholderValue = isPlaceholderSecret ? - `${process.env[variableKey.replace('secret.','')]}`: - `${this.fetchObjectPlaceholderValue(context, variableKey)}`; + const placeholderValue = isPlaceholderSecret + ? `${process.env[variableKey.replace('secret.', '')]}` + : `${this.fetchObjectPlaceholderValue(context, variableKey)}`; replacedContent = replacedContent.replace(placeholder, placeholderValue); }); @@ -157,6 +165,3 @@ export class ApiPlugin { }, record as unknown); } } - - - diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts index ea4c67372a..920b2ce0d6 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.test.ts @@ -1,9 +1,9 @@ import { beforeEach, afterEach, describe, expect, it, test } from 'vitest'; import { WorkflowRunner } from '../../workflow-runner'; import { WorkflowRunnerArgs } from '../../types'; -import {WebhookPlugin, WebhookPluginParams} from "./webhook-plugin"; -import {setupServer} from "msw/node"; -import {rest} from "msw"; +import { WebhookPlugin, WebhookPluginParams } from './webhook-plugin'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; function createWorkflowRunner( definition: WorkflowRunnerArgs['definition'], @@ -49,7 +49,7 @@ describe('workflow-runner', () => { request: { transform: { transformer: 'jmespath', - mapping: '{id: entity.id}' + mapping: '{id: entity.id}', }, }, }, @@ -68,14 +68,16 @@ describe('workflow-runner', () => { let serverRequesUrl; server.use( rest.get(webhookUrl, (req, res, ctx) => { - serverRequesUrl = req.url.toString() - return res(ctx.json({result: 'someResult'})); + serverRequesUrl = req.url.toString(); + return res(ctx.json({ result: 'someResult' })); }), ); const workflow = createWorkflowRunner(definition, webhookPluginsSchemas); it('it transitions to successAction and persist response to context', async () => { await workflow.sendEvent('ALL_GOOD'); - expect(serverRequesUrl).toEqual("https://sometesturl.com/ballerine/test/url/123?id=some_id"); + expect(serverRequesUrl).toEqual( + 'https://sometesturl.com/ballerine/test/url/123?id=some_id', + ); }); }); }); diff --git a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts index 53bb438c97..f9d5110e1e 100644 --- a/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts +++ b/packages/workflow-core/src/lib/plugins/external-plugin/webhook-plugin.ts @@ -1,5 +1,5 @@ -import {ApiPlugin, IApiPluginParams} from "./api-plugin"; -import {TContext} from "../../utils/types"; +import { ApiPlugin, IApiPluginParams } from './api-plugin'; +import { TContext } from '../../utils/types'; export interface WebhookPluginParams { name: string; @@ -18,16 +18,11 @@ export class WebhookPlugin extends ApiPlugin { const requestPayload = await this.transformData(this.request.transformer, context); try { - await this.makeApiRequest( - this.url, - this.method, - requestPayload, - this.headers, - ); + await this.makeApiRequest(this.url, this.method, requestPayload, this.headers); } catch (e) { - console.error(e) + console.error(e); } - return {} + return {}; } } diff --git a/packages/workflow-core/src/lib/utils/context-transformers/types.ts b/packages/workflow-core/src/lib/utils/context-transformers/types.ts index efb813d88e..3657e1b7ec 100644 --- a/packages/workflow-core/src/lib/utils/context-transformers/types.ts +++ b/packages/workflow-core/src/lib/utils/context-transformers/types.ts @@ -5,8 +5,5 @@ export abstract class BaseContextTransformer { abstract name: string; type = 'context-transformer'; - abstract transform( - context: TContext, - options: {}, - ): Promise<any>; + abstract transform(context: TContext, options: {}): Promise<any>; } From 4962d423efa2cd84342d5123528afdff1fa39f99 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 28 Jun 2023 16:16:22 +0300 Subject: [PATCH 079/123] fix(docs): add plugins section (#613) gst --- websites/docs/src/config.ts | 4 + .../en/learn/{api-plugin.md => plugins.md} | 87 +++++++++++++++++-- .../docs/src/pages/en/learn/webhook-plugin.md | 78 ----------------- 3 files changed, 86 insertions(+), 83 deletions(-) rename websites/docs/src/pages/en/learn/{api-plugin.md => plugins.md} (59%) delete mode 100644 websites/docs/src/pages/en/learn/webhook-plugin.md diff --git a/websites/docs/src/config.ts b/websites/docs/src/config.ts index be9428c702..7fb6a779a7 100644 --- a/websites/docs/src/config.ts +++ b/websites/docs/src/config.ts @@ -104,6 +104,10 @@ export const SIDEBAR: Sidebar = { text: `Interacting with Workflows`, link: `interacting_with_workflows`, }, + { + text: `Workflows Plugins`, + link: `api-plugin`, + }, ], }, // { diff --git a/websites/docs/src/pages/en/learn/api-plugin.md b/websites/docs/src/pages/en/learn/plugins.md similarity index 59% rename from websites/docs/src/pages/en/learn/api-plugin.md rename to websites/docs/src/pages/en/learn/plugins.md index 89e2090023..c9db50b6e6 100644 --- a/websites/docs/src/pages/en/learn/api-plugin.md +++ b/websites/docs/src/pages/en/learn/plugins.md @@ -1,14 +1,16 @@ --- -title: Api Plugin +title: Plugins description: Learn how to configure a plugin for your workflow layout: ../../../layouts/MainLayout.astro --- -## Description +____ +## API Plugin +### Description The API Plugin is a flexible extension that can be added to your workflow definition. It allows you to configure and make API requests directly from your workflows.<br>This guide will help you understand how to set up and use the API Plugin in your workflows. -## Overview +### Overview The API Plugin serves several functions in your workflow: - Request Formatting: It allows you to shape the API request in the format your endpoint requires. @@ -18,7 +20,7 @@ The API Plugin serves several functions in your workflow: - Response Validation: The formatted response is validated before further use. - State Transitioning: Depending on the API response, it can move the workflow to different states. -## Configuration +### Configuration - `name` (Required) - The name of the plugin. the name will also be used as the Api Plugin's response key in the workflow's context. - `url` (Required) - The URL destination which the Api Plugin will generate the call to.<br>p.s you can transform the the url by wrapping the require variable path with Braces e.g.`https://example.com/identity/{entity.id}/location` @@ -42,7 +44,7 @@ The API Plugin serves several functions in your workflow: - `successAction` (Required) - The State to which will the action will be transition if the api request was successful and it passed all the validations. - `errorAction` (Required) - The State which the workflow will transition to if the api request failed or did not passed all the validations. -## Code Example +### Code Example The following Plugin can be used to configure an extension in the workflow [configuration](#configuration) - [API reference](/en/learn/workflow_definitions) @@ -97,3 +99,78 @@ The following Plugin can be used to configure an extension in the workflow [conf This configuration makes a GET request to an external API, transforms and validates the request and response data, and transitions to appropriate states based on the API call's success or failure. Understanding and leveraging the flexibility of the API Plugin can significantly expand the capabilities of your workflows. It allows you to connect your workflows with external APIs, retrieve and manipulate data, and make dynamic decisions based on the results. + +____ +# Webhook Plugin +### Description + +The Webhook Plugin is a handy extension that can be added to your workflow definition. It allows you to configure outgoing webhooks directly from your workflows to your required destination. +This guide will help you understand how to set up and use the Webhook Plugin in your workflows. + +Overview +The Webhook Plugin serves several functions in your workflow: + +Request Formatting: It enables you to shape the webhook request to match your endpoint's needs. +Request Validation: It lets you verify the formatted request before sending it out. +Webhook Call: It makes the actual webhook call. +Webhook Monitoring: It listens for a specific state in the workflow to initiate the webhook. + +The primary difference between the [API Plugin](/en/learn/api-plugin) and the Webhook Plugin is that the Webhook Plugin does not directly handle responses or transition states. Instead, it listens to specific states in the workflow to trigger webhook calls. + +### Configuration + +- `name` (Required) - The name of the plugin. the name will also be used as the Api Plugin's response key in the workflow's context. +- `url` (Required) - The URL destination which the Api Plugin will generate the call to.<br>p.s you can transform the the url by wrapping the require variable path with Braces e.g.`https://example.com/identity/{entity.id}/location` +- `method` (Required) - The method of the Api Request ('POST' | 'PUT' | 'PATCH' | 'DELETE' | 'GET') +- `headers` (Optional) - The headers which the Api Plugin uses in order generate the call with (default: `{"Content-Type": "application/json"}`). you can also use the header's values as a secret when it is set. e.g. `{"Authorization": "secret.API_AUTHORIZATION_KEY"}` +- `stateNames` (Required) - The state names from Which the api request will be made from. +- `request` (Required) - The request Transformation and Validation configuration. + - `transform` (Required) - The request wrapper of the Transformer and Mapping configuration. + - `transformer` (Required) - The transformer function which will be used to transform the request before it is sent. (default [jmespath](https://jmespath.org/)) + - `mapping` (Required) - The transformation logic which will be used in order to transform the request before it is sent. + - `schema` (Optional) - The wrapper of the Validator configuration and Validation schema. + - `validator` - The validator function which will be used to validate the request after it is transformed and before it is sent. (default [json-schema](https://json-schema.org/)) + - `schema` - The Validation schema that the validator uses. + +### Code Example + +The following Plugin can be used to configure an extension in the workflow [configuration](#configuration) - [API reference](/en/learn/workflow_definitions) + +```json + { + "name": "finish_webhook", + "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", + "method": "POST", + "stateNames": [ + "auto_approve", + "approve", + "reject" + ], + "headers": { + "authorization": "Bearer {secret.BUSINESS_DATA__VENDOR_API_KEY}" + }, + "request": { + "transform": { + "transformer": "jmespath", + "mapping": "{success_result: pluginsOutput.business_data_vendor}" + } + } + }, + { + "name": "fail_webhook", + "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", + "method": "POST", + "stateNames": [ + "auto_reject" + ], + "request": { + "transform": { + "transformer": "jmespath", + "mapping": "{failing_result: @}" + } + } + } + +``` + +By integrating the Webhook Plugin into your workflows, you can easily set up outgoing webhooks to interact with external systems based on the workflow's state, thereby extending the power and flexibility of your workflows. diff --git a/websites/docs/src/pages/en/learn/webhook-plugin.md b/websites/docs/src/pages/en/learn/webhook-plugin.md deleted file mode 100644 index ec60bef19a..0000000000 --- a/websites/docs/src/pages/en/learn/webhook-plugin.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Webhook Plugin -description: Learn how to configure a plugin for your workflow -layout: ../../../layouts/MainLayout.astro ---- - -## Description - -The Webhook Plugin is a handy extension that can be added to your workflow definition. It allows you to configure outgoing webhooks directly from your workflows to your required destination. -This guide will help you understand how to set up and use the Webhook Plugin in your workflows. - -Overview -The Webhook Plugin serves several functions in your workflow: - -Request Formatting: It enables you to shape the webhook request to match your endpoint's needs. -Request Validation: It lets you verify the formatted request before sending it out. -Webhook Call: It makes the actual webhook call. -Webhook Monitoring: It listens for a specific state in the workflow to initiate the webhook. - -The primary difference between the [API Plugin](/en/learn/api-plugin) and the Webhook Plugin is that the Webhook Plugin does not directly handle responses or transition states. Instead, it listens to specific states in the workflow to trigger webhook calls. - -## Configuration - -- `name` (Required) - The name of the plugin. the name will also be used as the Api Plugin's response key in the workflow's context. -- `url` (Required) - The URL destination which the Api Plugin will generate the call to.<br>p.s you can transform the the url by wrapping the require variable path with Braces e.g.`https://example.com/identity/{entity.id}/location` -- `method` (Required) - The method of the Api Request ('POST' | 'PUT' | 'PATCH' | 'DELETE' | 'GET') -- `headers` (Optional) - The headers which the Api Plugin uses in order generate the call with (default: `{"Content-Type": "application/json"}`). you can also use the header's values as a secret when it is set. e.g. `{"Authorization": "secret.API_AUTHORIZATION_KEY"}` -- `stateNames` (Required) - The state names from Which the api request will be made from. -- `request` (Required) - The request Transformation and Validation configuration. - - `transform` (Required) - The request wrapper of the Transformer and Mapping configuration. - - `transformer` (Required) - The transformer function which will be used to transform the request before it is sent. (default [jmespath](https://jmespath.org/)) - - `mapping` (Required) - The transformation logic which will be used in order to transform the request before it is sent. - - `schema` (Optional) - The wrapper of the Validator configuration and Validation schema. - - `validator` - The validator function which will be used to validate the request after it is transformed and before it is sent. (default [json-schema](https://json-schema.org/)) - - `schema` - The Validation schema that the validator uses. - -## Code Example - -The following Plugin can be used to configure an extension in the workflow [configuration](#configuration) - [API reference](/en/learn/workflow_definitions) - -```json - { - "name": "finish_webhook", - "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", - "method": "POST", - "stateNames": [ - "auto_approve", - "approve", - "reject" - ], - "headers": { - "authorization": "Bearer {secret.BUSINESS_DATA__VENDOR_API_KEY}" - }, - "request": { - "transform": { - "transformer": "jmespath", - "mapping": "{success_result: pluginsOutput.business_data_vendor}" - } - } - }, - { - "name": "fail_webhook", - "url": "https://webhook.site/3c48b14f-1a70-4f73-9385-fab2d0db0db8", - "method": "POST", - "stateNames": [ - "auto_reject" - ], - "request": { - "transform": { - "transformer": "jmespath", - "mapping": "{failing_result: @}" - } - } - } - -``` - -By integrating the Webhook Plugin into your workflows, you can easily set up outgoing webhooks to interact with external systems based on the workflow's state, thereby extending the power and flexibility of your workflows. From 08428bb76136dcb1449f7ae7556620c10394cc30 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Wed, 28 Jun 2023 18:40:35 +0300 Subject: [PATCH 080/123] test(headless-example): added an e2e smoke test - catches instances of blank white page (#609) in response to cases where there are logs in devtools and the app still runs --- examples/headless-example/.gitignore | 3 + examples/headless-example/e2e/smoke.spec.ts | 29 ++ examples/headless-example/package.json | 5 +- .../headless-example/playwright.config.ts | 77 ++++ .../src/components/SignUp.svelte | 2 +- examples/headless-example/tsconfig.json | 2 +- pnpm-lock.yaml | 357 +++++++++++------- 7 files changed, 332 insertions(+), 143 deletions(-) create mode 100644 examples/headless-example/e2e/smoke.spec.ts create mode 100644 examples/headless-example/playwright.config.ts diff --git a/examples/headless-example/.gitignore b/examples/headless-example/.gitignore index 7ceb59f89a..91c473a3ff 100644 --- a/examples/headless-example/.gitignore +++ b/examples/headless-example/.gitignore @@ -23,3 +23,6 @@ dist-ssr *.sln *.sw? .env +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/examples/headless-example/e2e/smoke.spec.ts b/examples/headless-example/e2e/smoke.spec.ts new file mode 100644 index 0000000000..47e9f755b9 --- /dev/null +++ b/examples/headless-example/e2e/smoke.spec.ts @@ -0,0 +1,29 @@ +import { expect, test } from '@playwright/test'; + +test.describe('should keep basic functionality #e2e #smoke', async () => { + test('when navigating to the root page the sign up form renders', async ({ page }) => { + await page.goto('/'); + + const welcome = page.getByText(/welcome/i); + + const firstInput = page.getByLabel(/first\sname|business\sname/i); + const secondInput = page.getByLabel(/last\sname|registration\snumber/i); + + const signUpBtn = page.getByRole('button', { name: /sign\sup/i }); + + await expect(welcome).toBeVisible(); + + await expect(firstInput).toBeVisible(); + await expect(secondInput).toBeVisible(); + + await expect(signUpBtn).toBeVisible(); + }); + + test('when navigating to the root page clear user button renders', async ({ page }) => { + await page.goto('/'); + + const clearUserBtn = page.getByRole('button', { name: /clear\suser/i }); + + await expect(clearUserBtn).toBeVisible(); + }); +}); diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 3db0cbaf99..55253ca78d 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -9,12 +9,15 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json" + "check": "svelte-check --tsconfig ./tsconfig.json", + "test:e2e": "playwright test" }, "devDependencies": { "@felte/core": "^1.3.7", + "@playwright/test": "^1.35.1", "@sveltejs/vite-plugin-svelte": "^2.0.2", "@tsconfig/svelte": "^3.0.0", + "@types/node": "^20.3.2", "@xstate/inspect": "^0.7.1", "autoprefixer": "^10.4.7", "postcss": "^8.4.21", diff --git a/examples/headless-example/playwright.config.ts b/examples/headless-example/playwright.config.ts new file mode 100644 index 0000000000..90aff329e4 --- /dev/null +++ b/examples/headless-example/playwright.config.ts @@ -0,0 +1,77 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://127.0.0.1:5173', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://127.0.0.1:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/examples/headless-example/src/components/SignUp.svelte b/examples/headless-example/src/components/SignUp.svelte index 89a81d3c5f..ff10003352 100644 --- a/examples/headless-example/src/components/SignUp.svelte +++ b/examples/headless-example/src/components/SignUp.svelte @@ -47,7 +47,7 @@ <input type="text" id="bname" name="bname" /> </div> <div> - <label for="rnum">Regestration Number</label> + <label for="rnum">Registration Number</label> <input type="text" id="rnum" name="rnum" /> </div> {/if} diff --git a/examples/headless-example/tsconfig.json b/examples/headless-example/tsconfig.json index 33d7df7c2f..dfee8df293 100644 --- a/examples/headless-example/tsconfig.json +++ b/examples/headless-example/tsconfig.json @@ -25,6 +25,6 @@ "@/*": ["src/*"] } }, - "include": ["src", "public"], + "include": ["src", "public", "e2e"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc1f446e46..b3b0823189 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.1' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - importers: .: @@ -273,7 +269,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -516,12 +512,18 @@ importers: '@felte/core': specifier: ^1.3.7 version: 1.3.7 + '@playwright/test': + specifier: ^1.35.1 + version: 1.35.1 '@sveltejs/vite-plugin-svelte': specifier: ^2.0.2 version: 2.0.3(svelte@3.57.0)(vite@4.2.1) '@tsconfig/svelte': specifier: ^3.0.0 version: 3.0.0 + '@types/node': + specifier: ^20.3.2 + version: 20.3.2 '@xstate/inspect': specifier: ^0.7.1 version: 0.7.1(ws@8.13.0)(xstate@4.37.1) @@ -542,10 +544,10 @@ importers: version: 3.57.0 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) + version: 2.10.3(postcss@8.4.21)(svelte@3.57.0) tailwindcss: specifier: ^3.2.4 - version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.7(postcss@8.4.21) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -554,7 +556,7 @@ importers: version: 4.9.5 vite: specifier: ^4.1.0 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@20.3.2) packages/common: dependencies: @@ -8855,6 +8857,17 @@ packages: fsevents: 2.3.2 dev: true + /@playwright/test@1.35.1: + resolution: {integrity: sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + '@types/node': 18.15.10 + playwright-core: 1.35.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: false @@ -11964,13 +11977,13 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.29.0 svelte: 3.57.0 svelte-hmr: 0.15.1(svelte@3.57.0) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) vitefu: 0.2.4(vite@4.2.1) transitivePeerDependencies: - supports-color @@ -12724,6 +12737,9 @@ packages: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} dev: true + /@types/node@20.3.2: + resolution: {integrity: sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==} + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -16185,6 +16201,17 @@ packages: dependencies: ms: 2.1.3 + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -17209,7 +17236,7 @@ packages: '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 @@ -17226,7 +17253,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true @@ -17291,64 +17318,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -17445,72 +17414,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-n@15.6.1(eslint@8.36.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -23584,6 +23487,12 @@ packages: hasBin: true dev: true + /playwright-core@1.35.1: + resolution: {integrity: sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==} + engines: {node: '>=16'} + hasBin: true + dev: true + /please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} dependencies: @@ -23642,6 +23551,23 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.24 + /postcss-load-config@3.1.4(postcss@8.4.21): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.21 + yaml: 1.10.2 + dev: true + /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -26081,6 +26007,34 @@ packages: - sugarss dev: true + /svelte-check@2.10.3(postcss@8.4.21)(svelte@3.57.0): + resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} + hasBin: true + peerDependencies: + svelte: ^3.24.0 + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + chokidar: 3.5.3 + fast-glob: 3.2.12 + import-fresh: 3.3.0 + picocolors: 1.0.0 + sade: 1.8.1 + svelte: 3.57.0 + svelte-preprocess: 4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - node-sass + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + /svelte-hmr@0.15.1(svelte@3.57.0): resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} @@ -26143,6 +26097,58 @@ packages: typescript: 4.9.5 dev: true + /svelte-preprocess@4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.6 + '@types/sass': 1.45.0 + detect-indent: 6.1.0 + magic-string: 0.25.9 + postcss: 8.4.21 + sorcery: 0.10.0 + strip-indent: 3.0.0 + svelte: 3.57.0 + typescript: 4.9.5 + dev: true + /svelte@3.57.0: resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} engines: {node: '>= 8'} @@ -26203,9 +26209,43 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false + /tailwindcss@3.2.7(postcss@8.4.21): + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-import: 14.1.0(postcss@8.4.21) + postcss-js: 4.0.1(postcss@8.4.21) + postcss-load-config: 3.1.4(postcss@8.4.21) + postcss-nested: 6.0.0(postcss@8.4.21) + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: true + /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} @@ -27697,10 +27737,10 @@ packages: vite: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) transitivePeerDependencies: - supports-color - typescript @@ -27806,6 +27846,39 @@ packages: optionalDependencies: fsevents: 2.3.2 + /vite@4.2.1(@types/node@20.3.2): + resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.3.2 + esbuild: 0.17.14 + postcss: 8.4.24 + resolve: 1.22.1 + rollup: 3.20.2 + optionalDependencies: + fsevents: 2.3.2 + /vite@4.3.9(@types/node@18.15.10): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -27890,7 +27963,7 @@ packages: vite: optional: true dependencies: - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) dev: true /vitefu@0.2.4(vite@4.3.9): @@ -28747,3 +28820,7 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false From 206e604a34757da62478918db4ec2730349bc0cc Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Thu, 29 Jun 2023 12:17:07 +0300 Subject: [PATCH 081/123] Illia rudniev/feat/workflow dashboard auth (#602) * feat: added overview page & updated pie chart * feat: added sorting to worklofws table & added sorting to controller * fix: fixed sorting regexp cache bug * feat: added signin from backoffice & session handling * refactor: added post-fixes to query/mutation hooks & useSession now uses query refetch method * fix: fixed typo and missing space * fix: fix logout in header & updated dev port --- .../atoms/AssignButton/AssignButton.tsx | 2 +- apps/workflows-dashboard/package.json | 5 +- .../workflows-dashboard/src/common/env/env.ts | 25 +++++++ .../src/common/env/schema.ts | 7 ++ .../src/common/errors/http-error.ts | 5 ++ .../common/hocs/withSessionProtected/index.ts | 1 + .../utils/clear-referer-url.ts | 3 + .../utils/get-referer-url.ts | 3 + .../utils/set-referer-url.ts | 3 + .../withSessionProtected.tsx | 35 +++++++++ .../common/hooks/useLogoutMutation/index.ts | 1 + .../useLogoutMutation/useLogoutMutation.ts | 15 ++++ .../src/common/hooks/useSession/index.ts | 1 + .../src/common/hooks/useSession/useSession.ts | 24 ++++++ .../src/common/utils/ctw/ctw.ts | 4 + .../atoms/Alert/Alert.Description.tsx | 10 +++ .../components/atoms/Alert/Alert.Title.tsx | 13 ++++ .../src/components/atoms/Alert/Alert.tsx | 27 +++++++ .../atoms/ErrorAlert/ErrorAlert.tsx | 20 +++++ .../src/components/atoms/Label/Label.tsx | 16 ++++ .../icons/BallerineLogo/BallerineLogo.tsx | 51 +++++++++++++ .../atoms/icons/BallerineLogo/index.ts | 1 + .../DashboardLayout/DashboardLayout.tsx | 2 +- .../components/molecules/Header/Header.tsx | 4 +- .../UserNavigation/UserNavigation.tsx | 8 +- .../organisms/Form/Form.Control.tsx | 21 ++++++ .../organisms/Form/Form.Description.tsx | 20 +++++ .../components/organisms/Form/Form.Field.tsx | 15 ++++ .../organisms/Form/Form.FieldContext.tsx | 6 ++ .../components/organisms/Form/Form.Item.tsx | 16 ++++ .../organisms/Form/Form.ItemContext.tsx | 6 ++ .../components/organisms/Form/Form.Label.tsx | 22 ++++++ .../organisms/Form/Form.Message.tsx | 27 +++++++ .../src/components/organisms/Form/Form.tsx | 3 + .../Form/hooks/useFormField/useFormField.tsx | 27 +++++++ .../src/components/organisms/Form/types.ts | 12 +++ .../components/organisms/Header/Header.tsx | 25 +++++++ .../Header/header-navigation-links.ts | 12 +++ .../src/components/organisms/Header/index.ts | 1 + .../src/domains/auth/api/login/index.ts | 2 + .../src/domains/auth/api/login/login.api.ts | 8 ++ .../src/domains/auth/api/login/login.types.ts | 10 +++ .../src/domains/auth/api/logout/index.ts | 1 + .../src/domains/auth/api/logout/logout.api.ts | 7 ++ .../src/domains/auth/api/session/index.ts | 1 + .../domains/auth/api/session/query-keys.ts | 9 +++ .../domains/auth/api/session/session.api.ts | 9 +++ .../domains/auth/api/session/session.types.ts | 5 ++ .../src/domains/auth/common/types.ts | 7 ++ apps/workflows-dashboard/src/index.css | 5 +- .../src/lib/request/request.ts | 7 +- .../src/pages/SignIn/SignIn.tsx | 54 +++++++++++++ .../components/SignInForm/ErrorAlert.tsx | 21 ++++++ .../components/SignInForm/SignInForm.tsx | 75 +++++++++++++++++++ .../SignIn/components/SignInForm/index.ts | 1 + .../SignIn/components/SignInForm/types.ts | 4 + .../SignIn/hooks/useSignInMutation/index.ts | 1 + .../useSignInMutation/useSignInMutation.tsx | 20 +++++ .../src/pages/SignIn/index.ts | 1 + .../src/pages/Workflows/Workflows.tsx | 4 +- .../Workflows/hooks/useWorkflows/index.ts | 1 - .../hooks/useWorkflowsQuery/index.ts | 1 + .../useWorkflowsQuery.ts} | 2 +- apps/workflows-dashboard/src/router.tsx | 10 ++- apps/workflows-dashboard/tsconfig.json | 3 +- apps/workflows-dashboard/vite.config.ts | 14 +++- pnpm-lock.yaml | 28 ++++++- services/workflows-service/.env.example | 1 + services/workflows-service/src/env.ts | 1 + services/workflows-service/src/main.ts | 3 +- 70 files changed, 795 insertions(+), 20 deletions(-) create mode 100644 apps/workflows-dashboard/src/common/env/env.ts create mode 100644 apps/workflows-dashboard/src/common/env/schema.ts create mode 100644 apps/workflows-dashboard/src/common/errors/http-error.ts create mode 100644 apps/workflows-dashboard/src/common/hocs/withSessionProtected/index.ts create mode 100644 apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/clear-referer-url.ts create mode 100644 apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/get-referer-url.ts create mode 100644 apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/set-referer-url.ts create mode 100644 apps/workflows-dashboard/src/common/hocs/withSessionProtected/withSessionProtected.tsx create mode 100644 apps/workflows-dashboard/src/common/hooks/useLogoutMutation/index.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useLogoutMutation/useLogoutMutation.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useSession/index.ts create mode 100644 apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts create mode 100644 apps/workflows-dashboard/src/common/utils/ctw/ctw.ts create mode 100644 apps/workflows-dashboard/src/components/atoms/Alert/Alert.Description.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Alert/Alert.Title.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Alert/Alert.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/ErrorAlert/ErrorAlert.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/Label/Label.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/BallerineLogo.tsx create mode 100644 apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/index.ts create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Control.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Description.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Field.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.FieldContext.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Item.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.ItemContext.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Label.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.Message.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/Form.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/hooks/useFormField/useFormField.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Form/types.ts create mode 100644 apps/workflows-dashboard/src/components/organisms/Header/Header.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/Header/header-navigation-links.ts create mode 100644 apps/workflows-dashboard/src/components/organisms/Header/index.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/login/index.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/login/login.api.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/login/login.types.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/logout/index.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/logout/logout.api.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/session/index.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/session/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/session/session.api.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/api/session/session.types.ts create mode 100644 apps/workflows-dashboard/src/domains/auth/common/types.ts create mode 100644 apps/workflows-dashboard/src/pages/SignIn/SignIn.tsx create mode 100644 apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/ErrorAlert.tsx create mode 100644 apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx create mode 100644 apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/index.ts create mode 100644 apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/types.ts create mode 100644 apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/index.ts create mode 100644 apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/useSignInMutation.tsx create mode 100644 apps/workflows-dashboard/src/pages/SignIn/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/index.ts rename apps/workflows-dashboard/src/pages/Workflows/hooks/{useWorkflows/useWorkflows.ts => useWorkflowsQuery/useWorkflowsQuery.ts} (84%) diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index fe73954468..ce7d8cae80 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -56,7 +56,7 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ <DropdownMenuContent className={`min-w-[16rem]`} align={'start'}> {isUnassignEnabled ? ( <DropdownMenuItem - className={`border-b-2 text-cyan-950`} + className={`text-cyan-950 border-b-2`} onClick={() => onAssigneeSelect(null)} > Unassign diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json index 21ba36effc..1ecbbb7767 100644 --- a/apps/workflows-dashboard/package.json +++ b/apps/workflows-dashboard/package.json @@ -16,6 +16,7 @@ "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.0.1", "@radix-ui/react-popover": "^1.0.6", "@radix-ui/react-select": "^1.2.1", "@radix-ui/react-separator": "^1.0.2", @@ -34,12 +35,14 @@ "react": "^18.2.0", "react-custom-scrollbars": "^4.2.1", "react-dom": "^18.2.0", + "react-hook-form": "^7.43.9", "react-router-dom": "^6.11.2", "recharts": "^2.7.2", "tailwind-merge": "^1.13.2", "tailwindcss-animate": "^1.0.5", "use-query-params": "^2.2.1", - "zod": "^3.21.4" + "zod": "^3.21.4", + "vite-plugin-terminal": "^1.1.0" }, "devDependencies": { "@types/axios": "^0.14.0", diff --git a/apps/workflows-dashboard/src/common/env/env.ts b/apps/workflows-dashboard/src/common/env/env.ts new file mode 100644 index 0000000000..aee1e5c67b --- /dev/null +++ b/apps/workflows-dashboard/src/common/env/env.ts @@ -0,0 +1,25 @@ +import type { ZodFormattedError } from 'zod'; +import { EnvSchema } from './schema'; +import { terminal } from 'virtual:terminal'; + +export const formatErrors = (errors: ZodFormattedError<Map<string, string>, string>) => { + console.info({ + errors, + }); + + return Object.entries(errors) + .map(([name, value]) => { + if (value && '_errors' in value) return `${name}: ${value._errors.join(', ')}\n`; + }) + .filter(Boolean); +}; + +const _env = EnvSchema.safeParse(import.meta.env); + +// TypeScript complains with !env.success +if (_env.success === false) { + terminal.error('❌ Invalid environment variables:\n', ...formatErrors(_env.error.format())); + throw new Error('Invalid environment variables'); +} + +export const env = _env.data; diff --git a/apps/workflows-dashboard/src/common/env/schema.ts b/apps/workflows-dashboard/src/common/env/schema.ts new file mode 100644 index 0000000000..e3af92172b --- /dev/null +++ b/apps/workflows-dashboard/src/common/env/schema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +export const EnvSchema = z.object({ + MODE: z.enum(['development', 'production', 'test']), + VITE_API_URL: z.string().url().default('https://api-dev.ballerine.io/v2'), + VITE_IMAGE_LOGO_URL: z.string().optional(), +}); diff --git a/apps/workflows-dashboard/src/common/errors/http-error.ts b/apps/workflows-dashboard/src/common/errors/http-error.ts new file mode 100644 index 0000000000..20e4afdb9e --- /dev/null +++ b/apps/workflows-dashboard/src/common/errors/http-error.ts @@ -0,0 +1,5 @@ +export class HttpError extends Error { + constructor(public code: number, public message: string) { + super(message); + } +} diff --git a/apps/workflows-dashboard/src/common/hocs/withSessionProtected/index.ts b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/index.ts new file mode 100644 index 0000000000..bb66280e46 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/index.ts @@ -0,0 +1 @@ +export * from './withSessionProtected'; diff --git a/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/clear-referer-url.ts b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/clear-referer-url.ts new file mode 100644 index 0000000000..6825c6e25a --- /dev/null +++ b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/clear-referer-url.ts @@ -0,0 +1,3 @@ +export function clearRefererUrl(): void { + localStorage.removeItem('_ref'); +} diff --git a/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/get-referer-url.ts b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/get-referer-url.ts new file mode 100644 index 0000000000..453ab58f2b --- /dev/null +++ b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/get-referer-url.ts @@ -0,0 +1,3 @@ +export function getRefererUrl(): string | null { + return localStorage.getItem('_ref') || null; +} diff --git a/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/set-referer-url.ts b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/set-referer-url.ts new file mode 100644 index 0000000000..a211c055af --- /dev/null +++ b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/utils/set-referer-url.ts @@ -0,0 +1,3 @@ +export function setRefererUrl(url: string) { + localStorage.setItem('_ref', url); +} diff --git a/apps/workflows-dashboard/src/common/hocs/withSessionProtected/withSessionProtected.tsx b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/withSessionProtected.tsx new file mode 100644 index 0000000000..44447418f1 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hocs/withSessionProtected/withSessionProtected.tsx @@ -0,0 +1,35 @@ +import { setRefererUrl } from '@app/common/hocs/withSessionProtected/utils/set-referer-url'; +import { useSession } from '@app/common/hooks/useSession'; +import { LoadingSpinner } from '@app/components/atoms/LoadingSpinner'; +import { useLayoutEffect } from 'react'; +import { Navigate } from 'react-router-dom'; + +export function withSessionProtected<TComponentProps extends object>( + Component: React.ComponentType<TComponentProps>, + signinPath = '/auth/signin', +): React.ComponentType<TComponentProps> { + function Wrapper(props: TComponentProps) { + const { isAuthenticated, isLoading } = useSession(); + + useLayoutEffect(() => { + if (!isLoading && !isAuthenticated && location.pathname !== signinPath) { + setRefererUrl(location.pathname); + } + }, [isAuthenticated, isLoading]); + + if (isLoading) { + return ( + <div className="flex h-full flex-col items-center justify-center"> + <LoadingSpinner /> + </div> + ); + } + + if (!isAuthenticated) return <Navigate to={signinPath} />; + + return <Component {...props} />; + } + Wrapper.displayName = `withSessionProtected(${Component.displayName})`; + + return Wrapper; +} diff --git a/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/index.ts b/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/index.ts new file mode 100644 index 0000000000..baf8cefcbc --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/index.ts @@ -0,0 +1 @@ +export * from './useLogoutMutation'; diff --git a/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/useLogoutMutation.ts b/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/useLogoutMutation.ts new file mode 100644 index 0000000000..3b483bf159 --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useLogoutMutation/useLogoutMutation.ts @@ -0,0 +1,15 @@ +import { fetchLogout } from '@app/domains/auth/api/logout'; +import { sessionKeys } from '@app/domains/auth/api/session/query-keys'; +import { queryClient } from '@app/lib/react-query/query-client'; +import { useMutation } from '@tanstack/react-query'; + +export function useLogoutMutation() { + const { mutate } = useMutation({ + mutationFn: fetchLogout, + onSuccess: () => queryClient.invalidateQueries(sessionKeys.details()), + }); + + return { + logout: mutate, + }; +} diff --git a/apps/workflows-dashboard/src/common/hooks/useSession/index.ts b/apps/workflows-dashboard/src/common/hooks/useSession/index.ts new file mode 100644 index 0000000000..c47a6987dd --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSession/index.ts @@ -0,0 +1 @@ +export * from './useSession'; diff --git a/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts b/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts new file mode 100644 index 0000000000..51d169a0bd --- /dev/null +++ b/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts @@ -0,0 +1,24 @@ +import { sessionKeys } from '@app/domains/auth/api/session/query-keys'; +import { useQuery } from '@tanstack/react-query'; + +const ONE_MINUTE_IN_MS = 1000 * 60; + +export function useSession() { + const { + data: user, + isLoading, + refetch, + } = useQuery({ + ...sessionKeys.details(), + refetchInterval: ONE_MINUTE_IN_MS, + }); + + const isAuthenticated = Boolean(!isLoading && user); + + return { + isLoading, + isAuthenticated, + user, + refresh: refetch, + }; +} diff --git a/apps/workflows-dashboard/src/common/utils/ctw/ctw.ts b/apps/workflows-dashboard/src/common/utils/ctw/ctw.ts new file mode 100644 index 0000000000..f344e541d2 --- /dev/null +++ b/apps/workflows-dashboard/src/common/utils/ctw/ctw.ts @@ -0,0 +1,4 @@ +import { ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export const ctw = (...classNames: Array<ClassValue>) => twMerge(clsx(classNames)); diff --git a/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Description.tsx b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Description.tsx new file mode 100644 index 0000000000..05f5ce3ac1 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Description.tsx @@ -0,0 +1,10 @@ +import { ctw } from '@app/common/utils/ctw/ctw'; +import { forwardRef, HTMLAttributes } from 'react'; + +export const AlertDescription = forwardRef< + HTMLParagraphElement, + HTMLAttributes<HTMLParagraphElement> +>(({ className, ...props }, ref) => ( + <div ref={ref} className={ctw('text-sm [&_p]:leading-relaxed', className)} {...props} /> +)); +AlertDescription.displayName = 'AlertDescription'; diff --git a/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Title.tsx b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Title.tsx new file mode 100644 index 0000000000..e32c592427 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.Title.tsx @@ -0,0 +1,13 @@ +import { ctw } from '@app/common/utils/ctw/ctw'; +import { forwardRef, HTMLAttributes } from 'react'; + +export const AlertTitle = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLHeadingElement>>( + ({ className, ...props }, ref) => ( + <h5 + ref={ref} + className={ctw('mb-1 font-medium leading-none tracking-tight', className)} + {...props} + /> + ), +); +AlertTitle.displayName = 'AlertTitle'; diff --git a/apps/workflows-dashboard/src/components/atoms/Alert/Alert.tsx b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.tsx new file mode 100644 index 0000000000..80f62dc378 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Alert/Alert.tsx @@ -0,0 +1,27 @@ +import { forwardRef, HTMLAttributes } from 'react'; +import { cva, VariantProps } from 'class-variance-authority'; +import { ctw } from '@app/common/utils/ctw/ctw'; + +const alertVariants = cva( + 'relative w-full rounded-lg border p-4 [&>svg]:absolute [&>svg]:text-foreground [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11', + { + variants: { + variant: { + default: 'bg-background text-foreground', + destructive: + 'text-destructive border-destructive/50 dark:border-destructive [&>svg]:text-destructive text-destructive', + }, + }, + defaultVariants: { + variant: 'default', + }, + }, +); + +export const Alert = forwardRef< + HTMLDivElement, + HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants> +>(({ className, variant, ...props }, ref) => ( + <div ref={ref} role="alert" className={ctw(alertVariants({ variant }), className)} {...props} /> +)); +Alert.displayName = 'Alert'; diff --git a/apps/workflows-dashboard/src/components/atoms/ErrorAlert/ErrorAlert.tsx b/apps/workflows-dashboard/src/components/atoms/ErrorAlert/ErrorAlert.tsx new file mode 100644 index 0000000000..823d2378fb --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/ErrorAlert/ErrorAlert.tsx @@ -0,0 +1,20 @@ +import { Alert } from '../Alert/Alert'; +import { AlertCircle } from 'lucide-react'; +import { AlertTitle } from '../Alert/Alert.Title'; +import { AlertDescription } from '../Alert/Alert.Description'; + +interface Props { + children: React.ReactNode; +} + +export const ErrorAlert = ({ children }: Props) => { + return ( + <div className={`mt-3 mb-1`}> + <Alert variant={`destructive`} className={`w-full max-w-lg`}> + <AlertCircle className="h-4 w-4" /> + <AlertTitle>Error</AlertTitle> + <AlertDescription>{children}</AlertDescription> + </Alert> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/atoms/Label/Label.tsx b/apps/workflows-dashboard/src/components/atoms/Label/Label.tsx new file mode 100644 index 0000000000..a4872f05f2 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/Label/Label.tsx @@ -0,0 +1,16 @@ +import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'; +import * as LabelPrimitive from '@radix-ui/react-label'; +import { cva, VariantProps } from 'class-variance-authority'; +import { ctw } from '@app/common/utils/ctw/ctw'; + +const labelVariants = cva( + 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70', +); + +export const Label = forwardRef< + ElementRef<typeof LabelPrimitive.Root>, + ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants> +>(({ className, ...props }, ref) => ( + <LabelPrimitive.Root ref={ref} className={ctw(labelVariants(), className)} {...props} /> +)); +Label.displayName = LabelPrimitive.Root.displayName; diff --git a/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/BallerineLogo.tsx b/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/BallerineLogo.tsx new file mode 100644 index 0000000000..80612e5eb9 --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/BallerineLogo.tsx @@ -0,0 +1,51 @@ +import { FunctionComponent, SVGProps } from 'react'; + +/** + * @description The Ballerine logo SVG found in Ballerine's Figma design. + * @param props + * @constructor + */ +export const BallerineLogo: FunctionComponent<SVGProps<SVGSVGElement>> = props => { + return ( + <svg + width="153" + height="34" + viewBox="0 0 153 34" + fill="none" + xmlns="http://www.w3.org/2000/svg" + {...props} + > + <g clipPath="url(#clip0_2190_10239)"> + <path + d="M15.0495 34C11.7759 34 9.24159 32.4362 7.99481 31.4763C7.16779 30.8415 7.02056 29.6617 7.66275 28.8443C8.30493 28.0268 9.49847 27.8812 10.3223 28.516C11.2151 29.2034 13.0571 30.343 15.3283 30.2439C19.1689 30.0767 22.7996 26.528 22.7996 22.9392C22.7996 21.1494 22.4644 19.9634 21.5622 18.5699L21.5278 18.5142C19.786 15.6004 16.0112 13.6402 12.1361 13.6402C11.1776 13.6402 10.2879 13.7641 9.48907 14.0118C8.48976 14.3215 7.4278 13.7703 7.11454 12.7825C6.80127 11.7947 7.35888 10.7419 8.35819 10.4353C9.52353 10.0761 10.7922 9.89343 12.133 9.89343C17.3708 9.89343 22.3266 12.5162 24.77 16.5789C26.0575 18.5823 26.5838 20.4279 26.5838 22.9392C26.5838 28.4727 21.2928 33.7399 15.4849 33.9907C15.3346 33.9969 15.1873 34 15.0401 34H15.0495Z" + fill="currentColor" + /> + <path + d="M6.81973 26.2184C2.93214 26.2184 0 23.3727 0 19.6011C0 18.1736 0.523149 16.7244 1.55692 15.2938L1.59451 15.2442C1.71668 15.0708 1.85138 14.9005 1.99548 14.7302C2.09573 14.6095 2.42152 14.2224 2.94467 13.7207C3.6965 12.9993 4.8963 13.0178 5.6262 13.761C6.3561 14.5042 6.33731 15.6901 5.58548 16.4116C5.17197 16.808 4.94015 17.0929 4.93702 17.096L4.89316 17.1486C4.82111 17.2291 4.75846 17.3096 4.70521 17.3871L4.64255 17.4769C4.43267 17.7679 3.79048 18.6535 3.79048 19.6042C3.79048 21.2918 5.03413 22.4716 6.81973 22.4716C8.80582 22.4716 12.6339 21.9328 15.9451 18.3191L15.967 18.2974L16.5183 17.7153C17.2326 16.9597 18.4324 16.9195 19.1999 17.6286C19.9642 18.3346 20.005 19.5206 19.2876 20.2792L18.7488 20.849C14.4602 25.5217 9.43548 26.2215 6.82286 26.2215L6.81973 26.2184Z" + fill="currentColor" + /> + <path + d="M9.12705 20.0439C8.19979 20.0439 7.38844 19.372 7.25373 18.4368C6.76818 15.1018 6.60841 12.0703 6.76504 9.16576C6.79324 4.10601 10.9659 0 16.0877 0C21.2096 0 25.4136 4.13388 25.4136 9.2184C25.4136 12.1849 24.5678 13.9375 23.2019 15.8047C22.5879 16.6439 21.4007 16.8297 20.5549 16.2228C19.7059 15.6158 19.518 14.4454 20.132 13.6062C21.1438 12.2251 21.6231 11.2157 21.6231 9.2184C21.6231 6.20237 19.1421 3.74991 16.0909 3.74991C13.0397 3.74991 10.5587 6.20237 10.5587 9.2184V9.32058C10.4083 11.9898 10.5555 14.7953 11.0066 17.9011C11.157 18.9261 10.4365 19.8767 9.39958 20.0253C9.30874 20.0377 9.21789 20.0439 9.12705 20.0439V20.0439Z" + fill="currentColor" + /> + <path + d="M16.4715 17.7618L17.64 16.486C17.8154 16.3126 18.2602 16.2971 18.4701 16.486C18.7458 16.7337 19.2658 17.2942 19.6511 18.2913C19.8516 18.8146 15.964 19.5144 16.4715 17.7649V17.7618Z" + fill="currentColor" + /> + <path + d="M2.87011 13.7703C3.50603 13.1789 4.2234 12.7578 4.87499 12.541C5.36994 12.3769 5.9996 12.3614 6.04346 13.0086C6.09045 13.7208 6.1625 14.5321 6.15937 15.0089C6.15937 15.5663 1.74863 15.2133 2.87011 13.7703Z" + fill="currentColor" + /> + </g> + <path + d="M41.0478 27.359H47.4084C52.0393 27.359 54.2711 25.0993 54.2711 21.8353C54.2711 19.0177 52.4857 17.3717 50.4492 16.8417C51.8441 16.2279 53.0158 14.8052 53.0158 12.7407C53.0158 10.1184 51.2024 7.8308 47.6316 7.8308H41.0478C40.7967 7.8308 40.6293 7.99819 40.6293 8.24926V26.9405C40.6293 27.1916 40.7967 27.359 41.0478 27.359ZM44.5628 23.8439V18.6829H47.1294C49.0543 18.6829 50.226 19.464 50.226 21.2495C50.226 23.0349 49.0543 23.8439 47.1294 23.8439H44.5628ZM44.5628 15.5863V11.3459H46.8504C48.329 11.3459 49.2496 11.8759 49.2496 13.3824C49.2496 14.9168 48.329 15.5863 46.8504 15.5863H44.5628ZM62.6626 27.6938C64.6991 27.6938 66.1777 26.829 67.1262 25.4341L67.182 26.9405C67.182 27.1916 67.3494 27.359 67.6005 27.359H70.3065C70.5576 27.359 70.7529 27.1916 70.7529 26.9405V14.1077C70.7529 13.8566 70.5855 13.6893 70.3344 13.6893H67.6005C67.3494 13.6893 67.182 13.8566 67.182 14.1077L67.1262 15.6142C66.2056 14.1914 64.727 13.3545 62.6626 13.3545C58.8128 13.3545 56.1625 16.479 56.1625 20.5241C56.1625 24.5972 58.8128 27.6938 62.6626 27.6938ZM59.9287 20.5241C59.9287 18.3481 61.4351 16.8696 63.4716 16.8696C65.5081 16.8696 66.9309 18.3202 66.9309 20.5241C66.9309 22.728 65.5081 24.1787 63.4716 24.1787C61.4351 24.1787 59.9287 22.728 59.9287 20.5241ZM74.4964 27.359H77.5372C77.7883 27.359 77.9556 27.1916 77.9556 26.9405V7.8308C77.9556 7.57972 77.7883 7.41234 77.5372 7.41234H74.4964C74.2453 7.41234 74.0779 7.57972 74.0779 7.8308V26.9405C74.0779 27.1916 74.2453 27.359 74.4964 27.359ZM81.6887 27.359H84.7295C84.9806 27.359 85.1479 27.1916 85.1479 26.9405V7.8308C85.1479 7.57972 84.9806 7.41234 84.7295 7.41234H81.6887C81.4376 7.41234 81.2702 7.57972 81.2702 7.8308V26.9405C81.2702 27.1916 81.4376 27.359 81.6887 27.359ZM95.2695 27.6938C97.1944 27.6938 98.9519 27.1358 100.124 25.9641C100.375 25.741 100.403 25.5457 100.263 25.3504L99.2309 23.9276C99.0914 23.7323 98.9519 23.7044 98.7567 23.816C97.6408 24.4577 96.6365 24.653 95.5764 24.653C93.3725 24.653 91.9497 23.7044 91.5312 21.9748H99.8447C101.044 21.9748 101.351 21.2216 101.351 19.8825C101.351 16.4232 98.9519 13.3545 94.7952 13.3545C90.5827 13.3545 87.7651 16.4511 87.7651 20.4683C87.7651 24.5972 90.778 27.6938 95.2695 27.6938ZM91.4754 19.2688C91.8102 17.4554 93.1214 16.5348 94.8231 16.5348C96.4691 16.5348 97.6966 17.4554 97.9197 19.2688H91.4754ZM104.355 27.359H107.368C107.619 27.359 107.787 27.1916 107.787 26.9405V20.1057C107.787 18.1529 108.791 16.8975 110.688 16.8975C111.079 16.8975 111.385 16.9533 111.692 17.037C112.055 17.1206 112.25 17.037 112.25 16.7022V14.2472C112.25 13.9961 112.195 13.8288 111.999 13.6893C111.776 13.5219 111.385 13.3545 110.744 13.3545C109.126 13.3545 108.261 14.4425 107.787 15.8932L107.675 14.1356C107.647 13.8009 107.508 13.6893 107.257 13.6893H104.355C104.104 13.6893 103.937 13.8566 103.937 14.1077V26.9405C103.937 27.1916 104.104 27.359 104.355 27.359ZM116.706 11.2622C117.934 11.2622 118.826 10.3137 118.826 9.11408C118.826 7.94239 117.934 6.99388 116.706 6.99388C115.479 6.99388 114.558 7.94239 114.558 9.11408C114.558 10.3137 115.479 11.2622 116.706 11.2622ZM114.753 26.9405C114.753 27.1916 114.921 27.359 115.172 27.359H118.213C118.464 27.359 118.631 27.1916 118.631 26.9405V14.1077C118.631 13.8566 118.464 13.6893 118.213 13.6893H115.172C114.921 13.6893 114.753 13.8566 114.753 14.1077V26.9405ZM122.391 27.359H125.404C125.655 27.359 125.822 27.1916 125.822 26.9405V19.8546C125.822 17.9297 126.882 16.8975 128.5 16.8975C130.146 16.8975 131.039 17.9297 131.039 19.8546V26.9405C131.039 27.1916 131.206 27.359 131.457 27.359H134.442C134.693 27.359 134.889 27.1916 134.889 26.9405V18.9898C134.889 15.4189 132.796 13.3545 129.951 13.3545C127.914 13.3545 126.603 14.3588 125.822 15.7537L125.71 14.1356C125.71 13.8009 125.543 13.6893 125.292 13.6893H122.391C122.14 13.6893 121.972 13.8566 121.972 14.1077V26.9405C121.972 27.1916 122.14 27.359 122.391 27.359ZM144.989 27.6938C146.914 27.6938 148.672 27.1358 149.843 25.9641C150.094 25.741 150.122 25.5457 149.983 25.3504L148.95 23.9276C148.811 23.7323 148.672 23.7044 148.476 23.816C147.36 24.4577 146.356 24.653 145.296 24.653C143.092 24.653 141.669 23.7044 141.251 21.9748H149.564C150.764 21.9748 151.071 21.2216 151.071 19.8825C151.071 16.4232 148.672 13.3545 144.515 13.3545C140.302 13.3545 137.485 16.4511 137.485 20.4683C137.485 24.5972 140.498 27.6938 144.989 27.6938ZM141.195 19.2688C141.53 17.4554 142.841 16.5348 144.543 16.5348C146.189 16.5348 147.416 17.4554 147.639 19.2688H141.195Z" + fill="currentColor" + /> + <defs> + <clipPath id="clip0_2190_10239"> + <rect width="26.5897" height="34" fill="white" /> + </clipPath> + </defs> + </svg> + ); +}; diff --git a/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/index.ts b/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/index.ts new file mode 100644 index 0000000000..655531d17f --- /dev/null +++ b/apps/workflows-dashboard/src/components/atoms/icons/BallerineLogo/index.ts @@ -0,0 +1 @@ +export * from './BallerineLogo'; diff --git a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx index 436a622b01..ca3b51a1a6 100644 --- a/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx +++ b/apps/workflows-dashboard/src/components/layouts/DashboardLayout/DashboardLayout.tsx @@ -1,4 +1,4 @@ -import { Header } from '@app/components/molecules/Header'; +import { Header } from '@app/components/organisms/Header'; import { QueryParamProvider } from 'use-query-params'; import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; diff --git a/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx b/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx index a516dfbc62..b163272e83 100644 --- a/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx +++ b/apps/workflows-dashboard/src/components/molecules/Header/Header.tsx @@ -1,14 +1,16 @@ +import { useLogoutMutation } from '@app/common/hooks/useLogoutMutation'; import { Input } from '@app/components/atoms/Input'; import { headerNavigationLinks } from '@app/components/molecules/Header/header-navigation-links'; import { Navigation } from '@app/components/molecules/Navigation'; import { UserNavigation } from '@app/components/molecules/UserNavigation'; export const Header = () => { + const { logout } = useLogoutMutation(); return ( <div className="border-b"> <div className="flex h-16 flex-nowrap items-center justify-between px-4"> <div className="flex flex-1 gap-4"> - <UserNavigation /> + <UserNavigation onLogout={logout} /> <Navigation items={headerNavigationLinks} /> </div> <div className="flex gap-4"> diff --git a/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx b/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx index b8a1f3056b..566cdf3b07 100644 --- a/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx +++ b/apps/workflows-dashboard/src/components/molecules/UserNavigation/UserNavigation.tsx @@ -13,7 +13,11 @@ import { import { Button } from '@app/components/atoms/Button'; import { Avatar, AvatarFallback, AvatarImage } from '@app/components/atoms/Avatar'; -export function UserNavigation() { +interface Props { + onLogout: () => void; +} + +export function UserNavigation({ onLogout }: Props) { return ( <DropdownMenu> <DropdownMenuTrigger asChild> @@ -54,7 +58,7 @@ export function UserNavigation() { </DropdownMenuItem> </DropdownMenuGroup> <DropdownMenuSeparator /> - <DropdownMenuItem> + <DropdownMenuItem onSelect={onLogout}> <LogOut className="mr-2 h-4 w-4" /> <span>Log out</span> <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut> diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Control.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Control.tsx new file mode 100644 index 0000000000..bcb5e54041 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Control.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { useFormField } from './hooks/useFormField/useFormField'; + +export const FormControl = React.forwardRef< + React.ElementRef<typeof Slot>, + React.ComponentPropsWithoutRef<typeof Slot> +>(({ ...props }, ref) => { + const { error, formItemId, formDescriptionId, formMessageId } = useFormField(); + + return ( + <Slot + ref={ref} + id={formItemId} + aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`} + aria-invalid={!!error} + {...props} + /> + ); +}); +FormControl.displayName = 'FormControl'; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Description.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Description.tsx new file mode 100644 index 0000000000..b9d9b65949 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Description.tsx @@ -0,0 +1,20 @@ +import { ctw } from '@app/common/utils/ctw/ctw'; +import * as React from 'react'; +import { useFormField } from './hooks/useFormField/useFormField'; + +export const FormDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes<HTMLParagraphElement> +>(({ className, ...props }, ref) => { + const { formDescriptionId } = useFormField(); + + return ( + <p + ref={ref} + id={formDescriptionId} + className={ctw('text-muted-foreground text-sm', className)} + {...props} + /> + ); +}); +FormDescription.displayName = 'FormDescription'; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Field.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Field.tsx new file mode 100644 index 0000000000..5481e2b1b9 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Field.tsx @@ -0,0 +1,15 @@ +import { Controller, ControllerProps, FieldPath, FieldValues } from 'react-hook-form'; +import { FormFieldContext } from './Form.FieldContext'; + +export const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, +>({ + ...props +}: ControllerProps<TFieldValues, TName>) => { + return ( + <FormFieldContext.Provider value={{ name: props.name }}> + <Controller {...props} /> + </FormFieldContext.Provider> + ); +}; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.FieldContext.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.FieldContext.tsx new file mode 100644 index 0000000000..081e9659e7 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.FieldContext.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import { FormFieldContextValue } from './types'; + +export const FormFieldContext = React.createContext<FormFieldContextValue>( + {} as FormFieldContextValue, +); diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Item.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Item.tsx new file mode 100644 index 0000000000..36ec49c81d --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Item.tsx @@ -0,0 +1,16 @@ +import { ctw } from '@app/common/utils/ctw/ctw'; +import * as React from 'react'; +import { FormItemContext } from './Form.ItemContext'; + +export const FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>( + ({ className, ...props }, ref) => { + const id = React.useId(); + + return ( + <FormItemContext.Provider value={{ id }}> + <div ref={ref} className={ctw('space-y-2', className)} {...props} /> + </FormItemContext.Provider> + ); + }, +); +FormItem.displayName = 'FormItem'; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.ItemContext.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.ItemContext.tsx new file mode 100644 index 0000000000..4d3f369c5a --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.ItemContext.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import { FormItemContextValue } from './types'; + +export const FormItemContext = React.createContext<FormItemContextValue>( + {} as FormItemContextValue, +); diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Label.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Label.tsx new file mode 100644 index 0000000000..b6f4ed1dba --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Label.tsx @@ -0,0 +1,22 @@ +import * as React from 'react'; +import * as LabelPrimitive from '@radix-ui/react-label'; +import { useFormField } from './hooks/useFormField/useFormField'; +import { Label } from '@app/components/atoms/Label/Label'; +import { ctw } from '@app/common/utils/ctw/ctw'; + +export const FormLabel = React.forwardRef< + React.ElementRef<typeof LabelPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField(); + + return ( + <Label + ref={ref} + className={ctw(error && 'text-destructive', className)} + htmlFor={formItemId} + {...props} + /> + ); +}); +FormLabel.displayName = 'FormLabel'; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.Message.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.Message.tsx new file mode 100644 index 0000000000..3a8cdc246d --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.Message.tsx @@ -0,0 +1,27 @@ +import { ctw } from '@app/common/utils/ctw/ctw'; +import * as React from 'react'; +import { useFormField } from './hooks/useFormField/useFormField'; + +export const FormMessage = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes<HTMLParagraphElement> +>(({ className, children, ...props }, ref) => { + const { error, formMessageId } = useFormField(); + const body = error ? String(error?.message) : children; + + if (!body) { + return null; + } + + return ( + <p + ref={ref} + id={formMessageId} + className={ctw('text-destructive text-sm font-medium', className)} + {...props} + > + {body} + </p> + ); +}); +FormMessage.displayName = 'FormMessage'; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/Form.tsx b/apps/workflows-dashboard/src/components/organisms/Form/Form.tsx new file mode 100644 index 0000000000..287908ec98 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/Form.tsx @@ -0,0 +1,3 @@ +import { FormProvider } from 'react-hook-form'; + +export const Form = FormProvider; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/hooks/useFormField/useFormField.tsx b/apps/workflows-dashboard/src/components/organisms/Form/hooks/useFormField/useFormField.tsx new file mode 100644 index 0000000000..ed68a2c47a --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/hooks/useFormField/useFormField.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { useFormContext } from 'react-hook-form'; +import { FormFieldContext } from '../../Form.FieldContext'; +import { FormItemContext } from '../../Form.ItemContext'; + +export const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext); + const itemContext = React.useContext(FormItemContext); + const { getFieldState, formState } = useFormContext(); + + const fieldState = getFieldState(fieldContext.name, formState); + + if (!fieldContext) { + throw new Error('useFormField should be used within <FormField>'); + } + + const { id } = itemContext; + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + }; +}; diff --git a/apps/workflows-dashboard/src/components/organisms/Form/types.ts b/apps/workflows-dashboard/src/components/organisms/Form/types.ts new file mode 100644 index 0000000000..f1751cb966 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Form/types.ts @@ -0,0 +1,12 @@ +import { FieldPath, FieldValues } from 'react-hook-form'; + +export type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, +> = { + name: TName; +}; + +export type FormItemContextValue = { + id: string; +}; diff --git a/apps/workflows-dashboard/src/components/organisms/Header/Header.tsx b/apps/workflows-dashboard/src/components/organisms/Header/Header.tsx new file mode 100644 index 0000000000..23a34d24e0 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Header/Header.tsx @@ -0,0 +1,25 @@ +import { useLogoutMutation } from '@app/common/hooks/useLogoutMutation'; +import { Input } from '@app/components/atoms/Input'; +import { Navigation } from '@app/components/molecules/Navigation'; +import { UserNavigation } from '@app/components/molecules/UserNavigation'; +import { headerNavigationLinks } from './header-navigation-links'; + +export const Header = () => { + const { logout } = useLogoutMutation(); + + return ( + <div className="border-b"> + <div className="flex h-16 flex-nowrap items-center justify-between px-4"> + <div className="flex flex-1 gap-4"> + <UserNavigation onLogout={logout} /> + <Navigation items={headerNavigationLinks} /> + </div> + <div className="flex gap-4"> + <div> + <Input placeholder="Search" /> + </div> + </div> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/components/organisms/Header/header-navigation-links.ts b/apps/workflows-dashboard/src/components/organisms/Header/header-navigation-links.ts new file mode 100644 index 0000000000..2963b14c96 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Header/header-navigation-links.ts @@ -0,0 +1,12 @@ +import { NavigationLink } from '@app/components/molecules/Navigation'; + +export const headerNavigationLinks: NavigationLink[] = [ + { + path: '/overview', + label: 'Overview', + }, + { + path: '/workflows', + label: 'Workflows', + }, +]; diff --git a/apps/workflows-dashboard/src/components/organisms/Header/index.ts b/apps/workflows-dashboard/src/components/organisms/Header/index.ts new file mode 100644 index 0000000000..266dec8a1b --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/Header/index.ts @@ -0,0 +1 @@ +export * from './Header'; diff --git a/apps/workflows-dashboard/src/domains/auth/api/login/index.ts b/apps/workflows-dashboard/src/domains/auth/api/login/index.ts new file mode 100644 index 0000000000..496bc6e43a --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/login/index.ts @@ -0,0 +1,2 @@ +export * from './login.api'; +export * from './login.types'; diff --git a/apps/workflows-dashboard/src/domains/auth/api/login/login.api.ts b/apps/workflows-dashboard/src/domains/auth/api/login/login.api.ts new file mode 100644 index 0000000000..75bf9ce709 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/login/login.api.ts @@ -0,0 +1,8 @@ +import { GetSignInDto, GetSignInResponse } from '@app/domains/auth/api/login/login.types'; +import { request } from '@app/lib/request'; + +export async function fetchSignIn(dto: GetSignInDto): Promise<GetSignInResponse> { + const result = await request.post<GetSignInResponse>('internal/auth/login', dto); + + return result.data; +} diff --git a/apps/workflows-dashboard/src/domains/auth/api/login/login.types.ts b/apps/workflows-dashboard/src/domains/auth/api/login/login.types.ts new file mode 100644 index 0000000000..edf4260dd4 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/login/login.types.ts @@ -0,0 +1,10 @@ +import { IUser } from '@app/domains/auth/common/types'; + +export interface GetSignInDto { + email: string; + password: string; +} + +export interface GetSignInResponse { + user: IUser; +} diff --git a/apps/workflows-dashboard/src/domains/auth/api/logout/index.ts b/apps/workflows-dashboard/src/domains/auth/api/logout/index.ts new file mode 100644 index 0000000000..691c49bae5 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/logout/index.ts @@ -0,0 +1 @@ +export * from './logout.api'; diff --git a/apps/workflows-dashboard/src/domains/auth/api/logout/logout.api.ts b/apps/workflows-dashboard/src/domains/auth/api/logout/logout.api.ts new file mode 100644 index 0000000000..2bc0917226 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/logout/logout.api.ts @@ -0,0 +1,7 @@ +import { request } from '@app/lib/request'; + +export async function fetchLogout(): Promise<boolean> { + await request.post('/internal/auth/logout'); + + return true; +} diff --git a/apps/workflows-dashboard/src/domains/auth/api/session/index.ts b/apps/workflows-dashboard/src/domains/auth/api/session/index.ts new file mode 100644 index 0000000000..1c393ebff5 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/session/index.ts @@ -0,0 +1 @@ +export * from './session.api'; diff --git a/apps/workflows-dashboard/src/domains/auth/api/session/query-keys.ts b/apps/workflows-dashboard/src/domains/auth/api/session/query-keys.ts new file mode 100644 index 0000000000..c442aaaac4 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/session/query-keys.ts @@ -0,0 +1,9 @@ +import { fetchSession } from '@app/domains/auth/api/session/session.api'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const sessionKeys = createQueryKeys('session', { + details: () => ({ + queryKey: ['session'], + queryFn: fetchSession, + }), +}); diff --git a/apps/workflows-dashboard/src/domains/auth/api/session/session.api.ts b/apps/workflows-dashboard/src/domains/auth/api/session/session.api.ts new file mode 100644 index 0000000000..78793f28b2 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/session/session.api.ts @@ -0,0 +1,9 @@ +import { GetSessionResponse } from '@app/domains/auth/api/session/session.types'; +import { IUser } from '@app/domains/auth/common/types'; +import { request } from '@app/lib/request'; + +export async function fetchSession(): Promise<IUser | null> { + const result = await request.get<GetSessionResponse>('internal/auth/session'); + + return result.data.user ? result.data.user : null; +} diff --git a/apps/workflows-dashboard/src/domains/auth/api/session/session.types.ts b/apps/workflows-dashboard/src/domains/auth/api/session/session.types.ts new file mode 100644 index 0000000000..a6abb7cd14 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/api/session/session.types.ts @@ -0,0 +1,5 @@ +import { IUser } from '@app/domains/auth/common/types'; + +export interface GetSessionResponse { + user?: IUser; +} diff --git a/apps/workflows-dashboard/src/domains/auth/common/types.ts b/apps/workflows-dashboard/src/domains/auth/common/types.ts new file mode 100644 index 0000000000..737861ab56 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/auth/common/types.ts @@ -0,0 +1,7 @@ +export interface IUser { + id: string; + email: string; + firstName: string; + lastName: string; + roles: string[]; +} diff --git a/apps/workflows-dashboard/src/index.css b/apps/workflows-dashboard/src/index.css index a981db0980..81b617783f 100644 --- a/apps/workflows-dashboard/src/index.css +++ b/apps/workflows-dashboard/src/index.css @@ -73,7 +73,10 @@ * { @apply border-border; } - body { + html, + body, + #root { + height: 100%; @apply bg-background text-foreground font-inter; } } diff --git a/apps/workflows-dashboard/src/lib/request/request.ts b/apps/workflows-dashboard/src/lib/request/request.ts index 8d58a1eab4..e31ef1a1c6 100644 --- a/apps/workflows-dashboard/src/lib/request/request.ts +++ b/apps/workflows-dashboard/src/lib/request/request.ts @@ -1,10 +1,13 @@ import axios from 'axios'; -export const request = axios.create({ baseURL: import.meta.env.VITE_API_URL }); +export const request = axios.create({ + baseURL: import.meta.env.VITE_API_URL, + withCredentials: true, +}); request.interceptors.request.use(config => { if (config.headers) { - config.headers['Authorization'] = `Bearer ${import.meta.env.VITE_API_KEY}`; + config.headers['Authorization'] = `Api-Key ${import.meta.env.VITE_API_KEY}`; return config; } return config; diff --git a/apps/workflows-dashboard/src/pages/SignIn/SignIn.tsx b/apps/workflows-dashboard/src/pages/SignIn/SignIn.tsx new file mode 100644 index 0000000000..86fa8ecb7e --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/SignIn.tsx @@ -0,0 +1,54 @@ +import { BallerineLogo } from '@app/components/atoms/icons/BallerineLogo'; +import { env } from '@app/common/env/env'; +import { SignInForm } from '@app/pages/SignIn/components/SignInForm'; +import { useSignInMutation } from '@app/pages/SignIn/hooks/useSignInMutation'; +import { Navigate, useNavigate } from 'react-router-dom'; +import { getRefererUrl } from '@app/common/hocs/withSessionProtected/utils/get-referer-url'; +import { clearRefererUrl } from '@app/common/hocs/withSessionProtected/utils/clear-referer-url'; +import { useSession } from '@app/common/hooks/useSession'; +import { LoadingSpinner } from '@app/components/atoms/LoadingSpinner'; + +export function SignIn() { + const navigate = useNavigate(); + const { isLoading: isLoadingSession, isAuthenticated, refresh } = useSession(); + const { isLoading, errorCode, signIn } = useSignInMutation({ + onSuccess: () => { + refresh(); + const refUrl = getRefererUrl(); + navigate(refUrl || '/'); + + if (refUrl) { + clearRefererUrl(); + } + }, + }); + + if (isLoadingSession) { + return ( + <div className={`flex h-full flex-col items-center justify-center`}> + <LoadingSpinner /> + </div> + ); + } + + if (!isLoadingSession && isAuthenticated) { + return <Navigate to="/" replace />; + } + + return ( + <section className={`flex h-full flex-col items-center justify-center`}> + <div className={`mb-16`}> + {env.VITE_IMAGE_LOGO_URL ? ( + <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> + ) : ( + <BallerineLogo /> + )} + </div> + <SignInForm + isSubmitting={isLoading} + alert={errorCode ? <SignInForm.ErrorAlert errorCode={errorCode} /> : null} + onSubmit={values => signIn(values)} + /> + </section> + ); +} diff --git a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/ErrorAlert.tsx b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/ErrorAlert.tsx new file mode 100644 index 0000000000..6f50ff51f7 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/ErrorAlert.tsx @@ -0,0 +1,21 @@ +import { ErrorAlert } from '@app/components/atoms/ErrorAlert/ErrorAlert'; + +interface Props { + errorCode: number; +} + +const getErrorMessageByErrorCode = (code: number) => { + const defaultMessage = `Something went wrong. Try again later.`; + + const codeToMessageMap: Record<number, string> = { + [401]: 'Invalid credentials', + }; + + return codeToMessageMap[code] || defaultMessage; +}; + +export function FormErrorAlert({ errorCode }: Props) { + return <ErrorAlert>{getErrorMessageByErrorCode(errorCode)}</ErrorAlert>; +} + +FormErrorAlert.displayName = 'FormErrorAlert'; diff --git a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx new file mode 100644 index 0000000000..2ad897c4a1 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx @@ -0,0 +1,75 @@ +import { Button } from '@app/components/atoms/Button'; +import { Card, CardContent, CardHeader } from '@app/components/atoms/Card'; +import { Input } from '@app/components/atoms/Input'; +import { Form } from '@app/components/organisms/Form/Form'; +import { FormControl } from '@app/components/organisms/Form/Form.Control'; +import { FormField } from '@app/components/organisms/Form/Form.Field'; +import { FormItem } from '@app/components/organisms/Form/Form.Item'; +import { FormLabel } from '@app/components/organisms/Form/Form.Label'; +import { FormMessage } from '@app/components/organisms/Form/Form.Message'; +import { SignInFormValues } from '@app/pages/SignIn/components/SignInForm/types'; +import { useForm } from 'react-hook-form'; +import * as classnames from 'classnames'; +import { FormErrorAlert } from '@app/pages/SignIn/components/SignInForm/ErrorAlert'; + +interface Props { + isSubmitting: boolean; + alert?: React.ReactNode; + onSubmit: (values: SignInFormValues) => void; +} + +export function SignInForm({ isSubmitting, alert = null, onSubmit }: Props) { + const form = useForm<SignInFormValues>(); + + return ( + <Card className={`w-full max-w-lg`}> + <CardHeader className={`mb-2 text-center text-4xl font-bold`}>Sign In</CardHeader> + <CardContent> + {alert} + <Form {...form}> + <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8"> + <FormField + control={form.control} + name="email" + render={({ field }) => ( + <FormItem> + <FormLabel>Email</FormLabel> + <FormControl> + <Input required type={'email'} {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <FormField + control={form.control} + name="password" + render={({ field }) => ( + <FormItem> + <FormLabel>Password</FormLabel> + <FormControl> + <Input required type={'password'} {...field} /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <div className={`flex justify-end`}> + <Button + type="submit" + className={classnames(`ms-auto mt-3`, { + ['opacity-50']: isSubmitting, + ['pointer-events-none']: isSubmitting, + })} + > + Sign In + </Button> + </div> + </form> + </Form> + </CardContent> + </Card> + ); +} + +SignInForm.ErrorAlert = FormErrorAlert; diff --git a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/index.ts b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/index.ts new file mode 100644 index 0000000000..85d8e1b31d --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/index.ts @@ -0,0 +1 @@ +export * from './SignInForm'; diff --git a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/types.ts b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/types.ts new file mode 100644 index 0000000000..d1b7e0c2a2 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/types.ts @@ -0,0 +1,4 @@ +export interface SignInFormValues { + email: string; + password: string; +} diff --git a/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/index.ts b/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/index.ts new file mode 100644 index 0000000000..485d6a9894 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/index.ts @@ -0,0 +1 @@ +export * from './useSignInMutation'; diff --git a/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/useSignInMutation.tsx b/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/useSignInMutation.tsx new file mode 100644 index 0000000000..34fca75491 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/hooks/useSignInMutation/useSignInMutation.tsx @@ -0,0 +1,20 @@ +import { fetchSignIn, GetSignInDto, GetSignInResponse } from '@app/domains/auth/api/login'; +import { useMutation } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; + +export interface UseSignInParams { + onSuccess?: () => void; +} + +export function useSignInMutation({ onSuccess }: UseSignInParams) { + const mutation = useMutation<GetSignInResponse, AxiosError, GetSignInDto>({ + mutationFn: fetchSignIn, + onSuccess, + }); + + return { + isLoading: mutation.isLoading, + errorCode: mutation.error?.response ? mutation.error.response.status : null, + signIn: mutation.mutate, + }; +} diff --git a/apps/workflows-dashboard/src/pages/SignIn/index.ts b/apps/workflows-dashboard/src/pages/SignIn/index.ts new file mode 100644 index 0000000000..a573a358ee --- /dev/null +++ b/apps/workflows-dashboard/src/pages/SignIn/index.ts @@ -0,0 +1 @@ +export * from './SignIn'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx index c09cfe7826..87c942db58 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx @@ -1,7 +1,7 @@ import { Pagination } from '@app/components/molecules/Pagination'; import { StatusFilterComponent } from '@app/pages/Workflows/components/molecules/StatusFilterComponent'; import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; -import { useWorkflows } from '@app/pages/Workflows/hooks/useWorkflows'; +import { useWorkflowsQuery } from '@app/pages/Workflows/hooks/useWorkflowsQuery'; import { useWorkflowsFilters } from '@app/pages/Workflows/hooks/useWorkflowsFilters'; import { useCallback } from 'react'; import { WorkflowsList } from '@app/pages/Workflows/components/organisms/WorkflowsList'; @@ -16,7 +16,7 @@ const filterComponents: FilterComponent[] = [StatusFilterComponent]; export const Workflows = () => { const { filters, setFilters } = useWorkflowsFilters(); const { sortingKey, sortingDirection } = useSorting('order_by'); - const { data, isLoading, isFetching } = useWorkflows( + const { data, isLoading, isFetching } = useWorkflowsQuery( filters, sortingKey && sortingDirection ? { orderBy: sortingKey, orderDirection: sortingDirection } diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts deleted file mode 100644 index ade1df322a..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useWorkflows'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/index.ts new file mode 100644 index 0000000000..0d39bd8d2d --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts similarity index 84% rename from apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts rename to apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts index 6b131a50f8..6f20c39be7 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflows/useWorkflows.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts @@ -3,7 +3,7 @@ import { workflowKeys } from '@app/domains/workflows'; import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; import { useQuery } from '@tanstack/react-query'; -export function useWorkflows(query: WorkflowsFilterValues, sortingParams?: SortingParams) { +export function useWorkflowsQuery(query: WorkflowsFilterValues, sortingParams?: SortingParams) { const { isFetching, isLoading, diff --git a/apps/workflows-dashboard/src/router.tsx b/apps/workflows-dashboard/src/router.tsx index ff7763cc48..52301391cc 100644 --- a/apps/workflows-dashboard/src/router.tsx +++ b/apps/workflows-dashboard/src/router.tsx @@ -1,5 +1,7 @@ import { App } from '@app/App'; +import { withSessionProtected } from '@app/common/hocs/withSessionProtected'; import { Overview } from '@app/pages/Overview'; +import { SignIn } from '@app/pages/SignIn'; import { Workflows } from '@app/pages/Workflows'; import { createBrowserRouter, Navigate } from 'react-router-dom'; @@ -12,13 +14,17 @@ export const router = createBrowserRouter([ path: '', element: <Navigate to="/overview" replace />, }, + { + path: '/auth/signin', + Component: SignIn, + }, { path: 'overview', - Component: Overview, + Component: withSessionProtected(Overview), }, { path: 'workflows', - Component: Workflows, + Component: withSessionProtected(Workflows), }, ], }, diff --git a/apps/workflows-dashboard/tsconfig.json b/apps/workflows-dashboard/tsconfig.json index 4b301e4e61..d07cfa4826 100644 --- a/apps/workflows-dashboard/tsconfig.json +++ b/apps/workflows-dashboard/tsconfig.json @@ -21,7 +21,8 @@ "noFallthroughCasesInSwitch": true, "paths": { "@app/*": ["./src/*"] - } + }, + "types": ["node", "jest", "vite-plugin-terminal/client"] }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/apps/workflows-dashboard/vite.config.ts b/apps/workflows-dashboard/vite.config.ts index b8ce71854c..47bec266fb 100644 --- a/apps/workflows-dashboard/vite.config.ts +++ b/apps/workflows-dashboard/vite.config.ts @@ -3,10 +3,22 @@ import react from '@vitejs/plugin-react'; import { resolve } from 'path'; import tailwindcss from 'tailwindcss'; import checker from 'vite-plugin-checker'; +import terminal from 'vite-plugin-terminal'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react(), tailwindcss(), checker({ typescript: true })], + server: { + port: 5200, + }, + plugins: [ + react(), + tailwindcss(), + checker({ typescript: true }), + terminal({ + output: ['console', 'terminal'], + strip: false, + }), + ], resolve: { alias: { '@app': resolve(__dirname, './src'), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3b0823189..b44c7af22f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -324,6 +324,9 @@ importers: '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.1 + version: 2.0.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.6 version: 1.0.6(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) @@ -378,6 +381,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.43.9 + version: 7.43.9(react@18.2.0) react-router-dom: specifier: ^6.11.2 version: 6.11.2(react-dom@18.2.0)(react@18.2.0) @@ -393,6 +399,9 @@ importers: use-query-params: specifier: ^2.2.1 version: 2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0) + vite-plugin-terminal: + specifier: ^1.1.0 + version: 1.1.0(vite@4.3.9) zod: specifier: ^3.21.4 version: 3.21.4 @@ -12735,7 +12744,6 @@ packages: /@types/node@20.3.1: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} - dev: true /@types/node@20.3.2: resolution: {integrity: sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==} @@ -27729,6 +27737,23 @@ packages: - supports-color dev: false + /vite-plugin-terminal@1.1.0(vite@4.3.9): + resolution: {integrity: sha512-W550yBGApBSp67LgqCSSA9u3aMEFFHqTleYMxcVQFf5XCY973bGTSjHW7ZjUsJT3VkiW9mfmc+azhVHvsEMpcg==} + engines: {node: '>=14'} + peerDependencies: + vite: ^2.0.0||^3.0.0||^4.0.0 + dependencies: + '@rollup/plugin-strip': 3.0.2 + debug: 4.3.4(supports-color@8.1.1) + kolorist: 1.7.0 + sirv: 2.0.2 + ufo: 1.1.1 + vite: 4.3.9(@types/node@20.3.1) + transitivePeerDependencies: + - rollup + - supports-color + dev: false + /vite-tsconfig-paths@4.0.7(typescript@4.9.5)(vite@4.2.1): resolution: {integrity: sha512-MwIYaby6kcbQGZqMH+gAK6h0UYQGOkjsuAgw4q6bP/5vWkn8VKvnmLuCQHA2+IzHAJHnE8OFTO4lnJLFMf9+7Q==} peerDependencies: @@ -27942,7 +27967,6 @@ packages: rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 - dev: true /vitefu@0.2.4(vite@3.2.5): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} diff --git a/services/workflows-service/.env.example b/services/workflows-service/.env.example index e2e825b081..9bf390e9c3 100644 --- a/services/workflows-service/.env.example +++ b/services/workflows-service/.env.example @@ -8,6 +8,7 @@ DB_PASSWORD=admin DB_PORT=5432 DB_URL=postgres://admin:admin@localhost:5432/postgres SESSION_SECRET=iGdnj4A0YOhj8dHJK7IWSvQKEZsG7P70FFehuddhFPjtg/bSkzFejYILk4Xue6Ilx9y3IAwzR8pV1gb4 +WORKFLOW_DASHBOARD_CORS_ORIGIN=http://localhost:5174 BACKOFFICE_CORS_ORIGIN=http://localhost:5137 HEADLESS_EXAMPLE_CORS_ORIGIN=http://localhost:5173 API_KEY=secret diff --git a/services/workflows-service/src/env.ts b/services/workflows-service/src/env.ts index e870d6a588..4eaafb05b7 100644 --- a/services/workflows-service/src/env.ts +++ b/services/workflows-service/src/env.ts @@ -22,6 +22,7 @@ export const env = createEnv({ SESSION_SECRET: z.string(), BACKOFFICE_CORS_ORIGIN: z.string().url(), HEADLESS_EXAMPLE_CORS_ORIGIN: z.string().url(), + WORKFLOW_DASHBOARD_CORS_ORIGIN: z.string().url(), AWS_S3_BUCKET_NAME: z.string().optional(), AWS_S3_BUCKET_KEY: z.string().optional(), AWS_S3_BUCKET_SECRET: z.string().optional(), diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 572f70c718..45e86f29f5 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -19,10 +19,11 @@ global.__rootdir__ = __dirname || process.cwd(); const corsOrigins = env.NODE_ENV === 'production' - ? [env.BACKOFFICE_CORS_ORIGIN, /\.ballerine\.app$/] + ? [env.BACKOFFICE_CORS_ORIGIN, env.WORKFLOW_DASHBOARD_CORS_ORIGIN, /\.ballerine\.app$/] : [ env.BACKOFFICE_CORS_ORIGIN, env.HEADLESS_EXAMPLE_CORS_ORIGIN, + env.WORKFLOW_DASHBOARD_CORS_ORIGIN, /\.ballerine\.dev$/, /\.ballerine\.app$/, ]; From d20a9798bfe5e9b2528de787a0fb8bb25e0dbc00 Mon Sep 17 00:00:00 2001 From: Daniel Blokh <35891501+Blokh@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:12:40 +0300 Subject: [PATCH 082/123] blokh/feat/definition-validator (#608) * generated validators for definition, api plugin and webhook * added zod to commons * updated method name to lowercased * feat(ran format): ran format * merged with dev --- .../components/organisms/Modal/Modal.tsx | 2 +- .../pages/Entities/components/Cases/Cases.tsx | 4 +- packages/common/package.json | 3 +- packages/common/src/index.ts | 1 + packages/common/src/utils/index.ts | 1 + .../src/utils/zod-error-to-readable/index.ts | 1 + .../zod-error-to-readable.ts | 9 + .../api-plugin.validator.test.ts | 54 ++++ .../api-plugin.validator.ts | 53 ++++ .../workflow-validators/rule.validator.ts | 0 .../workflow-validators/state.validator.ts | 0 .../webhook-plugin.validator.test.ts | 44 ++++ .../webhook-plugin.validator.ts | 15 ++ .../workflow-definition-validator.test.ts | 93 +++++++ .../workflow-definition-validator.ts | 32 +++ pnpm-lock.yaml | 233 ++++-------------- 16 files changed, 355 insertions(+), 190 deletions(-) create mode 100644 packages/common/src/utils/zod-error-to-readable/index.ts create mode 100644 packages/common/src/utils/zod-error-to-readable/zod-error-to-readable.ts create mode 100644 packages/common/src/validations/workflow-validators/api-plugin.validator.test.ts create mode 100644 packages/common/src/validations/workflow-validators/api-plugin.validator.ts create mode 100644 packages/common/src/validations/workflow-validators/rule.validator.ts create mode 100644 packages/common/src/validations/workflow-validators/state.validator.ts create mode 100644 packages/common/src/validations/workflow-validators/webhook-plugin.validator.test.ts create mode 100644 packages/common/src/validations/workflow-validators/webhook-plugin.validator.ts create mode 100644 packages/common/src/validations/workflow-validators/workflow-definition-validator.test.ts create mode 100644 packages/common/src/validations/workflow-validators/workflow-definition-validator.ts diff --git a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx index 073b5225d2..152336a065 100644 --- a/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/Modal/Modal.tsx @@ -41,7 +41,7 @@ export const Modal: FunctionComponent<IModalProps> = ({ <Dialog.Content className={ctw(`modal-box w-full max-w-7xl`, className)} {...props}> <div className={`flex justify-end`}> <Dialog.Close - className={`btn-ghost btn-square btn-sm btn mb-4 focus:outline-primary`} + className={`btn-ghost btn-sm btn-square btn mb-4 focus:outline-primary`} aria-label={`Close`} > <XMarkSvg /> diff --git a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx index 1f663c6383..e6262a14a8 100644 --- a/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx +++ b/apps/backoffice-v2/src/pages/Entities/components/Cases/Cases.tsx @@ -66,7 +66,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ </div> </div> <div className={`flex items-center justify-between`}> - <div className="dropdown-hover dropdown-bottom dropdown z-[60]"> + <div className="dropdown-hover dropdown dropdown-bottom z-[60]"> <button className={`btn-ghost btn-sm btn h-[2.125rem] gap-2 border-neutral/10 text-xs focus-visible:outline-primary theme-dark:border-neutral/50`} tabIndex={0} @@ -115,7 +115,7 @@ export const Cases: FunctionComponent<ICasesProps> & ICasesChildren = ({ > <div className={`input-group flex items-center`}> <button - className={`btn-ghost btn-square btn-sm btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} + className={`btn-ghost btn-sm btn-square btn !rounded-md focus-visible:border-none focus-visible:bg-neutral/10 focus-visible:outline-none focus-visible:ring-0 focus-visible:theme-dark:bg-neutral`} onClick={onSortDirToggle} ref={sortRef} > diff --git a/packages/common/package.json b/packages/common/package.json index 40045d541e..c8d7381d97 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -68,7 +68,8 @@ "ts-node": "^10.9.1", "typescript": "4.9.5", "vite": "^4.1.1", - "vitest": "^0.28.4" + "vitest": "^0.28.4", + "zod": "^3.21.4" }, "dependencies": { "ajv": "^8.12.0", diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 567907aa60..7f9c63e6a5 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -8,6 +8,7 @@ export { isNullish, isObject, noNullish, + zodErrorToReadable, sleep, uniqueArray, type IErrorWithMessage, diff --git a/packages/common/src/utils/index.ts b/packages/common/src/utils/index.ts index b293c4aaf0..fb48b9acca 100644 --- a/packages/common/src/utils/index.ts +++ b/packages/common/src/utils/index.ts @@ -9,4 +9,5 @@ export { isObject } from './is-object'; export { noNullish } from './no-nullish'; export { sleep } from './sleep'; export { uniqueArray } from './unique-array'; +export { zodErrorToReadable } from './zod-error-to-readable'; export { type IErrorWithMessage } from './is-error-with-message'; diff --git a/packages/common/src/utils/zod-error-to-readable/index.ts b/packages/common/src/utils/zod-error-to-readable/index.ts new file mode 100644 index 0000000000..8380d9c577 --- /dev/null +++ b/packages/common/src/utils/zod-error-to-readable/index.ts @@ -0,0 +1 @@ +export { zodErrorToReadable } from './zod-error-to-readable'; diff --git a/packages/common/src/utils/zod-error-to-readable/zod-error-to-readable.ts b/packages/common/src/utils/zod-error-to-readable/zod-error-to-readable.ts new file mode 100644 index 0000000000..8b5473281d --- /dev/null +++ b/packages/common/src/utils/zod-error-to-readable/zod-error-to-readable.ts @@ -0,0 +1,9 @@ +import { ZodError } from 'zod'; + +export const zodErrorToReadable = (error: ZodError) => { + return error.issues + .map(err => { + return `${err.path?.join(`.`)}: ${err.message}`; + }) + .join('\n'); +}; diff --git a/packages/common/src/validations/workflow-validators/api-plugin.validator.test.ts b/packages/common/src/validations/workflow-validators/api-plugin.validator.test.ts new file mode 100644 index 0000000000..591639c02d --- /dev/null +++ b/packages/common/src/validations/workflow-validators/api-plugin.validator.test.ts @@ -0,0 +1,54 @@ +import { describe, expect, it } from 'vitest'; +import { validate } from './api-plugin.validator'; +import { ZodError } from 'zod'; +describe('Api Validator', () => { + describe('validate Api Plugin', () => { + const apiPlugin = { + name: 'ballerineEnrichment', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_us.json', + method: 'GET', + stateNames: ['checkBusinessScore'], + successAction: 'API_CALL_SUCCESS', + errorAction: 'API_CALL_FAILURE', + request: { + transform: { + transformer: 'jq', + mapping: '{data: .entity.id}', + }, + }, + response: { + transform: { transformer: 'jq', mapping: '{result: .}' }, + }, + }; + + describe('when api plugin is valid', () => { + it('does not throw validation exception', async () => { + expect(() => validate(apiPlugin)).not.toThrow(); + }); + }); + + describe('when invalid plugin is valid - invalid request', () => { + it('does not throw validation exception', async () => { + let failingPlugin = structuredClone(apiPlugin); + failingPlugin.request.transform.transformer = { someObjectKey: 'someObjectValue' }; + expect(() => validate(failingPlugin)).toThrowError(ZodError); + }); + }); + + describe('when invalid plugin is valid - missing callback', () => { + it('does not throw validation exception', async () => { + let failingPlugin = structuredClone(apiPlugin); + failingPlugin.errorAction = undefined; + expect(() => validate(failingPlugin)).toThrowError(ZodError); + }); + }); + + describe('when invalid plugin is valid - stateNames is string', () => { + it('does not throw validation exception', async () => { + let failingPlugin = structuredClone(apiPlugin); + failingPlugin.stateNames = 'someState'; + expect(() => validate(failingPlugin)).toThrowError(ZodError); + }); + }); + }); +}); diff --git a/packages/common/src/validations/workflow-validators/api-plugin.validator.ts b/packages/common/src/validations/workflow-validators/api-plugin.validator.ts new file mode 100644 index 0000000000..03c9e1e6e1 --- /dev/null +++ b/packages/common/src/validations/workflow-validators/api-plugin.validator.ts @@ -0,0 +1,53 @@ +import { z } from 'zod'; +import { AnyRecord } from '@/types'; + +const RequestSchema = z.object({ + transform: z.object({ + transformer: z.string(), + mapping: z.string(), + }), + schema: z + .object({ + $schema: z.string(), + type: z.string(), + properties: z.object({}), + required: z.array(z.string()).optional(), + }) + .optional(), +}); + +const ResponseSchema = z + .object({ + transform: z.object({ + transformer: z.string(), + mapping: z.string(), + }), + schema: z + .object({ + $schema: z.string(), + type: z.string(), + properties: z.object({}), + required: z.array(z.string()).optional(), + }) + .optional(), + }) + .optional(); + +export const ApiPluginSchema = z + .object({ + name: z.string(), + url: z.string().url(), + logo: z.string().optional(), + method: z.string(), + headers: z.record(z.string()).optional(), + stateNames: z.array(z.string()), + successAction: z.string(), + errorAction: z.string(), + request: RequestSchema, + response: ResponseSchema, + }) + .strict(); + +export const validate = (apiPlugin: AnyRecord) => { + return ApiPluginSchema.parse(apiPlugin); +}; diff --git a/packages/common/src/validations/workflow-validators/rule.validator.ts b/packages/common/src/validations/workflow-validators/rule.validator.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/common/src/validations/workflow-validators/state.validator.ts b/packages/common/src/validations/workflow-validators/state.validator.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/common/src/validations/workflow-validators/webhook-plugin.validator.test.ts b/packages/common/src/validations/workflow-validators/webhook-plugin.validator.test.ts new file mode 100644 index 0000000000..a24ab6309b --- /dev/null +++ b/packages/common/src/validations/workflow-validators/webhook-plugin.validator.test.ts @@ -0,0 +1,44 @@ +import { describe, expect, it } from 'vitest'; +import { validate } from './webhook-plugin.validator'; +import { ZodError } from 'zod'; +describe('Webhook Validator', () => { + describe('validate Webhook Plugin', () => { + const webhookPlugin = { + name: 'ballerineEnrichmentHook', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_us.json', + method: 'GET', + headers: { some_header: 'some_value' }, + stateNames: ['checkBusinessScore'], + request: { + transform: { + transformer: 'jq', + mapping: '{data: .entity.id}', + }, + }, + }; + + describe('when webhook plugin is valid', () => { + it('does not throw validation exception', async () => { + expect(() => validate(webhookPlugin)).not.toThrow(); + }); + }); + + describe('when webhook has response - throws invalid', () => { + let failingWebhookPlugin = structuredClone(webhookPlugin); + failingWebhookPlugin.response = { transform: { transformer: 'jq', mapping: '{result: .}' } }; + + it('does not throw validation exception', async () => { + expect(() => validate(failingWebhookPlugin)).toThrowError(ZodError); + }); + }); + + describe('when webhook no request - throws invalid', () => { + let failingWebhookPlugin = structuredClone(webhookPlugin); + failingWebhookPlugin.request = undefined; + + it('does not throw validation exception', async () => { + expect(() => validate(failingWebhookPlugin)).toThrowError(ZodError); + }); + }); + }); +}); diff --git a/packages/common/src/validations/workflow-validators/webhook-plugin.validator.ts b/packages/common/src/validations/workflow-validators/webhook-plugin.validator.ts new file mode 100644 index 0000000000..22e9294015 --- /dev/null +++ b/packages/common/src/validations/workflow-validators/webhook-plugin.validator.ts @@ -0,0 +1,15 @@ +import { ApiPluginSchema } from './api-plugin.validator'; +import { AnyRecord } from '@/types'; + +export const WebhookPluginSchema = ApiPluginSchema.pick({ + name: true, + url: true, + method: true, + headers: true, + stateNames: true, + request: true, +}).strict(); + +export const validate = (webhookPlugin: AnyRecord) => { + return WebhookPluginSchema.parse(webhookPlugin); +}; diff --git a/packages/common/src/validations/workflow-validators/workflow-definition-validator.test.ts b/packages/common/src/validations/workflow-validators/workflow-definition-validator.test.ts new file mode 100644 index 0000000000..87d59a7be3 --- /dev/null +++ b/packages/common/src/validations/workflow-validators/workflow-definition-validator.test.ts @@ -0,0 +1,93 @@ +import { describe, expect, it } from 'vitest'; +import { validateWorkflowDefinition } from './workflow-definition-validator'; +describe('WorkflowDefinitionValidator', () => { + describe('validate Api Plugin', () => { + const definition = { + id: 'kyb_example_v1', + predictableActionArguments: true, + context: { + documents: [], + }, + initial: 'initial', + states: { + initial: { + on: { + CHECK_BUSINESS_SCORE: { + target: 'checkBusinessScore', + }, + }, + }, + checkBusinessScore: { + on: { + API_CALL_SUCCESS: 'checkBusinessScoreSuccess', + API_CALL_FAILURE: 'testManually', + }, + }, + checkBusinessScoreSuccess: { + type: 'final', + }, + testManually: { + type: 'final', + }, + }, + }; + + const apiPluginsSchemas = [ + { + name: 'ballerineEnrichment', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_us.json', + method: 'GET', + stateNames: ['checkBusinessScore'], + successAction: 'API_CALL_SUCCESS', + errorAction: 'API_CALL_FAILURE', + request: { + transform: { + transformer: 'jq', + mapping: '{data: .entity.id}', + }, + }, + response: { + transform: { transformer: 'jq', mapping: '{result: .}' }, + }, + }, + { + name: 'ballerineEnrichmentHook', + url: 'https://simple-kyb-demo.s3.eu-central-1.amazonaws.com/mock-data/business_test_us.json', + method: 'GET', + headers: { some_header: 'some_value' }, + stateNames: ['checkBusinessScore'], + request: { + transform: { + transformer: 'jq', + mapping: '{data: .entity.id}', + }, + }, + }, + ]; + + const workflowDefinition = { + ...definition, + ...{ extensions: { apiPlugins: apiPluginsSchemas } }, + }; + + describe('when api plugin is valid', () => { + it('returns valid response', async () => { + const validationResponse = validateWorkflowDefinition(workflowDefinition); + + expect(validationResponse).toEqual({ isValid: true, error: undefined }); + }); + }); + + describe('when api plugin is invalid', () => { + it('it returns invalid response', async () => { + workflowDefinition.extensions.apiPlugins[0].request = 'dwadwad'; + const validationResponse = validateWorkflowDefinition(workflowDefinition); + + expect(validationResponse).toEqual({ + isValid: false, + error: 'extensions.apiPlugins.0: Invalid input', + }); + }); + }); + }); +}); diff --git a/packages/common/src/validations/workflow-validators/workflow-definition-validator.ts b/packages/common/src/validations/workflow-validators/workflow-definition-validator.ts new file mode 100644 index 0000000000..415552e836 --- /dev/null +++ b/packages/common/src/validations/workflow-validators/workflow-definition-validator.ts @@ -0,0 +1,32 @@ +import { z } from 'zod'; +import { ApiPluginSchema } from './api-plugin.validator'; +import { WebhookPluginSchema } from './webhook-plugin.validator'; +import { AnyRecord } from '@/types'; +import { zodErrorToReadable } from '../../utils/zod-error-to-readable'; + +const ApiOrWebhookSchema = z.union([ApiPluginSchema, WebhookPluginSchema]); + +const WorkflowDefinitionSchema = z + .object({ + extensions: z + .object({ + statePlugins: z.array(z.record(z.any())).optional(), + apiPlugins: z.array(ApiOrWebhookSchema).optional(), + }) + .optional(), + }) + .optional(); +export const validateWorkflowDefinition = (workflowDefinition: AnyRecord) => { + const parseResult = WorkflowDefinitionSchema.safeParse(workflowDefinition); + + if (!parseResult.success) { + return { isValid: false, error: zodErrorToReadable(parseResult.error) }; + } + return { isValid: true, error: undefined }; +}; + +export const validWorkflowDefinitionOrThrow = (workflowDefinition: AnyRecord) => { + const parseResult = WorkflowDefinitionSchema.parse(workflowDefinition); + + return parseResult; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b44c7af22f..1186b8be18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' importers: @@ -553,10 +553,10 @@ importers: version: 3.57.0 svelte-check: specifier: ^2.10.3 - version: 2.10.3(postcss@8.4.21)(svelte@3.57.0) + version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) tailwindcss: specifier: ^3.2.4 - version: 3.2.7(postcss@8.4.21) + version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -681,6 +681,9 @@ importers: vitest: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) + zod: + specifier: ^3.21.4 + version: 3.21.4 packages/rules-engine: dependencies: @@ -4898,13 +4901,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4918,13 +4921,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11327,11 +11330,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.40: - resolution: {integrity: sha512-BzktCTkfAHjPM3pXF+9gqqV9yd95o0q6Yo502n+tnyvQl+LvsGEzVb1UXyaF2Vve0lfcqXz5Ge3W18zcm7x12g==} + /@storybook/channel-postmessage@7.1.0-alpha.41: + resolution: {integrity: sha512-PQFbOmj4FTN4Hjg16gH9lrhrabXQvZV1Hd27LC/cJ4sa7Z05P/M49K6t9XuDCVX3CCGOUZn4REVrCvPf4CjhuQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.40 - '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/channels': 7.1.0-alpha.41 + '@storybook/client-logger': 7.1.0-alpha.41 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -11355,11 +11358,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.40: - resolution: {integrity: sha512-GMbuR8M/idzCjwWVpBu6yCtkolFhfJDX7/61Y/RAfj8yToJ1BvfaO66Ur8pjfm6Y3q1gxJxvRNyFGAixUCqULw==} + /@storybook/channels@7.1.0-alpha.41: + resolution: {integrity: sha512-r2X1y2mZv2m1FyvwMT/tla3heigcmBF47YSD7R5rPqcOg7k3ye9kVPmUA3wAY2GGiW5fsK2OD8hq8Hd3Vl2pKA==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.40 - '@storybook/core-events': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.41 + '@storybook/core-events': 7.1.0-alpha.41 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -11428,8 +11431,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.40: - resolution: {integrity: sha512-j6nPSGAZM88nC5bKMhQfZW3jeK2XoizAZO9zbojb3znDMqbjPeOWqtc1JPOgsTS8bYEMgYfc727k75rqnaywGA==} + /@storybook/client-logger@7.1.0-alpha.41: + resolution: {integrity: sha512-QirwSuiDdY9hc0gOrTLvVFIUcdBvws7i88vJNVT9cqiQbNTvxtb+dhQHL402gRsmT/PSEjZ28ymX2vBNcwPMYw==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -11533,8 +11536,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.40: - resolution: {integrity: sha512-mP8OfPtHILDTrKrDv7u1V0qWjXwwRrh4ZYY5TOzOox5UmOy9/u02Yv7K8iDhmCYjMXmKOyzEKI9Wb/3URzAZBg==} + /@storybook/core-events@7.1.0-alpha.41: + resolution: {integrity: sha512-Thk6jcmP6BFjbBeTdsSugnj3GBQ2jVAM8E4OJ9AEI7KI5ut89nEC+La9ZcqpTkpBBvesntf/yWqAVFzHEWdK9A==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -11670,14 +11673,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.40: - resolution: {integrity: sha512-Pnl/r1d/Lgmp5nLLhQiYSjJVYJAJO2yuO20z7LpjkekgkdzLN8cMQvQyeHYQpamqpa+rd965kBfZ8mstCwfo2Q==} + /@storybook/instrumenter@7.1.0-alpha.41: + resolution: {integrity: sha512-StFqumrV/eCiFLfo/hXFnYfZsZgbwFKUV93qmmaEoh4HCdcFcMNBOVI7RL6zWtX4xJSmOWEvOxet39EgbmSCZA==} dependencies: - '@storybook/channels': 7.1.0-alpha.40 - '@storybook/client-logger': 7.1.0-alpha.40 - '@storybook/core-events': 7.1.0-alpha.40 + '@storybook/channels': 7.1.0-alpha.41 + '@storybook/client-logger': 7.1.0-alpha.41 + '@storybook/core-events': 7.1.0-alpha.41 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.40 + '@storybook/preview-api': 7.1.0-alpha.41 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -11746,16 +11749,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.40: - resolution: {integrity: sha512-dE+j+2hwg0GO43BctZGvkkJvDjLwUWJd0PSG07l26iAmNvDjMD9Npa3lii2mqDjrtdZWNSGNz7hhqt9WpWAYBQ==} + /@storybook/preview-api@7.1.0-alpha.41: + resolution: {integrity: sha512-P5MZDHnwY9DOKk4V1p+PXYyVQgtxTpzYB7RCQvVuZGi03tSNvJVmK8G9/rmn30fdLdJWmLN+Jv72AOedvOYOHA==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.40 - '@storybook/channels': 7.1.0-alpha.40 - '@storybook/client-logger': 7.1.0-alpha.40 - '@storybook/core-events': 7.1.0-alpha.40 + '@storybook/channel-postmessage': 7.1.0-alpha.41 + '@storybook/channels': 7.1.0-alpha.41 + '@storybook/client-logger': 7.1.0-alpha.41 + '@storybook/core-events': 7.1.0-alpha.41 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.40 + '@storybook/types': 7.1.0-alpha.41 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -11903,8 +11906,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.40 - '@storybook/instrumenter': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.41 + '@storybook/instrumenter': 7.1.0-alpha.41 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -11947,10 +11950,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.40: - resolution: {integrity: sha512-+q0COxGmoLFCYfULp2rTY3W5FVmbHxyxLM62uD2Jpf+PZ+gdNjvxj0KcvimfGLZkbCeqSYidsJl2hmMoQi+5Gg==} + /@storybook/types@7.1.0-alpha.41: + resolution: {integrity: sha512-rQ6bOJdHZnIe3dladPLr5gFstG0tNxIgORNMGK9pQqfYCe2gERTQo3NaH6WgAXyknakVBiSCME9MSaT3fzmkhg==} dependencies: - '@storybook/channels': 7.1.0-alpha.40 + '@storybook/channels': 7.1.0-alpha.41 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.3.0 @@ -11986,7 +11989,7 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.29.0 @@ -16209,17 +16212,6 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -23559,23 +23551,6 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.24 - /postcss-load-config@3.1.4(postcss@8.4.21): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.21 - yaml: 1.10.2 - dev: true - /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -26015,34 +25990,6 @@ packages: - sugarss dev: true - /svelte-check@2.10.3(postcss@8.4.21)(svelte@3.57.0): - resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} - hasBin: true - peerDependencies: - svelte: ^3.24.0 - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - chokidar: 3.5.3 - fast-glob: 3.2.12 - import-fresh: 3.3.0 - picocolors: 1.0.0 - sade: 1.8.1 - svelte: 3.57.0 - svelte-preprocess: 4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - node-sass - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - dev: true - /svelte-hmr@0.15.1(svelte@3.57.0): resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} @@ -26105,58 +26052,6 @@ packages: typescript: 4.9.5 dev: true - /svelte-preprocess@4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} - engines: {node: '>= 9.11.2'} - requiresBuild: true - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - node-sass: '*' - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 - svelte: ^3.23.0 - typescript: ^3.9.5 || ^4.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - node-sass: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - dependencies: - '@types/pug': 2.0.6 - '@types/sass': 1.45.0 - detect-indent: 6.1.0 - magic-string: 0.25.9 - postcss: 8.4.21 - sorcery: 0.10.0 - strip-indent: 3.0.0 - svelte: 3.57.0 - typescript: 4.9.5 - dev: true - /svelte@3.57.0: resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} engines: {node: '>= 8'} @@ -26217,43 +26112,9 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false - /tailwindcss@3.2.7(postcss@8.4.21): - resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} - engines: {node: '>=12.13.0'} - hasBin: true - peerDependencies: - postcss: ^8.0.9 - dependencies: - arg: 5.0.2 - chokidar: 3.5.3 - color-name: 1.1.4 - detective: 5.2.1 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.2.12 - glob-parent: 6.0.2 - is-glob: 4.0.3 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.21 - postcss-import: 14.1.0(postcss@8.4.21) - postcss-js: 4.0.1(postcss@8.4.21) - postcss-load-config: 3.1.4(postcss@8.4.21) - postcss-nested: 6.0.0(postcss@8.4.21) - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.1 - transitivePeerDependencies: - - ts-node - dev: true - /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} @@ -27762,7 +27623,7 @@ packages: vite: optional: true dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) vite: 4.2.1(@types/node@20.3.2) From 39cc0435126e9ac60fa2efa1e05cedf5bea83512 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Sat, 1 Jul 2023 20:29:51 +0300 Subject: [PATCH 083/123] feat: implemented user activity tracker middleware & tests, connected middleware to app (#616) --- pnpm-lock.yaml | 142 +++++++++++++++++- services/workflows-service/package.json | 1 + .../migration.sql | 2 + .../workflows-service/prisma/schema.prisma | 1 + services/workflows-service/src/app.module.ts | 3 +- ...user-session-audit.middleware.intg.test.ts | 134 +++++++++++++++++ .../user-session-audit.middleware.ts | 44 ++++++ services/workflows-service/src/main.ts | 2 +- .../src/test/helpers/nest-app-helper.ts | 3 - 9 files changed, 319 insertions(+), 13 deletions(-) create mode 100644 services/workflows-service/prisma/migrations/20230628134448_add_last_active_at_to_user/migration.sql create mode 100644 services/workflows-service/src/common/middlewares/user-session-audit.middleware.intg.test.ts create mode 100644 services/workflows-service/src/common/middlewares/user-session-audit.middleware.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1186b8be18..e32bb8248f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: @@ -269,7 +273,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -1597,6 +1601,9 @@ importers: '@typescript-eslint/parser': specifier: ^5.54.1 version: 5.56.0(eslint@8.36.0)(typescript@4.9.5) + dayjs: + specifier: ^1.11.6 + version: 1.11.7 dotenv: specifier: ^16.0.3 version: 16.0.3 @@ -16179,7 +16186,6 @@ packages: /dayjs@1.11.7: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} - dev: false /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -17236,7 +17242,7 @@ packages: '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 @@ -17253,7 +17259,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true @@ -17318,6 +17324,64 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -17414,6 +17478,72 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.36.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-n@15.6.1(eslint@8.36.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -28705,7 +28835,3 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 9296152de2..71e9de817e 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -105,6 +105,7 @@ "@types/supertest": "2.0.11", "@typescript-eslint/eslint-plugin": "^5.54.1", "@typescript-eslint/parser": "^5.54.1", + "dayjs": "^1.11.6", "dotenv": "^16.0.3", "eslint": "^8.35.0", "eslint-config-prettier": "^8.7.0", diff --git a/services/workflows-service/prisma/migrations/20230628134448_add_last_active_at_to_user/migration.sql b/services/workflows-service/prisma/migrations/20230628134448_add_last_active_at_to_user/migration.sql new file mode 100644 index 0000000000..c464b0826d --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230628134448_add_last_active_at_to_user/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "lastActiveAt" TIMESTAMP(3); diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index b3e8fc256f..977248c883 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -18,6 +18,7 @@ model User { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt + lastActiveAt DateTime? workflowRuntimeData WorkflowRuntimeData[] } diff --git a/services/workflows-service/src/app.module.ts b/services/workflows-service/src/app.module.ts index a40c5979e1..491ddf17a6 100644 --- a/services/workflows-service/src/app.module.ts +++ b/services/workflows-service/src/app.module.ts @@ -24,6 +24,7 @@ import { LogRequestInterceptor } from '@/common/interceptors/log-request.interce import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; import { ClsModule } from 'nestjs-cls'; import { FiltersModule } from '@/common/filters/filters.module'; +import { UserSessionAuditMiddleware } from '@/common/middlewares/user-session-audit.middleware'; @Module({ controllers: [], @@ -76,6 +77,6 @@ import { FiltersModule } from '@/common/filters/filters.module'; }) export class AppModule { configure(consumer: MiddlewareConsumer) { - consumer.apply(RequestIdMiddleware).forRoutes('*'); + consumer.apply(RequestIdMiddleware, UserSessionAuditMiddleware).forRoutes('*'); } } diff --git a/services/workflows-service/src/common/middlewares/user-session-audit.middleware.intg.test.ts b/services/workflows-service/src/common/middlewares/user-session-audit.middleware.intg.test.ts new file mode 100644 index 0000000000..330c651abd --- /dev/null +++ b/services/workflows-service/src/common/middlewares/user-session-audit.middleware.intg.test.ts @@ -0,0 +1,134 @@ +import { UserSessionAuditMiddleware } from '@/common/middlewares/user-session-audit.middleware'; +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { PrismaModule } from '@/prisma/prisma.module'; +import { UserService } from '@/user/user.service'; +import { UserRepository } from '@/user/user.repository'; +import { Test, TestingModule } from '@nestjs/testing'; +import { User } from '@prisma/client'; +import { Request, Response } from 'express'; +import dayjs from 'dayjs'; +import { commonTestingModules } from '@/test/helpers/nest-app-helper'; +import { Injectable } from '@nestjs/common'; +import { PasswordService } from '@/auth/password/password.service'; + +@Injectable() +class FakePasswordService { + async compare(password: string, encrypted: string): Promise<boolean> { + return Promise.resolve(true); + } + + async hash(password: string): Promise<string> { + return Promise.resolve(password); + } +} + +describe('UserSessionAuditMiddleware', () => { + const testUserPayload = { + firstName: 'Test', + lastName: 'User', + password: '', + email: 'example@mail.com', + roles: [], + } as unknown as User; + let app: TestingModule; + let testUser: User; + let middleware: UserSessionAuditMiddleware; + let userService: UserService; + let callback: jest.Mock; + + beforeEach(async () => { + app = await Test.createTestingModule({ + imports: [PrismaModule, ...commonTestingModules], + providers: [ + { + provide: PasswordService, + useClass: FakePasswordService, + }, + UserService, + UserRepository, + ], + }).compile(); + middleware = new UserSessionAuditMiddleware(app.get(AppLoggerService), app.get(UserService)); + userService = app.get(UserService); + callback = jest.fn(() => null); + }); + + describe('when request not includes session and user', () => { + it('will call callback', async () => { + await middleware.use({} as Request, {} as Response, callback); + + expect(callback).toHaveBeenCalledTimes(1); + }); + }); + + describe('when session and user in request', () => { + describe('when lastActiveAt unset', () => { + beforeEach(async () => { + testUser = await app.get(UserService).create({ data: testUserPayload as any }); + }); + + afterEach(async () => { + await app.get(UserService).deleteById(testUser.id); + }); + + it('will be set on middleware call', async () => { + await middleware.use( + { user: testUser, session: testUser } as any, + {} as Response, + callback, + ); + + const updatedUser = await app.get(UserService).getById(testUser.id); + + expect(updatedUser.lastActiveAt).toBeTruthy(); + expect(callback).toHaveBeenCalledTimes(1); + }); + }); + + describe('when lastActiveAt is set', () => { + beforeEach(async () => { + testUser = await app.get(UserService).create({ data: testUserPayload as any }); + }); + + afterEach(async () => { + await app.get(UserService).deleteById(testUser.id); + }); + + it('will not be changed when lastActiveAt not expired', async () => { + const nonExpiredDate = dayjs().subtract(middleware.UPDATE_INTERVAL - 10, 'ms'); + + testUser = await userService.updateById(testUser.id, { + data: { lastActiveAt: nonExpiredDate.toDate() }, + }); + + await middleware.use( + { user: testUser, session: testUser } as any, + {} as Response, + callback, + ); + + const user = await userService.getById(testUser.id); + + expect(user.lastActiveAt).toEqual(nonExpiredDate.toDate()); + expect(callback).toBeCalledTimes(1); + }); + + it('will be updated when lastActiveAt expired', async () => { + const expiredDate = dayjs().subtract(middleware.UPDATE_INTERVAL + 10, 'ms'); + + testUser.lastActiveAt = expiredDate.toDate(); + + await middleware.use( + { user: testUser, session: testUser } as any, + {} as Response, + callback, + ); + + const updatedUser = await userService.getById(testUser.id); + + expect(Number(updatedUser.lastActiveAt)).toBeGreaterThan(Number(expiredDate.toDate())); + expect(callback).toBeCalledTimes(1); + }); + }); + }); +}); diff --git a/services/workflows-service/src/common/middlewares/user-session-audit.middleware.ts b/services/workflows-service/src/common/middlewares/user-session-audit.middleware.ts new file mode 100644 index 0000000000..5e7de201bd --- /dev/null +++ b/services/workflows-service/src/common/middlewares/user-session-audit.middleware.ts @@ -0,0 +1,44 @@ +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { UserService } from '@/user/user.service'; +import { Injectable, NestMiddleware } from '@nestjs/common'; +import { User } from '@prisma/client'; +import { Request, Response } from 'express'; + +@Injectable() +export class UserSessionAuditMiddleware implements NestMiddleware { + private FIVE_MINUTES_IN_MS = 1000 * 60 * 5; + UPDATE_INTERVAL = this.FIVE_MINUTES_IN_MS; + + constructor( + private readonly logger: AppLoggerService, + private readonly userService: UserService, + ) {} + + async use(req: Request, res: Response, next: (error?: any) => void) { + if (req.session && req.user) { + if (this.isUpdateCanBePerformed((req.user as User).lastActiveAt)) { + await this.trackAuthorizedAction(req.user as User); + } + } + + next(); + } + + private isUpdateCanBePerformed( + lastUpdate: Date | null, + updateIntervalInMs: number = this.UPDATE_INTERVAL, + ) { + if (!lastUpdate) return true; + + const now = Date.now(); + const pastDate = Number(new Date(lastUpdate)); + + return now - pastDate >= updateIntervalInMs; + } + + private async trackAuthorizedAction(user: User, activeDate = new Date()) { + this.logger.log(`Updating user presence`, { userId: user.id }); + await this.userService.updateById(user.id, { data: { lastActiveAt: activeDate } }); + this.logger.log(`Updated user presence`, { userId: user.id }); + } +} diff --git a/services/workflows-service/src/main.ts b/services/workflows-service/src/main.ts index 45e86f29f5..3027f9cfd4 100644 --- a/services/workflows-service/src/main.ts +++ b/services/workflows-service/src/main.ts @@ -47,7 +47,7 @@ async function main() { httpOnly: true, secure: false, sameSite: 'strict', - maxAge: 1000 * 60 * 60 * 1, // 1 hour(s) + maxAge: 1000 * 60 * 60 * 1, // 1 hour(s), }), ); diff --git a/services/workflows-service/src/test/helpers/nest-app-helper.ts b/services/workflows-service/src/test/helpers/nest-app-helper.ts index 36b55807b1..1b18814ea0 100644 --- a/services/workflows-service/src/test/helpers/nest-app-helper.ts +++ b/services/workflows-service/src/test/helpers/nest-app-helper.ts @@ -4,9 +4,6 @@ import { ACGuard } from 'nest-access-control'; import { AclFilterResponseInterceptor } from '@/common/access-control/interceptors/acl-filter-response.interceptor'; import { AclValidateRequestInterceptor } from '@/common/access-control/interceptors/acl-validate-request.interceptor'; import { CallHandler, ExecutionContext, INestApplication, Provider, Type } from '@nestjs/common'; -import { EndUserModule } from '@/end-user/end-user.module'; -import { EndUserService } from '@/end-user/end-user.service'; -import { InstanceLink } from '@nestjs/core/injector/instance-links-host'; import console from 'console'; import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; import { ClsModule } from 'nestjs-cls'; From e95b9c5b64f04c3b33e4cfd748eb97005722f8c4 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Sun, 2 Jul 2023 11:44:50 +0300 Subject: [PATCH 084/123] Fix headless-exampe 401 unauthorized errors (#624) * refactor(workflows-service): now also using API key auth in local in addition to development * feat(monorepo root package.json): added VITE_API_KEY=secret to example scripts otherwise the headless-example breaks --- package.json | 6 +++--- .../decorators/use-key-auth-in-dev-guard.decorator.ts | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c9148bbf1a..0457a4a97c 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,9 @@ ], "scripts": { "monorepo:init": "node ./scripts/init.js", - "kyc-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyc concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", - "kyb-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyb concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", - "api-flow-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=false VITE_EXAMPLE_TYPE=kyb concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/backoffice-v2\"", + "kyc-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyc VITE_API_KEY=secret concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", + "kyb-manual-review-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=3 VITE_EXAMPLE_TYPE=kyb VITE_API_KEY=secret concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/headless-example,@ballerine/backoffice-v2\"", + "api-flow-example": "nx run @ballerine/common:build && nx run @ballerine/workflows-service:setup && cross-env ENV_FILE_NAME=.env.example VITE_POLLING_INTERVAL=false VITE_EXAMPLE_TYPE=kyb VITE_API_KEY=secret concurrently \"nx run @ballerine/workflows-service:dev\" \"wait-on http://localhost:3000/api/v1/_health/ready && nx run-many --target=dev --projects=@ballerine/backoffice-v2\"", "branchlint": "branchlint -u -c --prefix \"$(git config --global user.name)\"", "format": "nx run-many --target=format", "format:check": "nx run-many --target=format:check --exclude=@ballerine/backoffice-v2", diff --git a/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts b/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts index 7e7234bbfa..b39783c150 100644 --- a/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts +++ b/services/workflows-service/src/common/decorators/use-key-auth-in-dev-guard.decorator.ts @@ -2,10 +2,11 @@ import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorato import { env } from '@/env'; export const UseKeyAuthInDevGuard = () => { - if (env.NODE_ENV !== 'development') + if (env.NODE_ENV !== 'development' && env.NODE_ENV !== 'local') { return () => { return; }; + } return UseKeyAuthGuard(); }; From 41f62ab96d4960c0800856a274ae787bd112353e Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Sun, 2 Jul 2023 11:47:26 +0300 Subject: [PATCH 085/123] Disable ability to change assignment on a case with a decision (#622) * feat(backoffice-v2): disabled assignment buttons client-side when all documents have a decision * feat(workflows-service): can no longer change assignment of cases with a decision (server-side) --- .../atoms/AssignButton/AssignButton.tsx | 6 +++-- .../Entity/components/Case/Case.Actions.tsx | 4 +++- .../Case/hooks/useActions/useActions.tsx | 5 ++++- .../workflow/workflow.controller.internal.ts | 6 ++++- .../src/workflow/workflow.service.ts | 22 +++++++++++++++---- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx index ce7d8cae80..3ed7ff4497 100644 --- a/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx +++ b/apps/backoffice-v2/src/common/components/atoms/AssignButton/AssignButton.tsx @@ -29,12 +29,14 @@ interface IAssignButtonProps { assignees: Assignee[]; onAssigneeSelect: (id: string) => void; authenticatedUser: TAuthenticatedUser; + hasDecision: boolean; } export const AssignButton: React.FC<IAssignButtonProps> = ({ buttonType, assignees, onAssigneeSelect, caseState, + hasDecision, }) => { const isAssignButtonType = buttonType === 'Assign'; const isUnassignEnabled = caseState !== CaseState.UNASSIGNED; @@ -43,13 +45,13 @@ export const AssignButton: React.FC<IAssignButtonProps> = ({ return ( <div> {isAssignButtonType ? ( - <Button disabled={!caseState.assignToMeEnabled} onClick={onClick}> + <Button disabled={hasDecision || !caseState.assignToMeEnabled} onClick={onClick}> Assign Me </Button> ) : ( <DropdownMenu> <DropdownMenuTrigger asChild> - <Button variant={`outline`} disabled={!caseState.assignToOtherEnabled}> + <Button variant={`outline`} disabled={hasDecision || !caseState.assignToOtherEnabled}> {buttonType} </Button> </DropdownMenuTrigger> diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx index 88c66e4c3c..ee515b2cd7 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/Case.Actions.tsx @@ -1,5 +1,4 @@ import React, { FunctionComponent } from 'react'; -import { Avatar } from '../../../../common/components/atoms/Avatar'; import { IActionsProps } from './interfaces'; import { ResubmissionReason, useActions } from './hooks/useActions/useActions'; import { ctw } from '../../../../common/utils/ctw/ctw'; @@ -71,6 +70,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ isActionButtonDisabled, onTriggerAssignToMe, isAssignedToMe, + hasDecision, } = useActions({ workflowId: id, fullName }); return ( @@ -89,6 +89,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ onMutateAssignWorkflow(id, onTriggerAssignToMe); }} buttonType={'Assign'} + hasDecision={hasDecision} /> <AssignButton assignees={assignees as Assignee[]} @@ -98,6 +99,7 @@ export const Actions: FunctionComponent<IActionsProps> = ({ onMutateAssignWorkflow(id, !onTriggerAssignToMe); }} buttonType={'Re-Assign'} + hasDecision={hasDecision} /> </div> <div className={`flex h-20 justify-between`}> diff --git a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx index ebee6c2af1..c873b36709 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/Case/hooks/useActions/useActions.tsx @@ -2,7 +2,6 @@ import { useCallback, useState } from 'react'; import { useApproveEntityMutation } from '../../../../../../domains/entities/hooks/mutations/useApproveEntityMutation/useApproveEntityMutation'; import { useDebounce } from '../../../../../../common/hooks/useDebounce/useDebounce'; import { createInitials } from '../../../../../../common/utils/create-initials/create-initials'; -import { Action } from '../../../../../../common/enums'; import { IUseActions } from './interfaces'; import { useAuthenticatedUserQuery } from '../../../../../../domains/auth/hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; import { useCaseState } from '../useCaseState/useCaseState'; @@ -87,6 +86,9 @@ export const useActions = ({ workflowId, fullName }: IUseActions) => { ); const isActionButtonDisabled = !caseState.actionButtonsEnabled; const onTriggerAssignToMe = true; + const hasDecision = + workflow?.context?.documents?.length && + workflow?.context?.documents?.every(document => !!document?.decision?.status); // useDocumentListener('keydown', event => { // if (!event.ctrlKey || document.activeElement !== document.body) return; @@ -132,5 +134,6 @@ export const useActions = ({ workflowId, fullName }: IUseActions) => { caseState, authenticatedUser, assignees, + hasDecision, }; }; diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.ts b/services/workflows-service/src/workflow/workflow.controller.internal.ts index 1696f401db..3255b3028a 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import * as common from '@nestjs/common'; +import { UseGuards, UsePipes } from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import * as nestAccessControl from 'nest-access-control'; import { isRecordNotFoundError } from '../prisma/prisma.util'; @@ -22,7 +23,6 @@ import { FindWorkflowsListSchema, } from '@/workflow/dtos/find-workflows-list.dto'; import { ZodValidationPipe } from '@/common/pipes/zod.pipe'; -import { UsePipes, UseGuards } from '@nestjs/common'; import { FilterService } from '@/filter/filter.service'; import { FindWorkflowParamsDto, @@ -141,6 +141,10 @@ export class WorkflowControllerInternal { } // PATCH /workflows/assign/:id + // curl -X PATCH http://localhost:3000/api/v1/internal/workflows/assign/:workflowId \ + // -H 'Content-Type: application/json' \ + // -H 'Cookie: session=[SESSION]; session.sig=[SESSION_SIG]' \ + // -d '{"assigneeId": "[ASSIGNEE_ID]"}' @common.Patch('/assign/:id') @swagger.ApiOkResponse({ type: WorkflowDefinitionModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 6d45ca4e3a..b09705c045 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -14,7 +14,6 @@ import { } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { - CompleteWorkflowData, ListRuntimeDataResult, ListWorkflowsRuntimeParams, RunnableWorkflowData, @@ -26,7 +25,7 @@ import { import { createWorkflow } from '@ballerine/workflow-node-sdk'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { isEqual, merge } from 'lodash'; -import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common'; +import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; import { WorkflowDefinitionRepository } from './workflow-definition.repository'; import { WorkflowDefinitionCreateDto } from './dtos/workflow-definition-create'; import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find-many-args'; @@ -601,12 +600,27 @@ export class WorkflowService { } async assignWorkflowToUser(workflowRuntimeId: string, { assigneeId }: WorkflowAssigneeId) { - const updatedWorkflowRuntime = await this.workflowRuntimeDataRepository.updateById( + const workflowRuntimeData = await this.workflowRuntimeDataRepository.findById( + workflowRuntimeId, + ); + const hasDecision = + workflowRuntimeData?.context?.documents?.length && + workflowRuntimeData?.context?.documents?.every( + (document: DefaultContextSchema['documents'][number]) => !!document?.decision?.status, + ); + + if (hasDecision) { + throw new BadRequestException( + `Workflow with the id of "${workflowRuntimeId}" already has a decision`, + ); + } + + const updatedWorkflowRuntimeData = await this.workflowRuntimeDataRepository.updateById( workflowRuntimeId, { data: { assigneeId: assigneeId } }, ); - return updatedWorkflowRuntime; + return updatedWorkflowRuntimeData; } private async getCorrelationIdFromWorkflow(runtimeData: WorkflowRuntimeData) { From cd53458198ae4eb38e6227313c95153f8e46f823 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Sun, 2 Jul 2023 11:47:52 +0300 Subject: [PATCH 086/123] Alphanumeric doc number (#623) * refactor(common): replaced instances of docNumber number with string + alphanumeric pattern * refactor(seed.ts): updated docNumber in seed to be alphanumeric of 9 characters --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../workflow/documents/schemas/GH.ts | 44 +++++++++++++------ services/workflows-service/scripts/seed.ts | 4 +- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index eba228f89c..2d554cd015 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -1,5 +1,7 @@ import { TDocument } from '../types'; + const ghNationalIdNumber = '^$|^GHA-\\d{9}-\\d{1}$'; +const alphaNumeric = '^[a-zA-Z0-9]*$'; export const certificateOfResidenceGH: TDocument = { category: 'proof_of_address', @@ -20,7 +22,8 @@ export const certificateOfResidenceGH: TDocument = { pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -57,7 +60,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -94,7 +98,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -129,7 +134,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -164,7 +170,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, employeeName: { type: 'string', @@ -199,7 +206,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, employeeName: { type: 'string', @@ -231,7 +239,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -263,7 +272,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -295,7 +305,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -327,7 +338,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -363,7 +375,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, employeeName: { type: 'string', @@ -395,7 +408,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, employeeName: { type: 'string', @@ -430,7 +444,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', @@ -462,7 +477,8 @@ export const ghanaDocuments: TDocument[] = [ pattern: ghNationalIdNumber, }, docNumber: { - type: 'number', + type: 'string', + pattern: alphaNumeric, }, userAddress: { type: 'string', diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index cc5bf24a15..7d409a0415 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -191,7 +191,7 @@ async function seed(bcryptSalt: Salt) { ], properties: { nationalIdNumber: generateUserNationalId(), - docNumber: faker.finance.account(9), + docNumber: faker.random.alphaNumeric(9), employeeName: faker.name.fullName(), position: faker.name.jobTitle(), salaryAmount: faker.finance.amount(1000, 10000), @@ -224,7 +224,7 @@ async function seed(bcryptSalt: Salt) { ], properties: { nationalIdNumber: generateUserNationalId(), - docNumber: faker.finance.account(9), + docNumber: faker.random.alphaNumeric(9), employeeName: faker.name.fullName(), position: faker.name.jobTitle(), salaryAmount: faker.finance.amount(1000, 10000), From 1100d5929bbfc5d5023a0d9faef204614a2c7af0 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Mon, 3 Jul 2023 13:02:23 +0300 Subject: [PATCH 087/123] feat(backoffice-v2): added a comment field for reject/revision reason (#620) Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../components/CallToAction/CallToAction.tsx | 39 +++++++++++++++---- .../useCallToActionLogic.tsx | 6 +++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx index e2f0641fe9..7648ba1e07 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/CallToAction.tsx @@ -26,6 +26,9 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat reasons, reason, onReasonChange, + comment, + onCommentChange, + noReasons, } = useCallToActionLogic(); return value === 'Reject' ? ( @@ -44,8 +47,10 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat </DialogTrigger> <DialogContent> <div> - <h4 className={`mb-1 font-bold`}>Action</h4> - <Select onValueChange={onActionChange} value={action}> + <label className={`mb-1 font-bold`} htmlFor={`action`}> + Action + </label> + <Select onValueChange={onActionChange} value={action} id={`action`}> <SelectTrigger className="w-full"> <SelectValue /> </SelectTrigger> @@ -60,12 +65,12 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat </SelectContent> </Select> </div> - {!reasons?.length ? ( - <Input placeholder={`Reason`} onChange={event => onReasonChange(event.target.value)} /> - ) : ( + {!noReasons && ( <div> - <h4 className={`mb-1 font-bold`}>Reason</h4> - <Select onValueChange={onReasonChange} value={reason}> + <label className={`mb-1 font-bold`} htmlFor={`reason`}> + Reason + </label> + <Select onValueChange={onReasonChange} value={reason} id={`reason`}> <SelectTrigger className="w-full"> <SelectValue /> </SelectTrigger> @@ -85,6 +90,24 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat </Select> </div> )} + <div> + <label className={`mb-1 font-bold`} htmlFor={`comment`}> + {noReasons ? 'Reason' : 'Comment'} + </label> + <Input + onChange={event => { + if (noReasons) { + onReasonChange(event.target.value); + + return; + } + + onCommentChange(event.target.value); + }} + value={noReasons ? reason : comment} + id={noReasons ? `reason` : `comment`} + /> + </div> <DialogFooter> <DialogClose asChild> <button @@ -99,7 +122,7 @@ export const CallToAction: FunctionComponent<ICallToActionProps> = ({ value, dat onClick={onMutateUpdateWorkflowById({ id: data?.id, approvalStatus: action, - reason, + reason: comment ? `${reason} - ${comment}` : reason, })} > Confirm diff --git a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx index 062a862655..3de2844f37 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/CallToAction/hooks/useCallToActionLogic/useCallToActionLogic.tsx @@ -108,9 +108,12 @@ export const useCallToActionLogic = () => { ] as const; const [action, setAction] = useState<(typeof actions)[number]['value']>(actions[0].value); const reasons = action === 'revision' ? revisionReasons : rejectionReasons; + const noReasons = !reasons?.length; const [reason, setReason] = useState(reasons?.[0] ?? ''); + const [comment, setComment] = useState(''); const onReasonChange = useCallback((value: string) => setReason(value), [setReason]); const onActionChange = useCallback((value: typeof action) => setAction(value), [setAction]); + const onCommentChange = useCallback((value: string) => setComment(value), [setComment]); return { onMutateUpdateWorkflowById, @@ -120,7 +123,10 @@ export const useCallToActionLogic = () => { actions, reasons, reason, + comment, onReasonChange, onActionChange, + onCommentChange, + noReasons, }; }; From 7e99d5f054f62f498b7c2e226f752ed5798a1a13 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Mon, 3 Jul 2023 21:18:04 +0300 Subject: [PATCH 088/123] fix: fixed workflow dashboard port in env.example (#634) --- services/workflows-service/.env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/.env.example b/services/workflows-service/.env.example index 9bf390e9c3..155deace84 100644 --- a/services/workflows-service/.env.example +++ b/services/workflows-service/.env.example @@ -8,7 +8,7 @@ DB_PASSWORD=admin DB_PORT=5432 DB_URL=postgres://admin:admin@localhost:5432/postgres SESSION_SECRET=iGdnj4A0YOhj8dHJK7IWSvQKEZsG7P70FFehuddhFPjtg/bSkzFejYILk4Xue6Ilx9y3IAwzR8pV1gb4 -WORKFLOW_DASHBOARD_CORS_ORIGIN=http://localhost:5174 +WORKFLOW_DASHBOARD_CORS_ORIGIN=http://localhost:5200 BACKOFFICE_CORS_ORIGIN=http://localhost:5137 HEADLESS_EXAMPLE_CORS_ORIGIN=http://localhost:5173 API_KEY=secret From 14ce181da2a94f853a88caf197d6f20e9efe2ea5 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Wed, 5 Jul 2023 01:17:04 +0300 Subject: [PATCH 089/123] Illia rudniev/feat/wf runtimes page metrics (#626) * feat: added metric endpoints & added mocked metric cards to ui * fix: fixed tests * feat: implmeneted active per workflow chart & code refactoring * feat: implementd case per agent & case per status chart & replaced moment -> dayjs * chore: lock fix * chore: lock fix * feat: implemented agents metric & added active-users endpoint * Illia rudniev/feat/overview page stats (#632) * feat: implemented user statistic endpoints * feat: implemented users resolve stats endpoint & removed keyauth guard from endpoints * feat: implemented overview page & fixed metric endpoints * fix: fixed env ports * feat: added online status indicator & updated title on user activity metric * feat: added x-state visualizer to wf table & added wf definition endpoint (#638) --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- apps/workflows-dashboard/package.json | 12 +- .../convert-ms-duration-to-time.ts | 13 + .../components/atoms/PieChart/PieChart.tsx | 6 +- .../src/components/atoms/PieChart/types.ts | 3 +- .../molecules/MetricCard/MetricCard.tsx | 48 +++ .../MetricCard/MetricCardContent.tsx | 9 + .../molecules/MetricCard/MetricCardTitle.tsx | 12 + .../components/molecules/MetricCard/index.ts | 1 + .../WeeklyBarChart/WeeklyBarChart.tsx | 43 +++ .../molecules/WeeklyBarChart/index.ts | 1 + .../WeeklyBarChart/utils/get-week-day-name.ts | 2 + .../WorkflowsTable/WorkflowsTable.tsx | 34 ++- .../molecules/WorkflowsTable/columns.tsx | 29 +- .../ContextViewColumn/ContextViewColumn.tsx | 29 ++ .../components/ContextViewColumn/index.ts | 1 + .../molecules/WorkflowsTable/types.ts | 28 ++ .../WorkflowsTable/utils/merge-columns.ts | 14 + .../XstateVisualizer/XstateVisualizer.tsx | 46 +++ .../organisms/XstateVisualizer/index.ts | 1 + .../utils/deserialize-state-definition.ts | 34 +++ .../src/domains/auth/common/types.ts | 1 + .../src/domains/user/api/user-stats/index.ts | 3 + .../domains/user/api/user-stats/query-keys.ts | 20 ++ .../user/api/user-stats/user-stats.api.ts | 28 ++ .../user/api/user-stats/user-stats.types.ts | 19 ++ .../src/domains/user/api/users-stats/index.ts | 3 + .../user/api/users-stats/query-keys.ts | 10 + .../user/api/users-stats/users-stats.api.ts | 16 + .../user/api/users-stats/users-stats.types.ts | 11 + .../src/domains/workflows/api/users/index.ts | 3 + .../domains/workflows/api/users/query-keys.ts | 10 + .../domains/workflows/api/users/users.api.ts | 9 + .../workflows/api/users/users.types.ts | 11 + .../api/workflow-metrics/query-keys.ts | 22 +- .../workflow-metrics/workflow-metrics.api.ts | 40 ++- .../workflow-metrics.types.ts | 28 +- .../workflows/api/workflow/query-keys.ts | 11 +- .../workflows/api/workflow/workflow.api.ts | 19 +- .../workflows/api/workflow/workflow.types.ts | 10 + .../src/pages/Overview/Overview.tsx | 76 +---- .../OverviewChartMock/OverviewChartMock.tsx | 72 ----- .../components/OverviewChartMock/index.ts | 1 - .../RecentSalesMock/RecentSalesMock.tsx | 63 ---- .../components/RecentSalesMock/index.ts | 1 - .../DailyResolvedCasesChart.tsx | 19 ++ .../DailyResolvedCasesChart/index.ts | 1 + .../molecules/UserStats/UserStats.tsx | 35 +++ .../components/DurationCard/DurationCard.tsx | 24 ++ .../DurationCard/DurationCardContent.tsx | 23 ++ .../components/DurationCard/index.ts | 1 + .../PercentageCard/PercentageCard.tsx | 19 ++ .../components/PercentageCard/index.ts | 1 + .../components/molecules/UserStats/index.ts | 1 + .../UsersResolvingStatsList/ListItem.tsx | 21 ++ .../UsersResolvingStatsList.tsx | 26 ++ .../UsersResolvingStatsList/index.ts | 1 + .../OverviewTabContent/OverviewTabContent.tsx | 78 +++++ .../organisms/OverviewTabContent/index.ts | 1 + .../hooks/useCaseResolvingStatsQuery/index.ts | 1 + .../useCaseResolvingStatsQuery.ts | 16 + .../Overview/hooks/useUserStatsQuery/index.ts | 1 + .../useUserStatsQuery/useUserStatsQuery.ts | 23 ++ .../useUsersCaseResolvingStatsQuery/index.ts | 1 + .../useUsersCaseResolvingStatsQuery.ts | 16 + .../hooks/useWorkflowsMetric/index.ts | 1 - .../hooks/useWorkflowsMetric/types.ts | 3 - .../useWorkflowsMetric/useWorkflowsMetric.ts | 15 - .../src/pages/Workflows/Workflows.tsx | 49 +++- .../WorkflowsMetricLayout.tsx | 13 + .../WorkflowsMetricLayoutItem.tsx | 9 + .../layouts/WorkflowsMetricLayout/index.ts | 1 + .../ActivePerWorkflowChart.tsx | 41 +++ .../molecules/ActivePerWorkflowChart/index.ts | 1 + .../AgentCasesChart/AgentCasesChart.tsx | 39 +++ .../molecules/AgentCasesChart/index.ts | 1 + .../AgentsActivityChart.tsx | 50 ++++ .../molecules/AgentsActivityChart/index.ts | 1 + .../CasesPerStatusChart.tsx | 38 +++ .../molecules/CasesPerStatusChart/index.ts | 1 + .../MetricListChart/MetricListChart.tsx | 37 +++ .../molecules/MetricListChart/index.ts | 1 + .../StatusFilterComponent.tsx | 1 - .../components/molecules/common/types.ts | 3 + .../WorkflowFilters/WorkflowFilters.tsx | 9 +- .../organisms/WorkflowFilters/types.ts | 9 +- .../WorkflowMetrics/WorkflowMetrics.tsx | 65 ++--- .../organisms/WorkflowMetrics/helpers.ts | 36 +-- .../WorkflowStatusChart.tsx | 10 +- .../WorkflowChartDetails.tsx | 16 +- .../organisms/WorkflowsList/WorkflowsList.tsx | 11 + .../components/ViewWorkflow/ViewWorkflow.tsx | 36 +++ .../components/ViewWorkflow/index.ts | 1 + .../ActivePerWorkflow/ActivePerWorkflow.tsx | 24 ++ .../useActivePerWorkflowStatsQuery/index.ts | 1 + .../useActivePerWorkflowStatsQuery.ts | 12 + .../metrics/ActivePerWorkflow/index.ts | 1 + .../AgentCasesStats/AgentCasesStats.tsx | 22 ++ .../hooks/useAgentCasesStatsQuery/index.ts | 1 + .../useAgentCasesStatsQuery.ts | 15 + .../metrics/AgentCasesStats/index.ts | 1 + .../AgentsActivityStats.tsx | 22 ++ .../hooks/useActiveUsersQuery/index.ts | 1 + .../useActiveUsersQuery.ts | 13 + .../metrics/AgentsActivityStats/index.ts | 1 + .../CasesPerStatusStats.tsx | 31 ++ .../hooks/useCasesPerStatusQuery/index.ts | 1 + .../useCasesPerStatusQuery.ts | 15 + .../metrics/CasesPerStatusStats/index.ts | 1 + .../WorkflowsFiltersProvider.tsx | 38 +++ .../helpers/deserializeQueryParams.ts | 15 + .../hocs/withWorkflowFilters/index.ts | 1 + .../hocs/withWorkflowFilters/types.ts | 9 + .../withWorkflowFilters.tsx | 29 ++ .../hooks/useWorkflowFilters/index.ts | 1 + .../useWorkflowFilters/useWorkflowFilters.ts | 4 + .../hooks/useWorkflowsQueryParams/index.ts | 1 + .../hooks/useWorkflowsQueryParams/types.ts | 3 + .../useWorkflowsQueryParams.ts | 20 ++ .../workflows-filters.context.ts | 4 + .../workflows-filters.types.ts | 15 + .../hooks/useWorkflowDefinitionQuery/index.ts | 1 + .../useWorkflowDefinitionQuery.ts | 14 + .../hooks/useWorkflowsFilters/index.ts | 1 - .../hooks/useWorkflowsFilters/types.ts | 7 - .../useWorkflowsFilters.ts | 36 --- .../useWorkflowsQuery/useWorkflowsQuery.ts | 4 +- .../utils/get-workflow-health-status.test.ts | 8 +- apps/workflows-dashboard/tsconfig.json | 1 + pnpm-lock.yaml | 275 +++++++++++++++--- .../migration.sql | 2 + .../workflows-service/prisma/schema.prisma | 1 + .../src/user/dtos/get-active-users.dto.ts | 11 + ...et-users-case-resolving-stats-input.dto.ts | 11 + .../workflows-service/src/user/types/index.ts | 3 + .../user/user-case-resolving-stats.model.ts | 18 ++ .../src/user/user.controller.internal.ts | 1 - .../src/user/user.controlller.external.ts | 41 +++ .../workflows-service/src/user/user.model.ts | 20 +- .../workflows-service/src/user/user.module.ts | 3 +- .../src/user/user.repository.ts | 4 + .../src/user/user.service.ts | 32 ++ .../get-case-resolving-metrics-input.dto.ts | 11 + ...t-workflow-runtime-user-stats-input.dto.ts | 11 + ...workflows-runtime-agent-cases-input.dto.ts | 11 + ...lows-runtime-cases-per-status-input.dto.ts | 11 + .../src/workflow/types/index.ts | 32 +- .../src/workflow/workflow-metric.service.ts | 135 +++++++++ .../workflow-runtime-agent-cases.model.ts | 15 + ...workflow-runtime-cases-per-status.model.ts | 13 + .../workflow-runtime-data.repository.ts | 4 + .../workflow-runtime-list-item.model.ts | 5 + .../workflow/workflow-runtime-stats-model.ts | 29 ++ .../workflow/workflow.controller.external.ts | 95 +++++- .../workflow.controller.external.unit.test.ts | 5 + .../src/workflow/workflow.module.ts | 6 + .../src/workflow/workflow.service.ts | 119 ++++++-- 156 files changed, 2462 insertions(+), 496 deletions(-) create mode 100644 apps/workflows-dashboard/src/common/utils/convert-ms-duration-to-time/convert-ms-duration-to-time.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardContent.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardTitle.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/MetricCard/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/WeeklyBarChart.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/utils/get-week-day-name.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/ContextViewColumn.tsx create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/index.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/types.ts create mode 100644 apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/merge-columns.ts create mode 100644 apps/workflows-dashboard/src/components/organisms/XstateVisualizer/XstateVisualizer.tsx create mode 100644 apps/workflows-dashboard/src/components/organisms/XstateVisualizer/index.ts create mode 100644 apps/workflows-dashboard/src/components/organisms/XstateVisualizer/utils/deserialize-state-definition.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/user-stats/index.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/users-stats/index.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts create mode 100644 apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/users/index.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/users/query-keys.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts create mode 100644 apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts delete mode 100644 apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx delete mode 100644 apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx delete mode 100644 apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCard.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCardContent.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx create mode 100644 apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts delete mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts delete mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayout.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayoutItem.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/ActivePerWorkflowChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/MetricListChart.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/molecules/common/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/ViewWorkflow.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/AgentsActivityStats.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/CasesPerStatusStats.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/WorkflowsFiltersProvider.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/helpers/deserializeQueryParams.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/withWorkflowFilters.tsx create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/useWorkflowFilters.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.context.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/useWorkflowDefinitionQuery.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts create mode 100644 services/workflows-service/prisma/migrations/20230629141759_added_assigned_at_to_workflow_runtime_data/migration.sql create mode 100644 services/workflows-service/src/user/dtos/get-active-users.dto.ts create mode 100644 services/workflows-service/src/user/dtos/get-users-case-resolving-stats-input.dto.ts create mode 100644 services/workflows-service/src/user/types/index.ts create mode 100644 services/workflows-service/src/user/user-case-resolving-stats.model.ts create mode 100644 services/workflows-service/src/user/user.controlller.external.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts create mode 100644 services/workflows-service/src/workflow/dtos/get-workflows-runtime-cases-per-status-input.dto.ts create mode 100644 services/workflows-service/src/workflow/workflow-metric.service.ts create mode 100644 services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts create mode 100644 services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts create mode 100644 services/workflows-service/src/workflow/workflow-runtime-stats-model.ts diff --git a/apps/workflows-dashboard/package.json b/apps/workflows-dashboard/package.json index 1ecbbb7767..cc0322646e 100644 --- a/apps/workflows-dashboard/package.json +++ b/apps/workflows-dashboard/package.json @@ -25,29 +25,36 @@ "@tailwindcss/line-clamp": "^0.4.4", "@tanstack/react-query": "^4.28.0", "@tanstack/react-table": "^8.9.2", + "@xstate/inspect": "^0.7.1", + "@xstate/react": "^3.2.2", "axios": "^1.4.0", "class-variance-authority": "^0.6.0", "classnames": "^2.3.2", "clsx": "^1.2.1", "cmdk": "^0.2.0", + "dayjs": "^1.11.6", "install": "^0.13.0", + "lodash": "^4.17.21", "lucide-react": "^0.144.0", "react": "^18.2.0", "react-custom-scrollbars": "^4.2.1", "react-dom": "^18.2.0", "react-hook-form": "^7.43.9", + "react-json-view": "^1.21.3", "react-router-dom": "^6.11.2", "recharts": "^2.7.2", "tailwind-merge": "^1.13.2", "tailwindcss-animate": "^1.0.5", "use-query-params": "^2.2.1", - "zod": "^3.21.4", - "vite-plugin-terminal": "^1.1.0" + "vite-plugin-terminal": "^1.1.0", + "xstate": "^4.38.0", + "zod": "^3.21.4" }, "devDependencies": { "@types/axios": "^0.14.0", "@types/classnames": "^2.3.1", "@types/jest": "^26.0.19", + "@types/lodash": "^4.14.191", "@types/moment": "^2.13.0", "@types/node": "^20.3.1", "@types/react": "^18.0.37", @@ -61,7 +68,6 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.3.4", "jest": "^29.5.0", - "moment": "^2.29.4", "postcss": "^8.4.24", "tailwindcss": "^3.2.7", "ts-jest": "^29.1.0", diff --git a/apps/workflows-dashboard/src/common/utils/convert-ms-duration-to-time/convert-ms-duration-to-time.ts b/apps/workflows-dashboard/src/common/utils/convert-ms-duration-to-time/convert-ms-duration-to-time.ts new file mode 100644 index 0000000000..6239e4d454 --- /dev/null +++ b/apps/workflows-dashboard/src/common/utils/convert-ms-duration-to-time/convert-ms-duration-to-time.ts @@ -0,0 +1,13 @@ +export const convertMsDurationToTime = (duration: number) => { + const seconds = Math.floor((duration / 1000) % 60); + const minutes = Math.floor((duration / (1000 * 60)) % 60); + const hours = Math.floor((duration / (1000 * 60 * 60)) % 24); + const days = Math.floor(duration / (1000 * 60 * 60 * 24)); + + return { + days, + hours, + minutes, + seconds, + }; +}; diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx b/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx index 2425e75196..d18d2d47a7 100644 --- a/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/PieChart.tsx @@ -25,13 +25,15 @@ export const PieChart = ({ size, data, outerRadius, innerRadius }: Props) => { innerRadius={innerRadius} fill="#000000" dataKey="value" + animationBegin={200} + animationDuration={800} > - {data.map((data, index) => ( + {/* {data.map((data, index) => ( <RechartPrimitive.Cell key={`cell-${index}`} fill={data.fillColor ? data.fillColor : undefined} /> - ))} + ))} */} <RechartPrimitive.Label position={'center'} style={{ fontWeight: 'bold' }}> {totalValue} </RechartPrimitive.Label> diff --git a/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts b/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts index 9fdf107c38..e4d6f9d75d 100644 --- a/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts +++ b/apps/workflows-dashboard/src/components/atoms/PieChart/types.ts @@ -1,5 +1,4 @@ export interface PieChartData { - status: string; value: number; - fillColor: string; + fill: string; } diff --git a/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx new file mode 100644 index 0000000000..bce8e8f28c --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx @@ -0,0 +1,48 @@ +import * as classnames from 'classnames'; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, +} from '@app/components/atoms/Card'; +import { MetricCardContent } from '@app/components/molecules/MetricCard/MetricCardContent'; +import { MetricCardTitle } from '@app/components/molecules/MetricCard/MetricCardTitle'; +import { Skeleton } from '@app/components/atoms/Skeleton'; + +interface Props { + className?: string; + isLoading?: boolean; + title: React.ReactNode; + content?: React.ReactNode; + description?: string; +} + +export function MetricCard({ title, content, description, className, isLoading }: Props) { + return ( + <Card className={classnames('flex h-full flex-col flex-nowrap', className)}> + {isLoading ? ( + <Skeleton className="ml-4 mr-4 mt-4 h-6" /> + ) : ( + <CardHeader className="dfgdf p-4">{title}</CardHeader> + )} + <CardContent className={classnames('flex-1 p-4 pb-2')}> + {isLoading ? ( + <Skeleton className="h-20" /> + ) : ( + <div className={classnames('w-full', 'h-full')}>{content}</div> + )} + </CardContent> + <CardFooter className="p-4 pt-0"> + {isLoading ? ( + <Skeleton className="h-6" /> + ) : description ? ( + <CardDescription className="w-full text-xs">{description}</CardDescription> + ) : null} + </CardFooter> + </Card> + ); +} + +MetricCard.Title = MetricCardTitle; +MetricCard.Content = MetricCardContent; diff --git a/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardContent.tsx b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardContent.tsx new file mode 100644 index 0000000000..3797533add --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardContent.tsx @@ -0,0 +1,9 @@ +interface Props { + children: React.ReactNode; +} + +export function MetricCardContent({ children }: Props) { + return <div className="h-full">{children}</div>; +} + +MetricCardContent.displayName = 'MetricCardContent'; diff --git a/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardTitle.tsx b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardTitle.tsx new file mode 100644 index 0000000000..5acbd2c293 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCardTitle.tsx @@ -0,0 +1,12 @@ +import { CardTitle } from '@app/components/atoms/Card'; + +interface Props { + title: React.ReactNode; + className?: string; +} + +export function MetricCardTitle({ title, className }: Props) { + return <CardTitle className={className}>{title}</CardTitle>; +} + +MetricCardTitle.displayName = 'MetricCardTitle'; diff --git a/apps/workflows-dashboard/src/components/molecules/MetricCard/index.ts b/apps/workflows-dashboard/src/components/molecules/MetricCard/index.ts new file mode 100644 index 0000000000..ff6adfe2d3 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/MetricCard/index.ts @@ -0,0 +1 @@ +export * from './MetricCard'; diff --git a/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/WeeklyBarChart.tsx b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/WeeklyBarChart.tsx new file mode 100644 index 0000000000..6fb20f507b --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/WeeklyBarChart.tsx @@ -0,0 +1,43 @@ +import { memo, useMemo } from 'react'; +import { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from 'recharts'; +import { getWeekDayName } from '@app/components/molecules/WeeklyBarChart/utils/get-week-day-name'; + +export interface WeeklyBarChartData { + value: number; + date: Date; +} + +interface BarChartData { + name: string; + value: number; +} + +interface Props { + data: WeeklyBarChartData[]; +} + +export const WeeklyBarChart = memo(({ data }: Props) => { + const chartData = useMemo((): BarChartData[] => { + return data.map(item => ({ + name: `${getWeekDayName(item.date)} ${item.date.getDate()}`, + value: item.value, + })); + }, [data]); + + return ( + <ResponsiveContainer width="100%" height={'100%'}> + <BarChart data={chartData}> + <XAxis dataKey="name" stroke="#888888" fontSize={12} tickLine={false} axisLine={false} /> + <YAxis + stroke="#888888" + fontSize={12} + tickLine={false} + axisLine={false} + padding={{ top: 0, bottom: 0 }} + allowDecimals={false} + /> + <Bar dataKey="value" fill="#adfa1d" radius={[4, 4, 0, 0]} /> + </BarChart> + </ResponsiveContainer> + ); +}); diff --git a/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/index.ts b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/index.ts new file mode 100644 index 0000000000..046c66018e --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/index.ts @@ -0,0 +1 @@ +export * from './WeeklyBarChart'; diff --git a/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/utils/get-week-day-name.ts b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/utils/get-week-day-name.ts new file mode 100644 index 0000000000..bf8a3ba241 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WeeklyBarChart/utils/get-week-day-name.ts @@ -0,0 +1,2 @@ +export const getWeekDayName = (date: Date) => + date.toLocaleDateString('en-US', { weekday: 'short' }); diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx index 9fb3eec5dd..1e9a22e3e4 100644 --- a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx @@ -6,28 +6,46 @@ import { TableHeader, TableRow, } from '@app/components/atoms/Table'; -import { memo } from 'react'; +import { memo, useMemo } from 'react'; import * as classnames from 'classnames'; import { useReactTable, flexRender, getCoreRowModel, SortingState } from '@tanstack/react-table'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; import { defaultColumns } from '@app/components/molecules/WorkflowsTable/columns'; import Scrollbars from 'react-custom-scrollbars'; - -export interface WorkflowsTableSorting { - key: string; - direction: 'asc' | 'desc'; -} +import { + InputColumn, + WorkflowsTableSorting, + WorkflowTableColumnDef, +} from '@app/components/molecules/WorkflowsTable/types'; +import keyBy from 'lodash/keyBy'; +import { mergeColumns } from '@app/components/molecules/WorkflowsTable/utils/merge-columns'; interface Props { items: IWorkflow[]; sorting?: WorkflowsTableSorting; isFetching?: boolean; + columns?: InputColumn[]; onSort: (key: string, direction: 'asc' | 'desc') => void; } -export const WorkflowsTable = memo(({ items, isFetching, sorting, onSort }: Props) => { +export const WorkflowsTable = memo(({ items, isFetching, sorting, columns, onSort }: Props) => { + // merging column parameters if provided + const tableColumns = useMemo((): WorkflowTableColumnDef<IWorkflow>[] => { + if (!Array.isArray(columns) || !columns.length) return defaultColumns; + + const columnsMap = keyBy(columns, 'id'); + + return defaultColumns.map(defaultColumn => { + const columnParams = columnsMap[defaultColumn.accessorKey]; + + if (!columnParams) return defaultColumn; + + return mergeColumns(defaultColumn, columnParams); + }); + }, [columns]); + const table = useReactTable({ - columns: defaultColumns, + columns: tableColumns, data: items, enableColumnResizing: true, manualSorting: false, diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx index 7ec811bcec..2599698181 100644 --- a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/columns.tsx @@ -1,16 +1,16 @@ import { HealthIndicator } from '@app/components/atoms/HealthIndicator'; +import { ContextViewColumn } from '@app/components/molecules/WorkflowsTable/components/ContextViewColumn'; import { DataTableColumnHeader } from '@app/components/molecules/WorkflowsTable/components/DataTableColumnHeader'; +import { WorkflowTableColumnDef } from '@app/components/molecules/WorkflowsTable/types'; import { formatDate } from '@app/components/molecules/WorkflowsTable/utils/format-date'; -import { IWorkflow, IWorkflowAssignee } from '@app/domains/workflows/api/workflow'; +import { IWorkflow } from '@app/domains/workflows/api/workflow'; import { getWorkflowHealthStatus } from '@app/utils/get-workflow-health-status'; -import { ColumnDef } from '@tanstack/react-table'; -export const defaultColumns: ColumnDef<IWorkflow>[] = [ +export const defaultColumns: WorkflowTableColumnDef<IWorkflow>[] = [ { accessorKey: 'id', cell: info => info.getValue<string>(), header: () => 'ID', - size: 280, }, { accessorKey: 'workflowDefinitionName', @@ -28,31 +28,29 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ </div> ), header: ({ column }) => <DataTableColumnHeader column={column} title="Status" />, - size: 125, }, { accessorKey: 'state', cell: info => info.getValue<string>(), header: ({ column }) => <DataTableColumnHeader column={column} title="State" />, - size: 125, }, { accessorKey: 'assignee', - cell: info => { - const assignee = info.getValue<IWorkflowAssignee>(); - if (!assignee) return '-'; - - return `${assignee.firstName} ${assignee.lastName}`; - }, + accessorFn: row => (row.assignee ? `${row.assignee.firstName} ${row.assignee.lastName}` : '-'), + cell: info => info.getValue<string>(), header: ({ column }) => <DataTableColumnHeader column={column} title="Assign To" />, - size: 125, }, { accessorKey: 'context', accessorFn: row => JSON.stringify(row.context), - cell: info => info.getValue<string>(), + cell: info => <ContextViewColumn context={info.getValue<string>()} />, header: () => 'Context', - size: 300, + }, + { + accessorKey: 'view-workflow', + accessorFn: row => row.id, + cell: () => '-', + header: () => 'Workflow', }, { accessorKey: 'resolvedAt', @@ -68,6 +66,5 @@ export const defaultColumns: ColumnDef<IWorkflow>[] = [ accessorKey: 'createdAt', cell: info => formatDate(info.getValue<Date>()), header: ({ column }) => <DataTableColumnHeader column={column} title="Created At" />, - size: 240, }, ]; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/ContextViewColumn.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/ContextViewColumn.tsx new file mode 100644 index 0000000000..67e3e1b39e --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/ContextViewColumn.tsx @@ -0,0 +1,29 @@ +import { Button } from '@app/components/atoms/Button'; +import { Dialog, DialogContent, DialogTrigger } from '@app/components/atoms/Dialog'; +import { CodeIcon } from 'lucide-react'; +import Scrollbars from 'react-custom-scrollbars'; +import ReactJson from 'react-json-view'; + +interface Props { + context: string; +} + +export const ContextViewColumn = ({ context }: Props) => { + return ( + <Dialog> + <DialogTrigger asChild> + <Button className="flex items-center gap-2"> + <CodeIcon size="16" /> + View context + </Button> + </DialogTrigger> + <DialogContent className="h-[80vh] min-w-[80%]"> + <div className="pr-4"> + <Scrollbars> + <ReactJson src={context ? JSON.parse(context) : {}} /> + </Scrollbars> + </div> + </DialogContent> + </Dialog> + ); +}; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/index.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/index.ts new file mode 100644 index 0000000000..66b740a642 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/components/ContextViewColumn/index.ts @@ -0,0 +1 @@ +export * from './ContextViewColumn'; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/types.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/types.ts new file mode 100644 index 0000000000..2758c6fa2b --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/types.ts @@ -0,0 +1,28 @@ +import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { AccessorFnColumnDef, ColumnDef } from '@tanstack/react-table'; + +export interface WorkflowsTableSorting { + key: string; + direction: 'asc' | 'desc'; +} + +export type WorkflowTableColumnKeys = + | 'id' + | 'workflowDefinitionName' + | 'status' + | 'state' + | 'assignee' + | 'context' + | 'view-workflow' + | 'resolvedAt' + | 'createdBy' + | 'createdAt'; + +export type WorkflowTableColumnDef<TData> = Omit<ColumnDef<TData>, 'accessorKey'> & { + accessorFn?: AccessorFnColumnDef<TData>['accessorFn']; + accessorKey: WorkflowTableColumnKeys; +}; + +export type InputColumn<TData = IWorkflow> = Partial<WorkflowTableColumnDef<TData>> & { + id: WorkflowTableColumnKeys; +}; diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/merge-columns.ts b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/merge-columns.ts new file mode 100644 index 0000000000..9898ac3b59 --- /dev/null +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/utils/merge-columns.ts @@ -0,0 +1,14 @@ +import { + InputColumn, + WorkflowTableColumnDef, +} from '@app/components/molecules/WorkflowsTable/types'; + +export function mergeColumns<TColumnData>( + leftColumn: WorkflowTableColumnDef<TColumnData>, + rightColumn: InputColumn<TColumnData>, +) { + return { + ...leftColumn, + ...rightColumn, + }; +} diff --git a/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/XstateVisualizer.tsx b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/XstateVisualizer.tsx new file mode 100644 index 0000000000..6eea62d027 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/XstateVisualizer.tsx @@ -0,0 +1,46 @@ +import { memo, useLayoutEffect, useMemo, useRef } from 'react'; +import { inspect } from '@xstate/inspect'; +import { createMachine } from 'xstate'; +import { useInterpret, useMachine } from '@xstate/react'; +import { deserializeStateDefinition } from '@app/components/organisms/XstateVisualizer/utils/deserialize-state-definition'; + +interface Props { + stateDefinition: Record<string, any>; + state?: string; +} + +export const XstateVisualizer = memo(({ stateDefinition, state }: Props) => { + const _machine = useMemo( + () => + createMachine( + deserializeStateDefinition({ + ...stateDefinition, + initial: state || stateDefinition.initial, + }), + ), + [stateDefinition, state], + ); + const [stateMachine] = useMachine(_machine); + + useInterpret(_machine, { devTools: true }); + + const iframeRef = useRef<HTMLIFrameElement | null>(null); + + useLayoutEffect(() => { + if (!iframeRef.current) return; + + inspect({ iframe: iframeRef.current }); + }, [iframeRef, state, stateMachine.value]); + + return ( + <div className="h-full w-full"> + <iframe + ref={iframeRef} + data-xstate + style={{ width: 'calc(100% + clamp(40rem, 40rem + 0px, 100%))' }} + // width="100%" + height="100%" + /> + </div> + ); +}); diff --git a/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/index.ts b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/index.ts new file mode 100644 index 0000000000..72b67af0af --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/index.ts @@ -0,0 +1 @@ +export * from './XstateVisualizer'; diff --git a/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/utils/deserialize-state-definition.ts b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/utils/deserialize-state-definition.ts new file mode 100644 index 0000000000..f01bcaabb7 --- /dev/null +++ b/apps/workflows-dashboard/src/components/organisms/XstateVisualizer/utils/deserialize-state-definition.ts @@ -0,0 +1,34 @@ +import forEach from 'lodash/forEach'; + +function removeKeyAndValue<T extends object>( + object: T, + keyToSearch: string, + valueToSearch: unknown, +): void { + if (typeof object !== 'object' || object === null) { + return; + } + + if (Array.isArray(object)) { + forEach(object, item => removeKeyAndValue(item, keyToSearch, valueToSearch)); + return; + } + + forEach(object, (value, key) => { + if (key === keyToSearch && value === valueToSearch) { + delete object[key as keyof T]; + } else { + removeKeyAndValue(value as T, keyToSearch, valueToSearch); + } + }); +} + +// type: final breaks X-state visualizer +// to avoid this for now we have to remove those values from state defintiion +export const deserializeStateDefinition = (state: Record<string, any>) => { + state = JSON.parse(JSON.stringify(state)); + + removeKeyAndValue(state, 'type', 'final'); + + return state; +}; diff --git a/apps/workflows-dashboard/src/domains/auth/common/types.ts b/apps/workflows-dashboard/src/domains/auth/common/types.ts index 737861ab56..b907960e9f 100644 --- a/apps/workflows-dashboard/src/domains/auth/common/types.ts +++ b/apps/workflows-dashboard/src/domains/auth/common/types.ts @@ -4,4 +4,5 @@ export interface IUser { firstName: string; lastName: string; roles: string[]; + lastActiveAt: Date | null; } diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/index.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/index.ts new file mode 100644 index 0000000000..113a186ab6 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/index.ts @@ -0,0 +1,3 @@ +export * from './query-keys'; +export * from './user-stats.api'; +export * from './user-stats.types'; diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts new file mode 100644 index 0000000000..d3d127fadd --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts @@ -0,0 +1,20 @@ +import { + fetchUserCaseResolvingStats, + fetchUserStats, +} from '@app/domains/user/api/user-stats/user-stats.api'; +import { + GetUserCaseResolvingStatsDto, + GetUserStatsDto, +} from '@app/domains/user/api/user-stats/user-stats.types'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const userStatsQueryKeys = createQueryKeys('user-stats', { + userStats: (query: GetUserStatsDto) => ({ + queryKey: [query], + queryFn: () => fetchUserStats(query), + }), + userCaseResolvingStats: (query: GetUserCaseResolvingStatsDto) => ({ + queryKey: [query], + queryFn: () => fetchUserCaseResolvingStats(query), + }), +}); diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts new file mode 100644 index 0000000000..fe910aaf5d --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts @@ -0,0 +1,28 @@ +import { + GetUserCaseResolvingStatsDto, + GetUserStatsDto, + IResolvedCasesDailyMetric, + IUserStats, +} from '@app/domains/user/api/user-stats/user-stats.types'; +import { request } from '@app/lib/request'; + +export const fetchUserStats = async (query: GetUserStatsDto): Promise<IUserStats> => { + const result = await request.get<IUserStats>('/external/workflows/metrics/user-stats', { + params: query, + }); + + return result.data; +}; + +export const fetchUserCaseResolvingStats = async ( + query: GetUserCaseResolvingStatsDto, +): Promise<IResolvedCasesDailyMetric[]> => { + const result = await request.get<IResolvedCasesDailyMetric[]>( + '/external/workflows/metrics/case-resolving', + { + params: query, + }, + ); + + return result.data; +}; diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts new file mode 100644 index 0000000000..94db9ef320 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts @@ -0,0 +1,19 @@ +export interface IResolvedCasesDailyMetric { + date: string; + casesPerDay: number; +} + +export interface IUserStats { + approvalRate: number; + averageResolutionTime: number; + averageAssignmentTime: number; + averageReviewTime: number; +} + +export interface GetUserStatsDto { + fromDate?: number; +} + +export interface GetUserCaseResolvingStatsDto { + fromDate?: number; +} diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/index.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/index.ts new file mode 100644 index 0000000000..f6fb0b6a1f --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/index.ts @@ -0,0 +1,3 @@ +export * from './query-keys'; +export * from './users-stats.api'; +export * from './users-stats.types'; diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts new file mode 100644 index 0000000000..a03ad2ff50 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts @@ -0,0 +1,10 @@ +import { fetchUsersCaseResolvingStats } from '@app/domains/user/api/users-stats/users-stats.api'; +import { GetUsersCaseResolvingStats } from '@app/domains/user/api/users-stats/users-stats.types'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const usersStatsQueryKeys = createQueryKeys('users-stats', { + caseResolvingStatsList: (query: GetUsersCaseResolvingStats) => ({ + queryKey: [query], + queryFn: () => fetchUsersCaseResolvingStats(query), + }), +}); diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts new file mode 100644 index 0000000000..884f25fe48 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts @@ -0,0 +1,16 @@ +import { + GetUsersCaseResolvingStats, + IUserCaseResolvingStats, +} from '@app/domains/user/api/users-stats/users-stats.types'; +import { request } from '@app/lib/request'; + +export const fetchUsersCaseResolvingStats = async ( + query: GetUsersCaseResolvingStats, +): Promise<IUserCaseResolvingStats[]> => { + const result = await request.get<IUserCaseResolvingStats[]>( + '/external/users/metrics/case-resolving-stats', + { params: query }, + ); + + return result.data; +}; diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts new file mode 100644 index 0000000000..7090707fec --- /dev/null +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts @@ -0,0 +1,11 @@ +export interface IUserCaseResolvingStats { + id: string; + firstName: string; + lastName: string; + cases: number; + email: string; +} + +export interface GetUsersCaseResolvingStats { + fromDate?: number; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/index.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/index.ts new file mode 100644 index 0000000000..01fa2fe910 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/index.ts @@ -0,0 +1,3 @@ +export * from './query-keys'; +export * from './users.api'; +export * from './users.types'; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/query-keys.ts new file mode 100644 index 0000000000..2b9626984d --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/query-keys.ts @@ -0,0 +1,10 @@ +import { fetchActiveUsers } from '@app/domains/workflows/api/users/users.api'; +import { GetActiveUsersDto } from '@app/domains/workflows/api/users/users.types'; +import { createQueryKeys } from '@lukemorales/query-key-factory'; + +export const usersKeys = createQueryKeys('users', { + activeUsers: (query: GetActiveUsersDto) => ({ + queryKey: [{}, query], + queryFn: () => fetchActiveUsers(query), + }), +}); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts new file mode 100644 index 0000000000..43d75783f1 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts @@ -0,0 +1,9 @@ +import { IUser } from '@app/domains/auth/common/types'; +import { GetActiveUsersDto } from '@app/domains/workflows/api/users/users.types'; +import { request } from '@app/lib/request'; + +export const fetchActiveUsers = async (query: GetActiveUsersDto): Promise<IUser[]> => { + const result = await request.get<IUser[]>('/external/users/active-users', { params: query }); + + return result.data; +}; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts new file mode 100644 index 0000000000..4e2aa6b822 --- /dev/null +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts @@ -0,0 +1,11 @@ +export interface IUser { + id: string; + email: string; + firstName: string; + lastName: string; + lastActiveAt: string | null; +} + +export interface GetActiveUsersDto { + fromDate?: number; +} diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts index 034eee365b..b4ed460b5c 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts @@ -1,9 +1,25 @@ -import { fetchWorkflowMetrics } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.api'; +import { + fetchCasesPerStatusStats, + fetchWorkflowAgentCasesStats, + fetchWorkflowStats, +} from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.api'; +import { + GetAgentCasesStatsDto, + GetCasesPerStatusDto, +} from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; import { createQueryKeys } from '@lukemorales/query-key-factory'; export const workflowMetricsKeys = createQueryKeys('workflow-metrics', { - list: () => ({ + workflowRuntimeStats: () => ({ queryKey: [{}], - queryFn: fetchWorkflowMetrics, + queryFn: () => fetchWorkflowStats(), + }), + workflowAgentCasesStats: (query: GetAgentCasesStatsDto) => ({ + queryKey: [query], + queryFn: () => fetchWorkflowAgentCasesStats(query), + }), + workflowCasesPerStatusStats: (query: GetCasesPerStatusDto) => ({ + queryKey: [query], + queryFn: () => fetchCasesPerStatusStats(query), }), }); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts index ad270b9c73..0cfbafbba2 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts @@ -1,8 +1,40 @@ -import { GetWorkflowMetricsResponse } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; +import { + GetAgentCasesStatsDto, + GetCasesPerStatusDto, + IAgentCasesStats, + ICasesPerStatusStats, + IWorkflowDefinitionStats, +} from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; import { request } from '@app/lib/request'; -export async function fetchWorkflowMetrics(): Promise<GetWorkflowMetricsResponse> { - const result = await request.get<GetWorkflowMetricsResponse>('/external/workflows/metrics'); +export const fetchWorkflowStats = async (): Promise<IWorkflowDefinitionStats[]> => { + const result = await request.get<IWorkflowDefinitionStats[]>( + '/external/workflows/metrics/workflows-definition-runtime-stats', + ); return result.data; -} +}; + +export const fetchWorkflowAgentCasesStats = async ( + query: GetAgentCasesStatsDto = {}, +): Promise<IAgentCasesStats[]> => { + const result = await request.get<IAgentCasesStats[]>( + '/external/workflows/metrics/workflow-runtime-agent-cases-stats', + { + params: query, + }, + ); + + return result.data; +}; + +export const fetchCasesPerStatusStats = async ( + query: GetCasesPerStatusDto, +): Promise<ICasesPerStatusStats> => { + const result = await request.get<ICasesPerStatusStats>( + '/external/workflows/metrics/workflow-runtime-cases-per-status', + { params: query }, + ); + + return result.data; +}; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts index 244970e2ae..ef5741cec3 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts @@ -1,13 +1,27 @@ import { IWorkflowStatus } from '@app/domains/workflows/api/workflow/workflow.types'; -export type IWorkflowStatusMetric = Record<IWorkflowStatus, number>; +export type WorkflowStatsPerStatus = Record<IWorkflowStatus, number>; +export interface IWorkflowDefinitionStats { + id: string; + name: string; + stats: WorkflowStatsPerStatus; +} + +export interface IAgentCasesStats { + id: string; + firstName: string; + lastName: string; + casesCount: number; +} + +export type ICasesPerStatusStats = Record<IWorkflowStatus, number>; -export interface IWorkflowApprovedMetric { - workflowId: string; - approvedDate: Date; +export interface GetAgentCasesStatsDto { + // UNIX timestamp + fromDate?: number; } -export interface GetWorkflowMetricsResponse { - status: IWorkflowStatusMetric; - approvedWorkflows: IWorkflowApprovedMetric[]; +export interface GetCasesPerStatusDto { + // UNIX timestamp + fromData?: number; } diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts index e45d6b5f67..556497a8d0 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/query-keys.ts @@ -1,5 +1,10 @@ import { SortingParams } from '@app/common/types/sorting-params.types'; -import { fetchWorkflows, GetWorkflowsDto } from '@app/domains/workflows/api/workflow'; +import { + fetchWorkflowDefinition, + fetchWorkflows, + GetWorkflowDefinitionDto, + GetWorkflowsDto, +} from '@app/domains/workflows/api/workflow'; import { createQueryKeys } from '@lukemorales/query-key-factory'; export const workflowKeys = createQueryKeys('workflows', { @@ -7,4 +12,8 @@ export const workflowKeys = createQueryKeys('workflows', { queryKey: [{ query, sorting }], queryFn: () => fetchWorkflows(query, sorting), }), + workflowDefinition: (query: GetWorkflowDefinitionDto) => ({ + queryKey: [query], + queryFn: () => fetchWorkflowDefinition(query), + }), }); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts index c5b34ff02f..aa78662874 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.api.ts @@ -1,14 +1,17 @@ import { SortingParams } from '@app/common/types/sorting-params.types'; import { + GetWorkflowDefinitionDto, + GetWorkflowDefinitionResponse, GetWorkflowResponse, GetWorkflowsDto, + IWorkflowDefinition, } from '@app/domains/workflows/api/workflow/workflow.types'; import { request } from '@app/lib/request'; -export async function fetchWorkflows( +export const fetchWorkflows = async ( query: GetWorkflowsDto, sortingParams: SortingParams, -): Promise<GetWorkflowResponse> { +): Promise<GetWorkflowResponse> => { const result = await request.get<GetWorkflowResponse>('/external/workflows', { params: { ...query, @@ -17,4 +20,14 @@ export async function fetchWorkflows( }); return result.data; -} +}; + +export const fetchWorkflowDefinition = async ( + query: GetWorkflowDefinitionDto, +): Promise<IWorkflowDefinition> => { + const result = await request.get<GetWorkflowDefinitionResponse>( + `/external/workflows/workflow-definition/${query.workflowId}`, + ); + + return result.data?.definition || {}; +}; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts index eaed13d324..764c225c7d 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow/workflow.types.ts @@ -7,6 +7,7 @@ export interface IWorkflowAssignee { export interface IWorkflow { id: string; workflowDefinitionName: string; + workflowDefinitionId: string; status: IWorkflowStatus; state: string | null; assignee: IWorkflowAssignee | null; @@ -31,3 +32,12 @@ export interface GetWorkflowsDto { orderBy?: string; orderDirection?: 'asc' | 'desc'; } + +export type IWorkflowDefinition = object; + +export interface GetWorkflowDefinitionResponse { + definition: IWorkflowDefinition; +} +export interface GetWorkflowDefinitionDto { + workflowId: string; +} diff --git a/apps/workflows-dashboard/src/pages/Overview/Overview.tsx b/apps/workflows-dashboard/src/pages/Overview/Overview.tsx index cbd9ae8812..b01ba3c25d 100644 --- a/apps/workflows-dashboard/src/pages/Overview/Overview.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/Overview.tsx @@ -1,15 +1,6 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from '@app/components/atoms/Card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@app/components/atoms/Tabs'; import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; -import { OverviewChartMock } from '@app/pages/Overview/components/OverviewChartMock'; -import { RecentSalesMock } from '@app/pages/Overview/components/RecentSalesMock'; -import { Activity, CreditCard, DollarSign, Users } from 'lucide-react'; +import { OverviewTabContent } from '@app/pages/Overview/components/organisms/OverviewTabContent'; export const Overview = () => { return ( @@ -18,72 +9,9 @@ export const Overview = () => { <Tabs defaultValue="overview" className="flex flex-1 flex-col"> <TabsList className="flex flex-row justify-start self-start"> <TabsTrigger value="overview">Overview</TabsTrigger> - <TabsTrigger value="analytics">Analytics</TabsTrigger> - <TabsTrigger value="reports">Reports</TabsTrigger> - <TabsTrigger value="notifications">Notifications</TabsTrigger> </TabsList> <TabsContent value="overview" className="flex flex-1 flex-col space-y-4"> - <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4"> - <Card> - <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> - <CardTitle className="text-sm font-medium">Total Revenue</CardTitle> - <DollarSign className="text-muted-foreground h-4 w-4" /> - </CardHeader> - <CardContent> - <div className="text-2xl font-bold">$45,231.89</div> - <p className="text-muted-foreground text-xs">+20.1% from last month</p> - </CardContent> - </Card> - <Card> - <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> - <CardTitle className="text-sm font-medium">Subscriptions</CardTitle> - <Users className="text-muted-foreground h-4 w-4" /> - </CardHeader> - <CardContent> - <div className="text-2xl font-bold">+2350</div> - <p className="text-muted-foreground text-xs">+180.1% from last month</p> - </CardContent> - </Card> - <Card> - <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> - <CardTitle className="text-sm font-medium">Sales</CardTitle> - <CreditCard className="text-muted-foreground h-4 w-4" /> - </CardHeader> - <CardContent> - <div className="text-2xl font-bold">+12,234</div> - <p className="text-muted-foreground text-xs">+19% from last month</p> - </CardContent> - </Card> - <Card> - <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> - <CardTitle className="text-sm font-medium">Active Now</CardTitle> - <Activity className="text-muted-foreground h-4 w-4" /> - </CardHeader> - <CardContent> - <div className="text-2xl font-bold">+573</div> - <p className="text-muted-foreground text-xs">+201 since last hour</p> - </CardContent> - </Card> - </div> - <div className="grid flex-1 gap-4 md:grid-cols-2 lg:grid-cols-7"> - <Card className="col-span-4 flex flex-col"> - <CardHeader> - <CardTitle>Overview</CardTitle> - </CardHeader> - <CardContent className="flex-1 pl-2"> - <OverviewChartMock /> - </CardContent> - </Card> - <Card className="col-span-3"> - <CardHeader> - <CardTitle>Recent Sales</CardTitle> - <CardDescription>You made 265 sales this month.</CardDescription> - </CardHeader> - <CardContent> - <RecentSalesMock /> - </CardContent> - </Card> - </div> + <OverviewTabContent /> </TabsContent> </Tabs> </div> diff --git a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx deleted file mode 100644 index 00de3f38eb..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/OverviewChartMock.tsx +++ /dev/null @@ -1,72 +0,0 @@ -'use client'; - -import { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from 'recharts'; - -const data = [ - { - name: 'Jan', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Feb', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Mar', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Apr', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'May', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Jun', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Jul', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Aug', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Sep', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Oct', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Nov', - total: Math.floor(Math.random() * 5000) + 1000, - }, - { - name: 'Dec', - total: Math.floor(Math.random() * 5000) + 1000, - }, -]; - -export function OverviewChartMock() { - return ( - <ResponsiveContainer width="100%" height={'100%'}> - <BarChart data={data}> - <XAxis dataKey="name" stroke="#888888" fontSize={12} tickLine={false} axisLine={false} /> - <YAxis - stroke="#888888" - fontSize={12} - tickLine={false} - axisLine={false} - tickFormatter={value => `$${value}`} - /> - <Bar dataKey="total" fill="#adfa1d" radius={[4, 4, 0, 0]} /> - </BarChart> - </ResponsiveContainer> - ); -} diff --git a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts deleted file mode 100644 index 0635451a8b..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/components/OverviewChartMock/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './OverviewChartMock'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx deleted file mode 100644 index f9014e89d5..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/RecentSalesMock.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { Avatar, AvatarFallback, AvatarImage } from '@app/components/atoms/Avatar'; - -export function RecentSalesMock() { - return ( - <div className="space-y-8"> - <div className="flex items-center"> - <Avatar className="h-9 w-9"> - <AvatarImage src="/avatars/01.png" alt="Avatar" /> - <AvatarFallback>OM</AvatarFallback> - </Avatar> - <div className="ml-4 space-y-1"> - <p className="text-sm font-medium leading-none">Olivia Martin</p> - <p className="text-muted-foreground text-sm">olivia.martin@email.com</p> - </div> - <div className="ml-auto font-medium">+$1,999.00</div> - </div> - <div className="flex items-center"> - <Avatar className="flex h-9 w-9 items-center justify-center space-y-0 border"> - <AvatarImage src="/avatar.png" alt="Avatar" /> - <AvatarFallback>JL</AvatarFallback> - </Avatar> - <div className="ml-4 space-y-1"> - <p className="text-sm font-medium leading-none">Jackson Lee</p> - <p className="text-muted-foreground text-sm">jackson.lee@email.com</p> - </div> - <div className="ml-auto font-medium">+$39.00</div> - </div> - <div className="flex items-center"> - <Avatar className="h-9 w-9"> - <AvatarImage src="/avatar.png" alt="Avatar" /> - <AvatarFallback>IN</AvatarFallback> - </Avatar> - <div className="ml-4 space-y-1"> - <p className="text-sm font-medium leading-none">Isabella Nguyen</p> - <p className="text-muted-foreground text-sm">isabella.nguyen@email.com</p> - </div> - <div className="ml-auto font-medium">+$299.00</div> - </div> - <div className="flex items-center"> - <Avatar className="h-9 w-9"> - <AvatarImage src="/avatar.png" alt="Avatar" /> - <AvatarFallback>WK</AvatarFallback> - </Avatar> - <div className="ml-4 space-y-1"> - <p className="text-sm font-medium leading-none">William Kim</p> - <p className="text-muted-foreground text-sm">will@email.com</p> - </div> - <div className="ml-auto font-medium">+$99.00</div> - </div> - <div className="flex items-center"> - <Avatar className="h-9 w-9"> - <AvatarImage src="/avatar.png" alt="Avatar" /> - <AvatarFallback>SD</AvatarFallback> - </Avatar> - <div className="ml-4 space-y-1"> - <p className="text-sm font-medium leading-none">Sofia Davis</p> - <p className="text-muted-foreground text-sm">sofia.davis@email.com</p> - </div> - <div className="ml-auto font-medium">+$39.00</div> - </div> - </div> - ); -} diff --git a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts deleted file mode 100644 index 9d1db08b25..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/components/RecentSalesMock/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './RecentSalesMock'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx new file mode 100644 index 0000000000..4a668b26b0 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx @@ -0,0 +1,19 @@ +import { useMemo } from 'react'; +import { WeeklyBarChart } from '@app/components/molecules/WeeklyBarChart'; + +export interface DailyResolvedCasesChartData { + value: number; + date: Date; +} + +interface Props { + data: DailyResolvedCasesChartData[]; +} + +export const DailyResolvedCasesChart = ({ data }: Props) => { + const chartData = useMemo(() => { + return data.map(item => ({ date: new Date(item.date), value: item.value })); + }, [data]); + + return <WeeklyBarChart data={chartData} />; +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/index.ts new file mode 100644 index 0000000000..029c4e7750 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/index.ts @@ -0,0 +1 @@ +export * from './DailyResolvedCasesChart'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx new file mode 100644 index 0000000000..486c52aa91 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx @@ -0,0 +1,35 @@ +import { IUserStats } from '@app/domains/user/api/user-stats'; +import { DurationCard } from '@app/pages/Overview/components/molecules/UserStats/components/DurationCard'; +import { PercentageCard } from '@app/pages/Overview/components/molecules/UserStats/components/PercentageCard'; + +interface Props { + userStats: IUserStats; + isLoading: boolean; +} + +export const UserStats = ({ userStats, isLoading }: Props) => { + return ( + <div className="grid w-full gap-4 md:grid-cols-2 lg:grid-cols-4"> + <PercentageCard + title="Approved rate out of resolved" + isLoading={isLoading} + percentage={userStats.approvalRate} + /> + <DurationCard + title="Average resolution time" + isLoading={isLoading} + duration={userStats.averageResolutionTime} + /> + <DurationCard + title="Average time to assignment" + isLoading={isLoading} + duration={userStats.averageAssignmentTime} + /> + <DurationCard + title="Average review time" + isLoading={isLoading} + duration={userStats.averageReviewTime} + /> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCard.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCard.tsx new file mode 100644 index 0000000000..40ddbd073b --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCard.tsx @@ -0,0 +1,24 @@ +import { MetricCard } from '@app/components/molecules/MetricCard'; +import { DurationCardContent } from '@app/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCardContent'; +import { memo } from 'react'; + +interface Props { + title: string; + isLoading: boolean; + duration: number; +} + +export const DurationCard = memo(({ title, isLoading, duration }: Props) => { + return ( + <MetricCard + title={<MetricCard.Title className="text-sm" title={title} />} + content={ + <span className="text-3xl font-bold"> + <DurationCardContent duration={duration} /> + </span> + } + description="( last 30 days )" + isLoading={isLoading} + /> + ); +}); diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCardContent.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCardContent.tsx new file mode 100644 index 0000000000..90b51f6adf --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/DurationCardContent.tsx @@ -0,0 +1,23 @@ +import { convertMsDurationToTime } from '@app/common/utils/convert-ms-duration-to-time/convert-ms-duration-to-time'; +import { memo, useMemo } from 'react'; + +interface Props { + duration: number; +} + +export const DurationCardContent = memo(({ duration }: Props) => { + const time = useMemo(() => { + const normalizedDuration = Math.abs(duration); + const time = convertMsDurationToTime(normalizedDuration); + const stringifiedTime: Record<string, string> = {}; + + // converting time values to two-digit format when needed + Object.entries(time).forEach(([key, value]) => { + stringifiedTime[key] = value < 10 ? `0${value}` : String(value); + }); + + return stringifiedTime; + }, [duration]); + + return <>{`${time.days ? `${time.days}:` : ''}${time.hours}:${time.minutes}:${time.seconds}`}</>; +}); diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/index.ts new file mode 100644 index 0000000000..9ee93c864d --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/DurationCard/index.ts @@ -0,0 +1 @@ +export * from './DurationCard'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx new file mode 100644 index 0000000000..5d541c8595 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx @@ -0,0 +1,19 @@ +import { MetricCard } from '@app/components/molecules/MetricCard'; +import { memo } from 'react'; + +interface Props { + title: string; + percentage: number; + isLoading: boolean; +} + +export const PercentageCard = memo(({ title, percentage, isLoading }: Props) => { + return ( + <MetricCard + title={<MetricCard.Title className="text-sm" title={title} />} + content={<span className="text-3xl font-bold">{`${percentage.toFixed(0)}%`}</span>} + description="( last 30 days )" + isLoading={isLoading} + /> + ); +}); diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/index.ts new file mode 100644 index 0000000000..b9f4b0b212 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/index.ts @@ -0,0 +1 @@ +export * from './PercentageCard'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/index.ts new file mode 100644 index 0000000000..70f6cc8783 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/index.ts @@ -0,0 +1 @@ +export * from './UserStats'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx new file mode 100644 index 0000000000..82d0d6817f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx @@ -0,0 +1,21 @@ +import { Avatar, AvatarImage } from '@app/components/atoms/Avatar'; +import { IUserCaseResolvingStats } from '@app/domains/user/api/users-stats'; + +interface Props { + item: IUserCaseResolvingStats; +} + +export const ListItem = ({ item }: Props) => { + return ( + <div className="flex items-center"> + <Avatar className="flex h-9 w-9 items-center justify-center space-y-0 border"> + <AvatarImage src="/avatar.png" alt="Avatar" /> + </Avatar> + <div className="ml-4 space-y-1"> + <p className="text-sm font-medium leading-none">{`${item.firstName} ${item.lastName}`}</p> + <p className="text-muted-foreground text-sm">{item.email}</p> + </div> + <div className="ml-auto font-medium">{item.cases}</div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx new file mode 100644 index 0000000000..7e13eaba6c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx @@ -0,0 +1,26 @@ +import { Skeleton } from '@app/components/atoms/Skeleton'; +import { IUserCaseResolvingStats } from '@app/domains/user/api/users-stats'; +import { ListItem } from '@app/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem'; +import Scrollbars from 'react-custom-scrollbars'; + +export interface Props { + items: IUserCaseResolvingStats[]; + isLoading?: boolean; +} + +export const UsersResolvingStatsList = ({ items, isLoading }: Props) => { + const isEmpty = !isLoading && !items.length; + + return ( + <Scrollbars autoHide> + <div className="flex h-full flex-col gap-4 pr-4"> + {isLoading ? ( + <Skeleton className="h-full w-full" /> + ) : ( + items.map(item => <ListItem item={item} />) + )} + {isEmpty ? <span className="font-inter">No activity found.</span> : null} + </div> + </Scrollbars> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/index.ts new file mode 100644 index 0000000000..d265d7b985 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/index.ts @@ -0,0 +1 @@ +export * from './UsersResolvingStatsList'; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx new file mode 100644 index 0000000000..8b7e466ffb --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx @@ -0,0 +1,78 @@ +import { MetricCard } from '@app/components/molecules/MetricCard'; +import { + DailyResolvedCasesChart, + DailyResolvedCasesChartData, +} from '@app/pages/Overview/components/molecules/DailyResolvedCasesChart'; +import { UsersResolvingStatsList } from '@app/pages/Overview/components/molecules/UsersResolvingStatsList'; +import { UserStats } from '@app/pages/Overview/components/molecules/UserStats'; +import { useCaseResolvingStatsQuery } from '@app/pages/Overview/hooks/useCaseResolvingStatsQuery'; +import { useUsersCaseResolvingStatsQuery } from '@app/pages/Overview/hooks/useUsersCaseResolvingStatsQuery'; +import { useUserStatsQuery } from '@app/pages/Overview/hooks/useUserStatsQuery'; +import { useMemo } from 'react'; + +export const OverviewTabContent = () => { + const { isLoading, data } = useUserStatsQuery(); + const { data: caseResolvingStatsData } = useCaseResolvingStatsQuery(); + const { data: usersCaseResolvingStats, isLoading: isLoadingCaseResolvingStats } = + useUsersCaseResolvingStatsQuery(); + + const chartData = useMemo((): DailyResolvedCasesChartData[] => { + return caseResolvingStatsData.map(item => ({ + value: item.casesPerDay, + date: new Date(item.date), + })); + }, [caseResolvingStatsData]); + + return ( + <div className="flex h-full flex-col gap-4"> + <div> + <UserStats isLoading={isLoading} userStats={data} /> + </div> + <div className="flex-1"> + <div className="grid h-full grid-cols-12 gap-4"> + <MetricCard + className="col-span-8" + title={ + <MetricCard.Title + className="text-sm" + title={ + <div className="flex justify-between"> + <span>Resolved cases per day </span> + <span className="text-muted-foreground text-sm font-normal"> + ( last 7 days ) + </span> + </div> + } + /> + } + content={<DailyResolvedCasesChart data={chartData} />} + ></MetricCard> + <MetricCard + className="col-span-4" + title={ + <MetricCard.Title + title={ + <MetricCard.Title + className="text-sm" + title={ + <div className="flex justify-between"> + <span>Agents resolved cases </span> + <span className="text-muted-foreground text-sm font-normal">( today )</span> + </div> + } + /> + } + /> + } + content={ + <UsersResolvingStatsList + items={usersCaseResolvingStats} + isLoading={isLoadingCaseResolvingStats} + /> + } + /> + </div> + </div> + </div> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/index.ts b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/index.ts new file mode 100644 index 0000000000..a45baf571f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/index.ts @@ -0,0 +1 @@ +export * from './OverviewTabContent'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/index.ts new file mode 100644 index 0000000000..fb6386896e --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useCaseResolvingStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts new file mode 100644 index 0000000000..2c8cb73d02 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts @@ -0,0 +1,16 @@ +import { userStatsQueryKeys } from '@app/domains/user/api/user-stats'; +import { useQuery } from '@tanstack/react-query'; +import * as dayjs from 'dayjs'; +import { useMemo } from 'react'; + +export const useCaseResolvingStatsQuery = () => { + const initialDate = useMemo(() => +dayjs().subtract(6, 'days').startOf('day').toDate(), []); + const { data = [], isLoading } = useQuery( + userStatsQueryKeys.userCaseResolvingStats({ fromDate: initialDate }), + ); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/index.ts new file mode 100644 index 0000000000..797bffad11 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useUserStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts new file mode 100644 index 0000000000..d80b47f941 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts @@ -0,0 +1,23 @@ +import * as dayjs from 'dayjs'; +import { IUserStats, userStatsQueryKeys } from '@app/domains/user/api/user-stats'; +import { useQuery } from '@tanstack/react-query'; +import { useMemo } from 'react'; + +const defaultValues: IUserStats = { + approvalRate: 0, + averageResolutionTime: 0, + averageReviewTime: 0, + averageAssignmentTime: 0, +}; + +export const useUserStatsQuery = () => { + const initialDate = useMemo(() => +dayjs().subtract(30, 'days').toDate(), []); + const { data = defaultValues, isLoading } = useQuery( + userStatsQueryKeys.userStats({ fromDate: initialDate }), + ); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts new file mode 100644 index 0000000000..aeffa2b585 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useUsersCaseResolvingStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts new file mode 100644 index 0000000000..1be65fc142 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts @@ -0,0 +1,16 @@ +import { usersStatsQueryKeys } from '@app/domains/user/api/users-stats'; +import { useQuery } from '@tanstack/react-query'; +import * as dayjs from 'dayjs'; +import { useMemo } from 'react'; + +export const useUsersCaseResolvingStatsQuery = () => { + const initialDate = useMemo(() => +dayjs().startOf('day').toDate(), []); + const { data = [], isLoading } = useQuery( + usersStatsQueryKeys.caseResolvingStatsList({ fromDate: initialDate }), + ); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts deleted file mode 100644 index 4d96315b8a..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useWorkflowsMetric'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts deleted file mode 100644 index 876b127717..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/types.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { GetWorkflowMetricsResponse } from '@app/domains/workflows/api/workflow-metrics'; - -export type WorkflowsMetric = GetWorkflowMetricsResponse; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts deleted file mode 100644 index 219a4f359a..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useWorkflowsMetric/useWorkflowsMetric.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; -import { WorkflowsMetric } from '@app/pages/Overview/hooks/useWorkflowsMetric/types'; -import { useQuery } from '@tanstack/react-query'; - -export function useWorkflowsMetric() { - const { data, isLoading } = useQuery({ - ...workflowMetricsKeys.list(), - keepPreviousData: true, - }); - - return { - data: data ? (data as WorkflowsMetric) : null, - isLoading, - }; -} diff --git a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx index 87c942db58..4b4e5caaf3 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/Workflows.tsx @@ -1,23 +1,31 @@ import { Pagination } from '@app/components/molecules/Pagination'; import { StatusFilterComponent } from '@app/pages/Workflows/components/molecules/StatusFilterComponent'; -import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; import { useWorkflowsQuery } from '@app/pages/Workflows/hooks/useWorkflowsQuery'; -import { useWorkflowsFilters } from '@app/pages/Workflows/hooks/useWorkflowsFilters'; import { useCallback } from 'react'; import { WorkflowsList } from '@app/pages/Workflows/components/organisms/WorkflowsList'; -import { WorkflowFilters } from '@app/pages/Workflows/components/organisms/WorkflowFilters'; import { WorkflowsLayout } from '@app/pages/Workflows/components/layouts/WorkflowsLayout'; import { DashboardLayout } from '@app/components/layouts/DashboardLayout'; -import { WorkflowMetrics } from '@app/pages/Workflows/components/organisms/WorkflowMetrics'; import { useSorting } from '@app/common/hooks/useSorting'; +import { WorkflowsMetricLayout } from '@app/pages/Workflows/components/layouts/WorkflowsMetricLayout'; +import { ActivePerWorkflow } from '@app/pages/Workflows/components/organisms/metrics/ActivePerWorkflow'; +import { WorkflowFiltersProps } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types'; +import { withWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters'; +import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; +import { WorkflowFilters } from '@app/pages/Workflows/components/organisms/WorkflowFilters'; +import { AgentCasesStats } from '@app/pages/Workflows/components/organisms/metrics/AgentCasesStats'; +import { CasesPerStatusStats } from '@app/pages/Workflows/components/organisms/metrics/CasesPerStatusStats'; +import { AgentsActivityStats } from '@app/pages/Workflows/components/organisms/metrics/AgentsActivityStats'; const filterComponents: FilterComponent[] = [StatusFilterComponent]; -export const Workflows = () => { - const { filters, setFilters } = useWorkflowsFilters(); +interface Props extends WorkflowFiltersProps {} + +export const Workflows = withWorkflowFilters(({ filters, updateFilters }: Props) => { const { sortingKey, sortingDirection } = useSorting('order_by'); + const { fromDate: _, ...workflowsFilters } = filters; + const { data, isLoading, isFetching } = useWorkflowsQuery( - filters, + workflowsFilters, sortingKey && sortingDirection ? { orderBy: sortingKey, orderDirection: sortingDirection } : undefined, @@ -25,17 +33,34 @@ export const Workflows = () => { const handlePageChange = useCallback( (nextPage: number) => { - setFilters({ page: nextPage }); + updateFilters({ page: nextPage }); }, - [setFilters], + [updateFilters], ); return ( <DashboardLayout pageName="Workflows"> <WorkflowsLayout> <WorkflowsLayout.Header> - <WorkflowMetrics /> - <WorkflowFilters components={filterComponents} values={filters} onChange={setFilters} /> + <WorkflowsMetricLayout> + <WorkflowsMetricLayout.Item> + <ActivePerWorkflow /> + </WorkflowsMetricLayout.Item> + <WorkflowsMetricLayout.Item> + <AgentsActivityStats /> + </WorkflowsMetricLayout.Item> + <WorkflowsMetricLayout.Item> + <AgentCasesStats /> + </WorkflowsMetricLayout.Item> + <WorkflowsMetricLayout.Item> + <CasesPerStatusStats /> + </WorkflowsMetricLayout.Item> + </WorkflowsMetricLayout> + <WorkflowFilters + components={filterComponents} + values={filters} + onChange={updateFilters} + /> </WorkflowsLayout.Header> <WorkflowsLayout.Main> <WorkflowsList workflows={data.results} isLoading={isLoading} isFetching={isFetching} /> @@ -50,4 +75,4 @@ export const Workflows = () => { </WorkflowsLayout> </DashboardLayout> ); -}; +}); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayout.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayout.tsx new file mode 100644 index 0000000000..0b7ce7af80 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayout.tsx @@ -0,0 +1,13 @@ +import { WorkflowsMetricLayoutItem } from '@app/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayoutItem'; + +interface Props { + children: React.ReactNode | React.ReactNode[]; +} + +export function WorkflowsMetricLayout({ children }: Props) { + return <div className="flex w-full gap-4">{children}</div>; +} + +WorkflowsMetricLayout.Item = WorkflowsMetricLayoutItem; + +WorkflowsMetricLayout.displayName = 'WorkflowsMetricLayout'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayoutItem.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayoutItem.tsx new file mode 100644 index 0000000000..d0f449f763 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/WorkflowsMetricLayoutItem.tsx @@ -0,0 +1,9 @@ +interface Props { + children: React.ReactNode; +} + +export function WorkflowsMetricLayoutItem({ children }: Props) { + return <div className="min-h-[220px] w-1/4">{children}</div>; +} + +WorkflowsMetricLayoutItem.displayName = 'WorkflowsMetricLayoutItem'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/index.ts new file mode 100644 index 0000000000..62e620c881 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/layouts/WorkflowsMetricLayout/index.ts @@ -0,0 +1 @@ +export * from './WorkflowsMetricLayout'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/ActivePerWorkflowChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/ActivePerWorkflowChart.tsx new file mode 100644 index 0000000000..49a5776fa2 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/ActivePerWorkflowChart.tsx @@ -0,0 +1,41 @@ +import { MetricCard } from '@app/components/molecules/MetricCard'; +import { ChartProps } from '@app/pages/Workflows/components/molecules/common/types'; +import { + WorkflowChart, + WorkflowChartData, +} from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; +import { useMemo } from 'react'; + +export interface ActivePerWorkflowChartData { + workflowName: string; + count: number; + fillColor: string; +} + +interface Props extends ChartProps { + data: ActivePerWorkflowChartData[]; +} + +export const ActivePerWorkflowChart = ({ isLoading, data }: Props) => { + const chartData: WorkflowChartData[] = useMemo( + () => + data.map(item => ({ + label: item.workflowName, + value: item.count, + fill: item.fillColor, + })), + [data], + ); + + return ( + <MetricCard + isLoading={isLoading} + title={<MetricCard.Title title="Active per workflow" />} + content={ + <MetricCard.Content> + <WorkflowChart size={90} innerRadius={26} outerRadius={40} data={chartData} /> + </MetricCard.Content> + } + /> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/index.ts new file mode 100644 index 0000000000..fc95eeb11c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/ActivePerWorkflowChart/index.ts @@ -0,0 +1 @@ +export * from './ActivePerWorkflowChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx new file mode 100644 index 0000000000..98d5749a65 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx @@ -0,0 +1,39 @@ +import { ChartProps } from '@app/pages/Workflows/components/molecules/common/types'; +import { MetricListChart } from '@app/pages/Workflows/components/molecules/MetricListChart'; +import { memo, useMemo } from 'react'; + +export interface AgentCasesChartData { + id: string; + agentName: string; + casesCount: number; +} + +interface Props extends ChartProps { + data: AgentCasesChartData[]; +} + +export const AgentCasesChart = memo(({ isLoading, data }: Props) => { + const chartItems = useMemo( + () => + data.map(item => ( + <div + className="flex flex-nowrap justify-between" + key={`agent-cases-chart-data-key-${item.id}`} + > + <div className="text-sm">{item.agentName}</div> + <div className="text-sm font-medium">{item.casesCount}</div> + </div> + )), + [data], + ); + + return ( + <MetricListChart + title="Assigned Cases per agent" + description="( last 1 hour )" + isLoading={isLoading} + items={chartItems} + emptyPlaceholder={<div className="text-sm font-medium">No active cases.</div>} + /> + ); +}); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/index.ts new file mode 100644 index 0000000000..4cfe7255af --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/index.ts @@ -0,0 +1 @@ +export * from './AgentCasesChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx new file mode 100644 index 0000000000..8ff8a54a7c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx @@ -0,0 +1,50 @@ +import * as classnames from 'classnames'; +import * as dayjs from 'dayjs'; +import { ChartProps } from '@app/pages/Workflows/components/molecules/common/types'; +import { MetricListChart } from '@app/pages/Workflows/components/molecules/MetricListChart'; +import { useMemo } from 'react'; + +export interface LoggedInAgentsChartData { + id: string; + fullName: string; + lastActiveAt: Date | null; +} + +interface Props extends ChartProps { + data: LoggedInAgentsChartData[]; +} + +export const AgentsActivityChart = ({ isLoading, data }: Props) => { + const chartItems = useMemo( + () => + data.map(item => { + const hourDifference = dayjs(item.lastActiveAt).diff(Date.now(), 'hour'); + + return ( + <div + className="flex flex-nowrap items-center justify-between" + key={`agent-cases-chart-data-key-${item.id}`} + > + <div className="text-sm">{item.fullName}</div> + <div + className={classnames('h-4 w-4 rounded-full', { + 'bg-red-600': hourDifference > 1, + 'bg-green-600': hourDifference < 1, + })} + ></div> + </div> + ); + }), + [data], + ); + + return ( + <MetricListChart + title="Online/Offline Agents" + description={'( last 1 hour )'} + isLoading={isLoading} + items={chartItems} + emptyPlaceholder={<div>No recent activity found.</div>} + /> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/index.ts new file mode 100644 index 0000000000..6c9d1806a6 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/index.ts @@ -0,0 +1 @@ +export * from './AgentsActivityChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx new file mode 100644 index 0000000000..2687d1b7e4 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx @@ -0,0 +1,38 @@ +import { ChartProps } from '@app/pages/Workflows/components/molecules/common/types'; +import { MetricListChart } from '@app/pages/Workflows/components/molecules/MetricListChart'; +import { useMemo } from 'react'; + +export interface CasesPerStatusChartData { + id: string; + status: string; + casesCount: number; +} + +interface Props extends ChartProps { + data: CasesPerStatusChartData[]; +} + +export const CasesPerStatusChart = ({ isLoading, data }: Props) => { + const chartItems = useMemo( + () => + data.map(item => ( + <div + className="flex flex-nowrap justify-between" + key={`agent-cases-chart-data-key-${item.id}`} + > + <div className="text-sm font-medium">{item.status}</div> + <div className="text-sm font-medium">{item.casesCount}</div> + </div> + )), + [data], + ); + + return ( + <MetricListChart + title="Amount of cases per status" + description="( last 1 hour )" + isLoading={isLoading} + items={chartItems} + /> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/index.ts new file mode 100644 index 0000000000..22bec382f8 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/index.ts @@ -0,0 +1 @@ +export * from './CasesPerStatusChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/MetricListChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/MetricListChart.tsx new file mode 100644 index 0000000000..49c0ae9bff --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/MetricListChart.tsx @@ -0,0 +1,37 @@ +import { MetricCard } from '@app/components/molecules/MetricCard'; +import Scrollbars from 'react-custom-scrollbars'; + +interface Props { + isLoading?: boolean; + items: React.ReactNode[]; + title: string; + description?: string; + emptyPlaceholder?: React.ReactNode; +} + +export const MetricListChart = ({ + title, + description, + items, + isLoading, + emptyPlaceholder = null, +}: Props) => { + const isEmpty = !isLoading && !items.length; + + return ( + <MetricCard + isLoading={isLoading} + title={<MetricCard.Title title={title} />} + description={description} + content={ + <MetricCard.Content> + <div className="flex h-full pb-2"> + <Scrollbars> + <div className="flex flex-col gap-1 pr-4">{isEmpty ? emptyPlaceholder : items}</div> + </Scrollbars> + </div> + </MetricCard.Content> + } + /> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/index.ts new file mode 100644 index 0000000000..745418bb94 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/MetricListChart/index.ts @@ -0,0 +1 @@ +export * from './MetricListChart'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx index a0f8adcf44..8569b487bb 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/StatusFilterComponent/StatusFilterComponent.tsx @@ -1,6 +1,5 @@ import { FacetedFilter, FacetedFilterOption } from '@app/components/molecules/FacetedFilter'; import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -// import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; const options: FacetedFilterOption[] = [ diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/common/types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/common/types.ts new file mode 100644 index 0000000000..3850d1d61a --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/common/types.ts @@ -0,0 +1,3 @@ +export interface ChartProps { + isLoading?: boolean; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx index ad3aa81a13..340af1aff9 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/WorkflowFilters.tsx @@ -1,11 +1,14 @@ import { FilterComponent } from '@app/pages/Workflows/components/organisms/WorkflowFilters/types'; -import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { + WorkflowFilterValues, + WorkflowFiltersUpdater, +} from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; import { memo } from 'react'; interface Props { - values: WorkflowsFilterValues; + values: WorkflowFilterValues; components: FilterComponent[]; - onChange: (nextValues: WorkflowsFilterValues) => void; + onChange: WorkflowFiltersUpdater; } export const WorkflowFilters = memo(({ values, components, onChange }: Props) => { diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts index 120fc39d9b..9b9256354f 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowFilters/types.ts @@ -1,8 +1,11 @@ -import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { + WorkflowFilterValues, + WorkflowFiltersUpdater, +} from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; export interface FilterComponentProps { - filterValues: Partial<WorkflowsFilterValues>; - onChange: (value: Partial<WorkflowsFilterValues>) => void; + filterValues: WorkflowFilterValues; + onChange: WorkflowFiltersUpdater; } export type FilterComponent = React.ComponentType<FilterComponentProps>; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx index 453de78930..bbfdda3aff 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx @@ -1,42 +1,37 @@ -import { Card, CardContent } from '@app/components/atoms/Card'; -import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -import { useWorkflowsMetric } from '@app/pages/Overview/hooks/useWorkflowsMetric'; -import { sortWorkflowChartDataByStatus } from '@app/pages/Workflows/components/organisms/WorkflowMetrics/helpers'; -import { - getChartColorByWorkflowStatus, - getChartLabelByStatus, - WorkflowStatusChart, - WorkflowStatusChartData, -} from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; -import { useMemo } from 'react'; +import { MetricCard } from '@app/components/molecules/MetricCard'; export const WorkflowMetrics = () => { - const { data: metric } = useWorkflowsMetric(); - - const pieChartData: WorkflowStatusChartData[] = useMemo(() => { - if (!metric) return []; - - const chartData = Object.entries(metric.status).map(([key, value]) => { - return { - status: key as IWorkflowStatus, - value, - fillColor: getChartColorByWorkflowStatus(key as IWorkflowStatus), - label: getChartLabelByStatus(key as IWorkflowStatus), - }; - }); - - return sortWorkflowChartDataByStatus(chartData); - }, [metric]); + // const { data: metric } = useWorkflowsMetric(); return ( - <div className="flex"> - <div className="flex h-full "> - <Card className="font-inter flex w-full flex-col p-4"> - <CardContent className="flex flex-1 flex-col p-0"> - <WorkflowStatusChart size={160} innerRadius={60} outerRadius={80} data={pieChartData} /> - </CardContent> - </Card> - </div> + <div className="flex w-full gap-4"> + <MetricCard + className="min-h-[260px] w-1/4" + title={<MetricCard.Title title="Active per workflow" />} + content={ + <MetricCard.Content> + {/* <WorkflowChart size={160} innerRadius={60} outerRadius={80} data={pieChartData} /> */} + </MetricCard.Content> + } + /> + <MetricCard + className="w-1/4 min-w-[260px]" + title={<MetricCard.Title title="Logged in agents" />} + content="hello world" + description="(last 1 hour)" + /> + <MetricCard + className="w-1/4 min-w-[260px]" + title={<MetricCard.Title title="Assigned cases per agent" />} + content="hello world" + description="(last 1 hour)" + /> + <MetricCard + className="w-1/4 min-w-[260px]" + title={<MetricCard.Title title="Amount of cases per status" />} + content="hello world" + description="(last 1 hour)" + /> </div> ); }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts index 1a0e296627..25519c7519 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts @@ -1,22 +1,22 @@ -import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; +// import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +// import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; -// Assigning level to each status -function getSortLevelByStatus(status: IWorkflowStatus) { - if (status === 'completed') return 1; - if (status === 'active') return 2; - if (status === 'failed') return 3; +// // Assigning level to each status +// function getSortLevelByStatus(status: IWorkflowStatus) { +// if (status === 'completed') return 1; +// if (status === 'active') return 2; +// if (status === 'failed') return 3; - return 4; -} +// return 4; +// } -// sorting data by status level -// lower status levels going first after sort -export function sortWorkflowChartDataByStatus(data: WorkflowStatusChartData[]) { - return [...data].sort((dataA, dataB) => { - const dataASortLevel = getSortLevelByStatus(dataA.status); - const dataBSortLevel = getSortLevelByStatus(dataB.status); +// // sorting data by status level +// // lower status levels going first after sort +// export function sortWorkflowChartDataByStatus(data: WorkflowStatusChartData[]) { +// return [...data].sort((dataA, dataB) => { +// const dataASortLevel = getSortLevelByStatus(dataA.status); +// const dataBSortLevel = getSortLevelByStatus(dataB.status); - return dataASortLevel - dataBSortLevel; - }); -} +// return dataASortLevel - dataBSortLevel; +// }); +// } diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx index 84dcd741f9..f22bc293f5 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart.tsx @@ -1,22 +1,22 @@ import { PieChart, PieChartData } from '@app/components/atoms/PieChart'; import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; import { WorkflowChartDetails } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails'; +import { memo } from 'react'; -export interface WorkflowStatusChartData extends PieChartData { - status: IWorkflowStatus; +export interface WorkflowChartData extends PieChartData { label: string; } export type WorkflowStatusCount = Record<IWorkflowStatus, number>; interface Props { - data: WorkflowStatusChartData[]; + data: WorkflowChartData[]; size: number; innerRadius: number; outerRadius: number; } -export const WorkflowStatusChart = ({ data, size, innerRadius, outerRadius }: Props) => { +export const WorkflowChart = memo(({ data, size, innerRadius, outerRadius }: Props) => { return ( <div className="align-center flex flex-row flex-nowrap gap-8"> <div> @@ -27,4 +27,4 @@ export const WorkflowStatusChart = ({ data, size, innerRadius, outerRadius }: Pr </div> </div> ); -}; +}); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx index 9299c98607..1a34bd3359 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowStatusChart/components/WorkflowChartDetails/WorkflowChartDetails.tsx @@ -1,9 +1,9 @@ import { calculateChartDataSum } from '@app/components/atoms/PieChart/utils/calculateChartDataSum'; -import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart'; +import { WorkflowChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart/WorkflowStatusChart'; import { useMemo } from 'react'; interface Props { - data: WorkflowStatusChartData[]; + data: WorkflowChartData[]; } export const WorkflowChartDetails = ({ data }: Props) => { @@ -14,11 +14,15 @@ export const WorkflowChartDetails = ({ data }: Props) => { {data.map((item, index) => { const percentOfTotal = ((item.value / totalValue) * 100).toFixed(2); return ( - <div key={`chart-details-item-${index}`} className="flex flex-row items-center gap-4 "> - <div className={`h-1 w-4 rounded`} style={{ background: item.fillColor }} /> - <div className="flex text-xs"> + <div + key={`chart-details-item-${index}`} + className="flex md:flex-col md:items-start md:gap-1 lg:flex-row lg:items-center lg:gap-4 " + title={item.label} + > + <div className={`h-1 min-w-[20px] rounded`} style={{ background: item.fill }} /> + <div className="flex gap-1 text-xs md:flex-col lg:flex-row"> <div className="w-14">{percentOfTotal}%</div> - <span className="font-medium">{item.label}</span> + <span className="line-clamp-1 break-all font-medium">{item.label}</span> </div> </div> ); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx index ff4888995f..23f6e92984 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/WorkflowsList.tsx @@ -1,7 +1,9 @@ import { useSorting } from '@app/common/hooks/useSorting'; import { LoadingSpinner } from '@app/components/atoms/LoadingSpinner'; import { WorkflowsTable } from '@app/components/molecules/WorkflowsTable'; +import { InputColumn } from '@app/components/molecules/WorkflowsTable/types'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { ViewWorkflow } from '@app/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow'; interface Props { workflows: IWorkflow[]; @@ -9,6 +11,14 @@ interface Props { isFetching?: boolean; } +const columns: InputColumn[] = [ + { + id: 'view-workflow', + accessorFn: workflow => workflow, + cell: info => <ViewWorkflow workflow={info.getValue<IWorkflow>()} />, + }, +]; + export const WorkflowsList = ({ workflows, isLoading, isFetching }: Props) => { const { sortingKey, sortingDirection, setSorting } = useSorting(); @@ -26,6 +36,7 @@ export const WorkflowsList = ({ workflows, isLoading, isFetching }: Props) => { ? { key: sortingKey, direction: sortingDirection } : undefined } + columns={columns} /> ); }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/ViewWorkflow.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/ViewWorkflow.tsx new file mode 100644 index 0000000000..71169a5620 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/ViewWorkflow.tsx @@ -0,0 +1,36 @@ +import { Button } from '@app/components/atoms/Button'; +import { Dialog, DialogContent, DialogTrigger } from '@app/components/atoms/Dialog'; +import { XstateVisualizer } from '@app/components/organisms/XstateVisualizer'; +import { IWorkflow } from '@app/domains/workflows/api/workflow'; +import { useWorkflowDefinitionQuery } from '@app/pages/Workflows/hooks/useWorkflowDefinitionQuery'; +import { NetworkIcon } from 'lucide-react'; +import { useState } from 'react'; + +interface Props { + workflow: IWorkflow; +} + +export const ViewWorkflow = ({ workflow }: Props) => { + const [isDialogOpen, setOpen] = useState(false); + const { data } = useWorkflowDefinitionQuery( + isDialogOpen ? workflow.workflowDefinitionId : undefined, + ); + + return ( + <Dialog open={isDialogOpen} onOpenChange={setOpen}> + <DialogTrigger asChild> + <Button className="flex items-center gap-2"> + <NetworkIcon size={'16'} /> + Show Workflow + </Button> + </DialogTrigger> + <DialogContent className="h-[80vh] min-w-[80vw] overflow-hidden"> + {data ? ( + <div className="h-full w-full overflow-hidden p-4"> + <XstateVisualizer stateDefinition={data} state={workflow.state || ''} /> + </div> + ) : null} + </DialogContent> + </Dialog> + ); +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/index.ts new file mode 100644 index 0000000000..c8de515625 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowsList/components/ViewWorkflow/index.ts @@ -0,0 +1 @@ +export * from './ViewWorkflow'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx new file mode 100644 index 0000000000..1b60f15470 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx @@ -0,0 +1,24 @@ +import { + ActivePerWorkflowChart, + ActivePerWorkflowChartData, +} from '@app/pages/Workflows/components/molecules/ActivePerWorkflowChart'; +import { useActivePerWorkflowStatsQuery } from '@app/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery'; +import { useMemo } from 'react'; + +const colorScheme = ['#52D726', '#FFEC00', '#FF7300', '#FF0000']; + +export const ActivePerWorkflow = () => { + const { data, isLoading } = useActivePerWorkflowStatsQuery(); + + const chartData = useMemo( + (): ActivePerWorkflowChartData[] => + data.map((item, index) => ({ + workflowName: item.name, + count: item.stats.active, + fillColor: colorScheme[index] || '#000', + })), + [data], + ); + + return <ActivePerWorkflowChart isLoading={isLoading} data={chartData} />; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/index.ts new file mode 100644 index 0000000000..f772e959b8 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useActivePerWorkflowStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts new file mode 100644 index 0000000000..aa19251a88 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts @@ -0,0 +1,12 @@ +import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; +import { useQuery } from '@tanstack/react-query'; + +export const useActivePerWorkflowStatsQuery = () => { + const { data = [], isLoading, isFetching } = useQuery(workflowMetricsKeys.workflowRuntimeStats()); + + return { + data, + isFetching, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/index.ts new file mode 100644 index 0000000000..9aa8d90474 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/index.ts @@ -0,0 +1 @@ +export * from './ActivePerWorkflow'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx new file mode 100644 index 0000000000..60d73551a8 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx @@ -0,0 +1,22 @@ +import { + AgentCasesChart, + AgentCasesChartData, +} from '@app/pages/Workflows/components/molecules/AgentCasesChart'; +import { useAgentCasesStatsQuery } from '@app/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery'; +import { useMemo } from 'react'; + +export const AgentCasesStats = () => { + const { data = [], isLoading } = useAgentCasesStatsQuery(); + + const chartData = useMemo( + (): AgentCasesChartData[] => + data?.map(item => ({ + id: item.id, + agentName: `${item.firstName} ${item.lastName}`, + casesCount: item.casesCount, + })), + [data], + ); + + return <AgentCasesChart isLoading={isLoading} data={chartData} />; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts new file mode 100644 index 0000000000..27ddab96bc --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useAgentCasesStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts new file mode 100644 index 0000000000..f1e9af1ce1 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts @@ -0,0 +1,15 @@ +import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; +import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; +import { useQuery } from '@tanstack/react-query'; + +export const useAgentCasesStatsQuery = () => { + const { filters } = useWorkflowFilters(); + const { data, isLoading } = useQuery( + workflowMetricsKeys.workflowAgentCasesStats({ fromDate: filters.fromDate }), + ); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/index.ts new file mode 100644 index 0000000000..5985063993 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/index.ts @@ -0,0 +1 @@ +export * from './AgentCasesStats'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/AgentsActivityStats.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/AgentsActivityStats.tsx new file mode 100644 index 0000000000..66c2cbbb24 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/AgentsActivityStats.tsx @@ -0,0 +1,22 @@ +import { + AgentsActivityChart, + LoggedInAgentsChartData, +} from '@app/pages/Workflows/components/molecules/AgentsActivityChart'; +import { useActiveUsersQuery } from '@app/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery'; +import { useMemo } from 'react'; + +export const AgentsActivityStats = () => { + const { data, isLoading } = useActiveUsersQuery(); + + const chartData = useMemo( + (): LoggedInAgentsChartData[] => + data.map(item => ({ + id: item.id, + fullName: `${item.firstName} ${item.lastName}`, + lastActiveAt: item.lastActiveAt ? new Date(item.lastActiveAt) : null, + })), + [data], + ); + + return <AgentsActivityChart isLoading={isLoading} data={chartData} />; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/index.ts new file mode 100644 index 0000000000..92a4e587e1 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/index.ts @@ -0,0 +1 @@ +export * from './useActiveUsersQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts new file mode 100644 index 0000000000..8b958c553f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts @@ -0,0 +1,13 @@ +import { usersKeys } from '@app/domains/workflows/api/users'; +import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; +import { useQuery } from '@tanstack/react-query'; + +export const useActiveUsersQuery = () => { + const { filters } = useWorkflowFilters(); + const { data = [], isLoading } = useQuery(usersKeys.activeUsers({ fromDate: filters.fromDate })); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/index.ts new file mode 100644 index 0000000000..1c998d9500 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/index.ts @@ -0,0 +1 @@ +export * from './AgentsActivityStats'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/CasesPerStatusStats.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/CasesPerStatusStats.tsx new file mode 100644 index 0000000000..843c81458d --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/CasesPerStatusStats.tsx @@ -0,0 +1,31 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { + CasesPerStatusChart, + CasesPerStatusChartData, +} from '@app/pages/Workflows/components/molecules/CasesPerStatusChart'; +import { useCasesPerStatusQuery } from '@app/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery'; +import { useMemo } from 'react'; + +const statusToTitleMap: Record<IWorkflowStatus, string> = { + active: 'Active', + completed: 'Completed', + failed: 'Failed', +}; + +export const CasesPerStatusStats = () => { + const { data, isLoading } = useCasesPerStatusQuery(); + + const chartData = useMemo( + (): CasesPerStatusChartData[] => + Object.entries(data) + .map(([status, count]) => ({ + id: status, + status: statusToTitleMap[status as IWorkflowStatus] || status, + casesCount: count, + })) + .sort((dataA, dataB) => dataA.status.localeCompare(dataB.status)), + [data], + ); + + return <CasesPerStatusChart isLoading={isLoading} data={chartData} />; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/index.ts new file mode 100644 index 0000000000..5a7b80b3d1 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/index.ts @@ -0,0 +1 @@ +export * from './useCasesPerStatusQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts new file mode 100644 index 0000000000..2bd0cc4509 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts @@ -0,0 +1,15 @@ +import { ICasesPerStatusStats } from '@app/domains/workflows/api/workflow-metrics'; +import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; +import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; +import { useQuery } from '@tanstack/react-query'; + +export const useCasesPerStatusQuery = () => { + const { filters } = useWorkflowFilters(); + const { data = { active: 0, completed: 0, failed: 0 } as ICasesPerStatusStats, isLoading } = + useQuery(workflowMetricsKeys.workflowCasesPerStatusStats({ fromData: filters.fromDate })); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/index.ts new file mode 100644 index 0000000000..0a4715dc1f --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/index.ts @@ -0,0 +1 @@ +export * from './CasesPerStatusStats'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/WorkflowsFiltersProvider.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/WorkflowsFiltersProvider.tsx new file mode 100644 index 0000000000..b9fa1f9d1e --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/WorkflowsFiltersProvider.tsx @@ -0,0 +1,38 @@ +import { deserializeQueryParams } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/helpers/deserializeQueryParams'; +import { useWorkflowsQueryParams } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams'; +import { + WorkflowFilterValues, + WorkflowFiltersContext, +} from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; +import { useCallback, useMemo } from 'react'; +import { workflowsFilterContext } from './workflows-filters.context'; + +const { Provider } = workflowsFilterContext; + +interface Props { + children: React.ReactNode | React.ReactNode[]; +} + +export const WorkflowsFiltersProvider = ({ children }: Props) => { + const { query, setQuery } = useWorkflowsQueryParams(); + + const filterValues = useMemo(() => deserializeQueryParams(query), [query]); + + const updateFilters = useCallback( + (filters: Partial<WorkflowFilterValues>) => { + setQuery(filters); + }, + [setQuery], + ); + + const context = useMemo(() => { + const ctx: WorkflowFiltersContext = { + filters: filterValues, + updateFilters, + }; + + return ctx; + }, [filterValues, updateFilters]); + + return <Provider value={context}>{children}</Provider>; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/helpers/deserializeQueryParams.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/helpers/deserializeQueryParams.ts new file mode 100644 index 0000000000..e09a895317 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/helpers/deserializeQueryParams.ts @@ -0,0 +1,15 @@ +import { WorkflowsQueryParams } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/types'; +import { WorkflowFilterValues } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; + +export const deserializeQueryParams = (query: WorkflowsQueryParams): WorkflowFilterValues => { + const filters: WorkflowFilterValues = { + page: query.page, + limit: query.limit, + fromDate: query.fromDate, + status: Array.isArray(query.status) + ? (query.status as WorkflowFilterValues['status']) + : undefined, + }; + + return filters; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/index.ts new file mode 100644 index 0000000000..10e0be2e9e --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/index.ts @@ -0,0 +1 @@ +export * from './withWorkflowFilters'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types.ts new file mode 100644 index 0000000000..fa2fdfdc14 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types.ts @@ -0,0 +1,9 @@ +import { + WorkflowFilterValues, + WorkflowFiltersUpdater, +} from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; + +export interface WorkflowFiltersProps { + filters: WorkflowFilterValues; + updateFilters: WorkflowFiltersUpdater; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/withWorkflowFilters.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/withWorkflowFilters.tsx new file mode 100644 index 0000000000..d53d14a61c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/withWorkflowFilters.tsx @@ -0,0 +1,29 @@ +import { WorkflowFiltersProps } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hocs/withWorkflowFilters/types'; +import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; +import { WorkflowsFiltersProvider } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/WorkflowsFiltersProvider'; + +type InputComponentProps<TProps> = Omit<TProps, keyof WorkflowFiltersProps>; + +export function withWorkflowFilters<TComponentProps extends WorkflowFiltersProps>( + Component: React.FunctionComponent<TComponentProps>, +): React.FunctionComponent<InputComponentProps<TComponentProps>> { + function Wrapper(props: InputComponentProps<TComponentProps>) { + return ( + <WorkflowsFiltersProvider> + <ContextProvider {...props} /> + </WorkflowsFiltersProvider> + ); + } + + function ContextProvider(props: InputComponentProps<TComponentProps>) { + const context = useWorkflowFilters(); + + return <Component {...({ ...props, ...context } as TComponentProps)} />; + } + + ContextProvider.displayName = 'withWorkflowFilters(ContextConsumer)'; + + Wrapper.displayName = `withWorkflowFilters(${Component.displayName})`; + + return Wrapper; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/index.ts new file mode 100644 index 0000000000..b7b03dc54b --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowFilters'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/useWorkflowFilters.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/useWorkflowFilters.ts new file mode 100644 index 0000000000..f0273da0c8 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters/useWorkflowFilters.ts @@ -0,0 +1,4 @@ +import { workflowsFilterContext } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.context'; +import { useContext } from 'react'; + +export const useWorkflowFilters = () => useContext(workflowsFilterContext); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/index.ts new file mode 100644 index 0000000000..d4d13f682c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowsQueryParams'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/types.ts new file mode 100644 index 0000000000..19bb1e8006 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/types.ts @@ -0,0 +1,3 @@ +import { useWorkflowsQueryParams } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams'; + +export type WorkflowsQueryParams = ReturnType<typeof useWorkflowsQueryParams>['query']; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts new file mode 100644 index 0000000000..4eb6fa56e4 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts @@ -0,0 +1,20 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; +import { useState } from 'react'; +import { useQueryParams, NumberParam, withDefault, ArrayParam } from 'use-query-params'; +import * as dayjs from 'dayjs'; + +export function useWorkflowsQueryParams() { + const [dateNow] = useState(() => dayjs().subtract(1, 'hour').toDate()); + + const [query, setQuery] = useQueryParams({ + page: withDefault(NumberParam, 1), + limit: withDefault(NumberParam, 25), + status: withDefault(ArrayParam, [] as IWorkflowStatus[]), + fromDate: withDefault(NumberParam, +dateNow), + }); + + return { + query, + setQuery, + }; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.context.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.context.ts new file mode 100644 index 0000000000..07ed5967fa --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.context.ts @@ -0,0 +1,4 @@ +import { WorkflowFiltersContext } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; +import { createContext } from 'react'; + +export const workflowsFilterContext = createContext({} as WorkflowFiltersContext); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types.ts new file mode 100644 index 0000000000..ceb3e24953 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types.ts @@ -0,0 +1,15 @@ +import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; + +export interface WorkflowFilterValues { + status?: IWorkflowStatus[]; + page?: number; + limit?: number; + fromDate?: number; +} + +export type WorkflowFiltersUpdater = (filters: Partial<WorkflowFilterValues>) => void; + +export interface WorkflowFiltersContext { + filters: WorkflowFilterValues; + updateFilters: WorkflowFiltersUpdater; +} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/index.ts new file mode 100644 index 0000000000..83bcc17332 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/index.ts @@ -0,0 +1 @@ +export * from './useWorkflowDefinitionQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/useWorkflowDefinitionQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/useWorkflowDefinitionQuery.ts new file mode 100644 index 0000000000..a9629db26a --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowDefinitionQuery/useWorkflowDefinitionQuery.ts @@ -0,0 +1,14 @@ +import { workflowKeys } from '@app/domains/workflows'; +import { useQuery } from '@tanstack/react-query'; + +export const useWorkflowDefinitionQuery = (workflowId?: string) => { + const { data, isLoading } = useQuery({ + ...workflowKeys.workflowDefinition({ workflowId: workflowId! }), + enabled: Boolean(workflowId), + }); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts deleted file mode 100644 index db38b4a23c..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useWorkflowsFilters'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts deleted file mode 100644 index 66e9086e39..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; - -export interface WorkflowsFilterValues { - status?: IWorkflowStatus[]; - page?: number; - limit?: number; -} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts deleted file mode 100644 index 24ed744871..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsFilters/useWorkflowsFilters.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; -import { useCallback, useMemo } from 'react'; -import { useQueryParams, NumberParam, withDefault, ArrayParam } from 'use-query-params'; - -export function useWorkflowsFilters() { - const [query, setQuery] = useQueryParams({ - page: withDefault(NumberParam, 1), - limit: withDefault(NumberParam, 25), - status: withDefault(ArrayParam, [] as IWorkflowStatus[]), - }); - - const filters = useMemo(() => { - const filters: WorkflowsFilterValues = { - status: query.status ? (query.status as IWorkflowStatus[]) : undefined, - limit: query.limit, - page: query.page, - }; - - return filters; - }, [query]); - - const setFilters = useCallback( - (query: WorkflowsFilterValues) => { - const isShouldResetPagination = filters.page === query.page; - - setQuery({ ...query, page: isShouldResetPagination ? 1 : query.page }); - }, - [filters, setQuery], - ); - - return { - filters, - setFilters, - }; -} diff --git a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts index 6f20c39be7..a0ac6925a1 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/hooks/useWorkflowsQuery/useWorkflowsQuery.ts @@ -1,9 +1,9 @@ import { SortingParams } from '@app/common/types/sorting-params.types'; import { workflowKeys } from '@app/domains/workflows'; -import { WorkflowsFilterValues } from '@app/pages/Workflows/hooks/useWorkflowsFilters/types'; +import { WorkflowFilterValues } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/workflows-filters.types'; import { useQuery } from '@tanstack/react-query'; -export function useWorkflowsQuery(query: WorkflowsFilterValues, sortingParams?: SortingParams) { +export function useWorkflowsQuery(query: WorkflowFilterValues, sortingParams?: SortingParams) { const { isFetching, isLoading, diff --git a/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts b/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts index 5b5201777b..2d8a1f089b 100644 --- a/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts +++ b/apps/workflows-dashboard/src/utils/get-workflow-health-status.test.ts @@ -1,4 +1,4 @@ -import * as moment from 'moment'; +import * as dayjs from 'dayjs'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; import { getWorkflowHealthStatus, HealthStatus } from '@app/utils/get-workflow-health-status'; @@ -11,7 +11,7 @@ describe('getWorkflowHealthStatus', () => { }); test('healthy when status pending/active and process started < 2 hours ago', () => { - const PAST_DATE_3O_MIN_AGO = moment().subtract(30, 'minutes'); + const PAST_DATE_3O_MIN_AGO = dayjs().subtract(30, 'minutes'); expect( getWorkflowHealthStatus({ @@ -24,7 +24,7 @@ describe('getWorkflowHealthStatus', () => { describe('pending status', () => { test('pending when status pending/active and process started > 2 && < 6 hours', () => { - const PAST_DATE_3HOURS_AGO = moment().subtract(3, 'hours'); + const PAST_DATE_3HOURS_AGO = dayjs().subtract(3, 'hours'); expect( getWorkflowHealthStatus({ @@ -37,7 +37,7 @@ describe('getWorkflowHealthStatus', () => { describe('pending-longterm status', () => { test('pending-longterm when status pending/active and process started > 6 hours', () => { - const PAST_DATE_8HOURS_AGO = moment().subtract(8, 'hours'); + const PAST_DATE_8HOURS_AGO = dayjs().subtract(8, 'hours'); expect( getWorkflowHealthStatus({ diff --git a/apps/workflows-dashboard/tsconfig.json b/apps/workflows-dashboard/tsconfig.json index d07cfa4826..7ae5ec3710 100644 --- a/apps/workflows-dashboard/tsconfig.json +++ b/apps/workflows-dashboard/tsconfig.json @@ -9,6 +9,7 @@ /* Bundler mode */ "moduleResolution": "Node", "allowImportingTsExtensions": true, + "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e32bb8248f..c77c4a3cf6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true @@ -355,6 +355,12 @@ importers: '@tanstack/react-table': specifier: ^8.9.2 version: 8.9.2(react-dom@18.2.0)(react@18.2.0) + '@xstate/inspect': + specifier: ^0.7.1 + version: 0.7.1(ws@8.13.0)(xstate@4.38.0) + '@xstate/react': + specifier: ^3.2.2 + version: 3.2.2(@types/react@18.0.37)(react@18.2.0)(xstate@4.38.0) axios: specifier: ^1.4.0 version: 1.4.0 @@ -370,9 +376,15 @@ importers: cmdk: specifier: ^0.2.0 version: 0.2.0(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + dayjs: + specifier: ^1.11.6 + version: 1.11.7 install: specifier: ^0.13.0 version: 0.13.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 lucide-react: specifier: ^0.144.0 version: 0.144.0(react@18.2.0) @@ -388,6 +400,9 @@ importers: react-hook-form: specifier: ^7.43.9 version: 7.43.9(react@18.2.0) + react-json-view: + specifier: ^1.21.3 + version: 1.21.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) react-router-dom: specifier: ^6.11.2 version: 6.11.2(react-dom@18.2.0)(react@18.2.0) @@ -406,6 +421,9 @@ importers: vite-plugin-terminal: specifier: ^1.1.0 version: 1.1.0(vite@4.3.9) + xstate: + specifier: ^4.38.0 + version: 4.38.0 zod: specifier: ^3.21.4 version: 3.21.4 @@ -419,6 +437,9 @@ importers: '@types/jest': specifier: ^26.0.19 version: 26.0.24 + '@types/lodash': + specifier: ^4.14.191 + version: 4.14.191 '@types/moment': specifier: ^2.13.0 version: 2.13.0 @@ -458,9 +479,6 @@ importers: jest: specifier: ^29.5.0 version: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) - moment: - specifier: ^2.29.4 - version: 2.29.4 postcss: specifier: ^8.4.24 version: 8.4.24 @@ -4908,13 +4926,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4928,13 +4946,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11337,11 +11355,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.41: - resolution: {integrity: sha512-PQFbOmj4FTN4Hjg16gH9lrhrabXQvZV1Hd27LC/cJ4sa7Z05P/M49K6t9XuDCVX3CCGOUZn4REVrCvPf4CjhuQ==} + /@storybook/channel-postmessage@7.1.0-alpha.43: + resolution: {integrity: sha512-qqucnKSHW+zLbISImyeIu2+SEJXElw0Ge1XiaWjhCVH9HGjZa4Zzv9KN3zLdGCTMY6yZabQOzlhela9QGx6pzQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.41 - '@storybook/client-logger': 7.1.0-alpha.41 + '@storybook/channels': 7.1.0-alpha.43 + '@storybook/client-logger': 7.1.0-alpha.43 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -11365,11 +11383,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.41: - resolution: {integrity: sha512-r2X1y2mZv2m1FyvwMT/tla3heigcmBF47YSD7R5rPqcOg7k3ye9kVPmUA3wAY2GGiW5fsK2OD8hq8Hd3Vl2pKA==} + /@storybook/channels@7.1.0-alpha.43: + resolution: {integrity: sha512-9GGMCqntc9bcMiDoddtotJqzCnUWLfSsmjJH3ml9k8W8hSmteVje/oUl0da7s2w1RQsNCBggKhkIr7/hz36vHQ==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.41 - '@storybook/core-events': 7.1.0-alpha.41 + '@storybook/client-logger': 7.1.0-alpha.43 + '@storybook/core-events': 7.1.0-alpha.43 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -11438,8 +11456,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.41: - resolution: {integrity: sha512-QirwSuiDdY9hc0gOrTLvVFIUcdBvws7i88vJNVT9cqiQbNTvxtb+dhQHL402gRsmT/PSEjZ28ymX2vBNcwPMYw==} + /@storybook/client-logger@7.1.0-alpha.43: + resolution: {integrity: sha512-tDUB9OqFSXTfTB+ZfL/tADiorx6vUYxszIStfdofxMNttMnikgu5mgSiFxVCOm1ZpIG+x9YD0fdeBPu/VsyTsw==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -11543,8 +11561,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.41: - resolution: {integrity: sha512-Thk6jcmP6BFjbBeTdsSugnj3GBQ2jVAM8E4OJ9AEI7KI5ut89nEC+La9ZcqpTkpBBvesntf/yWqAVFzHEWdK9A==} + /@storybook/core-events@7.1.0-alpha.43: + resolution: {integrity: sha512-pOscUP9AIZ9RYHfNpSoKFcAzW0jsY3T09lJAvAzC5tjnfGp8QrJED+huHHEXY6y4lzUlQPZiZKBnAbcCQLnAAg==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -11680,14 +11698,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.41: - resolution: {integrity: sha512-StFqumrV/eCiFLfo/hXFnYfZsZgbwFKUV93qmmaEoh4HCdcFcMNBOVI7RL6zWtX4xJSmOWEvOxet39EgbmSCZA==} + /@storybook/instrumenter@7.1.0-alpha.43: + resolution: {integrity: sha512-aXpTW+K/ubDJcc/Uc6mZ7Bf7jI8tCS9CYJ2C9RLjdjzGf9tf2r2+UBxtwguf6WfadrqanF+wPJyZDtGVVjnOAw==} dependencies: - '@storybook/channels': 7.1.0-alpha.41 - '@storybook/client-logger': 7.1.0-alpha.41 - '@storybook/core-events': 7.1.0-alpha.41 + '@storybook/channels': 7.1.0-alpha.43 + '@storybook/client-logger': 7.1.0-alpha.43 + '@storybook/core-events': 7.1.0-alpha.43 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.41 + '@storybook/preview-api': 7.1.0-alpha.43 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -11756,16 +11774,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.41: - resolution: {integrity: sha512-P5MZDHnwY9DOKk4V1p+PXYyVQgtxTpzYB7RCQvVuZGi03tSNvJVmK8G9/rmn30fdLdJWmLN+Jv72AOedvOYOHA==} + /@storybook/preview-api@7.1.0-alpha.43: + resolution: {integrity: sha512-Tf/uYN8NJRv46WL0fHr2ZZULej5ytqg2hAIL0v7vAQksh3EyTFVV4/E8H+3KiCpxFI/NudSxl7AapC5d0fDCmg==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.41 - '@storybook/channels': 7.1.0-alpha.41 - '@storybook/client-logger': 7.1.0-alpha.41 - '@storybook/core-events': 7.1.0-alpha.41 + '@storybook/channel-postmessage': 7.1.0-alpha.43 + '@storybook/channels': 7.1.0-alpha.43 + '@storybook/client-logger': 7.1.0-alpha.43 + '@storybook/core-events': 7.1.0-alpha.43 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.41 + '@storybook/types': 7.1.0-alpha.43 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -11913,8 +11931,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.41 - '@storybook/instrumenter': 7.1.0-alpha.41 + '@storybook/client-logger': 7.1.0-alpha.43 + '@storybook/instrumenter': 7.1.0-alpha.43 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -11957,10 +11975,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.41: - resolution: {integrity: sha512-rQ6bOJdHZnIe3dladPLr5gFstG0tNxIgORNMGK9pQqfYCe2gERTQo3NaH6WgAXyknakVBiSCME9MSaT3fzmkhg==} + /@storybook/types@7.1.0-alpha.43: + resolution: {integrity: sha512-Uea1/t62Bud4eqSYO0ElzgIsZ4XQJipl0LbakxhnJtcOfgrFnVQmI6qfqOPPS9rKU5f+pnakj+rk1pxHMYgVgw==} dependencies: - '@storybook/channels': 7.1.0-alpha.41 + '@storybook/channels': 7.1.0-alpha.43 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.3.0 @@ -13802,6 +13820,41 @@ packages: xstate: 4.37.1 dev: true + /@xstate/inspect@0.7.1(ws@8.13.0)(xstate@4.38.0): + resolution: {integrity: sha512-lEIi6cSvzA9f+GzaJMRVe4xnNjPY/oKdU8rjb+qxqUYx2evLuqysFu0XbPmEjMCwpfdIvG4FFsZJ7Ng7+k9UHw==} + peerDependencies: + '@types/ws': ^8.0.0 + ws: ^8.0.0 + xstate: ^4.35.3 + peerDependenciesMeta: + '@types/ws': + optional: true + dependencies: + fast-safe-stringify: 2.1.1 + ws: 8.13.0 + xstate: 4.38.0 + dev: false + + /@xstate/react@3.2.2(@types/react@18.0.37)(react@18.2.0)(xstate@4.38.0): + resolution: {integrity: sha512-feghXWLedyq8JeL13yda3XnHPZKwYDN5HPBLykpLeuNpr9178tQd2/3d0NrH6gSd0sG5mLuLeuD+ck830fgzLQ==} + peerDependencies: + '@xstate/fsm': ^2.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + xstate: ^4.37.2 + peerDependenciesMeta: + '@xstate/fsm': + optional: true + xstate: + optional: true + dependencies: + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.37)(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + xstate: 4.38.0 + transitivePeerDependencies: + - '@types/react' + dev: false + /@xstate/svelte@2.0.1(svelte@3.57.0)(xstate@4.37.1): resolution: {integrity: sha512-A4QSCt4EpbyzbPIPGCRLoRn50VUq6gXcmJPIwgBaCTsTRsPsp8KSvltDqS2msBKEDr4FHWXEXOC4QVGDWFL5dg==} peerDependencies: @@ -14298,6 +14351,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: @@ -14814,6 +14871,10 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base16@1.0.0: + resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -18319,6 +18380,32 @@ packages: bser: 2.1.1 dev: true + /fbemitter@3.0.0: + resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} + dependencies: + fbjs: 3.0.5 + transitivePeerDependencies: + - encoding + dev: false + + /fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: false + + /fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + dependencies: + cross-fetch: 3.1.5 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.35 + transitivePeerDependencies: + - encoding + dev: false + /fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} dependencies: @@ -18514,6 +18601,18 @@ packages: engines: {node: '>=0.4.0'} dev: true + /flux@4.0.4(react@18.2.0): + resolution: {integrity: sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==} + peerDependencies: + react: ^15.0.2 || ^16.0.0 || ^17.0.0 + dependencies: + fbemitter: 3.0.0 + fbjs: 3.0.5 + react: 18.2.0 + transitivePeerDependencies: + - encoding + dev: false + /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} dev: false @@ -21593,6 +21692,10 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true + /lodash.curry@4.1.1: + resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} + dev: false + /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true @@ -21609,6 +21712,10 @@ packages: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: true + /lodash.flow@3.5.0: + resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==} + dev: false + /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true @@ -23971,6 +24078,12 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: false + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -24060,6 +24173,10 @@ packages: - utf-8-validate dev: true + /pure-color@1.3.0: + resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==} + dev: false + /pure-rand@6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true @@ -24154,6 +24271,15 @@ packages: iconv-lite: 0.4.24 unpipe: 1.0.0 + /react-base16-styling@0.6.0: + resolution: {integrity: sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==} + dependencies: + base16: 1.0.0 + lodash.curry: 4.1.1 + lodash.flow: 3.5.0 + pure-color: 1.3.0 + dev: false + /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: @@ -24301,6 +24427,23 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react-json-view@1.21.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} + peerDependencies: + react: ^17.0.0 || ^16.3.0 || ^15.5.4 + react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 + dependencies: + flux: 4.0.4(react@18.2.0) + react: 18.2.0 + react-base16-styling: 0.6.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 8.5.1(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - encoding + dev: false + /react-leaflet@4.2.1(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==} peerDependencies: @@ -24503,6 +24646,20 @@ packages: tslib: 2.5.2 dev: false + /react-textarea-autosize@8.5.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.21.0 + react: 18.2.0 + use-composed-ref: 1.3.0(react@18.2.0) + use-latest: 1.2.1(@types/react@18.0.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} peerDependencies: @@ -25413,6 +25570,10 @@ packages: /set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: false + /setprototypeof@1.1.1: resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} dev: false @@ -27095,6 +27256,10 @@ packages: engines: {node: '>=12.20'} hasBin: true + /ua-parser-js@1.0.35: + resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} + dev: false + /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} @@ -27340,6 +27505,14 @@ packages: tslib: 2.5.2 dev: false + /use-composed-ref@1.3.0(react@18.2.0): + resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.29)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: @@ -27366,6 +27539,20 @@ packages: react: 18.2.0 dev: false + /use-latest@1.2.1(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.37 + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.37)(react@18.2.0) + dev: false + /use-query-params@2.2.1(react-dom@18.2.0)(react-router-dom@6.11.2)(react@18.2.0): resolution: {integrity: sha512-i6alcyLB8w9i3ZK3caNftdb+UnbfBRNPDnc89CNQWkGRmDrm/gfydHvMBfVsQJRq3NoHOM2dt/ceBWG2397v1Q==} peerDependencies: @@ -28690,6 +28877,10 @@ packages: /xstate@4.37.1: resolution: {integrity: sha512-MuB7s01nV5vG2CzaBg2msXLGz7JuS+x/NBkQuZAwgEYCnWA8iQMiRz2VGxD3pcFjZAOih3fOgDD3kDaFInEx+g==} + /xstate@4.38.0: + resolution: {integrity: sha512-oFjw2YZPyu6HeO0JWCSqfhAALsjFPURsrD2FUFN3u213dWwYU68RFuLtSHco+cEUhpQFW+hRG3PNYgq8HatudQ==} + dev: false + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} diff --git a/services/workflows-service/prisma/migrations/20230629141759_added_assigned_at_to_workflow_runtime_data/migration.sql b/services/workflows-service/prisma/migrations/20230629141759_added_assigned_at_to_workflow_runtime_data/migration.sql new file mode 100644 index 0000000000..e92a54e656 --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230629141759_added_assigned_at_to_workflow_runtime_data/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "WorkflowRuntimeData" ADD COLUMN "assignedAt" TIMESTAMP(3); diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index 977248c883..6c4d0a0cb0 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -170,6 +170,7 @@ model WorkflowRuntimeData { updatedAt DateTime @updatedAt createdBy String @default("SYSTEM") resolvedAt DateTime? + assignedAt DateTime? @@index([assigneeId, status]) @@index([endUserId, status]) diff --git a/services/workflows-service/src/user/dtos/get-active-users.dto.ts b/services/workflows-service/src/user/dtos/get-active-users.dto.ts new file mode 100644 index 0000000000..af9b219ef8 --- /dev/null +++ b/services/workflows-service/src/user/dtos/get-active-users.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetActiveUsersDto { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/user/dtos/get-users-case-resolving-stats-input.dto.ts b/services/workflows-service/src/user/dtos/get-users-case-resolving-stats-input.dto.ts new file mode 100644 index 0000000000..ff09305239 --- /dev/null +++ b/services/workflows-service/src/user/dtos/get-users-case-resolving-stats-input.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetUsersCaseResolvingStatsDto { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/user/types/index.ts b/services/workflows-service/src/user/types/index.ts new file mode 100644 index 0000000000..001303b5d0 --- /dev/null +++ b/services/workflows-service/src/user/types/index.ts @@ -0,0 +1,3 @@ +export interface ListUsersCaseResolveStatsParams { + fromDate?: Date; +} diff --git a/services/workflows-service/src/user/user-case-resolving-stats.model.ts b/services/workflows-service/src/user/user-case-resolving-stats.model.ts new file mode 100644 index 0000000000..c6d869d3b0 --- /dev/null +++ b/services/workflows-service/src/user/user-case-resolving-stats.model.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class UserCaseResolvingStatsModel { + @ApiProperty() + id!: string; + + @ApiProperty() + firstName!: string; + + @ApiProperty() + lastName!: string; + + @ApiProperty() + cases!: number; + + @ApiProperty() + email!: string; +} diff --git a/services/workflows-service/src/user/user.controller.internal.ts b/services/workflows-service/src/user/user.controller.internal.ts index 452c76b8b6..5c3d20bbdf 100644 --- a/services/workflows-service/src/user/user.controller.internal.ts +++ b/services/workflows-service/src/user/user.controller.internal.ts @@ -2,7 +2,6 @@ import * as common from '@nestjs/common'; import * as swagger from '@nestjs/swagger'; import { UserService } from './user.service'; import { UserModel } from './user.model'; -import { UserRepository } from '@/user/user.repository'; import { UserCreateDto } from '@/user/dtos/user-create'; @swagger.ApiTags('internal/users') diff --git a/services/workflows-service/src/user/user.controlller.external.ts b/services/workflows-service/src/user/user.controlller.external.ts new file mode 100644 index 0000000000..46557651e5 --- /dev/null +++ b/services/workflows-service/src/user/user.controlller.external.ts @@ -0,0 +1,41 @@ +import * as common from '@nestjs/common'; +import * as swagger from '@nestjs/swagger'; +import { UserService } from './user.service'; +import { UserModel } from './user.model'; +import { Query } from '@nestjs/common'; +import { GetActiveUsersDto } from '@/user/dtos/get-active-users.dto'; +import { plainToClass } from 'class-transformer'; +import { UseKeyAuthOrSessionGuard } from '@/common/decorators/use-key-auth-or-session-guard.decorator'; +import { ApiOkResponse } from '@nestjs/swagger'; +import { GetUsersCaseResolvingStatsDto } from '@/user/dtos/get-users-case-resolving-stats-input.dto'; +import { UserCaseResolvingStatsModel } from '@/user/user-case-resolving-stats.model'; + +@swagger.ApiTags('external/users') +@common.Controller('external/users') +export class UserControllerExternal { + constructor(protected readonly service: UserService) {} + + @common.Get('/active-users') + @swagger.ApiOkResponse({ type: [UserModel] }) + async getActiveUsers(@Query() query: GetActiveUsersDto) { + const results = await this.service.list({ + where: { + lastActiveAt: { + ...(query.fromDate ? { gte: query.fromDate } : { not: null }), + }, + }, + }); + + return results.map(result => plainToClass(UserModel, result)); + } + + @common.Get('/metrics/case-resolving-stats') + @ApiOkResponse({ type: [UserCaseResolvingStatsModel] }) + async getUsersActivityStats( + @common.Query() query: GetUsersCaseResolvingStatsDto, + ): Promise<UserCaseResolvingStatsModel[]> { + const results = await this.service.listUsersCaseResolveStats({ fromDate: query.fromDate }); + + return results.map(result => plainToClass(UserCaseResolvingStatsModel, result)); + } +} diff --git a/services/workflows-service/src/user/user.model.ts b/services/workflows-service/src/user/user.model.ts index e521014c84..5c7ae5fbc5 100644 --- a/services/workflows-service/src/user/user.model.ts +++ b/services/workflows-service/src/user/user.model.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsDate, IsString, IsArray } from 'class-validator'; -import { Type } from 'class-transformer'; +import { IsDate, IsString, IsArray, IsOptional } from 'class-validator'; +import { Exclude, Type } from 'class-transformer'; import { JsonValue } from 'type-fest'; export class UserModel { @@ -18,6 +18,17 @@ export class UserModel { @IsString() email!: string; + @ApiProperty() + @IsString() + firstName!: string; + + @ApiProperty() + @IsString() + lastName!: string; + + @Exclude() + password!: string; + @ApiProperty({ required: true, }) @@ -38,4 +49,9 @@ export class UserModel { @IsDate() @Type(() => Date) createdAt!: Date; + + @ApiProperty() + @IsDate() + @IsOptional() + lastActiveAt!: Date | null; } diff --git a/services/workflows-service/src/user/user.module.ts b/services/workflows-service/src/user/user.module.ts index 09b779dd8e..b8b640c43b 100644 --- a/services/workflows-service/src/user/user.module.ts +++ b/services/workflows-service/src/user/user.module.ts @@ -6,10 +6,11 @@ import { UserService } from './user.service'; // eslint-disable-next-line import/no-cycle import { AuthModule } from '../auth/auth.module'; import { ACLModule } from '@/common/access-control/acl.module'; +import { UserControllerExternal } from '@/user/user.controlller.external'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule)], - controllers: [UserControllerInternal], + controllers: [UserControllerInternal, UserControllerExternal], providers: [UserRepository, UserService], exports: [ACLModule, AuthModule, UserService], }) diff --git a/services/workflows-service/src/user/user.repository.ts b/services/workflows-service/src/user/user.repository.ts index 69f9ed4ff1..1e72acce15 100644 --- a/services/workflows-service/src/user/user.repository.ts +++ b/services/workflows-service/src/user/user.repository.ts @@ -78,4 +78,8 @@ export class UserRepository { ...args, }); } + + async queryRaw<TValue>(query: string, values: any[] = []): Promise<TValue> { + return (await this.prisma.$queryRawUnsafe.apply(this.prisma, [query, ...values])) as TValue; + } } diff --git a/services/workflows-service/src/user/user.service.ts b/services/workflows-service/src/user/user.service.ts index 7abac28be1..ad9fd253a7 100644 --- a/services/workflows-service/src/user/user.service.ts +++ b/services/workflows-service/src/user/user.service.ts @@ -1,3 +1,4 @@ +import { ListUsersCaseResolveStatsParams } from '@/user/types'; import { Injectable } from '@nestjs/common'; import { User } from '@prisma/client'; import { PasswordService } from '../auth/password/password.service'; @@ -33,4 +34,35 @@ export class UserService { async deleteById(id: string, args?: Parameters<UserRepository['deleteById']>[1]) { return this.repository.deleteById(id, args); } + + async listUsersCaseResolveStats(params: ListUsersCaseResolveStatsParams) { + const rawQuery = ` + select + user_cases."assigneeId" as id, + SUM(cases_per_day)::int as cases, + "firstName", + "lastName", + "email" + from + "User" + inner join ( + select + date_trunc('day', + "resolvedAt") as day, + count(*)::int as cases_per_day, + "assigneeId" + from + "WorkflowRuntimeData" + where "resolvedAt" notnull + ${params.fromDate ? 'and "resolvedAt" >= $1' : ''} + group by "assigneeId", "day" + ) + as user_cases + on "User".id = user_cases."assigneeId" + group by id, user_cases."assigneeId"`; + + return await this.repository.queryRaw< + { id: string; firstName: string; lastName: string; cases: number }[] + >(rawQuery, params.fromDate ? [params.fromDate] : undefined); + } } diff --git a/services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts new file mode 100644 index 0000000000..db4f187e2f --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetCaseResolvingMetricsDto { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts new file mode 100644 index 0000000000..972ad67c19 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetWorkflowRuntimeUserStatsDto { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts new file mode 100644 index 0000000000..102499e951 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetWorkflowsRuntimeAgentCases { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-cases-per-status-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-cases-per-status-input.dto.ts new file mode 100644 index 0000000000..102499e951 --- /dev/null +++ b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-cases-per-status-input.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { IsDate, IsOptional } from 'class-validator'; + +export class GetWorkflowsRuntimeAgentCases { + @ApiProperty({ type: Number, description: 'UNIX timestamp' }) + @IsOptional() + @Transform(({ value }) => new Date(value ? +value : 0)) + @IsDate() + fromDate!: Date; +} diff --git a/services/workflows-service/src/workflow/types/index.ts b/services/workflows-service/src/workflow/types/index.ts index 3422710b3b..62bc7e6d12 100644 --- a/services/workflows-service/src/workflow/types/index.ts +++ b/services/workflows-service/src/workflow/types/index.ts @@ -47,10 +47,32 @@ export type WorkflowRuntimeListQueryResult = WorkflowRuntimeData & { assignee: User | null; }; -export type WorkflowStatusMetric = Record<WorkflowRuntimeDataStatus, number>; - export type WorkflowsApprovedChart = { workflowId: string; approvedDate: Date }[]; -export interface WorkflowsRuntimeMetric { - status: WorkflowStatusMetric; - approvedWorkflows: WorkflowsApprovedChart; + +export type WorkflowDefinitionStatsPerStatus = Record<WorkflowRuntimeDataStatus, number>; +export interface WorkflowDefinitionStats { + id: string; + name: string; + stats: WorkflowDefinitionStatsPerStatus; +} + +export interface WorkflowRuntimeAgentStats { + id: string; + firstName: string; + lastName: string; + casesCount: number; +} + +export interface ListWorkflowRuntimeAgentCasesStatsParams { + fromDate?: Date; +} + +export type WorkflowRuntimeCasesPerStatus = Record<WorkflowRuntimeDataStatus, number>; + +export interface GetWorkflowRuntimeCasesPerStatusParams { + fromDate?: Date; +} + +export interface GetUserStatsParams { + fromDate?: Date | null; } diff --git a/services/workflows-service/src/workflow/workflow-metric.service.ts b/services/workflows-service/src/workflow/workflow-metric.service.ts new file mode 100644 index 0000000000..1202354429 --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-metric.service.ts @@ -0,0 +1,135 @@ +import { AppLoggerService } from '@/common/app-logger/app-logger.service'; +import { UserService } from '@/user/user.service'; +import { + GetWorkflowRuntimeCasesPerStatusParams, + ListWorkflowRuntimeAgentCasesStatsParams, + WorkflowDefinitionStats, + WorkflowRuntimeAgentStats, + WorkflowRuntimeCasesPerStatus, +} from '@/workflow/types'; +import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; +import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; +import { Injectable } from '@nestjs/common'; +import uniq from 'lodash/uniq'; +import keyBy from 'lodash/keyBy'; + +@Injectable() +export class WorkflowMetricService { + constructor( + protected readonly userService: UserService, + protected readonly logger: AppLoggerService, + protected readonly workflowDefinitionRepository: WorkflowDefinitionRepository, + protected readonly workflowRuntimeDataRepository: WorkflowRuntimeDataRepository, + ) {} + + async getWorkflowsRuntimeCasesPerStatus( + params: GetWorkflowRuntimeCasesPerStatusParams = {}, + ): Promise<WorkflowRuntimeCasesPerStatus> { + const queryResult = await this.workflowRuntimeDataRepository.groupBy({ + by: ['status'], + where: { + createdAt: { + ...(params.fromDate ? { gte: params.fromDate } : undefined), + }, + }, + _count: true, + }); + + const metrics: WorkflowRuntimeCasesPerStatus = { + active: 0, + failed: 0, + completed: 0, + }; + + queryResult.forEach(metric => { + metrics[metric.status] = Number(metric._count) || 0; + }); + + return metrics; + } + + async listWorkflowStats(): Promise<WorkflowDefinitionStats[]> { + const countByStatusList = await this.workflowRuntimeDataRepository.groupBy({ + by: ['workflowDefinitionId', 'status'], + _count: { + status: true, + }, + }); + + const workflowDefinitionIds = countByStatusList.map(stats => stats.workflowDefinitionId); + const workflowDefinitions = await this.workflowDefinitionRepository.findMany({ + where: { + id: { + in: uniq(workflowDefinitionIds), + }, + }, + }); + + const workflowDefinitionsById = keyBy(workflowDefinitions, 'id'); + + const workflowDefinitionsStats = countByStatusList.reduce( + (statsById, workflowDefinitionStats) => { + const { workflowDefinitionId } = workflowDefinitionStats; + const stats: WorkflowDefinitionStats = { + ...statsById[workflowDefinitionId], + id: workflowDefinitionId, + name: String(workflowDefinitionsById[workflowDefinitionId]?.name), + stats: { + active: 0, + failed: 0, + completed: 0, + ...statsById[workflowDefinitionId]?.stats, + [workflowDefinitionStats.status]: Number( + (workflowDefinitionStats._count as any).status, + ), + }, + }; + + statsById[workflowDefinitionId] = stats; + + return statsById; + }, + {} as Record<string, WorkflowDefinitionStats>, + ); + + return Object.values(workflowDefinitionsStats); + } + + async listWorkflowRuntimeAgentCasesStats( + params: ListWorkflowRuntimeAgentCasesStatsParams = {}, + ): Promise<WorkflowRuntimeAgentStats[]> { + console.log({ gte: params.fromDate }); + + const casesCountList = await this.workflowRuntimeDataRepository.groupBy({ + by: ['assigneeId'], + where: { + assigneeId: { + not: null, + }, + assignedAt: { + ...(params.fromDate ? { gte: params.fromDate } : { not: null }), + }, + }, + _count: true, + }); + + const agentIds = casesCountList.map(count => count.assigneeId); + const agents = await this.userService.list({ where: { id: { in: agentIds as string[] } } }); + const agentsMapById = keyBy(agents, 'id'); + + return casesCountList.map(caseCount => { + const { _count, assigneeId } = caseCount; + const agentId = String(assigneeId); + const agent = agentsMapById[agentId]; + + const agentStats: WorkflowRuntimeAgentStats = { + id: agentId, + firstName: String(agent?.firstName), + lastName: String(agent?.lastName), + casesCount: Number(_count) || 0, + }; + + return agentStats; + }); + } +} diff --git a/services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts b/services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts new file mode 100644 index 0000000000..ae803da8aa --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class WorkflowRuntimeAgentCasesModel { + @ApiProperty() + id!: string; + + @ApiProperty() + firstName!: string; + + @ApiProperty() + lastName!: string; + + @ApiProperty() + casesCount!: number; +} diff --git a/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts b/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts new file mode 100644 index 0000000000..75d8881f4c --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts @@ -0,0 +1,13 @@ +import { WorkflowRuntimeCasesPerStatus } from '@/workflow/types'; +import { ApiProperty } from '@nestjs/swagger'; + +export class WorkflowRuntimeCasesPerStatusModel implements WorkflowRuntimeCasesPerStatus { + @ApiProperty() + active!: number; + + @ApiProperty() + completed!: number; + + @ApiProperty() + failed!: number; +} diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index 4ca8fae460..f3faab3547 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -119,4 +119,8 @@ export class WorkflowRuntimeDataRepository { ) { return await this.prisma.workflowRuntimeData.groupBy(args); } + + async queryRaw<TValue>(query: string, values: any[] = []): Promise<TValue> { + return (await this.prisma.$queryRawUnsafe.apply(this.prisma, [query, ...values])) as TValue; + } } diff --git a/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts b/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts index 0730cd5a0b..7e0d31aeeb 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-list-item.model.ts @@ -27,6 +27,11 @@ export class WorkflowRuntimeListItemModel { @IsString() workflowDefinitionName!: string; + @Expose() + @ApiProperty() + @IsString() + workflowDefinitionId!: string; + @Expose() @ApiProperty() @IsString() diff --git a/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts b/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts new file mode 100644 index 0000000000..9d9bc5a6b8 --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts @@ -0,0 +1,29 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { ValidateNested } from 'class-validator'; + +export class WorkflowDefinitionRuntimeStats { + @ApiProperty() + active!: number; + + @ApiProperty() + failed!: number; + + @ApiProperty() + completed!: number; +} + +export class WorkflowRuntimeStatsModel { + @Type(() => String) + @ApiProperty({ description: 'Workflow Runtime Definition Id' }) + id!: string; + + @Type(() => String) + @ApiProperty({ description: 'Workflow Runtime Definition name' }) + name!: string; + + @Type(() => WorkflowDefinitionRuntimeStats) + @ApiProperty() + @ValidateNested() + stats!: WorkflowDefinitionRuntimeStats; +} diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 1ef6f098d7..0cb4c8194a 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -15,16 +15,24 @@ import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find- import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { WorkflowDefinitionWhereUniqueInput } from './dtos/workflow-where-unique-input'; -import { RunnableWorkflowData } from './types'; +import { GetUserStatsParams, RunnableWorkflowData } from './types'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { IntentResponse, WorkflowService } from './workflow.service'; -import { Response } from 'express'; +import { Request, Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; import { plainToClass } from 'class-transformer'; import { GetWorkflowsRuntimeInputDto } from '@/workflow/dtos/get-workflows-runtime-input.dto'; import { GetWorkflowsRuntimeOutputDto } from '@/workflow/dtos/get-workflows-runtime-output.dto'; +import { WorkflowRuntimeStatsModel } from '@/workflow/workflow-runtime-stats-model'; +import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; +import { WorkflowRuntimeAgentCasesModel } from '@/workflow/workflow-runtime-agent-cases.model'; +import { GetWorkflowsRuntimeAgentCases } from '@/workflow/dtos/get-workflows-runtime-agent-cases-input.dto'; +import { WorkflowRuntimeCasesPerStatusModel } from '@/workflow/workflow-runtime-cases-per-status.model'; +import { GetWorkflowRuntimeUserStatsDto } from '@/workflow/dtos/get-workflow-runtime-user-stats-input.dto'; +import { GetCaseResolvingMetricsDto } from '@/workflow/dtos/get-case-resolving-metrics-input.dto'; +import { ApiOkResponse } from '@nestjs/swagger'; @swagger.ApiBearerAuth() @swagger.ApiTags('external/workflows') @@ -32,6 +40,7 @@ import { GetWorkflowsRuntimeOutputDto } from '@/workflow/dtos/get-workflows-runt export class WorkflowControllerExternal { constructor( protected readonly service: WorkflowService, + protected readonly metricService: WorkflowMetricService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -40,7 +49,6 @@ export class WorkflowControllerExternal { @swagger.ApiOkResponse({ type: [GetWorkflowsRuntimeOutputDto] }) @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) @common.HttpCode(200) - @UseKeyAuthInDevGuard() async listWorkflowRuntimeData( @Query() query: GetWorkflowsRuntimeInputDto, ): Promise<GetWorkflowsRuntimeOutputDto> { @@ -55,10 +63,83 @@ export class WorkflowControllerExternal { return plainToClass(GetWorkflowsRuntimeOutputDto, results); } - @common.Get('/metrics') - @UseKeyAuthInDevGuard() - async listWorkflowRuntimeMetric() { - return await this.service.listWorkflowsMetrics(); + @common.Get('/metrics/workflows-definition-runtime-stats') + @swagger.ApiOkResponse({ type: [WorkflowRuntimeStatsModel] }) + @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) + @common.HttpCode(200) + async listWorkflowRuntimeStats(): Promise<WorkflowRuntimeStatsModel[]> { + const results = await this.metricService.listWorkflowStats(); + + return results.map(result => plainToClass(WorkflowRuntimeStatsModel, result)); + } + + @common.Get('/metrics/workflow-runtime-agent-cases-stats') + @swagger.ApiOkResponse({ type: [WorkflowRuntimeAgentCasesModel] }) + @common.HttpCode(200) + async listWorkflowRuntimeAgentCasesStats( + @Query() query: GetWorkflowsRuntimeAgentCases, + ): Promise<WorkflowRuntimeAgentCasesModel[]> { + const results = await this.metricService.listWorkflowRuntimeAgentCasesStats({ + fromDate: query.fromDate, + }); + + return results.map(result => plainToClass(WorkflowRuntimeAgentCasesModel, result)); + } + + @common.Get('/metrics/workflow-runtime-cases-per-status') + @swagger.ApiOkResponse({ type: WorkflowRuntimeCasesPerStatusModel }) + @common.HttpCode(200) + async listWorkflowRuntimeCasesPerStatusStats( + @Query() query: GetWorkflowsRuntimeAgentCases, + ): Promise<WorkflowRuntimeCasesPerStatusModel> { + const results = await this.metricService.getWorkflowsRuntimeCasesPerStatus({ + fromDate: query.fromDate, + }); + return plainToClass(WorkflowRuntimeCasesPerStatusModel, results); + } + + @common.Get('/metrics/user-stats') + async listUserWorkflowRuntimeUserStats( + @common.Request() request: Request, + @common.Query() query: GetWorkflowRuntimeUserStatsDto, + ) { + const statsParams: GetUserStatsParams = { + fromDate: query.fromDate, + }; + + const userId = request.user!.id; + + const [approvalRate, averageResolutionTime, averageAssignmentTime, averageReviewTime] = + await Promise.all([ + this.service.getUserApprovalRate(userId), + this.service.getAverageResolutionTime(userId, statsParams), + this.service.getAverageAssignmentTime(userId, statsParams), + this.service.getAverageReviewTime(userId, statsParams), + ]); + + return { + approvalRate, + averageResolutionTime, + averageAssignmentTime, + averageReviewTime, + }; + } + + @common.Get('/metrics/case-resolving') + async listCaseResolvingMetric( + @common.Request() request: Request, + @common.Query() query: GetCaseResolvingMetricsDto, + ) { + const userId = request.user!.id; + + return await this.service.getResolvedCasesPerDay(userId, { fromDate: query.fromDate }); + } + + @common.Get('/workflow-definition/:id') + @ApiOkResponse({ type: WorkflowDefinitionModel }) + @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) + async getWorkflowDefinition(@common.Param() params: WorkflowDefinitionWhereUniqueInput) { + return await this.service.getWorkflowDefinitionById(params.id); } @common.Get('/:id') diff --git a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts index cdb0e067ea..35bb615103 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts @@ -11,6 +11,7 @@ import { WorkflowService } from './workflow.service'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { CompleteWorkflowData } from './types'; import { WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; +import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; const acGuard = { canActivate: () => { @@ -51,6 +52,10 @@ describe('Workflow (external)', () => { provide: EventEmitter2, useValue: {} as EventEmitter2, }, + { + provide: WorkflowMetricService, + useValue: {} as WorkflowMetricService, + }, ], controllers: [WorkflowControllerExternal], imports: [ACLModule], diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index b56f3ad0c2..b4ab2fb178 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -16,6 +16,9 @@ import { HttpModule } from '@nestjs/axios'; import { FilterRepository } from '@/filter/filter.repository'; import { FilterService } from '@/filter/filter.service'; import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; +import { UserService } from '@/user/user.service'; +import { UserRepository } from '@/user/user.repository'; +import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule), HttpModule], @@ -33,6 +36,9 @@ import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data. DocumentChangedWebhookCaller, FilterRepository, FilterService, + UserService, + UserRepository, + WorkflowMetricService, ], exports: [WorkflowService, ACLModule, AuthModule, StorageService, FileRepository], }) diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index b09705c045..5027a7f3fa 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -14,13 +14,12 @@ import { } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { + GetUserStatsParams, ListRuntimeDataResult, ListWorkflowsRuntimeParams, RunnableWorkflowData, TWorkflowWithRelations, WorkflowRuntimeListQueryResult, - WorkflowsRuntimeMetric, - WorkflowStatusMetric, } from './types'; import { createWorkflow } from '@ballerine/workflow-node-sdk'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; @@ -617,7 +616,7 @@ export class WorkflowService { const updatedWorkflowRuntimeData = await this.workflowRuntimeDataRepository.updateById( workflowRuntimeId, - { data: { assigneeId: assigneeId } }, + { data: { assigneeId: assigneeId, assignedAt: new Date() } }, ); return updatedWorkflowRuntimeData; @@ -1169,35 +1168,103 @@ export class WorkflowService { return this.workflowRuntimeDataRepository.findContext(id); } - async listWorkflowsMetrics(): Promise<WorkflowsRuntimeMetric> { - return { - approvedWorkflows: (await this.listResolvedWorkflowRuntimes()) as any, - status: await this._getWorkflowsStatusMetric(), - }; + async getUserApprovalRate(userId: string) { + const [resolved, approved] = await Promise.all([ + this.workflowRuntimeDataRepository.count({ + where: { + assigneeId: userId, + resolvedAt: { + not: null, + }, + }, + }), + this.workflowRuntimeDataRepository.count({ + where: { + assigneeId: userId, + resolvedAt: { + not: null, + }, + status: WorkflowRuntimeDataStatus.completed, + }, + }), + ]); + + return resolved && approved ? (approved / resolved) * 100 : 0; } - private async listResolvedWorkflowRuntimes(): Promise<WorkflowRuntimeData[]> { - return await this.workflowRuntimeDataRepository.findMany({ - where: { resolvedAt: { not: null } }, - }); + // Prisma queryRaw doesn't support type interval which is recieved by calculating resolvedAt - createdAt + // to handle this date columns converted to MS + async getAverageResolutionTime(userId: string, params: GetUserStatsParams = {}): Promise<number> { + const rawQuery = ` + select + avg((extract(epoch from "resolvedAt") - extract(epoch from "createdAt")) * 1000)::int + from "WorkflowRuntimeData" + where "assigneeId" = $1 + ${params.fromDate ? `and "createdAt" >= $2` : ''} + and "resolvedAt" notnull + group by "assigneeId"`; + + return await this._executeAverageTimeQuery(rawQuery, userId, params); } - private async _getWorkflowsStatusMetric(): Promise<WorkflowStatusMetric> { - const queryResult = await this.workflowRuntimeDataRepository.groupBy({ - by: ['status'], - _count: true, - }); + async getAverageAssignmentTime(userId: string, params: GetUserStatsParams): Promise<number> { + const rawQuery = ` + select + avg((extract(epoch from "assignedAt") - extract(epoch from "createdAt")) * 1000)::int + from "WorkflowRuntimeData" + where "assigneeId" = $1 + ${params.fromDate ? `and "createdAt" >= $2` : ''} + and "assignedAt" notnull + group by "assigneeId" + `; + + return await this._executeAverageTimeQuery(rawQuery, userId, params); + } - const metrics: WorkflowStatusMetric = { - active: 0, - failed: 0, - completed: 0, - }; + async getAverageReviewTime(userId: string, params: GetUserStatsParams): Promise<number> { + const rawQuery = ` + select + avg((extract(epoch from "resolvedAt") - extract(epoch from "assignedAt")) * 1000)::int + from "WorkflowRuntimeData" + where "assigneeId" = $1 + ${params.fromDate ? `and "createdAt" >= $2` : ''} + and "assignedAt" notnull + group by "assigneeId"`; + + return await this._executeAverageTimeQuery(rawQuery, userId, params); + } - queryResult.forEach(metric => { - metrics[metric.status] = Number(metric._count) || 0; - }); + async getResolvedCasesPerDay(userId: string, params: GetUserStatsParams) { + const rawQuery = ` + select + date_trunc('day', "resolvedAt") as day, count(*)::int as cases_per_day + from "WorkflowRuntimeData" + where "assigneeId" = $1 + ${params.fromDate ? `and "resolvedAt" > $2` : ''} + and "resolvedAt" notnull + group by day`; + + return ( + await this.workflowRuntimeDataRepository.queryRaw<{ day: string; cases_per_day: number }[]>( + rawQuery, + [userId, ...(params.fromDate ? [params.fromDate] : [])], + ) + ).map(data => ({ + date: data.day, + casesPerDay: data.cases_per_day, + })); + } + + private async _executeAverageTimeQuery( + query: string, + userId: string, + params: GetUserStatsParams, + ): Promise<number> { + const queryResults = await this.workflowRuntimeDataRepository.queryRaw<{ avg: number }[]>( + query, + [userId, ...(params.fromDate ? [params.fromDate] : [])], + ); - return metrics; + return queryResults.length ? queryResults.at(-1)?.avg || 0 : 0; } } From a43667f8052ac47e28541ba21ea3ed9942d0366e Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 5 Jul 2023 01:26:12 +0300 Subject: [PATCH 090/123] add staging image publish --- .github/workflows/publish-images-staging.yml | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/publish-images-staging.yml diff --git a/.github/workflows/publish-images-staging.yml b/.github/workflows/publish-images-staging.yml new file mode 100644 index 0000000000..a42b30cea1 --- /dev/null +++ b/.github/workflows/publish-images-staging.yml @@ -0,0 +1,63 @@ +name: Publish workflow-service image - staging + +on: + push: + branches: + - staging + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=staging + type=raw,value=commit-${{ github.sha }}-staging + type=raw,value=${{ steps.get_version.outputs.version }}-staging + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true From 2cd89a2a6c24d3cfa02e76aaae365312b7b19d3e Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 5 Jul 2023 01:58:41 +0300 Subject: [PATCH 091/123] exper --- experiments/load-testing/drill/src/writer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/load-testing/drill/src/writer.rs b/experiments/load-testing/drill/src/writer.rs index 8f79c119dd..62ca892a41 100644 --- a/experiments/load-testing/drill/src/writer.rs +++ b/experiments/load-testing/drill/src/writer.rs @@ -14,4 +14,4 @@ pub fn write_file(filepath: &str, content: String) { if let Err(why) = file.write_all(content.as_bytes()) { panic!("couldn't write to {}: {:?}", display, why); } -} +} From 6ab032975a727cb88d90deaba5735452d79ef0ed Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Thu, 6 Jul 2023 12:27:49 +0300 Subject: [PATCH 092/123] fix: fixed imports & added preview port to vite config (#647) --- .../src/common/hooks/useSession/useSession.ts | 1 + .../components/atoms/HealthIndicator/HealthIndicator.tsx | 2 +- .../src/components/molecules/MetricCard/MetricCard.tsx | 2 +- .../components/molecules/WorkflowsTable/WorkflowsTable.tsx | 2 +- .../useCaseResolvingStatsQuery.ts | 2 +- .../Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts | 2 +- .../useUsersCaseResolvingStatsQuery.ts | 2 +- .../src/pages/SignIn/components/SignInForm/SignInForm.tsx | 2 +- .../molecules/AgentsActivityChart/AgentsActivityChart.tsx | 4 ++-- .../useWorkflowsQueryParams/useWorkflowsQueryParams.ts | 2 +- apps/workflows-dashboard/vite.config.ts | 6 ++++++ 11 files changed, 17 insertions(+), 10 deletions(-) diff --git a/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts b/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts index 51d169a0bd..1dc10be56c 100644 --- a/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts +++ b/apps/workflows-dashboard/src/common/hooks/useSession/useSession.ts @@ -11,6 +11,7 @@ export function useSession() { } = useQuery({ ...sessionKeys.details(), refetchInterval: ONE_MINUTE_IN_MS, + retry: retryCount => retryCount < 3, }); const isAuthenticated = Boolean(!isLoading && user); diff --git a/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx index cec2ccd4b5..f1f049a1b0 100644 --- a/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx +++ b/apps/workflows-dashboard/src/components/atoms/HealthIndicator/HealthIndicator.tsx @@ -1,5 +1,5 @@ import { HealthStatus } from '@app/utils/get-workflow-health-status'; -import * as classnames from 'classnames'; +import classnames from 'classnames'; interface Props { healthStatus: HealthStatus; diff --git a/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx index bce8e8f28c..2004bcdd25 100644 --- a/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx +++ b/apps/workflows-dashboard/src/components/molecules/MetricCard/MetricCard.tsx @@ -1,4 +1,4 @@ -import * as classnames from 'classnames'; +import classnames from 'classnames'; import { Card, CardContent, diff --git a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx index 1e9a22e3e4..ebbce4418a 100644 --- a/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx +++ b/apps/workflows-dashboard/src/components/molecules/WorkflowsTable/WorkflowsTable.tsx @@ -7,7 +7,7 @@ import { TableRow, } from '@app/components/atoms/Table'; import { memo, useMemo } from 'react'; -import * as classnames from 'classnames'; +import classnames from 'classnames'; import { useReactTable, flexRender, getCoreRowModel, SortingState } from '@tanstack/react-table'; import { IWorkflow } from '@app/domains/workflows/api/workflow'; import { defaultColumns } from '@app/components/molecules/WorkflowsTable/columns'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts index 2c8cb73d02..995bb98bcc 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts @@ -1,6 +1,6 @@ import { userStatsQueryKeys } from '@app/domains/user/api/user-stats'; import { useQuery } from '@tanstack/react-query'; -import * as dayjs from 'dayjs'; +import dayjs from 'dayjs'; import { useMemo } from 'react'; export const useCaseResolvingStatsQuery = () => { diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts index d80b47f941..cd1a81aec7 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts @@ -1,4 +1,4 @@ -import * as dayjs from 'dayjs'; +import dayjs from 'dayjs'; import { IUserStats, userStatsQueryKeys } from '@app/domains/user/api/user-stats'; import { useQuery } from '@tanstack/react-query'; import { useMemo } from 'react'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts index 1be65fc142..47d216e151 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts @@ -1,6 +1,6 @@ import { usersStatsQueryKeys } from '@app/domains/user/api/users-stats'; import { useQuery } from '@tanstack/react-query'; -import * as dayjs from 'dayjs'; +import dayjs from 'dayjs'; import { useMemo } from 'react'; export const useUsersCaseResolvingStatsQuery = () => { diff --git a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx index 2ad897c4a1..3c45f40f92 100644 --- a/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx +++ b/apps/workflows-dashboard/src/pages/SignIn/components/SignInForm/SignInForm.tsx @@ -9,7 +9,7 @@ import { FormLabel } from '@app/components/organisms/Form/Form.Label'; import { FormMessage } from '@app/components/organisms/Form/Form.Message'; import { SignInFormValues } from '@app/pages/SignIn/components/SignInForm/types'; import { useForm } from 'react-hook-form'; -import * as classnames from 'classnames'; +import classnames from 'classnames'; import { FormErrorAlert } from '@app/pages/SignIn/components/SignInForm/ErrorAlert'; interface Props { diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx index 8ff8a54a7c..a0f22ceeb5 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx @@ -1,5 +1,5 @@ -import * as classnames from 'classnames'; -import * as dayjs from 'dayjs'; +import classnames from 'classnames'; +import dayjs from 'dayjs'; import { ChartProps } from '@app/pages/Workflows/components/molecules/common/types'; import { MetricListChart } from '@app/pages/Workflows/components/molecules/MetricListChart'; import { useMemo } from 'react'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts index 4eb6fa56e4..d8898666d8 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowsQueryParams/useWorkflowsQueryParams.ts @@ -1,7 +1,7 @@ import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; import { useState } from 'react'; import { useQueryParams, NumberParam, withDefault, ArrayParam } from 'use-query-params'; -import * as dayjs from 'dayjs'; +import dayjs from 'dayjs'; export function useWorkflowsQueryParams() { const [dateNow] = useState(() => dayjs().subtract(1, 'hour').toDate()); diff --git a/apps/workflows-dashboard/vite.config.ts b/apps/workflows-dashboard/vite.config.ts index 47bec266fb..acbad75473 100644 --- a/apps/workflows-dashboard/vite.config.ts +++ b/apps/workflows-dashboard/vite.config.ts @@ -10,6 +10,12 @@ export default defineConfig({ server: { port: 5200, }, + preview: { + port: 5200, + }, + build: { + sourcemap: true, + }, plugins: [ react(), tailwindcss(), From fa979a77035fc761a2c31f0a4b98d24fd70ba33f Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 6 Jul 2023 14:34:45 +0300 Subject: [PATCH 093/123] fix(webhook-handler): null check on document changed (#648) --- .../events/document-changed-webhook-caller.ts | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/services/workflows-service/src/events/document-changed-webhook-caller.ts b/services/workflows-service/src/events/document-changed-webhook-caller.ts index 58d46fa08a..eac849182d 100644 --- a/services/workflows-service/src/events/document-changed-webhook-caller.ts +++ b/services/workflows-service/src/events/document-changed-webhook-caller.ts @@ -41,17 +41,29 @@ export class DocumentChangedWebhookCaller { const oldDocuments = data.oldRuntimeData.context['documents'] || []; const newDocuments = data.updatedRuntimeData.context?.['documents'] || []; + this.logger.log('handleWorkflowEvent:: ', { + state: data.state, + entityId: data.entityId, + correlationId: data.correlationId, + id: data.updatedRuntimeData.id, + }); + const newDocumentsByIdentifier = newDocuments.reduce((accumulator: any, doc: any) => { const id = getDocumentId(doc, false); + this.logger.log('handleWorkflowEvent::newDocumentsByIdentifier::getDocumentId:: ', { + idDoc: id, + }); accumulator[id] = doc; return accumulator; }, {}); const anyDocumentStatusChanged = oldDocuments.some((oldDocument: any) => { const id = getDocumentId(oldDocument, false); - + this.logger.log('handleWorkflowEvent::anyDocumentStatusChanged::getDocumentId:: ', { + idDoc: id, + }); return ( - (!oldDocument.decision && newDocumentsByIdentifier[id].decision) || + (!oldDocument.decision && newDocumentsByIdentifier[id]?.decision) || (oldDocument.decision && oldDocument.decision.status && id in newDocumentsByIdentifier && @@ -60,6 +72,9 @@ export class DocumentChangedWebhookCaller { }); if (!anyDocumentStatusChanged) { + this.logger.log('handleWorkflowEvent:: Skipped, ', { + anyDocumentStatusChanged, + }); return; } @@ -106,6 +121,14 @@ export class DocumentChangedWebhookCaller { data: res.data, }); } catch (error: Error | any) { + this.logger.log('Webhook error data:: ', { + state: data.state, + entityId: data.entityId, + correlationId: data.correlationId, + id: data.updatedRuntimeData.id, + newDocumentsByIdentifier, + oldDocuments, + }); this.logger.error('Failed to send webhook', { id, message: error?.message, error }); alertWebhookFailure(error); } From b610b1f4dc7e2a8d5a5881605a2e7fe0ce86ca64 Mon Sep 17 00:00:00 2001 From: pratapalakshmi <137189067+pratapalakshmi@users.noreply.github.com> Date: Tue, 11 Jul 2023 03:44:13 +0530 Subject: [PATCH 094/123] add: github actions to build & push docker images (#664) --- .github/workflows/publish-images-dev.yml | 76 ------ .github/workflows/publish-images-staging.yml | 63 ----- .github/workflows/publish-images-test.yml | 63 ----- .github/workflows/publish-images.yml | 82 ------ .../workflows/publish-service-app-images.yml | 252 ++++++++++++++++++ 5 files changed, 252 insertions(+), 284 deletions(-) delete mode 100644 .github/workflows/publish-images-dev.yml delete mode 100644 .github/workflows/publish-images-staging.yml delete mode 100644 .github/workflows/publish-images-test.yml delete mode 100644 .github/workflows/publish-images.yml create mode 100644 .github/workflows/publish-service-app-images.yml diff --git a/.github/workflows/publish-images-dev.yml b/.github/workflows/publish-images-dev.yml deleted file mode 100644 index a8ef915056..0000000000 --- a/.github/workflows/publish-images-dev.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Publish workflow-service image - dev - -on: - push: - branches: - - dev - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/workflows-service - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Print the version - run: echo "The version was ${{ steps.get_version.outputs.version }}" - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=raw,value=dev - type=raw,value=commit-${{ github.sha }}-dev - type=raw,value=${{ steps.get_version.outputs.version }}-dev - - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: services/workflows-service - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Install pnpm - uses: pnpm/action-setup@v2 - id: pnpm-install - with: - version: 8 - run_install: true - - - name: Build - run: pnpm build - - - name: Upload sourcemaps - run: pnpm upload-sourcemaps - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_WORKFLOWS_SERVICE_PROJECT }} - SENTRY_RELEASE: ${{ steps.get_version.outputs.version }}-dev-${{ github.sha }} diff --git a/.github/workflows/publish-images-staging.yml b/.github/workflows/publish-images-staging.yml deleted file mode 100644 index a42b30cea1..0000000000 --- a/.github/workflows/publish-images-staging.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Publish workflow-service image - staging - -on: - push: - branches: - - staging - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/workflows-service - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - name: Print the version - run: echo "The version was ${{ steps.get_version.outputs.version }}" - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=raw,value=staging - type=raw,value=commit-${{ github.sha }}-staging - type=raw,value=${{ steps.get_version.outputs.version }}-staging - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: services/workflows-service - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Install pnpm - uses: pnpm/action-setup@v2 - id: pnpm-install - with: - version: 8 - run_install: true diff --git a/.github/workflows/publish-images-test.yml b/.github/workflows/publish-images-test.yml deleted file mode 100644 index 624a718a63..0000000000 --- a/.github/workflows/publish-images-test.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Publish workflow-service image - test - -on: - push: - branches: - - test - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/workflows-service - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - name: Print the version - run: echo "The version was ${{ steps.get_version.outputs.version }}" - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=raw,value=test - type=raw,value=commit-${{ github.sha }}-test - type=raw,value=${{ steps.get_version.outputs.version }}-test - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: services/workflows-service - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Install pnpm - uses: pnpm/action-setup@v2 - id: pnpm-install - with: - version: 8 - run_install: true diff --git a/.github/workflows/publish-images.yml b/.github/workflows/publish-images.yml deleted file mode 100644 index a6610e0ebe..0000000000 --- a/.github/workflows/publish-images.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: Publish workflow-service image - -on: - release: - types: [published] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/workflows-service - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Check if the tag name contains "workflows-service" - run: | - TAG_NAME=${{ github.event.release.tag_name }} - if [[ "$TAG_NAME" != *"workflows-service"* ]]; then - echo "Release tag does not contain 'workflows-service'. Skipping this workflow." - exit 1 - fi - continue-on-error: false - - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Print the version - run: echo "The version was ${{ steps.get_version.outputs.version }}" - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=semver,pattern={{version}},value=v${{ steps.get_version.outputs.version }} - - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: services/workflows-service - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Install pnpm - uses: pnpm/action-setup@v2 - id: pnpm-install - with: - version: 8 - run_install: true - - - name: Build - run: pnpm build - - - name: Upload sourcemaps - run: pnpm upload-sourcemaps - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_WORKFLOWS_SERVICE_PROJECT }} - SENTRY_RELEASE: ${{ steps.get_version.outputs.version }}-${{ github.sha }} diff --git a/.github/workflows/publish-service-app-images.yml b/.github/workflows/publish-service-app-images.yml new file mode 100644 index 0000000000..c4153eda39 --- /dev/null +++ b/.github/workflows/publish-service-app-images.yml @@ -0,0 +1,252 @@ +name: Build Docker images and push to Dockerhub + +on: + workflow_dispatch: + + push: + branches: [main, dev] + paths: + - "apps/**" + - "services/**" + - "examples/**" + +jobs: + build-workflow-services: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Login to Container registry + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Push workflow-services dev image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/dev' + uses: depot/build-push-action@v1 + with: + context: services/workflows-service + push: true + target: dev + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/workflow-service:${{ github.sha }} + ${{ env.REGISTRY }}/workflow-service:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/workflow-service:dev + + - name: Push workflow-services prod image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/main' + uses: depot/build-push-action@v1 + with: + context: services/workflows-service + push: true + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/workflow-service:${{ github.sha }} + ${{ env.REGISTRY }}/workflow-service:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/workflow-service:latest + ${{ env.REGISTRY }}/workflow-service:QA + + build-websocket-services: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/websocket-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Login to Container registry + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Push websocket-services dev image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/dev' + uses: depot/build-push-action@v1 + with: + context: services/websocket-service + push: true + target: dev + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/websocket-service:${{ github.sha }} + ${{ env.REGISTRY }}/websocket-service:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/websocket-service:dev + + - name: Push websocket-services prod image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/main' + uses: depot/build-push-action@v1 + with: + context: services/websocket-service + push: true + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/websocket-service:${{ github.sha }} + ${{ env.REGISTRY }}/websocket-service:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/websocket-service:latest + ${{ env.REGISTRY }}/websocket-service:QA + + build-headless-examples: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' examples/headless-example/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Login to Container registry + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Push websocket-services dev image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/dev' + uses: depot/build-push-action@v1 + with: + context: examples/headless-example + push: true + target: dev + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/headless-example:${{ github.sha }} + ${{ env.REGISTRY }}/headless-example:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/headless-example:dev + + - name: Push websocket-services prod image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/main' + uses: depot/build-push-action@v1 + with: + context: examples/headless-example + push: true + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/headless-example:${{ github.sha }} + ${{ env.REGISTRY }}/headless-example:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/headless-example:latest + ${{ env.REGISTRY }}/headless-example:QA + + build-backoffice: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' examples/backoffice/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Login to Container registry + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Push websocket-services dev image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/dev' + uses: depot/build-push-action@v1 + with: + context: apps/backoffice-v2 + push: true + target: dev + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/backoffice:${{ github.sha }} + ${{ env.REGISTRY }}/backoffice:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/backoffice:dev + + - name: Push websocket-services prod image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/main' + uses: depot/build-push-action@v1 + with: + context: apps/backoffice-v2 + push: true + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/backoffice:${{ github.sha }} + ${{ env.REGISTRY }}/backoffice:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/backoffice:latest + ${{ env.REGISTRY }}/backoffice:QA + + build-workflows-dashboard: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' examples/backoffice/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Login to Container registry + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Push websocket-services dev image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/dev' + uses: depot/build-push-action@v1 + with: + context: apps/workflows-dashboard + push: true + target: dev + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/workflows-dashboard:${{ github.sha }} + ${{ env.REGISTRY }}/workflows-dashboard:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/workflows-dashboard:dev + + - name: Push websocket-services prod image to Github repo with commit tag + if: success() && github.ref == 'refs/heads/main' + uses: depot/build-push-action@v1 + with: + context: apps/workflows-dashboard + push: true + platforms: linux/arm64,linux/amd64 + tags: | + ${{ env.REGISTRY }}/workflows-dashboard:${{ github.sha }} + ${{ env.REGISTRY }}/workflows-dashboard:${{ steps.get_version.outputs.version }}" + ${{ env.REGISTRY }}/workflows-dashboard:latest + {{ env.REGISTRY }}/workflows-dashboard:QA From 0494828175c7e0154910f75c54b6ed33836c29dd Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 11 Jul 2023 01:19:32 +0300 Subject: [PATCH 095/123] Revert "add: github actions to build & push docker images (#664)" This reverts commit b610b1f4dc7e2a8d5a5881605a2e7fe0ce86ca64. --- .github/workflows/publish-images-dev.yml | 76 ++++++ .github/workflows/publish-images-staging.yml | 63 +++++ .github/workflows/publish-images-test.yml | 63 +++++ .github/workflows/publish-images.yml | 82 ++++++ .../workflows/publish-service-app-images.yml | 252 ------------------ 5 files changed, 284 insertions(+), 252 deletions(-) create mode 100644 .github/workflows/publish-images-dev.yml create mode 100644 .github/workflows/publish-images-staging.yml create mode 100644 .github/workflows/publish-images-test.yml create mode 100644 .github/workflows/publish-images.yml delete mode 100644 .github/workflows/publish-service-app-images.yml diff --git a/.github/workflows/publish-images-dev.yml b/.github/workflows/publish-images-dev.yml new file mode 100644 index 0000000000..a8ef915056 --- /dev/null +++ b/.github/workflows/publish-images-dev.yml @@ -0,0 +1,76 @@ +name: Publish workflow-service image - dev + +on: + push: + branches: + - dev + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=dev + type=raw,value=commit-${{ github.sha }}-dev + type=raw,value=${{ steps.get_version.outputs.version }}-dev + + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true + + - name: Build + run: pnpm build + + - name: Upload sourcemaps + run: pnpm upload-sourcemaps + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_WORKFLOWS_SERVICE_PROJECT }} + SENTRY_RELEASE: ${{ steps.get_version.outputs.version }}-dev-${{ github.sha }} diff --git a/.github/workflows/publish-images-staging.yml b/.github/workflows/publish-images-staging.yml new file mode 100644 index 0000000000..a42b30cea1 --- /dev/null +++ b/.github/workflows/publish-images-staging.yml @@ -0,0 +1,63 @@ +name: Publish workflow-service image - staging + +on: + push: + branches: + - staging + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=staging + type=raw,value=commit-${{ github.sha }}-staging + type=raw,value=${{ steps.get_version.outputs.version }}-staging + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true diff --git a/.github/workflows/publish-images-test.yml b/.github/workflows/publish-images-test.yml new file mode 100644 index 0000000000..624a718a63 --- /dev/null +++ b/.github/workflows/publish-images-test.yml @@ -0,0 +1,63 @@ +name: Publish workflow-service image - test + +on: + push: + branches: + - test + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=test + type=raw,value=commit-${{ github.sha }}-test + type=raw,value=${{ steps.get_version.outputs.version }}-test + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true diff --git a/.github/workflows/publish-images.yml b/.github/workflows/publish-images.yml new file mode 100644 index 0000000000..a6610e0ebe --- /dev/null +++ b/.github/workflows/publish-images.yml @@ -0,0 +1,82 @@ +name: Publish workflow-service image + +on: + release: + types: [published] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/workflows-service + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install jq + run: sudo apt-get install jq + + - name: Check if the tag name contains "workflows-service" + run: | + TAG_NAME=${{ github.event.release.tag_name }} + if [[ "$TAG_NAME" != *"workflows-service"* ]]; then + echo "Release tag does not contain 'workflows-service'. Skipping this workflow." + exit 1 + fi + continue-on-error: false + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get package version from package.json + id: get_version + run: | + PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) + echo "::set-output name=version::$PACKAGE_VERSION" + + - name: Print the version + run: echo "The version was ${{ steps.get_version.outputs.version }}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=semver,pattern={{version}},value=v${{ steps.get_version.outputs.version }} + + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: services/workflows-service + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: true + + - name: Build + run: pnpm build + + - name: Upload sourcemaps + run: pnpm upload-sourcemaps + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_WORKFLOWS_SERVICE_PROJECT }} + SENTRY_RELEASE: ${{ steps.get_version.outputs.version }}-${{ github.sha }} diff --git a/.github/workflows/publish-service-app-images.yml b/.github/workflows/publish-service-app-images.yml deleted file mode 100644 index c4153eda39..0000000000 --- a/.github/workflows/publish-service-app-images.yml +++ /dev/null @@ -1,252 +0,0 @@ -name: Build Docker images and push to Dockerhub - -on: - workflow_dispatch: - - push: - branches: [main, dev] - paths: - - "apps/**" - - "services/**" - - "examples/**" - -jobs: - build-workflow-services: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/workflows-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Login to Container registry - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Push workflow-services dev image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/dev' - uses: depot/build-push-action@v1 - with: - context: services/workflows-service - push: true - target: dev - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/workflow-service:${{ github.sha }} - ${{ env.REGISTRY }}/workflow-service:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/workflow-service:dev - - - name: Push workflow-services prod image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/main' - uses: depot/build-push-action@v1 - with: - context: services/workflows-service - push: true - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/workflow-service:${{ github.sha }} - ${{ env.REGISTRY }}/workflow-service:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/workflow-service:latest - ${{ env.REGISTRY }}/workflow-service:QA - - build-websocket-services: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' services/websocket-service/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Login to Container registry - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Push websocket-services dev image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/dev' - uses: depot/build-push-action@v1 - with: - context: services/websocket-service - push: true - target: dev - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/websocket-service:${{ github.sha }} - ${{ env.REGISTRY }}/websocket-service:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/websocket-service:dev - - - name: Push websocket-services prod image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/main' - uses: depot/build-push-action@v1 - with: - context: services/websocket-service - push: true - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/websocket-service:${{ github.sha }} - ${{ env.REGISTRY }}/websocket-service:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/websocket-service:latest - ${{ env.REGISTRY }}/websocket-service:QA - - build-headless-examples: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' examples/headless-example/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Login to Container registry - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Push websocket-services dev image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/dev' - uses: depot/build-push-action@v1 - with: - context: examples/headless-example - push: true - target: dev - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/headless-example:${{ github.sha }} - ${{ env.REGISTRY }}/headless-example:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/headless-example:dev - - - name: Push websocket-services prod image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/main' - uses: depot/build-push-action@v1 - with: - context: examples/headless-example - push: true - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/headless-example:${{ github.sha }} - ${{ env.REGISTRY }}/headless-example:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/headless-example:latest - ${{ env.REGISTRY }}/headless-example:QA - - build-backoffice: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' examples/backoffice/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Login to Container registry - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Push websocket-services dev image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/dev' - uses: depot/build-push-action@v1 - with: - context: apps/backoffice-v2 - push: true - target: dev - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/backoffice:${{ github.sha }} - ${{ env.REGISTRY }}/backoffice:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/backoffice:dev - - - name: Push websocket-services prod image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/main' - uses: depot/build-push-action@v1 - with: - context: apps/backoffice-v2 - push: true - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/backoffice:${{ github.sha }} - ${{ env.REGISTRY }}/backoffice:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/backoffice:latest - ${{ env.REGISTRY }}/backoffice:QA - - build-workflows-dashboard: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Install jq - run: sudo apt-get install jq - - - name: Get package version from package.json - id: get_version - run: | - PACKAGE_VERSION=$(jq -r '.version' examples/backoffice/package.json) - echo "::set-output name=version::$PACKAGE_VERSION" - - - name: Login to Container registry - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Push websocket-services dev image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/dev' - uses: depot/build-push-action@v1 - with: - context: apps/workflows-dashboard - push: true - target: dev - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/workflows-dashboard:${{ github.sha }} - ${{ env.REGISTRY }}/workflows-dashboard:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/workflows-dashboard:dev - - - name: Push websocket-services prod image to Github repo with commit tag - if: success() && github.ref == 'refs/heads/main' - uses: depot/build-push-action@v1 - with: - context: apps/workflows-dashboard - push: true - platforms: linux/arm64,linux/amd64 - tags: | - ${{ env.REGISTRY }}/workflows-dashboard:${{ github.sha }} - ${{ env.REGISTRY }}/workflows-dashboard:${{ steps.get_version.outputs.version }}" - ${{ env.REGISTRY }}/workflows-dashboard:latest - {{ env.REGISTRY }}/workflows-dashboard:QA From 7362047f2300dda4a8a31e98de8861b4f3fdd3dc Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Tue, 11 Jul 2023 01:22:47 +0300 Subject: [PATCH 096/123] feat(schema): schema changes for kyb (#630) * feat(schema): schema changes for kyb * PR comments --- services/workflows-service/prisma/schema.prisma | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index 6c4d0a0cb0..d0596c3abb 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -44,10 +44,11 @@ enum ApprovalState { model EndUser { id String @id @default(cuid()) + isContactPerson Boolean @default(false) correlationId String? @unique @db.VarChar - endUserType String? + endUserType String? @default("individual") // Add userType: can be 'EndUser', 'CompanyContact', 'Stakeholder' approvalState ApprovalState @default(NEW) stateReason String? @db.VarChar @@ -97,7 +98,7 @@ model Business { country String? countryOfIncorporation String? // Country where the business entity is incorporated dateOfIncorporation DateTime? // Date when the business entity was incorporated - address String? // Registered address of the business entity + address Json? // Registered address of the business entity phoneNumber String? // Contact phone number of the business entity email String? // Contact email of the business entity website String? // Official website of the business entity @@ -110,6 +111,7 @@ model Business { documents Json? // Collection of documents required for the KYB process, e.g., registration documents, financial statements avatarUrl String? additionalInfo Json? + bankInformation Json? approvalState ApprovalState @default(NEW) // Current status of the KYB process for the business entity workflowRuntimeData WorkflowRuntimeData[] From 9f4c4a1f96f82b3501f1ade3c12b65cbb39f23c0 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Mon, 10 Jul 2023 22:23:57 +0000 Subject: [PATCH 097/123] refactor: metric moved to different module & renamed endpoints & fixed user stats metric bugs (#643) * refactor: metric moved to different module & renamed endpoints & fixed user stats metric bugs * feat: reworked sql queries to & updated endpoints to work with single or multiple users --------- Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../domains/user/api/user-stats/query-keys.ts | 8 +- .../user/api/user-stats/user-stats.api.ts | 14 +- .../user/api/user-stats/user-stats.types.ts | 8 +- .../user/api/users-stats/query-keys.ts | 18 +- .../user/api/users-stats/users-stats.api.ts | 18 +- .../user/api/users-stats/users-stats.types.ts | 8 +- .../domains/workflows/api/users/users.api.ts | 2 +- .../workflows/api/users/users.types.ts | 2 +- .../api/workflow-metrics/query-keys.ts | 10 +- .../workflow-metrics/workflow-metrics.api.ts | 19 +- .../workflow-metrics.types.ts | 10 +- .../DailyResolvedCasesChart.tsx | 5 +- .../UsersResolvingStatsList/ListItem.tsx | 2 +- .../OverviewTabContent/OverviewTabContent.tsx | 6 +- .../useCaseResolvingStatsQuery.ts | 9 +- .../index.ts | 1 + .../useUserDailyCaseResolvingStatsQuery.ts} | 4 +- .../useUsersCaseResolvingStatsQuery/index.ts | 1 - .../WorkflowMetrics/WorkflowMetrics.tsx | 37 ---- .../organisms/WorkflowMetrics/helpers.ts | 22 --- .../organisms/WorkflowMetrics/index.ts | 1 - .../ActivePerWorkflow/ActivePerWorkflow.tsx | 2 +- .../useActivePerWorkflowStatsQuery.ts | 1 + .../AgentCasesStats/AgentCasesStats.tsx | 4 +- .../hooks/useAgentCasesStatsQuery/index.ts | 1 - .../useAgentCasesStatsQuery.ts | 15 -- .../useUsersAssignedCasesStatsQuery/index.ts | 1 + .../useUsersAssignedCasesStatsQuery.ts | 18 ++ .../useActiveUsersQuery.ts | 5 +- .../useCasesPerStatusQuery.ts | 5 +- services/workflows-service/src/app.module.ts | 5 +- .../common/dto/date-query-params.dto.ts} | 5 +- .../metrics/common/types/base-query.params.ts | 3 + .../src/metrics/dto/get-active-users.dto.ts | 3 + .../dto/get-user-cases-resolved-daily.dto.ts | 7 + ...-user-workflow-processing-statistic.dto.ts | 14 ++ .../get-users-assigned-cases-statistic.dto.ts | 3 + .../get-users-resolved-cases-statistic.dto.ts | 3 + .../get-workflow-runtimes-status-count.dto.ts | 3 + .../src/metrics/metrics.controller.ts | 88 +++++++++ .../src/metrics/metrics.module.ts | 11 ++ .../metrics/repository/metrics.repository.ts | 179 ++++++++++++++++++ .../repository/models/active-user.model.ts} | 4 +- .../repository/models/approval-rate.model.ts | 8 + .../models/average-assignment-time.model.ts | 6 + .../models/average-resolution-time.model.ts | 8 + .../models/cases-resolved-daily.model.ts | 11 ++ .../user-assigned-cases-statistic.model.ts | 20 ++ .../models/user-average-review-time.model.ts | 8 + .../user-resolved-cases-statistic.model.ts | 20 ++ .../workflow-runtime-statistic.model.ts | 24 +++ ...orkflow-runtime-status-case-count.model.ts | 16 ++ .../sql/aggregate-approval-rate.sql.ts | 32 ++++ .../aggregate-average-assignment-time.sql.ts | 18 ++ .../aggregate-average-resolution-time.sql.ts | 17 ++ .../sql/aggregate-average-review-time.sql.ts | 17 ++ .../sql/aggregate-daily-cases-resolved.sql.ts | 14 ++ ...gate-users-assigned-cases-statistic.sql.ts | 21 ++ ...gate-users-resolved-cases-statistic.sql.ts | 21 ++ ...ggregate-workflow-runtime-statistic.sql.ts | 36 ++++ ...-workflow-runtime-status-case-count.sql.ts | 31 +++ .../repository/sql/select-active-users.sql.ts | 6 + .../types/aggregate-approval-rate.ts | 3 + .../aggregate-average-assignment-time.ts | 3 + .../aggregate-average-resolution-time.ts | 3 + .../types/aggregate-average-review-time.ts | 3 + .../types/aggregate-cases-resolved-daily.ts | 4 + ...aggregate-user-resolved-cases-statistic.ts | 7 + .../types/aggregate-users-with-cases-count.ts | 6 + .../aggregate-workflow-runtime-statistic.ts | 7 + ...gate-workflow-runtime-status-case-count.ts | 5 + ...d-users-assigned-cases-statistic.params.ts | 3 + ...d-users-resolved-cases-statistic.params.ts | 3 + .../get-runtime-status-case-count.params.ts | 3 + .../types/get-user-approval-rate.params.ts | 5 + ...get-user-average-assignment-time.params.ts | 5 + ...get-user-average-resolution-time.params.ts | 5 + .../get-user-average-review-time.params.ts | 5 + .../types/list-active-users.params.ts | 3 + .../list-user-cases-resolved-daily.params.ts | 5 + ...t-users-resolved-cases-statistic.params.ts | 3 + .../repository/types/select-active-user.ts | 6 + .../src/metrics/service/metrics.service.ts | 89 +++++++++ ...ser-workflow-processing-statistic.model.ts | 18 ++ ...er-workflow-processing-statistic.params.ts | 9 + .../workflows-service/src/user/types/index.ts | 3 - .../src/user/user.controlller.external.ts | 41 ---- .../workflows-service/src/user/user.module.ts | 3 +- .../src/user/user.service.ts | 33 ---- ...t-workflow-runtime-user-stats-input.dto.ts | 11 -- ...workflows-runtime-agent-cases-input.dto.ts | 11 -- .../src/workflow/types/index.ts | 30 --- .../src/workflow/workflow-metric.service.ts | 135 ------------- ...workflow-runtime-cases-per-status.model.ts | 13 -- .../workflow/workflow-runtime-stats-model.ts | 29 --- .../workflow/workflow.controller.external.ts | 86 +-------- .../workflow.controller.external.unit.test.ts | 6 - .../src/workflow/workflow.module.ts | 2 - .../src/workflow/workflow.service.ts | 101 ---------- 99 files changed, 966 insertions(+), 660 deletions(-) create mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/index.ts rename apps/workflows-dashboard/src/pages/Overview/hooks/{useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts => useUserDailyCaseResolvingStatsQuery/useUserDailyCaseResolvingStatsQuery.ts} (73%) delete mode 100644 apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts delete mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/index.ts create mode 100644 apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts rename services/workflows-service/src/{workflow/dtos/get-case-resolving-metrics-input.dto.ts => metrics/common/dto/date-query-params.dto.ts} (69%) create mode 100644 services/workflows-service/src/metrics/common/types/base-query.params.ts create mode 100644 services/workflows-service/src/metrics/dto/get-active-users.dto.ts create mode 100644 services/workflows-service/src/metrics/dto/get-user-cases-resolved-daily.dto.ts create mode 100644 services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts create mode 100644 services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts create mode 100644 services/workflows-service/src/metrics/dto/get-users-resolved-cases-statistic.dto.ts create mode 100644 services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts create mode 100644 services/workflows-service/src/metrics/metrics.controller.ts create mode 100644 services/workflows-service/src/metrics/metrics.module.ts create mode 100644 services/workflows-service/src/metrics/repository/metrics.repository.ts rename services/workflows-service/src/{workflow/workflow-runtime-agent-cases.model.ts => metrics/repository/models/active-user.model.ts} (72%) create mode 100644 services/workflows-service/src/metrics/repository/models/approval-rate.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/cases-resolved-daily.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/user-assigned-cases-statistic.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/user-resolved-cases-statistic.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/workflow-runtime-statistic.model.ts create mode 100644 services/workflows-service/src/metrics/repository/models/workflow-runtime-status-case-count.model.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-daily-cases-resolved.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-users-resolved-cases-statistic.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-statistic.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-cases-resolved-daily.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-user-resolved-cases-statistic.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-users-with-cases-count.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-statistic.ts create mode 100644 services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-status-case-count.ts create mode 100644 services/workflows-service/src/metrics/repository/types/find-users-assigned-cases-statistic.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/find-users-resolved-cases-statistic.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/get-runtime-status-case-count.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/list-active-users.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/list-user-cases-resolved-daily.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/list-users-resolved-cases-statistic.params.ts create mode 100644 services/workflows-service/src/metrics/repository/types/select-active-user.ts create mode 100644 services/workflows-service/src/metrics/service/metrics.service.ts create mode 100644 services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts create mode 100644 services/workflows-service/src/metrics/service/types/get-user-workflow-processing-statistic.params.ts delete mode 100644 services/workflows-service/src/user/types/index.ts delete mode 100644 services/workflows-service/src/user/user.controlller.external.ts delete mode 100644 services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts delete mode 100644 services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts delete mode 100644 services/workflows-service/src/workflow/workflow-metric.service.ts delete mode 100644 services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts delete mode 100644 services/workflows-service/src/workflow/workflow-runtime-stats-model.ts diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts index d3d127fadd..50d6482457 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/query-keys.ts @@ -1,9 +1,9 @@ import { - fetchUserCaseResolvingStats, + fetchUserDailyCasesResolvedStats, fetchUserStats, } from '@app/domains/user/api/user-stats/user-stats.api'; import { - GetUserCaseResolvingStatsDto, + GetUserDailyCasesResolvedStatsDto, GetUserStatsDto, } from '@app/domains/user/api/user-stats/user-stats.types'; import { createQueryKeys } from '@lukemorales/query-key-factory'; @@ -13,8 +13,8 @@ export const userStatsQueryKeys = createQueryKeys('user-stats', { queryKey: [query], queryFn: () => fetchUserStats(query), }), - userCaseResolvingStats: (query: GetUserCaseResolvingStatsDto) => ({ + userDailyCasesResolvedStats: (query: GetUserDailyCasesResolvedStatsDto) => ({ queryKey: [query], - queryFn: () => fetchUserCaseResolvingStats(query), + queryFn: () => fetchUserDailyCasesResolvedStats(query), }), }); diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts index fe910aaf5d..3da29101e1 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts @@ -1,5 +1,5 @@ import { - GetUserCaseResolvingStatsDto, + GetUserDailyCasesResolvedStatsDto, GetUserStatsDto, IResolvedCasesDailyMetric, IUserStats, @@ -7,21 +7,19 @@ import { import { request } from '@app/lib/request'; export const fetchUserStats = async (query: GetUserStatsDto): Promise<IUserStats> => { - const result = await request.get<IUserStats>('/external/workflows/metrics/user-stats', { + const result = await request.get<IUserStats>(`/metrics/users/workflow-processing-statistic`, { params: query, }); return result.data; }; -export const fetchUserCaseResolvingStats = async ( - query: GetUserCaseResolvingStatsDto, +export const fetchUserDailyCasesResolvedStats = async ( + query: GetUserDailyCasesResolvedStatsDto, ): Promise<IResolvedCasesDailyMetric[]> => { const result = await request.get<IResolvedCasesDailyMetric[]>( - '/external/workflows/metrics/case-resolving', - { - params: query, - }, + `/metrics/users/cases-resolved-daily`, + { params: query }, ); return result.data; diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts index 94db9ef320..429905520b 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts @@ -1,6 +1,6 @@ export interface IResolvedCasesDailyMetric { date: string; - casesPerDay: number; + count: number; } export interface IUserStats { @@ -11,9 +11,9 @@ export interface IUserStats { } export interface GetUserStatsDto { - fromDate?: number; + fromDate: number; } -export interface GetUserCaseResolvingStatsDto { - fromDate?: number; +export interface GetUserDailyCasesResolvedStatsDto { + fromDate: number; } diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts index a03ad2ff50..224fd662ab 100644 --- a/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/query-keys.ts @@ -1,10 +1,20 @@ -import { fetchUsersCaseResolvingStats } from '@app/domains/user/api/users-stats/users-stats.api'; -import { GetUsersCaseResolvingStats } from '@app/domains/user/api/users-stats/users-stats.types'; +import { + fetchUsersAssignedCasesStats, + fetchUsersResolvedCasesStats, +} from '@app/domains/user/api/users-stats/users-stats.api'; +import { + GetUsersAssignedCasesStatsDto, + GetUsersCaseResolvingStats, +} from '@app/domains/user/api/users-stats/users-stats.types'; import { createQueryKeys } from '@lukemorales/query-key-factory'; export const usersStatsQueryKeys = createQueryKeys('users-stats', { - caseResolvingStatsList: (query: GetUsersCaseResolvingStats) => ({ + casesResolvedStats: (query: GetUsersCaseResolvingStats) => ({ queryKey: [query], - queryFn: () => fetchUsersCaseResolvingStats(query), + queryFn: () => fetchUsersResolvedCasesStats(query), + }), + casesAssignedStats: (query: GetUsersAssignedCasesStatsDto) => ({ + queryKey: [query], + queryFn: () => fetchUsersAssignedCasesStats(query), }), }); diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts index 884f25fe48..4f75c22fd3 100644 --- a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.api.ts @@ -1,16 +1,30 @@ import { + GetUsersAssignedCasesStatsDto, GetUsersCaseResolvingStats, IUserCaseResolvingStats, } from '@app/domains/user/api/users-stats/users-stats.types'; import { request } from '@app/lib/request'; -export const fetchUsersCaseResolvingStats = async ( +export const fetchUsersResolvedCasesStats = async ( query: GetUsersCaseResolvingStats, ): Promise<IUserCaseResolvingStats[]> => { const result = await request.get<IUserCaseResolvingStats[]>( - '/external/users/metrics/case-resolving-stats', + '/metrics/users/users-resolved-cases-statistic', { params: query }, ); return result.data; }; + +export const fetchUsersAssignedCasesStats = async ( + query: GetUsersAssignedCasesStatsDto, +): Promise<IUserCaseResolvingStats[]> => { + const result = await request.get<IUserCaseResolvingStats[]>( + `/metrics/users/users-assigned-cases-statistic`, + { + params: query, + }, + ); + + return result.data; +}; diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts index 7090707fec..2d511ac030 100644 --- a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts @@ -2,10 +2,14 @@ export interface IUserCaseResolvingStats { id: string; firstName: string; lastName: string; - cases: number; + casesCount: number; email: string; } export interface GetUsersCaseResolvingStats { - fromDate?: number; + fromDate: number; +} + +export interface GetUsersAssignedCasesStatsDto { + fromDate: number; } diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts index 43d75783f1..407594de3a 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts @@ -3,7 +3,7 @@ import { GetActiveUsersDto } from '@app/domains/workflows/api/users/users.types' import { request } from '@app/lib/request'; export const fetchActiveUsers = async (query: GetActiveUsersDto): Promise<IUser[]> => { - const result = await request.get<IUser[]>('/external/users/active-users', { params: query }); + const result = await request.get<IUser[]>('/metrics/users/active-users', { params: query }); return result.data; }; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts index 4e2aa6b822..39267726dc 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts @@ -7,5 +7,5 @@ export interface IUser { } export interface GetActiveUsersDto { - fromDate?: number; + fromDate: number; } diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts index b4ed460b5c..a801e75a71 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/query-keys.ts @@ -1,12 +1,8 @@ import { fetchCasesPerStatusStats, - fetchWorkflowAgentCasesStats, fetchWorkflowStats, } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.api'; -import { - GetAgentCasesStatsDto, - GetCasesPerStatusDto, -} from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; +import { GetCasesPerStatusDto } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; import { createQueryKeys } from '@lukemorales/query-key-factory'; export const workflowMetricsKeys = createQueryKeys('workflow-metrics', { @@ -14,10 +10,6 @@ export const workflowMetricsKeys = createQueryKeys('workflow-metrics', { queryKey: [{}], queryFn: () => fetchWorkflowStats(), }), - workflowAgentCasesStats: (query: GetAgentCasesStatsDto) => ({ - queryKey: [query], - queryFn: () => fetchWorkflowAgentCasesStats(query), - }), workflowCasesPerStatusStats: (query: GetCasesPerStatusDto) => ({ queryKey: [query], queryFn: () => fetchCasesPerStatusStats(query), diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts index 0cfbafbba2..9fbe017282 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.api.ts @@ -1,7 +1,5 @@ import { - GetAgentCasesStatsDto, GetCasesPerStatusDto, - IAgentCasesStats, ICasesPerStatusStats, IWorkflowDefinitionStats, } from '@app/domains/workflows/api/workflow-metrics/workflow-metrics.types'; @@ -9,20 +7,7 @@ import { request } from '@app/lib/request'; export const fetchWorkflowStats = async (): Promise<IWorkflowDefinitionStats[]> => { const result = await request.get<IWorkflowDefinitionStats[]>( - '/external/workflows/metrics/workflows-definition-runtime-stats', - ); - - return result.data; -}; - -export const fetchWorkflowAgentCasesStats = async ( - query: GetAgentCasesStatsDto = {}, -): Promise<IAgentCasesStats[]> => { - const result = await request.get<IAgentCasesStats[]>( - '/external/workflows/metrics/workflow-runtime-agent-cases-stats', - { - params: query, - }, + '/metrics/workflows/runtimes-statistic', ); return result.data; @@ -32,7 +17,7 @@ export const fetchCasesPerStatusStats = async ( query: GetCasesPerStatusDto, ): Promise<ICasesPerStatusStats> => { const result = await request.get<ICasesPerStatusStats>( - '/external/workflows/metrics/workflow-runtime-cases-per-status', + '/metrics/workflows/runtimes-status-count', { params: query }, ); diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts index ef5741cec3..4693702c1f 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts @@ -1,10 +1,9 @@ import { IWorkflowStatus } from '@app/domains/workflows/api/workflow/workflow.types'; export type WorkflowStatsPerStatus = Record<IWorkflowStatus, number>; -export interface IWorkflowDefinitionStats { +export interface IWorkflowDefinitionStats extends WorkflowStatsPerStatus { id: string; name: string; - stats: WorkflowStatsPerStatus; } export interface IAgentCasesStats { @@ -16,12 +15,7 @@ export interface IAgentCasesStats { export type ICasesPerStatusStats = Record<IWorkflowStatus, number>; -export interface GetAgentCasesStatsDto { - // UNIX timestamp - fromDate?: number; -} - export interface GetCasesPerStatusDto { // UNIX timestamp - fromData?: number; + fromDate: number; } diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx index 4a668b26b0..e6d3a4a2ab 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/DailyResolvedCasesChart/DailyResolvedCasesChart.tsx @@ -12,7 +12,10 @@ interface Props { export const DailyResolvedCasesChart = ({ data }: Props) => { const chartData = useMemo(() => { - return data.map(item => ({ date: new Date(item.date), value: item.value })); + return data.map(item => ({ + date: new Date(item.date), + value: item.value, + })); }, [data]); return <WeeklyBarChart data={chartData} />; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx index 82d0d6817f..c6e2fc2e82 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/ListItem.tsx @@ -15,7 +15,7 @@ export const ListItem = ({ item }: Props) => { <p className="text-sm font-medium leading-none">{`${item.firstName} ${item.lastName}`}</p> <p className="text-muted-foreground text-sm">{item.email}</p> </div> - <div className="ml-auto font-medium">{item.cases}</div> + <div className="ml-auto font-medium">{item.casesCount}</div> </div> ); }; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx index 8b7e466ffb..549dd08908 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/organisms/OverviewTabContent/OverviewTabContent.tsx @@ -6,7 +6,7 @@ import { import { UsersResolvingStatsList } from '@app/pages/Overview/components/molecules/UsersResolvingStatsList'; import { UserStats } from '@app/pages/Overview/components/molecules/UserStats'; import { useCaseResolvingStatsQuery } from '@app/pages/Overview/hooks/useCaseResolvingStatsQuery'; -import { useUsersCaseResolvingStatsQuery } from '@app/pages/Overview/hooks/useUsersCaseResolvingStatsQuery'; +import { useUserDailyCaseResolvingStatsQuery } from '@app/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery'; import { useUserStatsQuery } from '@app/pages/Overview/hooks/useUserStatsQuery'; import { useMemo } from 'react'; @@ -14,11 +14,11 @@ export const OverviewTabContent = () => { const { isLoading, data } = useUserStatsQuery(); const { data: caseResolvingStatsData } = useCaseResolvingStatsQuery(); const { data: usersCaseResolvingStats, isLoading: isLoadingCaseResolvingStats } = - useUsersCaseResolvingStatsQuery(); + useUserDailyCaseResolvingStatsQuery(); const chartData = useMemo((): DailyResolvedCasesChartData[] => { return caseResolvingStatsData.map(item => ({ - value: item.casesPerDay, + value: item.count, date: new Date(item.date), })); }, [caseResolvingStatsData]); diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts index 995bb98bcc..de1faab4de 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useCaseResolvingStatsQuery/useCaseResolvingStatsQuery.ts @@ -4,10 +4,11 @@ import dayjs from 'dayjs'; import { useMemo } from 'react'; export const useCaseResolvingStatsQuery = () => { - const initialDate = useMemo(() => +dayjs().subtract(6, 'days').startOf('day').toDate(), []); - const { data = [], isLoading } = useQuery( - userStatsQueryKeys.userCaseResolvingStats({ fromDate: initialDate }), - ); + const initialDate = useMemo(() => +dayjs().subtract(6, 'day').startOf('day').toDate(), []); + const { data = [], isLoading } = useQuery({ + ...userStatsQueryKeys.userDailyCasesResolvedStats({ fromDate: initialDate }), + enabled: Boolean(initialDate), + }); return { data, diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/index.ts new file mode 100644 index 0000000000..727588de0c --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useUserDailyCaseResolvingStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/useUserDailyCaseResolvingStatsQuery.ts similarity index 73% rename from apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts rename to apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/useUserDailyCaseResolvingStatsQuery.ts index 47d216e151..ed9610a154 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/useUsersCaseResolvingStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserDailyCaseResolvingStatsQuery/useUserDailyCaseResolvingStatsQuery.ts @@ -3,10 +3,10 @@ import { useQuery } from '@tanstack/react-query'; import dayjs from 'dayjs'; import { useMemo } from 'react'; -export const useUsersCaseResolvingStatsQuery = () => { +export const useUserDailyCaseResolvingStatsQuery = () => { const initialDate = useMemo(() => +dayjs().startOf('day').toDate(), []); const { data = [], isLoading } = useQuery( - usersStatsQueryKeys.caseResolvingStatsList({ fromDate: initialDate }), + usersStatsQueryKeys.casesResolvedStats({ fromDate: initialDate }), ); return { diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts deleted file mode 100644 index aeffa2b585..0000000000 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useUsersCaseResolvingStatsQuery/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useUsersCaseResolvingStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx deleted file mode 100644 index bbfdda3aff..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/WorkflowMetrics.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { MetricCard } from '@app/components/molecules/MetricCard'; - -export const WorkflowMetrics = () => { - // const { data: metric } = useWorkflowsMetric(); - - return ( - <div className="flex w-full gap-4"> - <MetricCard - className="min-h-[260px] w-1/4" - title={<MetricCard.Title title="Active per workflow" />} - content={ - <MetricCard.Content> - {/* <WorkflowChart size={160} innerRadius={60} outerRadius={80} data={pieChartData} /> */} - </MetricCard.Content> - } - /> - <MetricCard - className="w-1/4 min-w-[260px]" - title={<MetricCard.Title title="Logged in agents" />} - content="hello world" - description="(last 1 hour)" - /> - <MetricCard - className="w-1/4 min-w-[260px]" - title={<MetricCard.Title title="Assigned cases per agent" />} - content="hello world" - description="(last 1 hour)" - /> - <MetricCard - className="w-1/4 min-w-[260px]" - title={<MetricCard.Title title="Amount of cases per status" />} - content="hello world" - description="(last 1 hour)" - /> - </div> - ); -}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts deleted file mode 100644 index 25519c7519..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/helpers.ts +++ /dev/null @@ -1,22 +0,0 @@ -// import { IWorkflowStatus } from '@app/domains/workflows/api/workflow'; -// import { WorkflowStatusChartData } from '@app/pages/Workflows/components/organisms/WorkflowStatusChart'; - -// // Assigning level to each status -// function getSortLevelByStatus(status: IWorkflowStatus) { -// if (status === 'completed') return 1; -// if (status === 'active') return 2; -// if (status === 'failed') return 3; - -// return 4; -// } - -// // sorting data by status level -// // lower status levels going first after sort -// export function sortWorkflowChartDataByStatus(data: WorkflowStatusChartData[]) { -// return [...data].sort((dataA, dataB) => { -// const dataASortLevel = getSortLevelByStatus(dataA.status); -// const dataBSortLevel = getSortLevelByStatus(dataB.status); - -// return dataASortLevel - dataBSortLevel; -// }); -// } diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts deleted file mode 100644 index aa00f2a3ed..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/WorkflowMetrics/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './WorkflowMetrics'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx index 1b60f15470..c4c99adbb1 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/ActivePerWorkflow.tsx @@ -14,7 +14,7 @@ export const ActivePerWorkflow = () => { (): ActivePerWorkflowChartData[] => data.map((item, index) => ({ workflowName: item.name, - count: item.stats.active, + count: item.active, fillColor: colorScheme[index] || '#000', })), [data], diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts index aa19251a88..86a51e9a4e 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts @@ -3,6 +3,7 @@ import { useQuery } from '@tanstack/react-query'; export const useActivePerWorkflowStatsQuery = () => { const { data = [], isLoading, isFetching } = useQuery(workflowMetricsKeys.workflowRuntimeStats()); + console.log('data', data); return { data, diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx index 60d73551a8..a8a15f9c6e 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/AgentCasesStats.tsx @@ -2,11 +2,11 @@ import { AgentCasesChart, AgentCasesChartData, } from '@app/pages/Workflows/components/molecules/AgentCasesChart'; -import { useAgentCasesStatsQuery } from '@app/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery'; +import { useUsersAssignedCasesStatsQuery } from '@app/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery'; import { useMemo } from 'react'; export const AgentCasesStats = () => { - const { data = [], isLoading } = useAgentCasesStatsQuery(); + const { data = [], isLoading } = useUsersAssignedCasesStatsQuery(); const chartData = useMemo( (): AgentCasesChartData[] => diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts deleted file mode 100644 index 27ddab96bc..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useAgentCasesStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts deleted file mode 100644 index f1e9af1ce1..0000000000 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useAgentCasesStatsQuery/useAgentCasesStatsQuery.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; -import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; -import { useQuery } from '@tanstack/react-query'; - -export const useAgentCasesStatsQuery = () => { - const { filters } = useWorkflowFilters(); - const { data, isLoading } = useQuery( - workflowMetricsKeys.workflowAgentCasesStats({ fromDate: filters.fromDate }), - ); - - return { - data, - isLoading, - }; -}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/index.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/index.ts new file mode 100644 index 0000000000..fb59376527 --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/index.ts @@ -0,0 +1 @@ +export * from './useUsersAssignedCasesStatsQuery'; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts new file mode 100644 index 0000000000..9be91d95ec --- /dev/null +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts @@ -0,0 +1,18 @@ +import { usersStatsQueryKeys } from '@app/domains/user/api/users-stats'; +import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; +import { useQuery } from '@tanstack/react-query'; + +export const useUsersAssignedCasesStatsQuery = () => { + const { filters } = useWorkflowFilters(); + const { data, isLoading } = useQuery({ + ...usersStatsQueryKeys.casesAssignedStats({ + fromDate: filters.fromDate!, + }), + enabled: Boolean(filters.fromDate), + }); + + return { + data, + isLoading, + }; +}; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts index 8b958c553f..e7522ab146 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts @@ -4,7 +4,10 @@ import { useQuery } from '@tanstack/react-query'; export const useActiveUsersQuery = () => { const { filters } = useWorkflowFilters(); - const { data = [], isLoading } = useQuery(usersKeys.activeUsers({ fromDate: filters.fromDate })); + const { data = [], isLoading } = useQuery({ + ...usersKeys.activeUsers({ fromDate: filters.fromDate! }), + enabled: Boolean(filters.fromDate), + }); return { data, diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts index 2bd0cc4509..7f50c34d6f 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts @@ -6,7 +6,10 @@ import { useQuery } from '@tanstack/react-query'; export const useCasesPerStatusQuery = () => { const { filters } = useWorkflowFilters(); const { data = { active: 0, completed: 0, failed: 0 } as ICasesPerStatusStats, isLoading } = - useQuery(workflowMetricsKeys.workflowCasesPerStatusStats({ fromData: filters.fromDate })); + useQuery({ + ...workflowMetricsKeys.workflowCasesPerStatusStats({ fromDate: filters.fromDate! }), + enabled: Boolean(filters.fromDate), + }); return { data, diff --git a/services/workflows-service/src/app.module.ts b/services/workflows-service/src/app.module.ts index 491ddf17a6..8c0706f53c 100644 --- a/services/workflows-service/src/app.module.ts +++ b/services/workflows-service/src/app.module.ts @@ -25,9 +25,11 @@ import { AppLoggerModule } from '@/common/app-logger/app-logger.module'; import { ClsModule } from 'nestjs-cls'; import { FiltersModule } from '@/common/filters/filters.module'; import { UserSessionAuditMiddleware } from '@/common/middlewares/user-session-audit.middleware'; +import { MetricsController } from '@/metrics/metrics.controller'; +import { MetricsModule } from '@/metrics/metrics.module'; @Module({ - controllers: [], + controllers: [MetricsController], imports: [ SentryModule, MulterModule.register({ @@ -63,6 +65,7 @@ import { UserSessionAuditMiddleware } from '@/common/middlewares/user-session-au }), AppLoggerModule, FiltersModule, + MetricsModule, ], providers: [ { diff --git a/services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts b/services/workflows-service/src/metrics/common/dto/date-query-params.dto.ts similarity index 69% rename from services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts rename to services/workflows-service/src/metrics/common/dto/date-query-params.dto.ts index db4f187e2f..6be577baa3 100644 --- a/services/workflows-service/src/workflow/dtos/get-case-resolving-metrics-input.dto.ts +++ b/services/workflows-service/src/metrics/common/dto/date-query-params.dto.ts @@ -1,10 +1,9 @@ import { ApiProperty } from '@nestjs/swagger'; import { Transform } from 'class-transformer'; -import { IsDate, IsOptional } from 'class-validator'; +import { IsDate } from 'class-validator'; -export class GetCaseResolvingMetricsDto { +export class DateQueryParamsDto { @ApiProperty({ type: Number, description: 'UNIX timestamp' }) - @IsOptional() @Transform(({ value }) => new Date(value ? +value : 0)) @IsDate() fromDate!: Date; diff --git a/services/workflows-service/src/metrics/common/types/base-query.params.ts b/services/workflows-service/src/metrics/common/types/base-query.params.ts new file mode 100644 index 0000000000..3836dfc12d --- /dev/null +++ b/services/workflows-service/src/metrics/common/types/base-query.params.ts @@ -0,0 +1,3 @@ +export interface BaseParams { + fromDate: Date; +} diff --git a/services/workflows-service/src/metrics/dto/get-active-users.dto.ts b/services/workflows-service/src/metrics/dto/get-active-users.dto.ts new file mode 100644 index 0000000000..32c824d16a --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-active-users.dto.ts @@ -0,0 +1,3 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; + +export class GetActiveUsersDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/dto/get-user-cases-resolved-daily.dto.ts b/services/workflows-service/src/metrics/dto/get-user-cases-resolved-daily.dto.ts new file mode 100644 index 0000000000..f0c25d8d9b --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-user-cases-resolved-daily.dto.ts @@ -0,0 +1,7 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; +import { ApiProperty } from '@nestjs/swagger'; + +export class GetUserCasesResolvedDailyDto extends DateQueryParamsDto { + @ApiProperty() + userId!: string; +} diff --git a/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts b/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts new file mode 100644 index 0000000000..1d51a9c27e --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts @@ -0,0 +1,14 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class GetUserWorkflowProcessingStatisticDto extends DateQueryParamsDto { + constructor() { + super(); + this.userId = null; + } + + @ApiProperty() + @Transform(({ value }) => (!value ? null : value)) + userId!: string | null; +} diff --git a/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts b/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts new file mode 100644 index 0000000000..dbe249d5fc --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts @@ -0,0 +1,3 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; + +export class GetUsersAssignedCasesStatisticDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/dto/get-users-resolved-cases-statistic.dto.ts b/services/workflows-service/src/metrics/dto/get-users-resolved-cases-statistic.dto.ts new file mode 100644 index 0000000000..a1dbb29e26 --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-users-resolved-cases-statistic.dto.ts @@ -0,0 +1,3 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; + +export class GetUsersResolvedCasesStatisticDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts b/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts new file mode 100644 index 0000000000..0b8303733d --- /dev/null +++ b/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts @@ -0,0 +1,3 @@ +import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; + +export class GetWorkflowRuntimesStatusCountDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/metrics.controller.ts b/services/workflows-service/src/metrics/metrics.controller.ts new file mode 100644 index 0000000000..df52705561 --- /dev/null +++ b/services/workflows-service/src/metrics/metrics.controller.ts @@ -0,0 +1,88 @@ +import { NotFoundException } from '@/errors'; +import { GetActiveUsersDto } from '@/metrics/dto/get-active-users.dto'; +import { GetUserCasesResolvedDailyDto } from '@/metrics/dto/get-user-cases-resolved-daily.dto'; +import { GetUserWorkflowProcessingStatisticDto } from '@/metrics/dto/get-user-workflow-processing-statistic.dto'; +import { GetUsersAssignedCasesStatisticDto } from '@/metrics/dto/get-users-assigned-cases-statistic.dto'; +import { GetUsersResolvedCasesStatisticDto } from '@/metrics/dto/get-users-resolved-cases-statistic.dto'; +import { GetWorkflowRuntimesStatusCountDto } from '@/metrics/dto/get-workflow-runtimes-status-count.dto'; +import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { UserAssignedCasesStatisticModel } from '@/metrics/repository/models/user-assigned-cases-statistic.model'; +import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; +import { UserResolvedCasesStatisticModel } from '@/metrics/repository/models/user-resolved-cases-statistic.model'; +import { WorkflowRuntimeStatisticModel } from '@/metrics/repository/models/workflow-runtime-statistic.model'; +import { WorkflowRuntimeStatusCaseCountModel } from '@/metrics/repository/models/workflow-runtime-status-case-count.model'; +import { MetricsService } from '@/metrics/service/metrics.service'; +import { UserWorkflowProcessingStatisticModel } from '@/metrics/service/models/user-workflow-processing-statistic.model'; +import * as common from '@nestjs/common'; +import { Controller } from '@nestjs/common'; +import { ApiNoContentResponse, ApiNotFoundResponse, ApiOkResponse, ApiTags } from '@nestjs/swagger'; + +@ApiTags('/metrics') +@Controller('/metrics') +export class MetricsController { + constructor(private readonly metricsService: MetricsService) {} + + @ApiOkResponse({ type: [WorkflowRuntimeStatisticModel] }) + @common.HttpCode(200) + @common.Get('/workflows/runtimes-statistic') + async getRuntimesStatistic(): Promise<WorkflowRuntimeStatisticModel[]> { + return await this.metricsService.listRuntimesStatistic(); + } + + @ApiOkResponse({ type: WorkflowRuntimeStatusCaseCountModel }) + @common.HttpCode(200) + @common.Get('/workflows/runtimes-status-count') + async getRuntimesStatusCount( + @common.Query() query: GetWorkflowRuntimesStatusCountDto, + ): Promise<WorkflowRuntimeStatusCaseCountModel> { + return await this.metricsService.getRuntimesStatusCaseCount(query); + } + @ApiOkResponse({ type: [UserAssignedCasesStatisticModel] }) + @ApiNotFoundResponse({ type: NotFoundException }) + @common.HttpCode(200) + @common.Get('/users/users-assigned-cases-statistic') + async getUsersAssignedCasesStatistic(@common.Query() query: GetUsersAssignedCasesStatisticDto) { + return await this.metricsService.listUsersAssignedCasesStatistic(query); + } + + @ApiOkResponse({ type: [UserResolvedCasesStatisticModel] }) + @ApiNotFoundResponse({ type: NotFoundException }) + @common.HttpCode(200) + @common.Get('/users/users-resolved-cases-statistic') + async getUsersResolvedCasesStatistic(@common.Query() query: GetUsersResolvedCasesStatisticDto) { + return await this.metricsService.listUsersResolvedCasesStatistic(query); + } + + @ApiOkResponse({ type: UserWorkflowProcessingStatisticModel }) + @ApiNotFoundResponse({ type: NotFoundException }) + @ApiNoContentResponse({ type: Object }) + @common.HttpCode(200) + @common.Get('/users/workflow-processing-statistic') + async getUserWorkflowProcessingStatistic( + @common.Query() query: GetUserWorkflowProcessingStatisticDto, + ): Promise<UserWorkflowProcessingStatisticModel> { + return await this.metricsService.getUserWorkflowProcessingStatistic({ + fromDate: query.fromDate, + userId: query.userId, + }); + } + + @ApiOkResponse({ type: [CasesResolvedInDay] }) + @common.HttpCode(200) + @common.Get('/users/cases-resolved-daily') + async getUserCasesResolvedDaily( + @common.Query() query: GetUserCasesResolvedDailyDto, + ): Promise<CasesResolvedInDay[]> { + return await this.metricsService.listUserCasesResolvedDaily({ + fromDate: query.fromDate, + userId: query.userId, + }); + } + + @ApiOkResponse({ type: [ActiveUserModel] }) + @common.HttpCode(200) + @common.Get('/users/active-users') + async getActiveUsers(@common.Query() query: GetActiveUsersDto): Promise<ActiveUserModel[]> { + return await this.metricsService.listActiveUsers(query); + } +} diff --git a/services/workflows-service/src/metrics/metrics.module.ts b/services/workflows-service/src/metrics/metrics.module.ts new file mode 100644 index 0000000000..d27925862a --- /dev/null +++ b/services/workflows-service/src/metrics/metrics.module.ts @@ -0,0 +1,11 @@ +import { MetricsRepository } from '@/metrics/repository/metrics.repository'; +import { MetricsService } from '@/metrics/service/metrics.service'; +import { Module } from '@nestjs/common'; +import { PrismaModule } from 'nestjs-prisma'; + +@Module({ + imports: [PrismaModule], + providers: [MetricsRepository, MetricsService], + exports: [MetricsService], +}) +export class MetricsModule {} diff --git a/services/workflows-service/src/metrics/repository/metrics.repository.ts b/services/workflows-service/src/metrics/repository/metrics.repository.ts new file mode 100644 index 0000000000..48d6d72d90 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/metrics.repository.ts @@ -0,0 +1,179 @@ +import { WorkflowRuntimeStatisticModel } from '@/metrics/repository/models/workflow-runtime-statistic.model'; +import { IAggregateWorkflowRuntimeStatistic } from '@/metrics/repository/types/aggregate-workflow-runtime-statistic'; +import { PrismaService } from '@/prisma/prisma.service'; +import { Injectable } from '@nestjs/common'; +import { plainToClass } from 'class-transformer'; +import { IAggregateUsersWithCasesCount } from '@/metrics/repository/types/aggregate-users-with-cases-count'; +import { WorkflowRuntimeStatusCaseCountModel } from '@/metrics/repository/models/workflow-runtime-status-case-count.model'; +import { aggregateWorkflowRuntimeStatisticQuery } from './sql/aggregate-workflow-runtime-statistic.sql'; +import { aggregateWorkflowRuntimeStatusCaseCountQuery } from './sql/aggregate-workflow-runtime-status-case-count.sql'; +import { IAggregateWorkflowRuntimeStatusCaseCount } from '@/metrics/repository/types/aggregate-workflow-runtime-status-case-count'; +import { GetRuntimeStatusCaseCountParams } from '@/metrics/repository/types/get-runtime-status-case-count.params'; +import { GetUserApprovalRateParams } from '@/metrics/repository/types/get-user-approval-rate.params'; +import { ApprovalRateModel } from '@/metrics/repository/models/approval-rate.model'; +import { IAggregateApprovalRate } from '@/metrics/repository/types/aggregate-approval-rate'; +import { GetUserAverageResolutionTimeParams } from '@/metrics/repository/types/get-user-average-resolution-time.params'; +import { AverageResolutionTimeModel } from '@/metrics/repository/models/average-resolution-time.model'; +import { aggregateAverageResolutionTimeQuery } from './sql/aggregate-average-resolution-time.sql'; +import { IAggregateAverageResolutionTime } from '@/metrics/repository/types/aggregate-average-resolution-time'; +import { GetUserAverageAssignmentTimeParams } from '@/metrics/repository/types/get-user-average-assignment-time.params'; +import { IAggregateAverageAssignmentTime } from '@/metrics/repository/types/aggregate-average-assignment-time'; +import { GetUserAverageReviewTimeParams } from '@/metrics/repository/types/get-user-average-review-time.params'; +import { UserAverageReviewTimeModel } from '@/metrics/repository/models/user-average-review-time.model'; +import { IAggregateAverageReviewTime } from '@/metrics/repository/types/aggregate-average-review-time'; +import { ListUserCasesResolvedDailyParams } from '@/metrics/repository/types/list-user-cases-resolved-daily.params'; +import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; +import { IAggregateCasesResolvedDaily } from '@/metrics/repository/types/aggregate-cases-resolved-daily'; +import { aggregateDailyCasesResolvedQuery } from '@/metrics/repository/sql/aggregate-daily-cases-resolved.sql'; +import { ListActiveUsersParams } from '@/metrics/repository/types/list-active-users.params'; +import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { ISelectActiveUser } from '@/metrics/repository/types/select-active-user'; +import { selectActiveUsersQuery } from '@/metrics/repository/sql/select-active-users.sql'; +import { FindUsersAssignedCasesStatisticParams } from '@/metrics/repository/types/find-users-assigned-cases-statistic.params'; +import { UserAssignedCasesStatisticModel } from '@/metrics/repository/models/user-assigned-cases-statistic.model'; +import { aggregateUsersAssignedCasesStatisticQuery } from '@/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql'; +import { FindUsersResolvedCasesStatisticParams } from '@/metrics/repository/types/find-users-resolved-cases-statistic.params'; +import { UserResolvedCasesStatisticModel } from '@/metrics/repository/models/user-resolved-cases-statistic.model'; +import { IAggregateUserResolvedCasesStatistic } from '@/metrics/repository/types/aggregate-user-resolved-cases-statistic'; +import { aggregateUsersResolvedCasesStatisticQuery } from '@/metrics/repository/sql/aggregate-users-resolved-cases-statistic.sql'; +import { aggregateApprovalRateQuery } from '@/metrics/repository/sql/aggregate-approval-rate.sql'; +import { aggregateAverageAssignmentTimeQuery } from '@/metrics/repository/sql/aggregate-average-assignment-time.sql'; +import { AverageAssignmentTimeModel } from '@/metrics/repository/models/average-assignment-time.model'; +import { aggregateAverageReviewTimeQuery } from '@/metrics/repository/sql/aggregate-average-review-time.sql'; + +@Injectable() +export class MetricsRepository { + constructor(private readonly prismaService: PrismaService) {} + + async getRuntimeStatusCaseCount( + params: GetRuntimeStatusCaseCountParams, + ): Promise<WorkflowRuntimeStatusCaseCountModel> { + const results = await this.prismaService.$queryRawUnsafe< + IAggregateWorkflowRuntimeStatusCaseCount[] + >(aggregateWorkflowRuntimeStatusCaseCountQuery, params.fromDate); + + return plainToClass( + WorkflowRuntimeStatusCaseCountModel, + results.length ? results.at(-1) : { active: 0, failed: 0, completed: 0 }, + ); + } + + async findRuntimeStatistic(): Promise<WorkflowRuntimeStatisticModel[]> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateWorkflowRuntimeStatistic[]>( + aggregateWorkflowRuntimeStatisticQuery, + ); + + return results.map(result => + plainToClass(WorkflowRuntimeStatisticModel, { + id: result.workflowDefinitionId, + name: result.workflowDefinitionName, + active: result.active || 0, + completed: result.completed || 0, + failed: result.failed, + }), + ); + } + + async findUsersAssignedCasesStatistic( + params: FindUsersAssignedCasesStatisticParams, + ): Promise<UserAssignedCasesStatisticModel[]> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateUsersWithCasesCount[]>( + aggregateUsersAssignedCasesStatisticQuery, + params.fromDate, + ); + + return results.map(result => plainToClass(UserAssignedCasesStatisticModel, result)); + } + + async findUsersResolvedCasesStatistic( + params: FindUsersResolvedCasesStatisticParams, + ): Promise<UserResolvedCasesStatisticModel[]> { + const results = await this.prismaService.$queryRawUnsafe< + IAggregateUserResolvedCasesStatistic[] + >(aggregateUsersResolvedCasesStatisticQuery, params.fromDate); + + return results.map(result => + plainToClass(UserResolvedCasesStatisticModel, { + id: result.id, + firstName: result.firstName, + lastName: result.lastName, + casesCount: result.casesCount, + email: result.email, + }), + ); + } + + async getUserApprovalRate(params: GetUserApprovalRateParams): Promise<ApprovalRateModel | null> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateApprovalRate[]>( + aggregateApprovalRateQuery, + params.fromDate, + params.userId, + ); + + return results.length ? plainToClass(ApprovalRateModel, results.at(-1)) : null; + } + + async getUserAverageResolutionTime( + params: GetUserAverageResolutionTimeParams, + ): Promise<AverageResolutionTimeModel | null> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageResolutionTime[]>( + aggregateAverageResolutionTimeQuery, + params.fromDate, + params.userId, + ); + + return results.length ? plainToClass(AverageResolutionTimeModel, results.at(-1)) : null; + } + + async getUserAverageAssignmentTime( + params: GetUserAverageAssignmentTimeParams, + ): Promise<AverageAssignmentTimeModel | null> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageAssignmentTime[]>( + aggregateAverageAssignmentTimeQuery, + params.fromDate, + params.userId, + ); + + return results.length ? plainToClass(AverageAssignmentTimeModel, results.at(-1)) : null; + } + + async getUserAverageReviewTime( + params: GetUserAverageReviewTimeParams, + ): Promise<UserAverageReviewTimeModel | null> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageReviewTime[]>( + aggregateAverageReviewTimeQuery, + params.fromDate, + params.userId, + ); + + return results.length ? plainToClass(UserAverageReviewTimeModel, results.at(-1)) : null; + } + + async listCasesResolvedDaily( + params: ListUserCasesResolvedDailyParams, + ): Promise<CasesResolvedInDay[]> { + const results = await this.prismaService.$queryRawUnsafe<IAggregateCasesResolvedDaily[]>( + aggregateDailyCasesResolvedQuery, + params.fromDate, + params.userId, + ); + + if (!results.length) return []; + + return results.map(result => + plainToClass(CasesResolvedInDay, { + date: result.date, + count: result.cases, + }), + ); + } + + async listActiveUsers(params: ListActiveUsersParams): Promise<ActiveUserModel[]> { + const results = await this.prismaService.$queryRawUnsafe<ISelectActiveUser[]>( + selectActiveUsersQuery, + params.fromDate, + ); + + return results.map(result => plainToClass(ActiveUserModel, result)); + } +} diff --git a/services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts b/services/workflows-service/src/metrics/repository/models/active-user.model.ts similarity index 72% rename from services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts rename to services/workflows-service/src/metrics/repository/models/active-user.model.ts index ae803da8aa..ab388adeee 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-agent-cases.model.ts +++ b/services/workflows-service/src/metrics/repository/models/active-user.model.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -export class WorkflowRuntimeAgentCasesModel { +export class ActiveUserModel { @ApiProperty() id!: string; @@ -11,5 +11,5 @@ export class WorkflowRuntimeAgentCasesModel { lastName!: string; @ApiProperty() - casesCount!: number; + lastActiveAt!: string; } diff --git a/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts b/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts new file mode 100644 index 0000000000..835fea84b3 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts @@ -0,0 +1,8 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class ApprovalRateModel { + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + approvalRate!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts b/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts new file mode 100644 index 0000000000..840ca2c2a7 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts @@ -0,0 +1,6 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class AverageAssignmentTimeModel { + @ApiProperty({ description: 'Average assignment time in milliseconds' }) + time!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts b/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts new file mode 100644 index 0000000000..35ef0f4912 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts @@ -0,0 +1,8 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class AverageResolutionTimeModel { + @ApiProperty({ description: 'Average resolution time in milliseconds.' }) + @Transform(({ value }) => (value === null ? 0 : value)) + time!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/cases-resolved-daily.model.ts b/services/workflows-service/src/metrics/repository/models/cases-resolved-daily.model.ts new file mode 100644 index 0000000000..3e98ee3618 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/cases-resolved-daily.model.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class CasesResolvedInDay { + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + count!: number; + + @ApiProperty() + date!: string; +} diff --git a/services/workflows-service/src/metrics/repository/models/user-assigned-cases-statistic.model.ts b/services/workflows-service/src/metrics/repository/models/user-assigned-cases-statistic.model.ts new file mode 100644 index 0000000000..b8eb3f58af --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/user-assigned-cases-statistic.model.ts @@ -0,0 +1,20 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class UserAssignedCasesStatisticModel { + @ApiProperty() + id!: string; + + @ApiProperty() + firstName!: string; + + @ApiProperty() + lastName!: string; + + @ApiProperty() + email!: string; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + casesCount!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts b/services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts new file mode 100644 index 0000000000..09c8204c6b --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts @@ -0,0 +1,8 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class UserAverageReviewTimeModel { + @ApiProperty({ description: 'Average review time in milliseconds' }) + @Transform(({ value }) => (value === null ? 0 : value)) + time!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/user-resolved-cases-statistic.model.ts b/services/workflows-service/src/metrics/repository/models/user-resolved-cases-statistic.model.ts new file mode 100644 index 0000000000..631d84e2a4 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/user-resolved-cases-statistic.model.ts @@ -0,0 +1,20 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class UserResolvedCasesStatisticModel { + @ApiProperty() + id!: string; + + @ApiProperty() + firstName!: string; + + @ApiProperty() + lastName!: string; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + casesCount!: number; + + @ApiProperty() + email!: string; +} diff --git a/services/workflows-service/src/metrics/repository/models/workflow-runtime-statistic.model.ts b/services/workflows-service/src/metrics/repository/models/workflow-runtime-statistic.model.ts new file mode 100644 index 0000000000..f7503cfdc4 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/workflow-runtime-statistic.model.ts @@ -0,0 +1,24 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class WorkflowRuntimeStatusStatistic {} + +export class WorkflowRuntimeStatisticModel { + @ApiProperty({ description: 'Workflow Runtime Definition Id' }) + id!: string; + + @ApiProperty({ description: 'Workflow Runtime Definition name' }) + name!: string; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + active!: number; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + failed!: number; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + completed!: number; +} diff --git a/services/workflows-service/src/metrics/repository/models/workflow-runtime-status-case-count.model.ts b/services/workflows-service/src/metrics/repository/models/workflow-runtime-status-case-count.model.ts new file mode 100644 index 0000000000..2ccf4449e5 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/models/workflow-runtime-status-case-count.model.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; + +export class WorkflowRuntimeStatusCaseCountModel { + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + active!: number; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + completed!: number; + + @ApiProperty() + @Transform(({ value }) => (value === null ? 0 : value)) + failed!: number; +} diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts new file mode 100644 index 0000000000..341496bab2 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts @@ -0,0 +1,32 @@ +export const aggregateApprovalRateQuery = ` +select + (case + when "resolvedCount" > 0 and "approvedCount" > 0 + then ("approvedCount"::numeric / "resolvedCount"::numeric * 100) + else 0 end + )::int as "approvalRate" +from + ( + select + ( + select + count(*) + from + "WorkflowRuntimeData" + where "resolvedAt" >= $1 + and "assigneeId" = coalesce($2, "assigneeId") + ) as "resolvedCount", + ( + select count(*) + from "WorkflowRuntimeData" + where "resolvedAt" >= $1 + and "assigneeId" = coalesce($2, "assigneeId") + and "status" = 'completed' + ) as "approvedCount" + + from + "WorkflowRuntimeData" + group by "resolvedCount", "approvedCount" + +) as counts +`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts new file mode 100644 index 0000000000..45fadbf694 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts @@ -0,0 +1,18 @@ +export const aggregateAverageAssignmentTimeQuery = ` +select + avg( + (select sum(case + when "createdAt" notnull and "assignedAt" notnull + then (extract(epoch from "assignedAt") - extract(epoch from "createdAt")) * 1000 + else 0 + end)::int as time + from "WorkflowRuntimeData" + where "assigneeId" = "User".id + and "assignedAt" >= $1) + )::int as time +from + "User" +where + "User".id = coalesce($2, + "id") +`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts new file mode 100644 index 0000000000..c20446a903 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts @@ -0,0 +1,17 @@ +export const aggregateAverageResolutionTimeQuery = ` +select + avg( + (select sum(case + when "createdAt" notnull and "resolvedAt" notnull + then (extract(epoch from "resolvedAt") - extract(epoch from "createdAt")) * 1000 + else 0 + end)::int as time + from "WorkflowRuntimeData" + where "assigneeId" = "User".id + and "resolvedAt" >= $1) + )::int as time +from + "User" +where + "User".id = coalesce($2, + "id")`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts new file mode 100644 index 0000000000..62391b5477 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts @@ -0,0 +1,17 @@ +export const aggregateAverageReviewTimeQuery = ` +select + avg( + (select sum(case + when "resolvedAt" notnull and "assignedAt" notnull + then (extract(epoch from "resolvedAt") - extract(epoch from "assignedAt")) * 1000 + else 0 + end)::int as time + from "WorkflowRuntimeData" + where "assigneeId" = "User".id + and "resolvedAt" >= $1) + )::int as time +from + "User" +where + "User".id = coalesce($2, + "id")`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-daily-cases-resolved.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-daily-cases-resolved.sql.ts new file mode 100644 index 0000000000..f92e66f083 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-daily-cases-resolved.sql.ts @@ -0,0 +1,14 @@ +export const aggregateDailyCasesResolvedQuery = ` +select + date, + sum(( + SELECT COUNT(*) + FROM "WorkflowRuntimeData" + WHERE "assigneeId" = coalesce($2, "WorkflowRuntimeData"."assigneeId") + AND date_trunc('day', "resolvedAt"::timestamp) = date_trunc('day', date::timestamp) + ))::int AS cases +from +generate_series($1::timestamp, now()::timestamp, interval '1 day') as date +group by date +order by date asc +`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts new file mode 100644 index 0000000000..7fa93db179 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts @@ -0,0 +1,21 @@ +export const aggregateUsersAssignedCasesStatisticQuery = ` +select + id, + "firstName", + "lastName", + "casesCount"::int, + email +from + "User" +inner join ( + select + "WorkflowRuntimeData"."assigneeId", + count(*) as "casesCount" + from + "WorkflowRuntimeData" + where "assignedAt" >= $1 + group by "assigneeId" +) as agent_workflow_runtime on +agent_workflow_runtime."assigneeId" = "id" +order by "casesCount" desc +`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-users-resolved-cases-statistic.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-users-resolved-cases-statistic.sql.ts new file mode 100644 index 0000000000..04e0694e07 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-users-resolved-cases-statistic.sql.ts @@ -0,0 +1,21 @@ +export const aggregateUsersResolvedCasesStatisticQuery = ` +select + id, + "firstName", + "lastName", + "casesCount"::int, + email +from + "User" +inner join ( + select + "WorkflowRuntimeData"."assigneeId", + count(*) as "casesCount" + from + "WorkflowRuntimeData" + where "resolvedAt" >= $1 + group by "assigneeId" +) as agent_workflow_runtime on +agent_workflow_runtime."assigneeId" = "id" +order by "casesCount" desc +`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-statistic.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-statistic.sql.ts new file mode 100644 index 0000000000..b003bfde0a --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-statistic.sql.ts @@ -0,0 +1,36 @@ +export const aggregateWorkflowRuntimeStatisticQuery = ` +select + "workflowDefinitionId", + "name" as "workflowDefinitionName", +sum( + case + when workflow_runtime_data."status" = 'active' then workflow_runtime_data.status_count + else 0 + end +)::int as active, +sum( + case + when workflow_runtime_data."status" = 'completed' then workflow_runtime_data.status_count + else 0 + end +)::int as completed, +sum( + case + when workflow_runtime_data."status" = 'failed' then workflow_runtime_data.status_count + else 0 + end +)::int as failed +from +( + select + "status", + "workflowDefinitionId", + count("status") as status_count + from + "WorkflowRuntimeData" + group by + "workflowDefinitionId", + "status" +) as workflow_runtime_data +inner join (select * from "WorkflowDefinition") as workflowDefinition on workflowDefinition."id" = "workflowDefinitionId" +group by "workflowDefinitionId","workflowDefinitionName"`; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts new file mode 100644 index 0000000000..47add5b620 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts @@ -0,0 +1,31 @@ +export const aggregateWorkflowRuntimeStatusCaseCountQuery = ` +select + sum( + case + when workflow_runtime_data."status" = 'active' then workflow_runtime_data.status_count + else 0 + end + )::int as active, + sum( + case + when workflow_runtime_data."status" = 'completed' then workflow_runtime_data.status_count + else 0 + end + )::int as completed, + sum( + case + when workflow_runtime_data."status" = 'failed' then workflow_runtime_data.status_count + else 0 + end + )::int as failed +from +( + select + "status", + count("status") as status_count + from + "WorkflowRuntimeData" + where "createdAt" >= $1 + group by + "status" +) as workflow_runtime_data`; diff --git a/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts b/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts new file mode 100644 index 0000000000..44916984e0 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts @@ -0,0 +1,6 @@ +export const selectActiveUsersQuery = ` +select +id, "firstName", "lastName", "lastActiveAt" +from "User" + where "User"."lastActiveAt" >= $1 +order by "lastActiveAt" desc`; diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts b/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts new file mode 100644 index 0000000000..9eff13914d --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts @@ -0,0 +1,3 @@ +export interface IAggregateApprovalRate { + approvalRate: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts new file mode 100644 index 0000000000..2a9198e444 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts @@ -0,0 +1,3 @@ +export interface IAggregateAverageAssignmentTime { + time: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts new file mode 100644 index 0000000000..6507c181bb --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts @@ -0,0 +1,3 @@ +export interface IAggregateAverageResolutionTime { + time: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts new file mode 100644 index 0000000000..a1f7314813 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts @@ -0,0 +1,3 @@ +export interface IAggregateAverageReviewTime { + time: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-cases-resolved-daily.ts b/services/workflows-service/src/metrics/repository/types/aggregate-cases-resolved-daily.ts new file mode 100644 index 0000000000..ba84a5f054 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-cases-resolved-daily.ts @@ -0,0 +1,4 @@ +export interface IAggregateCasesResolvedDaily { + date: string | null; + cases: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-user-resolved-cases-statistic.ts b/services/workflows-service/src/metrics/repository/types/aggregate-user-resolved-cases-statistic.ts new file mode 100644 index 0000000000..9ca0c2a787 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-user-resolved-cases-statistic.ts @@ -0,0 +1,7 @@ +export interface IAggregateUserResolvedCasesStatistic { + id: string; + firstName: string; + lastName: string; + casesCount: number; + email: string; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-users-with-cases-count.ts b/services/workflows-service/src/metrics/repository/types/aggregate-users-with-cases-count.ts new file mode 100644 index 0000000000..6b0707d233 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-users-with-cases-count.ts @@ -0,0 +1,6 @@ +export interface IAggregateUsersWithCasesCount { + id: string; + firstName: string; + lastName: string; + casesCount: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-statistic.ts b/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-statistic.ts new file mode 100644 index 0000000000..5b1d62053d --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-statistic.ts @@ -0,0 +1,7 @@ +import { WorkflowRuntimeDataStatus } from '@prisma/client'; + +export interface IAggregateWorkflowRuntimeStatistic + extends Record<WorkflowRuntimeDataStatus, number> { + workflowDefinitionId: string; + workflowDefinitionName: string; +} diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-status-case-count.ts b/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-status-case-count.ts new file mode 100644 index 0000000000..c655a81546 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/aggregate-workflow-runtime-status-case-count.ts @@ -0,0 +1,5 @@ +export interface IAggregateWorkflowRuntimeStatusCaseCount { + active: number | null; + failed: number | null; + completed: number | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/find-users-assigned-cases-statistic.params.ts b/services/workflows-service/src/metrics/repository/types/find-users-assigned-cases-statistic.params.ts new file mode 100644 index 0000000000..bcfec41ec7 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/find-users-assigned-cases-statistic.params.ts @@ -0,0 +1,3 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export type FindUsersAssignedCasesStatisticParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/find-users-resolved-cases-statistic.params.ts b/services/workflows-service/src/metrics/repository/types/find-users-resolved-cases-statistic.params.ts new file mode 100644 index 0000000000..564a90a63b --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/find-users-resolved-cases-statistic.params.ts @@ -0,0 +1,3 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export type FindUsersResolvedCasesStatisticParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/get-runtime-status-case-count.params.ts b/services/workflows-service/src/metrics/repository/types/get-runtime-status-case-count.params.ts new file mode 100644 index 0000000000..bb0b8a9b71 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/get-runtime-status-case-count.params.ts @@ -0,0 +1,3 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export type GetRuntimeStatusCaseCountParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts new file mode 100644 index 0000000000..49d507665f --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts @@ -0,0 +1,5 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export interface GetUserApprovalRateParams extends BaseParams { + userId: string | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts new file mode 100644 index 0000000000..3576967455 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts @@ -0,0 +1,5 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export interface GetUserAverageAssignmentTimeParams extends BaseParams { + userId: string | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts new file mode 100644 index 0000000000..4927418d89 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts @@ -0,0 +1,5 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export interface GetUserAverageResolutionTimeParams extends BaseParams { + userId: string | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts new file mode 100644 index 0000000000..ca81f91ea7 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts @@ -0,0 +1,5 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export interface GetUserAverageReviewTimeParams extends BaseParams { + userId: string | null; +} diff --git a/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts b/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts new file mode 100644 index 0000000000..bce6e550db --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts @@ -0,0 +1,3 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export type ListActiveUsersParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/list-user-cases-resolved-daily.params.ts b/services/workflows-service/src/metrics/repository/types/list-user-cases-resolved-daily.params.ts new file mode 100644 index 0000000000..564ce184e9 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/list-user-cases-resolved-daily.params.ts @@ -0,0 +1,5 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export interface ListUserCasesResolvedDailyParams extends BaseParams { + userId: string; +} diff --git a/services/workflows-service/src/metrics/repository/types/list-users-resolved-cases-statistic.params.ts b/services/workflows-service/src/metrics/repository/types/list-users-resolved-cases-statistic.params.ts new file mode 100644 index 0000000000..fd81c4ef04 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/list-users-resolved-cases-statistic.params.ts @@ -0,0 +1,3 @@ +import { BaseParams } from '@/metrics/common/types/base-query.params'; + +export type ListUsersResolvedCasesStatistic = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/select-active-user.ts b/services/workflows-service/src/metrics/repository/types/select-active-user.ts new file mode 100644 index 0000000000..5ebef912c2 --- /dev/null +++ b/services/workflows-service/src/metrics/repository/types/select-active-user.ts @@ -0,0 +1,6 @@ +export interface ISelectActiveUser { + id: string; + firstName: string; + lastName: string; + lastActiveAt: string; +} diff --git a/services/workflows-service/src/metrics/service/metrics.service.ts b/services/workflows-service/src/metrics/service/metrics.service.ts new file mode 100644 index 0000000000..8a628da711 --- /dev/null +++ b/services/workflows-service/src/metrics/service/metrics.service.ts @@ -0,0 +1,89 @@ +import { MetricsRepository } from '@/metrics/repository/metrics.repository'; +import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { UserAssignedCasesStatisticModel } from '@/metrics/repository/models/user-assigned-cases-statistic.model'; +import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; +import { UserResolvedCasesStatisticModel } from '@/metrics/repository/models/user-resolved-cases-statistic.model'; +import { WorkflowRuntimeStatisticModel } from '@/metrics/repository/models/workflow-runtime-statistic.model'; +import { WorkflowRuntimeStatusCaseCountModel } from '@/metrics/repository/models/workflow-runtime-status-case-count.model'; +import { FindUsersAssignedCasesStatisticParams } from '@/metrics/repository/types/find-users-assigned-cases-statistic.params'; +import { FindUsersResolvedCasesStatisticParams } from '@/metrics/repository/types/find-users-resolved-cases-statistic.params'; +import { GetRuntimeStatusCaseCountParams } from '@/metrics/repository/types/get-runtime-status-case-count.params'; +import { ListActiveUsersParams } from '@/metrics/repository/types/list-active-users.params'; +import { ListUserCasesResolvedDailyParams } from '@/metrics/repository/types/list-user-cases-resolved-daily.params'; +import { UserWorkflowProcessingStatisticModel } from '@/metrics/service/models/user-workflow-processing-statistic.model'; +import { GetUserWorkflowProcessingStatisticParams } from '@/metrics/service/types/get-user-workflow-processing-statistic.params'; +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class MetricsService { + constructor(private readonly metricsRepository: MetricsRepository) {} + + async getRuntimesStatusCaseCount( + params: GetRuntimeStatusCaseCountParams, + ): Promise<WorkflowRuntimeStatusCaseCountModel> { + return await this.metricsRepository.getRuntimeStatusCaseCount(params); + } + + async listRuntimesStatistic(): Promise<WorkflowRuntimeStatisticModel[]> { + return await this.metricsRepository.findRuntimeStatistic(); + } + + async listUsersAssignedCasesStatistic( + params: FindUsersAssignedCasesStatisticParams, + ): Promise<UserAssignedCasesStatisticModel[]> { + return await this.metricsRepository.findUsersAssignedCasesStatistic(params); + } + + async listUsersResolvedCasesStatistic( + params: FindUsersResolvedCasesStatisticParams, + ): Promise<UserResolvedCasesStatisticModel[]> { + return await this.metricsRepository.findUsersResolvedCasesStatistic(params); + } + + async getUserWorkflowProcessingStatistic( + params: GetUserWorkflowProcessingStatisticParams, + ): Promise<UserWorkflowProcessingStatisticModel> { + const commonParams = { + userId: params.userId, + fromDate: params.fromDate, + }; + + const results = await Promise.all([ + this.metricsRepository.getUserApprovalRate(commonParams), + this.metricsRepository.getUserAverageAssignmentTime(commonParams), + this.metricsRepository.getUserAverageResolutionTime(commonParams), + this.metricsRepository.getUserAverageReviewTime(commonParams), + ]); + + const [ + approvalRateModel, + averageAssignmentTimeModel, + averageResolutionTimeModel, + averageReviewTimeModel, + ] = results; + + const statisticModel: UserWorkflowProcessingStatisticModel = + new UserWorkflowProcessingStatisticModel(); + + if (params.userId) { + statisticModel.id = params.userId; + } + + statisticModel.approvalRate = approvalRateModel?.approvalRate || 0; + statisticModel.averageAssignmentTime = averageAssignmentTimeModel?.time || 0; + statisticModel.averageResolutionTime = averageResolutionTimeModel?.time || 0; + statisticModel.averageReviewTime = averageReviewTimeModel?.time || 0; + + return statisticModel; + } + + async listUserCasesResolvedDaily( + params: ListUserCasesResolvedDailyParams, + ): Promise<CasesResolvedInDay[]> { + return await this.metricsRepository.listCasesResolvedDaily(params); + } + + async listActiveUsers(params: ListActiveUsersParams): Promise<ActiveUserModel[]> { + return await this.metricsRepository.listActiveUsers(params); + } +} diff --git a/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts new file mode 100644 index 0000000000..cd3e2754e9 --- /dev/null +++ b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class UserWorkflowProcessingStatisticModel { + @ApiProperty() + id!: string; + + @ApiProperty() + approvalRate!: number; + + @ApiProperty({ description: 'Average resolution time in milliseconds' }) + averageResolutionTime!: number; + + @ApiProperty({ description: 'Average assignment time in milliseconds' }) + averageAssignmentTime!: number; + + @ApiProperty({ description: 'Average review time in milliseconds' }) + averageReviewTime!: number; +} diff --git a/services/workflows-service/src/metrics/service/types/get-user-workflow-processing-statistic.params.ts b/services/workflows-service/src/metrics/service/types/get-user-workflow-processing-statistic.params.ts new file mode 100644 index 0000000000..dfa48f3afe --- /dev/null +++ b/services/workflows-service/src/metrics/service/types/get-user-workflow-processing-statistic.params.ts @@ -0,0 +1,9 @@ +import { GetUserApprovalRateParams } from '@/metrics/repository/types/get-user-approval-rate.params'; +import { GetUserAverageAssignmentTimeParams } from '@/metrics/repository/types/get-user-average-assignment-time.params'; +import { GetUserAverageResolutionTimeParams } from '@/metrics/repository/types/get-user-average-resolution-time.params'; +import { GetUserAverageReviewTimeParams } from '@/metrics/repository/types/get-user-average-review-time.params'; + +export type GetUserWorkflowProcessingStatisticParams = GetUserApprovalRateParams & + GetUserAverageAssignmentTimeParams & + GetUserAverageResolutionTimeParams & + GetUserAverageReviewTimeParams; diff --git a/services/workflows-service/src/user/types/index.ts b/services/workflows-service/src/user/types/index.ts deleted file mode 100644 index 001303b5d0..0000000000 --- a/services/workflows-service/src/user/types/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface ListUsersCaseResolveStatsParams { - fromDate?: Date; -} diff --git a/services/workflows-service/src/user/user.controlller.external.ts b/services/workflows-service/src/user/user.controlller.external.ts deleted file mode 100644 index 46557651e5..0000000000 --- a/services/workflows-service/src/user/user.controlller.external.ts +++ /dev/null @@ -1,41 +0,0 @@ -import * as common from '@nestjs/common'; -import * as swagger from '@nestjs/swagger'; -import { UserService } from './user.service'; -import { UserModel } from './user.model'; -import { Query } from '@nestjs/common'; -import { GetActiveUsersDto } from '@/user/dtos/get-active-users.dto'; -import { plainToClass } from 'class-transformer'; -import { UseKeyAuthOrSessionGuard } from '@/common/decorators/use-key-auth-or-session-guard.decorator'; -import { ApiOkResponse } from '@nestjs/swagger'; -import { GetUsersCaseResolvingStatsDto } from '@/user/dtos/get-users-case-resolving-stats-input.dto'; -import { UserCaseResolvingStatsModel } from '@/user/user-case-resolving-stats.model'; - -@swagger.ApiTags('external/users') -@common.Controller('external/users') -export class UserControllerExternal { - constructor(protected readonly service: UserService) {} - - @common.Get('/active-users') - @swagger.ApiOkResponse({ type: [UserModel] }) - async getActiveUsers(@Query() query: GetActiveUsersDto) { - const results = await this.service.list({ - where: { - lastActiveAt: { - ...(query.fromDate ? { gte: query.fromDate } : { not: null }), - }, - }, - }); - - return results.map(result => plainToClass(UserModel, result)); - } - - @common.Get('/metrics/case-resolving-stats') - @ApiOkResponse({ type: [UserCaseResolvingStatsModel] }) - async getUsersActivityStats( - @common.Query() query: GetUsersCaseResolvingStatsDto, - ): Promise<UserCaseResolvingStatsModel[]> { - const results = await this.service.listUsersCaseResolveStats({ fromDate: query.fromDate }); - - return results.map(result => plainToClass(UserCaseResolvingStatsModel, result)); - } -} diff --git a/services/workflows-service/src/user/user.module.ts b/services/workflows-service/src/user/user.module.ts index b8b640c43b..09b779dd8e 100644 --- a/services/workflows-service/src/user/user.module.ts +++ b/services/workflows-service/src/user/user.module.ts @@ -6,11 +6,10 @@ import { UserService } from './user.service'; // eslint-disable-next-line import/no-cycle import { AuthModule } from '../auth/auth.module'; import { ACLModule } from '@/common/access-control/acl.module'; -import { UserControllerExternal } from '@/user/user.controlller.external'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule)], - controllers: [UserControllerInternal, UserControllerExternal], + controllers: [UserControllerInternal], providers: [UserRepository, UserService], exports: [ACLModule, AuthModule, UserService], }) diff --git a/services/workflows-service/src/user/user.service.ts b/services/workflows-service/src/user/user.service.ts index ad9fd253a7..f79518fff0 100644 --- a/services/workflows-service/src/user/user.service.ts +++ b/services/workflows-service/src/user/user.service.ts @@ -1,6 +1,4 @@ -import { ListUsersCaseResolveStatsParams } from '@/user/types'; import { Injectable } from '@nestjs/common'; -import { User } from '@prisma/client'; import { PasswordService } from '../auth/password/password.service'; import { UserRepository } from './user.repository'; @@ -34,35 +32,4 @@ export class UserService { async deleteById(id: string, args?: Parameters<UserRepository['deleteById']>[1]) { return this.repository.deleteById(id, args); } - - async listUsersCaseResolveStats(params: ListUsersCaseResolveStatsParams) { - const rawQuery = ` - select - user_cases."assigneeId" as id, - SUM(cases_per_day)::int as cases, - "firstName", - "lastName", - "email" - from - "User" - inner join ( - select - date_trunc('day', - "resolvedAt") as day, - count(*)::int as cases_per_day, - "assigneeId" - from - "WorkflowRuntimeData" - where "resolvedAt" notnull - ${params.fromDate ? 'and "resolvedAt" >= $1' : ''} - group by "assigneeId", "day" - ) - as user_cases - on "User".id = user_cases."assigneeId" - group by id, user_cases."assigneeId"`; - - return await this.repository.queryRaw< - { id: string; firstName: string; lastName: string; cases: number }[] - >(rawQuery, params.fromDate ? [params.fromDate] : undefined); - } } diff --git a/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts deleted file mode 100644 index 972ad67c19..0000000000 --- a/services/workflows-service/src/workflow/dtos/get-workflow-runtime-user-stats-input.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Transform } from 'class-transformer'; -import { IsDate, IsOptional } from 'class-validator'; - -export class GetWorkflowRuntimeUserStatsDto { - @ApiProperty({ type: Number, description: 'UNIX timestamp' }) - @IsOptional() - @Transform(({ value }) => new Date(value ? +value : 0)) - @IsDate() - fromDate!: Date; -} diff --git a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts b/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts deleted file mode 100644 index 102499e951..0000000000 --- a/services/workflows-service/src/workflow/dtos/get-workflows-runtime-agent-cases-input.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Transform } from 'class-transformer'; -import { IsDate, IsOptional } from 'class-validator'; - -export class GetWorkflowsRuntimeAgentCases { - @ApiProperty({ type: Number, description: 'UNIX timestamp' }) - @IsOptional() - @Transform(({ value }) => new Date(value ? +value : 0)) - @IsDate() - fromDate!: Date; -} diff --git a/services/workflows-service/src/workflow/types/index.ts b/services/workflows-service/src/workflow/types/index.ts index 62bc7e6d12..7facb2d544 100644 --- a/services/workflows-service/src/workflow/types/index.ts +++ b/services/workflows-service/src/workflow/types/index.ts @@ -46,33 +46,3 @@ export type WorkflowRuntimeListQueryResult = WorkflowRuntimeData & { workflowDefinition: WorkflowDefinition; assignee: User | null; }; - -export type WorkflowsApprovedChart = { workflowId: string; approvedDate: Date }[]; - -export type WorkflowDefinitionStatsPerStatus = Record<WorkflowRuntimeDataStatus, number>; -export interface WorkflowDefinitionStats { - id: string; - name: string; - stats: WorkflowDefinitionStatsPerStatus; -} - -export interface WorkflowRuntimeAgentStats { - id: string; - firstName: string; - lastName: string; - casesCount: number; -} - -export interface ListWorkflowRuntimeAgentCasesStatsParams { - fromDate?: Date; -} - -export type WorkflowRuntimeCasesPerStatus = Record<WorkflowRuntimeDataStatus, number>; - -export interface GetWorkflowRuntimeCasesPerStatusParams { - fromDate?: Date; -} - -export interface GetUserStatsParams { - fromDate?: Date | null; -} diff --git a/services/workflows-service/src/workflow/workflow-metric.service.ts b/services/workflows-service/src/workflow/workflow-metric.service.ts deleted file mode 100644 index 1202354429..0000000000 --- a/services/workflows-service/src/workflow/workflow-metric.service.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { AppLoggerService } from '@/common/app-logger/app-logger.service'; -import { UserService } from '@/user/user.service'; -import { - GetWorkflowRuntimeCasesPerStatusParams, - ListWorkflowRuntimeAgentCasesStatsParams, - WorkflowDefinitionStats, - WorkflowRuntimeAgentStats, - WorkflowRuntimeCasesPerStatus, -} from '@/workflow/types'; -import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; -import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; -import { Injectable } from '@nestjs/common'; -import uniq from 'lodash/uniq'; -import keyBy from 'lodash/keyBy'; - -@Injectable() -export class WorkflowMetricService { - constructor( - protected readonly userService: UserService, - protected readonly logger: AppLoggerService, - protected readonly workflowDefinitionRepository: WorkflowDefinitionRepository, - protected readonly workflowRuntimeDataRepository: WorkflowRuntimeDataRepository, - ) {} - - async getWorkflowsRuntimeCasesPerStatus( - params: GetWorkflowRuntimeCasesPerStatusParams = {}, - ): Promise<WorkflowRuntimeCasesPerStatus> { - const queryResult = await this.workflowRuntimeDataRepository.groupBy({ - by: ['status'], - where: { - createdAt: { - ...(params.fromDate ? { gte: params.fromDate } : undefined), - }, - }, - _count: true, - }); - - const metrics: WorkflowRuntimeCasesPerStatus = { - active: 0, - failed: 0, - completed: 0, - }; - - queryResult.forEach(metric => { - metrics[metric.status] = Number(metric._count) || 0; - }); - - return metrics; - } - - async listWorkflowStats(): Promise<WorkflowDefinitionStats[]> { - const countByStatusList = await this.workflowRuntimeDataRepository.groupBy({ - by: ['workflowDefinitionId', 'status'], - _count: { - status: true, - }, - }); - - const workflowDefinitionIds = countByStatusList.map(stats => stats.workflowDefinitionId); - const workflowDefinitions = await this.workflowDefinitionRepository.findMany({ - where: { - id: { - in: uniq(workflowDefinitionIds), - }, - }, - }); - - const workflowDefinitionsById = keyBy(workflowDefinitions, 'id'); - - const workflowDefinitionsStats = countByStatusList.reduce( - (statsById, workflowDefinitionStats) => { - const { workflowDefinitionId } = workflowDefinitionStats; - const stats: WorkflowDefinitionStats = { - ...statsById[workflowDefinitionId], - id: workflowDefinitionId, - name: String(workflowDefinitionsById[workflowDefinitionId]?.name), - stats: { - active: 0, - failed: 0, - completed: 0, - ...statsById[workflowDefinitionId]?.stats, - [workflowDefinitionStats.status]: Number( - (workflowDefinitionStats._count as any).status, - ), - }, - }; - - statsById[workflowDefinitionId] = stats; - - return statsById; - }, - {} as Record<string, WorkflowDefinitionStats>, - ); - - return Object.values(workflowDefinitionsStats); - } - - async listWorkflowRuntimeAgentCasesStats( - params: ListWorkflowRuntimeAgentCasesStatsParams = {}, - ): Promise<WorkflowRuntimeAgentStats[]> { - console.log({ gte: params.fromDate }); - - const casesCountList = await this.workflowRuntimeDataRepository.groupBy({ - by: ['assigneeId'], - where: { - assigneeId: { - not: null, - }, - assignedAt: { - ...(params.fromDate ? { gte: params.fromDate } : { not: null }), - }, - }, - _count: true, - }); - - const agentIds = casesCountList.map(count => count.assigneeId); - const agents = await this.userService.list({ where: { id: { in: agentIds as string[] } } }); - const agentsMapById = keyBy(agents, 'id'); - - return casesCountList.map(caseCount => { - const { _count, assigneeId } = caseCount; - const agentId = String(assigneeId); - const agent = agentsMapById[agentId]; - - const agentStats: WorkflowRuntimeAgentStats = { - id: agentId, - firstName: String(agent?.firstName), - lastName: String(agent?.lastName), - casesCount: Number(_count) || 0, - }; - - return agentStats; - }); - } -} diff --git a/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts b/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts deleted file mode 100644 index 75d8881f4c..0000000000 --- a/services/workflows-service/src/workflow/workflow-runtime-cases-per-status.model.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { WorkflowRuntimeCasesPerStatus } from '@/workflow/types'; -import { ApiProperty } from '@nestjs/swagger'; - -export class WorkflowRuntimeCasesPerStatusModel implements WorkflowRuntimeCasesPerStatus { - @ApiProperty() - active!: number; - - @ApiProperty() - completed!: number; - - @ApiProperty() - failed!: number; -} diff --git a/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts b/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts deleted file mode 100644 index 9d9bc5a6b8..0000000000 --- a/services/workflows-service/src/workflow/workflow-runtime-stats-model.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { Type } from 'class-transformer'; -import { ValidateNested } from 'class-validator'; - -export class WorkflowDefinitionRuntimeStats { - @ApiProperty() - active!: number; - - @ApiProperty() - failed!: number; - - @ApiProperty() - completed!: number; -} - -export class WorkflowRuntimeStatsModel { - @Type(() => String) - @ApiProperty({ description: 'Workflow Runtime Definition Id' }) - id!: string; - - @Type(() => String) - @ApiProperty({ description: 'Workflow Runtime Definition name' }) - name!: string; - - @Type(() => WorkflowDefinitionRuntimeStats) - @ApiProperty() - @ValidateNested() - stats!: WorkflowDefinitionRuntimeStats; -} diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 0cb4c8194a..3d9e4b54b6 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -2,7 +2,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { UserData } from '@/user/user-data.decorator'; import { UserInfo } from '@/user/user-info'; -import { ApiNestedQuery } from '@/common/decorators/api-nested-query.decorator'; import { isRecordNotFoundError } from '@/prisma/prisma.util'; import * as common from '@nestjs/common'; import { NotFoundException, Query, Res } from '@nestjs/common'; @@ -11,27 +10,19 @@ import { WorkflowRuntimeData } from '@prisma/client'; import * as nestAccessControl from 'nest-access-control'; import * as errors from '../errors'; import { IntentDto } from './dtos/intent'; -import { WorkflowDefinitionFindManyArgs } from './dtos/workflow-definition-find-many-args'; import { WorkflowDefinitionUpdateInput } from './dtos/workflow-definition-update-input'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { WorkflowDefinitionWhereUniqueInput } from './dtos/workflow-where-unique-input'; -import { GetUserStatsParams, RunnableWorkflowData } from './types'; +import { RunnableWorkflowData } from './types'; import { WorkflowDefinitionModel } from './workflow-definition.model'; import { IntentResponse, WorkflowService } from './workflow.service'; -import { Request, Response } from 'express'; +import { Response } from 'express'; import { WorkflowRunDto } from './dtos/workflow-run'; import { UseKeyAuthGuard } from '@/common/decorators/use-key-auth-guard.decorator'; import { UseKeyAuthInDevGuard } from '@/common/decorators/use-key-auth-in-dev-guard.decorator'; import { plainToClass } from 'class-transformer'; import { GetWorkflowsRuntimeInputDto } from '@/workflow/dtos/get-workflows-runtime-input.dto'; import { GetWorkflowsRuntimeOutputDto } from '@/workflow/dtos/get-workflows-runtime-output.dto'; -import { WorkflowRuntimeStatsModel } from '@/workflow/workflow-runtime-stats-model'; -import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; -import { WorkflowRuntimeAgentCasesModel } from '@/workflow/workflow-runtime-agent-cases.model'; -import { GetWorkflowsRuntimeAgentCases } from '@/workflow/dtos/get-workflows-runtime-agent-cases-input.dto'; -import { WorkflowRuntimeCasesPerStatusModel } from '@/workflow/workflow-runtime-cases-per-status.model'; -import { GetWorkflowRuntimeUserStatsDto } from '@/workflow/dtos/get-workflow-runtime-user-stats-input.dto'; -import { GetCaseResolvingMetricsDto } from '@/workflow/dtos/get-case-resolving-metrics-input.dto'; import { ApiOkResponse } from '@nestjs/swagger'; @swagger.ApiBearerAuth() @@ -40,7 +31,6 @@ import { ApiOkResponse } from '@nestjs/swagger'; export class WorkflowControllerExternal { constructor( protected readonly service: WorkflowService, - protected readonly metricService: WorkflowMetricService, @nestAccessControl.InjectRolesBuilder() protected readonly rolesBuilder: nestAccessControl.RolesBuilder, ) {} @@ -63,78 +53,6 @@ export class WorkflowControllerExternal { return plainToClass(GetWorkflowsRuntimeOutputDto, results); } - @common.Get('/metrics/workflows-definition-runtime-stats') - @swagger.ApiOkResponse({ type: [WorkflowRuntimeStatsModel] }) - @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException }) - @common.HttpCode(200) - async listWorkflowRuntimeStats(): Promise<WorkflowRuntimeStatsModel[]> { - const results = await this.metricService.listWorkflowStats(); - - return results.map(result => plainToClass(WorkflowRuntimeStatsModel, result)); - } - - @common.Get('/metrics/workflow-runtime-agent-cases-stats') - @swagger.ApiOkResponse({ type: [WorkflowRuntimeAgentCasesModel] }) - @common.HttpCode(200) - async listWorkflowRuntimeAgentCasesStats( - @Query() query: GetWorkflowsRuntimeAgentCases, - ): Promise<WorkflowRuntimeAgentCasesModel[]> { - const results = await this.metricService.listWorkflowRuntimeAgentCasesStats({ - fromDate: query.fromDate, - }); - - return results.map(result => plainToClass(WorkflowRuntimeAgentCasesModel, result)); - } - - @common.Get('/metrics/workflow-runtime-cases-per-status') - @swagger.ApiOkResponse({ type: WorkflowRuntimeCasesPerStatusModel }) - @common.HttpCode(200) - async listWorkflowRuntimeCasesPerStatusStats( - @Query() query: GetWorkflowsRuntimeAgentCases, - ): Promise<WorkflowRuntimeCasesPerStatusModel> { - const results = await this.metricService.getWorkflowsRuntimeCasesPerStatus({ - fromDate: query.fromDate, - }); - return plainToClass(WorkflowRuntimeCasesPerStatusModel, results); - } - - @common.Get('/metrics/user-stats') - async listUserWorkflowRuntimeUserStats( - @common.Request() request: Request, - @common.Query() query: GetWorkflowRuntimeUserStatsDto, - ) { - const statsParams: GetUserStatsParams = { - fromDate: query.fromDate, - }; - - const userId = request.user!.id; - - const [approvalRate, averageResolutionTime, averageAssignmentTime, averageReviewTime] = - await Promise.all([ - this.service.getUserApprovalRate(userId), - this.service.getAverageResolutionTime(userId, statsParams), - this.service.getAverageAssignmentTime(userId, statsParams), - this.service.getAverageReviewTime(userId, statsParams), - ]); - - return { - approvalRate, - averageResolutionTime, - averageAssignmentTime, - averageReviewTime, - }; - } - - @common.Get('/metrics/case-resolving') - async listCaseResolvingMetric( - @common.Request() request: Request, - @common.Query() query: GetCaseResolvingMetricsDto, - ) { - const userId = request.user!.id; - - return await this.service.getResolvedCasesPerDay(userId, { fromDate: query.fromDate }); - } - @common.Get('/workflow-definition/:id') @ApiOkResponse({ type: WorkflowDefinitionModel }) @swagger.ApiNotFoundResponse({ type: errors.NotFoundException }) diff --git a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts index 35bb615103..a337ca6a8f 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.unit.test.ts @@ -9,9 +9,7 @@ import { AclValidateRequestInterceptor } from '@/common/access-control/intercept import { WorkflowControllerExternal } from './workflow.controller.external'; import { WorkflowService } from './workflow.service'; import { EventEmitter2 } from '@nestjs/event-emitter'; -import { CompleteWorkflowData } from './types'; import { WorkflowDefinition, WorkflowRuntimeData } from '@prisma/client'; -import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; const acGuard = { canActivate: () => { @@ -52,10 +50,6 @@ describe('Workflow (external)', () => { provide: EventEmitter2, useValue: {} as EventEmitter2, }, - { - provide: WorkflowMetricService, - useValue: {} as WorkflowMetricService, - }, ], controllers: [WorkflowControllerExternal], imports: [ACLModule], diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index b4ab2fb178..f9eef5dd77 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -18,7 +18,6 @@ import { FilterService } from '@/filter/filter.service'; import { WorkflowRuntimeDataRepository } from '@/workflow/workflow-runtime-data.repository'; import { UserService } from '@/user/user.service'; import { UserRepository } from '@/user/user.repository'; -import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; @Module({ imports: [ACLModule, forwardRef(() => AuthModule), HttpModule], @@ -38,7 +37,6 @@ import { WorkflowMetricService } from '@/workflow/workflow-metric.service'; FilterService, UserService, UserRepository, - WorkflowMetricService, ], exports: [WorkflowService, ACLModule, AuthModule, StorageService, FileRepository], }) diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 5027a7f3fa..2ee66521f2 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -14,7 +14,6 @@ import { } from '@prisma/client'; import { WorkflowEventInput } from './dtos/workflow-event-input'; import { - GetUserStatsParams, ListRuntimeDataResult, ListWorkflowsRuntimeParams, RunnableWorkflowData, @@ -1167,104 +1166,4 @@ export class WorkflowService { async getWorkflowRuntimeDataContext(id: string) { return this.workflowRuntimeDataRepository.findContext(id); } - - async getUserApprovalRate(userId: string) { - const [resolved, approved] = await Promise.all([ - this.workflowRuntimeDataRepository.count({ - where: { - assigneeId: userId, - resolvedAt: { - not: null, - }, - }, - }), - this.workflowRuntimeDataRepository.count({ - where: { - assigneeId: userId, - resolvedAt: { - not: null, - }, - status: WorkflowRuntimeDataStatus.completed, - }, - }), - ]); - - return resolved && approved ? (approved / resolved) * 100 : 0; - } - - // Prisma queryRaw doesn't support type interval which is recieved by calculating resolvedAt - createdAt - // to handle this date columns converted to MS - async getAverageResolutionTime(userId: string, params: GetUserStatsParams = {}): Promise<number> { - const rawQuery = ` - select - avg((extract(epoch from "resolvedAt") - extract(epoch from "createdAt")) * 1000)::int - from "WorkflowRuntimeData" - where "assigneeId" = $1 - ${params.fromDate ? `and "createdAt" >= $2` : ''} - and "resolvedAt" notnull - group by "assigneeId"`; - - return await this._executeAverageTimeQuery(rawQuery, userId, params); - } - - async getAverageAssignmentTime(userId: string, params: GetUserStatsParams): Promise<number> { - const rawQuery = ` - select - avg((extract(epoch from "assignedAt") - extract(epoch from "createdAt")) * 1000)::int - from "WorkflowRuntimeData" - where "assigneeId" = $1 - ${params.fromDate ? `and "createdAt" >= $2` : ''} - and "assignedAt" notnull - group by "assigneeId" - `; - - return await this._executeAverageTimeQuery(rawQuery, userId, params); - } - - async getAverageReviewTime(userId: string, params: GetUserStatsParams): Promise<number> { - const rawQuery = ` - select - avg((extract(epoch from "resolvedAt") - extract(epoch from "assignedAt")) * 1000)::int - from "WorkflowRuntimeData" - where "assigneeId" = $1 - ${params.fromDate ? `and "createdAt" >= $2` : ''} - and "assignedAt" notnull - group by "assigneeId"`; - - return await this._executeAverageTimeQuery(rawQuery, userId, params); - } - - async getResolvedCasesPerDay(userId: string, params: GetUserStatsParams) { - const rawQuery = ` - select - date_trunc('day', "resolvedAt") as day, count(*)::int as cases_per_day - from "WorkflowRuntimeData" - where "assigneeId" = $1 - ${params.fromDate ? `and "resolvedAt" > $2` : ''} - and "resolvedAt" notnull - group by day`; - - return ( - await this.workflowRuntimeDataRepository.queryRaw<{ day: string; cases_per_day: number }[]>( - rawQuery, - [userId, ...(params.fromDate ? [params.fromDate] : [])], - ) - ).map(data => ({ - date: data.day, - casesPerDay: data.cases_per_day, - })); - } - - private async _executeAverageTimeQuery( - query: string, - userId: string, - params: GetUserStatsParams, - ): Promise<number> { - const queryResults = await this.workflowRuntimeDataRepository.queryRaw<{ avg: number }[]>( - query, - [userId, ...(params.fromDate ? [params.fromDate] : [])], - ); - - return queryResults.length ? queryResults.at(-1)?.avg || 0 : 0; - } } From 585b20a135d384ebd1151ee16f102f98dd4679a1 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 12 Jul 2023 02:01:24 +0300 Subject: [PATCH 098/123] feat(doc-schemas): add mtn statement (#672) * feat(doc-schemas): add mtn statement * version release * version release * version release --- .changeset/config.json | 4 +- .github/workflows/release.yml | 2 +- apps/backoffice-v2/package.json | 4 +- examples/headless-example/CHANGELOG.md | 9 ++ examples/headless-example/package.json | 6 +- packages/common/CHANGELOG.md | 6 ++ packages/common/package.json | 2 +- .../workflow/documents/schemas/GH.ts | 33 ++++++++ packages/workflow-core/CHANGELOG.md | 7 ++ packages/workflow-core/package.json | 4 +- pnpm-lock.yaml | 82 +++++++++---------- sdks/web-ui-sdk/CHANGELOG.md | 7 ++ sdks/web-ui-sdk/package.json | 4 +- sdks/workflow-browser-sdk/CHANGELOG.md | 8 ++ sdks/workflow-browser-sdk/package.json | 6 +- services/workflows-service/CHANGELOG.md | 7 ++ services/workflows-service/package.json | 4 +- .../migration.sql | 14 ++++ services/workflows-service/scripts/seed.ts | 2 +- websites/docs/package.json | 2 +- 20 files changed, 152 insertions(+), 61 deletions(-) create mode 100644 examples/headless-example/CHANGELOG.md create mode 100644 services/workflows-service/prisma/migrations/20230711224250_add_enduser_type_change_business_address/migration.sql diff --git a/.changeset/config.json b/.changeset/config.json index bc4aa209e6..1ba0fb1daa 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -5,7 +5,7 @@ "fixed": [], "linked": [], "access": "public", - "baseBranch": "main", + "baseBranch": "dev", "updateInternalDependencies": "patch", - "ignore": ["@ballerine/docs", "@ballerine/backoffice-v2"] + "ignore": ["@ballerine/docs-site", "@ballerine/backoffice-v2"] } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f2f568020..fd6d7941fb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: Release on: push: branches: - - main + - dev concurrency: ${{ github.workflow }}-${{ github.ref }} diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index a6c13d0364..218716f3f4 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -48,8 +48,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "0.5.3", - "@ballerine/workflow-browser-sdk": "^0.4.6", + "@ballerine/common": "0.5.4", + "@ballerine/workflow-browser-sdk": "^0.4.7", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/examples/headless-example/CHANGELOG.md b/examples/headless-example/CHANGELOG.md new file mode 100644 index 0000000000..49bf2e1036 --- /dev/null +++ b/examples/headless-example/CHANGELOG.md @@ -0,0 +1,9 @@ +# @ballerine/headless-example + +## 0.0.2 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.4 + - @ballerine/workflow-browser-sdk@0.4.7 diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 55253ca78d..a7a0ceefc0 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/headless-example", "private": true, - "version": "0.0.1", + "version": "0.0.2", "type": "module", "scripts": { "format": "prettier --plugin-search-dir=. --write .", @@ -31,8 +31,8 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/common": "0.5.3", - "@ballerine/workflow-browser-sdk": "^0.4.3", + "@ballerine/common": "0.5.4", + "@ballerine/workflow-browser-sdk": "^0.4.7", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", "@fontsource/inter": "^4.5.15", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 18135885c4..9fdccd3d24 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.5.4 + +### Patch Changes + +- Schema Changes (Docs) + ## 0.5.3 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index c8d7381d97..595ec94fe5 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.5.3", + "version": "0.5.4", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 2d554cd015..3500dc6ca9 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -43,6 +43,39 @@ export const certificateOfResidenceGH: TDocument = { }; export const ghanaDocuments: TDocument[] = [ + { + category: 'financial_information', + type: 'mtn_statement', + issuer: { + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + accountNameHolder: { + type: 'string', + }, + msisdn: { + type: 'string', + pattern: '^233[0-9]{9}$', + }, + from: { + type: 'string', + format: 'date', + }, + to: { + type: 'string', + format: 'date', + }, + timeRun: { + type: 'string', + format: 'date', + }, + }, + }, + }, { category: 'proof_of_address', type: 'water_bill', diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index 8d8c432bc1..003b2bd8d0 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-core +## 0.4.14 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.4 + ## 0.4.13 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index adecdd7e03..9d58d74fe5 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.13", + "version": "0.4.14", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -29,7 +29,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.3", + "@ballerine/common": "0.5.4", "ajv": "^8.12.0", "jmespath": "^0.16.0", "json-logic-js": "^2.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c77c4a3cf6..72d517532f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -61,10 +61,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.6 + specifier: ^0.4.7 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -501,10 +501,10 @@ importers: examples/headless-example: dependencies: '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.3 + specifier: ^0.4.7 version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 @@ -816,7 +816,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../common ajv: specifier: ^8.12.0 @@ -955,7 +955,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -1076,10 +1076,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@ballerine/workflow-core': - specifier: ^0.4.13 + specifier: ^0.4.14 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -1424,7 +1424,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 @@ -1692,7 +1692,7 @@ importers: specifier: ^4.0.0 version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) '@ballerine/common': - specifier: 0.5.3 + specifier: 0.5.4 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 @@ -11355,11 +11355,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.43: - resolution: {integrity: sha512-qqucnKSHW+zLbISImyeIu2+SEJXElw0Ge1XiaWjhCVH9HGjZa4Zzv9KN3zLdGCTMY6yZabQOzlhela9QGx6pzQ==} + /@storybook/channel-postmessage@7.1.0-rc.1: + resolution: {integrity: sha512-bX3j4EQIftkDMeXzL9JCAKSBR6FxAC6YfjavGBdhBIrOAdAqgP8opX65PJHpmN7j93hhaPqkMxsrJrtvqfTFXQ==} dependencies: - '@storybook/channels': 7.1.0-alpha.43 - '@storybook/client-logger': 7.1.0-alpha.43 + '@storybook/channels': 7.1.0-rc.1 + '@storybook/client-logger': 7.1.0-rc.1 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -11383,11 +11383,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.43: - resolution: {integrity: sha512-9GGMCqntc9bcMiDoddtotJqzCnUWLfSsmjJH3ml9k8W8hSmteVje/oUl0da7s2w1RQsNCBggKhkIr7/hz36vHQ==} + /@storybook/channels@7.1.0-rc.1: + resolution: {integrity: sha512-I7qwZdtTr+0q4/6x0UhqNy3LuvMZzHW9+cJrJwlpxfXDv9KHXQc4t1FJrWgeUymTreckLUWkwuO0DrRa8s594g==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.43 - '@storybook/core-events': 7.1.0-alpha.43 + '@storybook/client-logger': 7.1.0-rc.1 + '@storybook/core-events': 7.1.0-rc.1 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -11456,8 +11456,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.43: - resolution: {integrity: sha512-tDUB9OqFSXTfTB+ZfL/tADiorx6vUYxszIStfdofxMNttMnikgu5mgSiFxVCOm1ZpIG+x9YD0fdeBPu/VsyTsw==} + /@storybook/client-logger@7.1.0-rc.1: + resolution: {integrity: sha512-9gIDb6K7cotqZie+BbhCFg0Lk2yMHkJEnC0/0cPXO7FqRhx75kHrGIsdrZShylZUjLoLQZQoV5z2mr085NO4Eg==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -11561,8 +11561,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.43: - resolution: {integrity: sha512-pOscUP9AIZ9RYHfNpSoKFcAzW0jsY3T09lJAvAzC5tjnfGp8QrJED+huHHEXY6y4lzUlQPZiZKBnAbcCQLnAAg==} + /@storybook/core-events@7.1.0-rc.1: + resolution: {integrity: sha512-cuWpVQxJLLHZ8dxO17yySQdaj20VFYZC/Cm4guKv+/RH0aI+kALkoe5zJ6JnUSjwPujrZI6c/9bHVsjqi3czzQ==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -11698,14 +11698,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.43: - resolution: {integrity: sha512-aXpTW+K/ubDJcc/Uc6mZ7Bf7jI8tCS9CYJ2C9RLjdjzGf9tf2r2+UBxtwguf6WfadrqanF+wPJyZDtGVVjnOAw==} + /@storybook/instrumenter@7.1.0-rc.1: + resolution: {integrity: sha512-o/WTL1loHHd6ynay/BCowjC5EXz5ce4GfjeZkEkAMiSAdskPV2jCnxYaz6Sq9+wMwZkEEmt36pgvQQjqi3Od1g==} dependencies: - '@storybook/channels': 7.1.0-alpha.43 - '@storybook/client-logger': 7.1.0-alpha.43 - '@storybook/core-events': 7.1.0-alpha.43 + '@storybook/channels': 7.1.0-rc.1 + '@storybook/client-logger': 7.1.0-rc.1 + '@storybook/core-events': 7.1.0-rc.1 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.43 + '@storybook/preview-api': 7.1.0-rc.1 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -11774,16 +11774,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.43: - resolution: {integrity: sha512-Tf/uYN8NJRv46WL0fHr2ZZULej5ytqg2hAIL0v7vAQksh3EyTFVV4/E8H+3KiCpxFI/NudSxl7AapC5d0fDCmg==} + /@storybook/preview-api@7.1.0-rc.1: + resolution: {integrity: sha512-Wme9IZvMolGtyAbbx6Z31+AHxP5EltizYiSmBwxZrX5uxMSvNMS8MbB0A85mrnw9I0U0MORSqDeclUQ8S/CL5g==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.43 - '@storybook/channels': 7.1.0-alpha.43 - '@storybook/client-logger': 7.1.0-alpha.43 - '@storybook/core-events': 7.1.0-alpha.43 + '@storybook/channel-postmessage': 7.1.0-rc.1 + '@storybook/channels': 7.1.0-rc.1 + '@storybook/client-logger': 7.1.0-rc.1 + '@storybook/core-events': 7.1.0-rc.1 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.43 + '@storybook/types': 7.1.0-rc.1 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -11931,8 +11931,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.43 - '@storybook/instrumenter': 7.1.0-alpha.43 + '@storybook/client-logger': 7.1.0-rc.1 + '@storybook/instrumenter': 7.1.0-rc.1 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -11975,10 +11975,10 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.43: - resolution: {integrity: sha512-Uea1/t62Bud4eqSYO0ElzgIsZ4XQJipl0LbakxhnJtcOfgrFnVQmI6qfqOPPS9rKU5f+pnakj+rk1pxHMYgVgw==} + /@storybook/types@7.1.0-rc.1: + resolution: {integrity: sha512-pm5xlgY37nPRm+SZJrSHJAk5oGgVA1ft/5T4zaw/C4Hkh2PtzlvP16CG1kdVug1AHRKWUSKNJYELdzYsCbvUhg==} dependencies: - '@storybook/channels': 7.1.0-alpha.43 + '@storybook/channels': 7.1.0-rc.1 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 file-system-cache: 2.3.0 diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index 6548279b56..439ae74fe4 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.3.5 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.4 + ## 1.3.4 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index d1a66c9106..f0cac197a7 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.3.4", + "version": "1.3.5", "type": "module", "files": [ "dist" @@ -93,7 +93,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.5.3", + "@ballerine/common": "0.5.4", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index 1853aecc28..759bad57dd 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.7 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.4 + - @ballerine/workflow-core@0.4.14 + ## 0.4.6 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index ce9cfba005..a047b9b07e 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.6", + "version": "0.4.7", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -30,8 +30,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.3", - "@ballerine/workflow-core": "^0.4.13", + "@ballerine/common": "0.5.4", + "@ballerine/workflow-core": "^0.4.14", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index 590898f479..a039087700 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflows-service +## 0.4.15 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.4 + ## 0.4.14 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 71e9de817e..2625de5d62 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.14", + "version": "0.4.15", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -38,7 +38,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.5.3", + "@ballerine/common": "0.5.4", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", diff --git a/services/workflows-service/prisma/migrations/20230711224250_add_enduser_type_change_business_address/migration.sql b/services/workflows-service/prisma/migrations/20230711224250_add_enduser_type_change_business_address/migration.sql new file mode 100644 index 0000000000..05f7635c88 --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230711224250_add_enduser_type_change_business_address/migration.sql @@ -0,0 +1,14 @@ +/* + Warnings: + + - The `address` column on the `Business` table would be dropped and recreated. This will lead to data loss if there is data in the column. + +*/ +-- AlterTable +ALTER TABLE "Business" ADD COLUMN "bankInformation" JSONB, +DROP COLUMN "address", +ADD COLUMN "address" JSONB; + +-- AlterTable +ALTER TABLE "EndUser" ADD COLUMN "isContactPerson" BOOLEAN NOT NULL DEFAULT false, +ALTER COLUMN "endUserType" SET DEFAULT 'individual'; diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 7d409a0415..35b53af319 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -776,7 +776,7 @@ async function seed(bcryptSalt: Salt) { }, }, where: { - workflowDefinitionId: manualMachineId, + workflowDefinitionId: riskScoreMachineKybId, endUserId: { not: null }, }, }); diff --git a/websites/docs/package.json b/websites/docs/package.json index 59eab95035..cba9aa3c10 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -23,7 +23,7 @@ "@astrojs/react": "^2.2.1", "@astrojs/solid-js": "^1.2.3", "@astrojs/tailwind": "^4.0.0", - "@ballerine/common": "0.5.3", + "@ballerine/common": "0.5.4", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From 19fc64d8a6e069aae39840d01bbb7f6b2fc3e6d7 Mon Sep 17 00:00:00 2001 From: pratapalakshmi <137189067+pratapalakshmi@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:50:27 +0530 Subject: [PATCH 099/123] keep the values up to date docker-compose.yml (#646) Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- services/workflows-service/docker-compose.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/workflows-service/docker-compose.yml b/services/workflows-service/docker-compose.yml index ef40357e68..0947082e67 100644 --- a/services/workflows-service/docker-compose.yml +++ b/services/workflows-service/docker-compose.yml @@ -12,6 +12,17 @@ services: JWT_SECRET_KEY: ${JWT_SECRET_KEY} JWT_EXPIRATION: ${JWT_EXPIRATION} DB_URL: postgres://${DB_USER}:${DB_PASSWORD}@db:${DB_PORT} + PORT: ${PORT} + DB_USER: ${DB_USER} + DB_PASSWORD: ${DB_PASSWORD} + DB_PORT: ${DB_PORT} + SESSION_SECRET: ${SESSION_SECRET}iGdnj4A0YOhj8dHJK7IWSvQKEZsG7P70FFehuddhFPjtg/bSkzFejYILk4Xue6Ilx9y3IAwzR8pV1gb4 + WORKFLOW_DASHBOARD_CORS_ORIGIN: ${WORKFLOW_DASHBOARD_CORS_ORIGIN} + BACKOFFICE_CORS_ORIGIN: ${BACKOFFICE_CORS_ORIGIN} + HEADLESS_EXAMPLE_CORS_ORIGIN: ${BACKOFFICE_CORS_ORIGIN} + COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME} + API_KEY: ${API_KEY} + NODE_ENV: ${NODE_ENV} depends_on: - migrate migrate: From 1f0bd1c56b6bed21be92666fe2c3135a3046568c Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Wed, 12 Jul 2023 13:55:11 +0000 Subject: [PATCH 100/123] fix: added biging serialization & updated models & FE types (#675) * fix: added biging serialization & updated models & FE types * feat: updated metrics agent cases & cases per status to all time stats & updated endpoints & sql --- .../domains/user/api/user-stats/user-stats.api.ts | 15 +++++++++++++-- .../user/api/user-stats/user-stats.types.ts | 7 +++++++ .../user/api/users-stats/users-stats.types.ts | 2 +- .../workflow-metrics/workflow-metrics.types.ts | 2 +- .../components/molecules/UserStats/UserStats.tsx | 2 +- .../hooks/useUserStatsQuery/useUserStatsQuery.ts | 4 ++-- .../molecules/AgentCasesChart/AgentCasesChart.tsx | 1 - .../CasesPerStatusChart/CasesPerStatusChart.tsx | 7 +------ .../useUsersAssignedCasesStatsQuery.ts | 2 +- .../useCasesPerStatusQuery.ts | 5 +---- .../src/metrics/common/types/base-query.params.ts | 2 +- .../dto/get-users-assigned-cases-statistic.dto.ts | 6 +++++- .../dto/get-workflow-runtimes-status-count.dto.ts | 6 +++++- .../src/metrics/repository/metrics.repository.ts | 6 +++--- .../models/average-assignment-time.model.ts | 4 +++- .../models/average-resolution-time.model.ts | 4 ++-- ...time.model.ts => average-review-time.model.ts} | 6 +++--- .../sql/aggregate-average-assignment-time.sql.ts | 4 ++-- .../sql/aggregate-average-resolution-time.sql.ts | 4 ++-- .../sql/aggregate-average-review-time.sql.ts | 4 ++-- ...ggregate-users-assigned-cases-statistic.sql.ts | 2 +- ...gate-workflow-runtime-status-case-count.sql.ts | 2 +- .../types/aggregate-average-assignment-time.ts | 2 +- .../types/aggregate-average-resolution-time.ts | 2 +- .../types/aggregate-average-review-time.ts | 2 +- .../src/metrics/service/metrics.service.ts | 7 ++++--- .../user-workflow-processing-statistic.model.ts | 6 +++--- 27 files changed, 68 insertions(+), 48 deletions(-) rename services/workflows-service/src/metrics/repository/models/{user-average-review-time.model.ts => average-review-time.model.ts} (58%) diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts index 3da29101e1..50b21e2e36 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts @@ -3,15 +3,26 @@ import { GetUserStatsDto, IResolvedCasesDailyMetric, IUserStats, + UserStats, } from '@app/domains/user/api/user-stats/user-stats.types'; import { request } from '@app/lib/request'; -export const fetchUserStats = async (query: GetUserStatsDto): Promise<IUserStats> => { +export const fetchUserStats = async (query: GetUserStatsDto): Promise<UserStats> => { const result = await request.get<IUserStats>(`/metrics/users/workflow-processing-statistic`, { params: query, }); - return result.data; + const { approvalRate, averageAssignmentTime, averageResolutionTime, averageReviewTime } = + result.data || ({} as IUserStats); + + const userStats: UserStats = { + approvalRate: approvalRate, + averageAssignmentTime: Number(averageAssignmentTime), + averageResolutionTime: Number(averageResolutionTime), + averageReviewTime: Number(averageReviewTime), + }; + + return userStats; }; export const fetchUserDailyCasesResolvedStats = async ( diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts index 429905520b..b7ccd2a872 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts @@ -4,6 +4,13 @@ export interface IResolvedCasesDailyMetric { } export interface IUserStats { + approvalRate: number; + averageResolutionTime: string; + averageAssignmentTime: string; + averageReviewTime: string; +} + +export interface UserStats { approvalRate: number; averageResolutionTime: number; averageAssignmentTime: number; diff --git a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts index 2d511ac030..fc685f96d6 100644 --- a/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts +++ b/apps/workflows-dashboard/src/domains/user/api/users-stats/users-stats.types.ts @@ -11,5 +11,5 @@ export interface GetUsersCaseResolvingStats { } export interface GetUsersAssignedCasesStatsDto { - fromDate: number; + fromDate?: number; } diff --git a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts index 4693702c1f..5ec6ce549e 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/workflow-metrics/workflow-metrics.types.ts @@ -17,5 +17,5 @@ export type ICasesPerStatusStats = Record<IWorkflowStatus, number>; export interface GetCasesPerStatusDto { // UNIX timestamp - fromDate: number; + fromDate?: number; } diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx index 486c52aa91..17167d69b4 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/UserStats.tsx @@ -1,4 +1,4 @@ -import { IUserStats } from '@app/domains/user/api/user-stats'; +import { UserStats as IUserStats } from '@app/domains/user/api/user-stats'; import { DurationCard } from '@app/pages/Overview/components/molecules/UserStats/components/DurationCard'; import { PercentageCard } from '@app/pages/Overview/components/molecules/UserStats/components/PercentageCard'; diff --git a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts index cd1a81aec7..24a6129629 100644 --- a/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Overview/hooks/useUserStatsQuery/useUserStatsQuery.ts @@ -1,9 +1,9 @@ import dayjs from 'dayjs'; -import { IUserStats, userStatsQueryKeys } from '@app/domains/user/api/user-stats'; +import { UserStats, userStatsQueryKeys } from '@app/domains/user/api/user-stats'; import { useQuery } from '@tanstack/react-query'; import { useMemo } from 'react'; -const defaultValues: IUserStats = { +const defaultValues: UserStats = { approvalRate: 0, averageResolutionTime: 0, averageReviewTime: 0, diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx index 98d5749a65..c67669ae87 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentCasesChart/AgentCasesChart.tsx @@ -30,7 +30,6 @@ export const AgentCasesChart = memo(({ isLoading, data }: Props) => { return ( <MetricListChart title="Assigned Cases per agent" - description="( last 1 hour )" isLoading={isLoading} items={chartItems} emptyPlaceholder={<div className="text-sm font-medium">No active cases.</div>} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx index 2687d1b7e4..fdecfdc8a3 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/CasesPerStatusChart/CasesPerStatusChart.tsx @@ -28,11 +28,6 @@ export const CasesPerStatusChart = ({ isLoading, data }: Props) => { ); return ( - <MetricListChart - title="Amount of cases per status" - description="( last 1 hour )" - isLoading={isLoading} - items={chartItems} - /> + <MetricListChart title="Amount of cases per status" isLoading={isLoading} items={chartItems} /> ); }; diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts index 9be91d95ec..f3a01ba89c 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentCasesStats/hooks/useUsersAssignedCasesStatsQuery/useUsersAssignedCasesStatsQuery.ts @@ -6,7 +6,7 @@ export const useUsersAssignedCasesStatsQuery = () => { const { filters } = useWorkflowFilters(); const { data, isLoading } = useQuery({ ...usersStatsQueryKeys.casesAssignedStats({ - fromDate: filters.fromDate!, + // fromDate: filters.fromDate!, }), enabled: Boolean(filters.fromDate), }); diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts index 7f50c34d6f..51b9e6206c 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/CasesPerStatusStats/hooks/useCasesPerStatusQuery/useCasesPerStatusQuery.ts @@ -1,14 +1,11 @@ import { ICasesPerStatusStats } from '@app/domains/workflows/api/workflow-metrics'; import { workflowMetricsKeys } from '@app/domains/workflows/api/workflow-metrics/query-keys'; -import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; import { useQuery } from '@tanstack/react-query'; export const useCasesPerStatusQuery = () => { - const { filters } = useWorkflowFilters(); const { data = { active: 0, completed: 0, failed: 0 } as ICasesPerStatusStats, isLoading } = useQuery({ - ...workflowMetricsKeys.workflowCasesPerStatusStats({ fromDate: filters.fromDate! }), - enabled: Boolean(filters.fromDate), + ...workflowMetricsKeys.workflowCasesPerStatusStats({}), }); return { diff --git a/services/workflows-service/src/metrics/common/types/base-query.params.ts b/services/workflows-service/src/metrics/common/types/base-query.params.ts index 3836dfc12d..9affd04009 100644 --- a/services/workflows-service/src/metrics/common/types/base-query.params.ts +++ b/services/workflows-service/src/metrics/common/types/base-query.params.ts @@ -1,3 +1,3 @@ export interface BaseParams { - fromDate: Date; + fromDate?: Date; } diff --git a/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts b/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts index dbe249d5fc..1e66af5b83 100644 --- a/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts +++ b/services/workflows-service/src/metrics/dto/get-users-assigned-cases-statistic.dto.ts @@ -1,3 +1,7 @@ import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; +import { IsOptional } from 'class-validator'; -export class GetUsersAssignedCasesStatisticDto extends DateQueryParamsDto {} +export class GetUsersAssignedCasesStatisticDto extends DateQueryParamsDto { + @IsOptional() + fromDate!: Date; +} diff --git a/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts b/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts index 0b8303733d..b975036ad2 100644 --- a/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts +++ b/services/workflows-service/src/metrics/dto/get-workflow-runtimes-status-count.dto.ts @@ -1,3 +1,7 @@ import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; +import { IsOptional } from 'class-validator'; -export class GetWorkflowRuntimesStatusCountDto extends DateQueryParamsDto {} +export class GetWorkflowRuntimesStatusCountDto extends DateQueryParamsDto { + @IsOptional() + fromDate!: Date; +} diff --git a/services/workflows-service/src/metrics/repository/metrics.repository.ts b/services/workflows-service/src/metrics/repository/metrics.repository.ts index 48d6d72d90..b893b3eb6b 100644 --- a/services/workflows-service/src/metrics/repository/metrics.repository.ts +++ b/services/workflows-service/src/metrics/repository/metrics.repository.ts @@ -19,7 +19,7 @@ import { IAggregateAverageResolutionTime } from '@/metrics/repository/types/aggr import { GetUserAverageAssignmentTimeParams } from '@/metrics/repository/types/get-user-average-assignment-time.params'; import { IAggregateAverageAssignmentTime } from '@/metrics/repository/types/aggregate-average-assignment-time'; import { GetUserAverageReviewTimeParams } from '@/metrics/repository/types/get-user-average-review-time.params'; -import { UserAverageReviewTimeModel } from '@/metrics/repository/models/user-average-review-time.model'; +import { AverageReviewTimeModel } from '@/metrics/repository/models/average-review-time.model'; import { IAggregateAverageReviewTime } from '@/metrics/repository/types/aggregate-average-review-time'; import { ListUserCasesResolvedDailyParams } from '@/metrics/repository/types/list-user-cases-resolved-daily.params'; import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; @@ -139,14 +139,14 @@ export class MetricsRepository { async getUserAverageReviewTime( params: GetUserAverageReviewTimeParams, - ): Promise<UserAverageReviewTimeModel | null> { + ): Promise<AverageReviewTimeModel | null> { const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageReviewTime[]>( aggregateAverageReviewTimeQuery, params.fromDate, params.userId, ); - return results.length ? plainToClass(UserAverageReviewTimeModel, results.at(-1)) : null; + return results.length ? plainToClass(AverageReviewTimeModel, results.at(-1)) : null; } async listCasesResolvedDaily( diff --git a/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts b/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts index 840ca2c2a7..18753d8b77 100644 --- a/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts +++ b/services/workflows-service/src/metrics/repository/models/average-assignment-time.model.ts @@ -1,6 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; export class AverageAssignmentTimeModel { @ApiProperty({ description: 'Average assignment time in milliseconds' }) - time!: number; + @Transform(({ value }) => (!value ? 0 : value.split('.')[0])) + time!: string; } diff --git a/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts b/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts index 35ef0f4912..873a6ceb49 100644 --- a/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts +++ b/services/workflows-service/src/metrics/repository/models/average-resolution-time.model.ts @@ -3,6 +3,6 @@ import { Transform } from 'class-transformer'; export class AverageResolutionTimeModel { @ApiProperty({ description: 'Average resolution time in milliseconds.' }) - @Transform(({ value }) => (value === null ? 0 : value)) - time!: number; + @Transform(({ value }) => (!value ? 0 : value.split('.')[0])) + time!: string; } diff --git a/services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts b/services/workflows-service/src/metrics/repository/models/average-review-time.model.ts similarity index 58% rename from services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts rename to services/workflows-service/src/metrics/repository/models/average-review-time.model.ts index 09c8204c6b..8733327abf 100644 --- a/services/workflows-service/src/metrics/repository/models/user-average-review-time.model.ts +++ b/services/workflows-service/src/metrics/repository/models/average-review-time.model.ts @@ -1,8 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; import { Transform } from 'class-transformer'; -export class UserAverageReviewTimeModel { +export class AverageReviewTimeModel { @ApiProperty({ description: 'Average review time in milliseconds' }) - @Transform(({ value }) => (value === null ? 0 : value)) - time!: number; + @Transform(({ value }) => (!value ? 0 : value.split('.')[0])) + time!: string; } diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts index 45fadbf694..af3068f008 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts @@ -5,11 +5,11 @@ select when "createdAt" notnull and "assignedAt" notnull then (extract(epoch from "assignedAt") - extract(epoch from "createdAt")) * 1000 else 0 - end)::int as time + end)::bigint as time from "WorkflowRuntimeData" where "assigneeId" = "User".id and "assignedAt" >= $1) - )::int as time + )::varchar as time from "User" where diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts index c20446a903..9e937088da 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts @@ -5,11 +5,11 @@ select when "createdAt" notnull and "resolvedAt" notnull then (extract(epoch from "resolvedAt") - extract(epoch from "createdAt")) * 1000 else 0 - end)::int as time + end)::bigint as time from "WorkflowRuntimeData" where "assigneeId" = "User".id and "resolvedAt" >= $1) - )::int as time + )::varchar as time from "User" where diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts index 62391b5477..cffe1e36e9 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts @@ -5,11 +5,11 @@ select when "resolvedAt" notnull and "assignedAt" notnull then (extract(epoch from "resolvedAt") - extract(epoch from "assignedAt")) * 1000 else 0 - end)::int as time + end)::bigint as time from "WorkflowRuntimeData" where "assigneeId" = "User".id and "resolvedAt" >= $1) - )::int as time + )::varchar as time from "User" where diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts index 7fa93db179..1e0e0654f2 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-users-assigned-cases-statistic.sql.ts @@ -13,7 +13,7 @@ inner join ( count(*) as "casesCount" from "WorkflowRuntimeData" - where "assignedAt" >= $1 + where "assignedAt" >= coalesce($1, '1900-01-01'::timestamp) group by "assigneeId" ) as agent_workflow_runtime on agent_workflow_runtime."assigneeId" = "id" diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts index 47add5b620..4041d9f4e4 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-workflow-runtime-status-case-count.sql.ts @@ -25,7 +25,7 @@ from count("status") as status_count from "WorkflowRuntimeData" - where "createdAt" >= $1 + where "createdAt" >= coalesce($1, '1900-01-01'::timestamp) group by "status" ) as workflow_runtime_data`; diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts index 2a9198e444..da1f77db22 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageAssignmentTime { - time: number | null; + time: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts index 6507c181bb..e868faddc0 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageResolutionTime { - time: number | null; + time: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts index a1f7314813..d06903b3b3 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageReviewTime { - time: number | null; + time: string | null; } diff --git a/services/workflows-service/src/metrics/service/metrics.service.ts b/services/workflows-service/src/metrics/service/metrics.service.ts index 8a628da711..e1b7a1e18f 100644 --- a/services/workflows-service/src/metrics/service/metrics.service.ts +++ b/services/workflows-service/src/metrics/service/metrics.service.ts @@ -52,6 +52,7 @@ export class MetricsService { this.metricsRepository.getUserApprovalRate(commonParams), this.metricsRepository.getUserAverageAssignmentTime(commonParams), this.metricsRepository.getUserAverageResolutionTime(commonParams), + this.metricsRepository.getUserAverageReviewTime(commonParams), ]); @@ -70,9 +71,9 @@ export class MetricsService { } statisticModel.approvalRate = approvalRateModel?.approvalRate || 0; - statisticModel.averageAssignmentTime = averageAssignmentTimeModel?.time || 0; - statisticModel.averageResolutionTime = averageResolutionTimeModel?.time || 0; - statisticModel.averageReviewTime = averageReviewTimeModel?.time || 0; + statisticModel.averageAssignmentTime = averageAssignmentTimeModel?.time || '0'; + statisticModel.averageResolutionTime = averageResolutionTimeModel?.time || '0'; + statisticModel.averageReviewTime = averageReviewTimeModel?.time || '0'; return statisticModel; } diff --git a/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts index cd3e2754e9..c32dd146ee 100644 --- a/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts +++ b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts @@ -8,11 +8,11 @@ export class UserWorkflowProcessingStatisticModel { approvalRate!: number; @ApiProperty({ description: 'Average resolution time in milliseconds' }) - averageResolutionTime!: number; + averageResolutionTime!: string; @ApiProperty({ description: 'Average assignment time in milliseconds' }) - averageAssignmentTime!: number; + averageAssignmentTime!: string; @ApiProperty({ description: 'Average review time in milliseconds' }) - averageReviewTime!: number; + averageReviewTime!: string; } From aadd5fdae2fb8e78a928dc0ad2834849c8731c85 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 12 Jul 2023 17:27:55 +0300 Subject: [PATCH 101/123] feat(docs): add docs schema type (#676) * feat(docs): add docs schema type * version release --- apps/backoffice-v2/package.json | 4 +- .../src/pages/Entity/hooks/useEntity/utils.ts | 3 +- examples/headless-example/CHANGELOG.md | 8 + examples/headless-example/package.json | 6 +- packages/common/CHANGELOG.md | 6 + packages/common/package.json | 2 +- .../workflow/documents/schemas/GH.ts | 141 ++++++++++++++++++ packages/workflow-core/CHANGELOG.md | 7 + packages/workflow-core/package.json | 4 +- pnpm-lock.yaml | 20 +-- sdks/web-ui-sdk/CHANGELOG.md | 7 + sdks/web-ui-sdk/package.json | 4 +- sdks/workflow-browser-sdk/CHANGELOG.md | 8 + sdks/workflow-browser-sdk/package.json | 6 +- services/workflows-service/CHANGELOG.md | 7 + services/workflows-service/package.json | 4 +- websites/docs/package.json | 2 +- 17 files changed, 211 insertions(+), 28 deletions(-) diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 218716f3f4..71f4f2cfe7 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -48,8 +48,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "0.5.4", - "@ballerine/workflow-browser-sdk": "^0.4.7", + "@ballerine/common": "0.5.5", + "@ballerine/workflow-browser-sdk": "^0.4.8", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts index cfb981113c..c4b43eb0df 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/utils.ts @@ -39,7 +39,6 @@ export const composePickableCategoryType = ( ) => { const documentCategoryDropdownOptions: Array<TDropdownOption> = []; const documentTypesDropdownOptions: Array<TDropdownOption> = []; - documentsSchemas.forEach(document => { const category = document.category; if (category) { @@ -60,7 +59,7 @@ export const composePickableCategoryType = ( }); const categoryDropdownOptions = uniqueArrayByKey(documentCategoryDropdownOptions, 'value'); - const typeDropdownOptions = uniqueArrayByKey(documentTypesDropdownOptions, 'value'); + const typeDropdownOptions = documentTypesDropdownOptions; return { ...composeDataFormCell('category', categoryDropdownOptions, categoryValue), diff --git a/examples/headless-example/CHANGELOG.md b/examples/headless-example/CHANGELOG.md index 49bf2e1036..e852f7f655 100644 --- a/examples/headless-example/CHANGELOG.md +++ b/examples/headless-example/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/headless-example +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.5 + - @ballerine/workflow-browser-sdk@0.4.8 + ## 0.0.2 ### Patch Changes diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index a7a0ceefc0..6fc170b8f1 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/headless-example", "private": true, - "version": "0.0.2", + "version": "0.0.3", "type": "module", "scripts": { "format": "prettier --plugin-search-dir=. --write .", @@ -31,8 +31,8 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/common": "0.5.4", - "@ballerine/workflow-browser-sdk": "^0.4.7", + "@ballerine/common": "0.5.5", + "@ballerine/workflow-browser-sdk": "^0.4.8", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", "@fontsource/inter": "^4.5.15", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 9fdccd3d24..98abc8abf5 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.5.5 + +### Patch Changes + +- Add doc types + ## 0.5.4 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index 595ec94fe5..e6766c2936 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.5.4", + "version": "0.5.5", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 3500dc6ca9..07d2941145 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -460,6 +460,42 @@ export const ghanaDocuments: TDocument[] = [ }, }, }, + { + category: 'proof_of_employment', + type: 'form_a', + issuer: { + type: 'private', + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + nationalIdNumber: { + type: 'string', + pattern: ghNationalIdNumber, + }, + docNumber: { + type: 'string', + pattern: alphaNumeric, + }, + employeeName: { + type: 'string', + }, + position: { + type: 'string', + }, + employerName: { + type: 'string', + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, { category: 'proof_of_address', type: 'form_a', @@ -493,6 +529,42 @@ export const ghanaDocuments: TDocument[] = [ }, }, }, + { + category: 'proof_of_employment', + type: 'form_3', + issuer: { + type: 'private', + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + nationalIdNumber: { + type: 'string', + pattern: ghNationalIdNumber, + }, + docNumber: { + type: 'string', + pattern: alphaNumeric, + }, + employeeName: { + type: 'string', + }, + position: { + type: 'string', + }, + employerName: { + type: 'string', + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, { category: 'proof_of_address', type: 'form_3', @@ -526,4 +598,73 @@ export const ghanaDocuments: TDocument[] = [ }, }, }, + { + category: 'proof_of_address', + type: 'form_4', + issuer: { + type: 'government', + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + nationalIdNumber: { + type: 'string', + pattern: ghNationalIdNumber, + }, + docNumber: { + type: 'string', + pattern: alphaNumeric, + }, + userAddress: { + type: 'string', + }, + physicalAddress: { + type: 'string', + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, + { + category: 'proof_of_employment', + type: 'form_4', + issuer: { + type: 'private', + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + properties: { + nationalIdNumber: { + type: 'string', + pattern: ghNationalIdNumber, + }, + docNumber: { + type: 'string', + pattern: alphaNumeric, + }, + employeeName: { + type: 'string', + }, + position: { + type: 'string', + }, + employerName: { + type: 'string', + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, ]; diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index 003b2bd8d0..1f52364af2 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-core +## 0.4.15 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.5 + ## 0.4.14 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 9d58d74fe5..1df22368b3 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.14", + "version": "0.4.15", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -29,7 +29,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.4", + "@ballerine/common": "0.5.5", "ajv": "^8.12.0", "jmespath": "^0.16.0", "json-logic-js": "^2.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72d517532f..ef558ff361 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,10 +61,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.7 + specifier: ^0.4.8 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -501,10 +501,10 @@ importers: examples/headless-example: dependencies: '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.7 + specifier: ^0.4.8 version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 @@ -816,7 +816,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../common ajv: specifier: ^8.12.0 @@ -955,7 +955,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -1076,10 +1076,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@ballerine/workflow-core': - specifier: ^0.4.14 + specifier: ^0.4.15 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -1424,7 +1424,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 @@ -1692,7 +1692,7 @@ importers: specifier: ^4.0.0 version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) '@ballerine/common': - specifier: 0.5.4 + specifier: 0.5.5 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index 439ae74fe4..b29a114023 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.3.6 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.5 + ## 1.3.5 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index f0cac197a7..9040504964 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.3.5", + "version": "1.3.6", "type": "module", "files": [ "dist" @@ -93,7 +93,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.5.4", + "@ballerine/common": "0.5.5", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index 759bad57dd..2c57fcf521 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.8 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.5 + - @ballerine/workflow-core@0.4.15 + ## 0.4.7 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index a047b9b07e..2236ef08c7 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.7", + "version": "0.4.8", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -30,8 +30,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.4", - "@ballerine/workflow-core": "^0.4.14", + "@ballerine/common": "0.5.5", + "@ballerine/workflow-core": "^0.4.15", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index a039087700..54fd07255f 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflows-service +## 0.4.16 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.5 + ## 0.4.15 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 2625de5d62..e901c46453 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.15", + "version": "0.4.16", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -38,7 +38,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.5.4", + "@ballerine/common": "0.5.5", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", diff --git a/websites/docs/package.json b/websites/docs/package.json index cba9aa3c10..1278ef8fcc 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -23,7 +23,7 @@ "@astrojs/react": "^2.2.1", "@astrojs/solid-js": "^1.2.3", "@astrojs/tailwind": "^4.0.0", - "@ballerine/common": "0.5.4", + "@ballerine/common": "0.5.5", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From 75b224da63f2f422b15bbe6f4f70b365706e14fc Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Wed, 12 Jul 2023 19:01:26 +0000 Subject: [PATCH 102/123] fix: fixed wf processing stats queries, added missing key to user resolved cases list (#677) --- .../UsersResolvingStatsList.tsx | 2 +- ...-user-workflow-processing-statistic.dto.ts | 13 +------ .../src/metrics/metrics.controller.ts | 1 - .../metrics/repository/metrics.repository.ts | 17 +++++---- .../sql/aggregate-approval-rate.sql.ts | 3 -- .../aggregate-average-assignment-time.sql.ts | 34 +++++++++--------- .../aggregate-average-resolution-time.sql.ts | 35 ++++++++++--------- .../sql/aggregate-average-review-time.sql.ts | 35 ++++++++++--------- .../aggregate-average-assignment-time.ts | 2 +- .../aggregate-average-resolution-time.ts | 2 +- .../types/aggregate-average-review-time.ts | 2 +- .../types/get-user-approval-rate.params.ts | 2 +- ...get-user-average-assignment-time.params.ts | 4 +-- ...get-user-average-resolution-time.params.ts | 4 +-- .../get-user-average-review-time.params.ts | 4 +-- .../src/metrics/service/metrics.service.ts | 5 --- 16 files changed, 75 insertions(+), 90 deletions(-) diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx index 7e13eaba6c..ce0a14d726 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UsersResolvingStatsList/UsersResolvingStatsList.tsx @@ -17,7 +17,7 @@ export const UsersResolvingStatsList = ({ items, isLoading }: Props) => { {isLoading ? ( <Skeleton className="h-full w-full" /> ) : ( - items.map(item => <ListItem item={item} />) + items.map(item => <ListItem key={item.id} item={item} />) )} {isEmpty ? <span className="font-inter">No activity found.</span> : null} </div> diff --git a/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts b/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts index 1d51a9c27e..216730986e 100644 --- a/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts +++ b/services/workflows-service/src/metrics/dto/get-user-workflow-processing-statistic.dto.ts @@ -1,14 +1,3 @@ import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; -import { ApiProperty } from '@nestjs/swagger'; -import { Transform } from 'class-transformer'; -export class GetUserWorkflowProcessingStatisticDto extends DateQueryParamsDto { - constructor() { - super(); - this.userId = null; - } - - @ApiProperty() - @Transform(({ value }) => (!value ? null : value)) - userId!: string | null; -} +export class GetUserWorkflowProcessingStatisticDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/metrics.controller.ts b/services/workflows-service/src/metrics/metrics.controller.ts index df52705561..10a59ba6a5 100644 --- a/services/workflows-service/src/metrics/metrics.controller.ts +++ b/services/workflows-service/src/metrics/metrics.controller.ts @@ -63,7 +63,6 @@ export class MetricsController { ): Promise<UserWorkflowProcessingStatisticModel> { return await this.metricsService.getUserWorkflowProcessingStatistic({ fromDate: query.fromDate, - userId: query.userId, }); } diff --git a/services/workflows-service/src/metrics/repository/metrics.repository.ts b/services/workflows-service/src/metrics/repository/metrics.repository.ts index b893b3eb6b..bca941b61d 100644 --- a/services/workflows-service/src/metrics/repository/metrics.repository.ts +++ b/services/workflows-service/src/metrics/repository/metrics.repository.ts @@ -107,7 +107,7 @@ export class MetricsRepository { const results = await this.prismaService.$queryRawUnsafe<IAggregateApprovalRate[]>( aggregateApprovalRateQuery, params.fromDate, - params.userId, + // params.userId, ); return results.length ? plainToClass(ApprovalRateModel, results.at(-1)) : null; @@ -119,10 +119,11 @@ export class MetricsRepository { const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageResolutionTime[]>( aggregateAverageResolutionTimeQuery, params.fromDate, - params.userId, ); - return results.length ? plainToClass(AverageResolutionTimeModel, results.at(-1)) : null; + return results.length + ? plainToClass(AverageResolutionTimeModel, { time: results.at(-1)?.average_time }) + : null; } async getUserAverageAssignmentTime( @@ -131,10 +132,11 @@ export class MetricsRepository { const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageAssignmentTime[]>( aggregateAverageAssignmentTimeQuery, params.fromDate, - params.userId, ); - return results.length ? plainToClass(AverageAssignmentTimeModel, results.at(-1)) : null; + return results.length + ? plainToClass(AverageAssignmentTimeModel, { time: results.at(-1)?.average_time }) + : null; } async getUserAverageReviewTime( @@ -143,10 +145,11 @@ export class MetricsRepository { const results = await this.prismaService.$queryRawUnsafe<IAggregateAverageReviewTime[]>( aggregateAverageReviewTimeQuery, params.fromDate, - params.userId, ); - return results.length ? plainToClass(AverageReviewTimeModel, results.at(-1)) : null; + return results.length + ? plainToClass(AverageReviewTimeModel, { time: results.at(-1)?.average_time }) + : null; } async listCasesResolvedDaily( diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts index 341496bab2..3acf0f50c5 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts @@ -14,16 +14,13 @@ from from "WorkflowRuntimeData" where "resolvedAt" >= $1 - and "assigneeId" = coalesce($2, "assigneeId") ) as "resolvedCount", ( select count(*) from "WorkflowRuntimeData" where "resolvedAt" >= $1 - and "assigneeId" = coalesce($2, "assigneeId") and "status" = 'completed' ) as "approvedCount" - from "WorkflowRuntimeData" group by "resolvedCount", "approvedCount" diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts index af3068f008..77141bdbe9 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-assignment-time.sql.ts @@ -1,18 +1,20 @@ export const aggregateAverageAssignmentTimeQuery = ` -select - avg( - (select sum(case - when "createdAt" notnull and "assignedAt" notnull - then (extract(epoch from "assignedAt") - extract(epoch from "createdAt")) * 1000 - else 0 - end)::bigint as time - from "WorkflowRuntimeData" - where "assigneeId" = "User".id - and "assignedAt" >= $1) - )::varchar as time -from - "User" -where - "User".id = coalesce($2, - "id") +SELECT AVG(time)::varchar as average_time +FROM ( + SELECT + "User".id, + COALESCE( + EXTRACT(EPOCH FROM ("WorkflowRuntimeData"."assignedAt" - "WorkflowRuntimeData"."createdAt")) * 1000, + 0 + ) AS time + FROM + "User" + LEFT JOIN + "WorkflowRuntimeData" + ON "User".id = "WorkflowRuntimeData"."assigneeId" + WHERE + "WorkflowRuntimeData"."createdAt" IS NOT NULL + AND + "WorkflowRuntimeData"."assignedAt" >= $1 +) AS T `; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts index 9e937088da..a098176cc9 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-resolution-time.sql.ts @@ -1,17 +1,20 @@ export const aggregateAverageResolutionTimeQuery = ` -select - avg( - (select sum(case - when "createdAt" notnull and "resolvedAt" notnull - then (extract(epoch from "resolvedAt") - extract(epoch from "createdAt")) * 1000 - else 0 - end)::bigint as time - from "WorkflowRuntimeData" - where "assigneeId" = "User".id - and "resolvedAt" >= $1) - )::varchar as time -from - "User" -where - "User".id = coalesce($2, - "id")`; +SELECT AVG(time)::varchar as average_time +FROM ( + SELECT + "User".id, + COALESCE( + EXTRACT(EPOCH FROM ("WorkflowRuntimeData"."resolvedAt" - "WorkflowRuntimeData"."createdAt")) * 1000, + 0 + ) AS time + FROM + "User" + LEFT JOIN + "WorkflowRuntimeData" + ON "User".id = "WorkflowRuntimeData"."assigneeId" + WHERE + "WorkflowRuntimeData"."createdAt" IS NOT NULL + AND + "WorkflowRuntimeData"."resolvedAt" >= $1 +) AS T + `; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts index cffe1e36e9..8c8b0e3d52 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts @@ -1,17 +1,20 @@ export const aggregateAverageReviewTimeQuery = ` -select - avg( - (select sum(case - when "resolvedAt" notnull and "assignedAt" notnull - then (extract(epoch from "resolvedAt") - extract(epoch from "assignedAt")) * 1000 - else 0 - end)::bigint as time - from "WorkflowRuntimeData" - where "assigneeId" = "User".id - and "resolvedAt" >= $1) - )::varchar as time -from - "User" -where - "User".id = coalesce($2, - "id")`; +SELECT AVG(time)::varchar as average_time +FROM ( + SELECT + "User".id, + COALESCE( + EXTRACT(EPOCH FROM ("WorkflowRuntimeData"."resolvedAt" - "WorkflowRuntimeData"."assignedAt")) * 1000, + 0 + ) AS time + FROM + "User" + LEFT JOIN + "WorkflowRuntimeData" + ON "User".id = "WorkflowRuntimeData"."assigneeId" + WHERE + "WorkflowRuntimeData"."createdAt" IS NOT NULL + AND + "WorkflowRuntimeData"."resolvedAt" >= $1 +) AS T +`; diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts index da1f77db22..73d9985804 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-assignment-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageAssignmentTime { - time: string | null; + average_time: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts index e868faddc0..0169130aee 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-resolution-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageResolutionTime { - time: string | null; + average_time: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts index d06903b3b3..149b1857a4 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-average-review-time.ts @@ -1,3 +1,3 @@ export interface IAggregateAverageReviewTime { - time: string | null; + average_time: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts index 49d507665f..c64f6318b7 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-approval-rate.params.ts @@ -1,5 +1,5 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; export interface GetUserApprovalRateParams extends BaseParams { - userId: string | null; + userId?: string; } diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts index 3576967455..87ed506640 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts @@ -1,5 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageAssignmentTimeParams extends BaseParams { - userId: string | null; -} +export interface GetUserAverageAssignmentTimeParams extends BaseParams {} diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts index 4927418d89..ddc5dd4a93 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts @@ -1,5 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageResolutionTimeParams extends BaseParams { - userId: string | null; -} +export interface GetUserAverageResolutionTimeParams extends BaseParams {} diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts index ca81f91ea7..4ecb41ba9e 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts @@ -1,5 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageReviewTimeParams extends BaseParams { - userId: string | null; -} +export interface GetUserAverageReviewTimeParams extends BaseParams {} diff --git a/services/workflows-service/src/metrics/service/metrics.service.ts b/services/workflows-service/src/metrics/service/metrics.service.ts index e1b7a1e18f..c6306f7b78 100644 --- a/services/workflows-service/src/metrics/service/metrics.service.ts +++ b/services/workflows-service/src/metrics/service/metrics.service.ts @@ -44,7 +44,6 @@ export class MetricsService { params: GetUserWorkflowProcessingStatisticParams, ): Promise<UserWorkflowProcessingStatisticModel> { const commonParams = { - userId: params.userId, fromDate: params.fromDate, }; @@ -66,10 +65,6 @@ export class MetricsService { const statisticModel: UserWorkflowProcessingStatisticModel = new UserWorkflowProcessingStatisticModel(); - if (params.userId) { - statisticModel.id = params.userId; - } - statisticModel.approvalRate = approvalRateModel?.approvalRate || 0; statisticModel.averageAssignmentTime = averageAssignmentTimeModel?.time || '0'; statisticModel.averageResolutionTime = averageResolutionTimeModel?.time || '0'; From 0c5683c25e865ea4c7403625b2d04116c44b71b8 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 12 Jul 2023 22:02:57 +0300 Subject: [PATCH 103/123] update default context schema --- .../documents/default-context-schema.json | 91 +++++++++++++++---- 1 file changed, 74 insertions(+), 17 deletions(-) diff --git a/packages/common/src/schemas/documents/default-context-schema.json b/packages/common/src/schemas/documents/default-context-schema.json index 687015b3ed..a8083cac48 100644 --- a/packages/common/src/schemas/documents/default-context-schema.json +++ b/packages/common/src/schemas/documents/default-context-schema.json @@ -6,7 +6,10 @@ "type": "object", "properties": { "type": { - "enum": ["individual", "business"] + "enum": [ + "individual", + "business" + ] }, "data": { "type": "object", @@ -24,13 +27,19 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "anyOf": [ { - "required": ["id"] + "required": [ + "id" + ] }, { - "required": ["ballerineEntityId"] + "required": [ + "ballerineEntityId" + ] } ], "additionalProperties": false @@ -45,11 +54,17 @@ }, "category": { "type": "string", - "transform": ["trim", "toLowerCase"] + "transform": [ + "trim", + "toLowerCase" + ] }, "type": { "type": "string", - "transform": ["trim", "toLowerCase"] + "transform": [ + "trim", + "toLowerCase" + ] }, "issuer": { "type": "object", @@ -62,7 +77,10 @@ }, "country": { "type": "string", - "transform": ["trim", "toUpperCase"] + "transform": [ + "trim", + "toUpperCase" + ] }, "city": { "type": "string" @@ -71,7 +89,9 @@ "type": "object" } }, - "required": ["country"], + "required": [ + "country" + ], "additionalProperties": false }, "issuingVersion": { @@ -82,7 +102,13 @@ "properties": { "status": { "type": "string", - "enum": ["new", "pending", "revision", "approved", "rejected"] + "enum": [ + "new", + "pending", + "revision", + "approved", + "rejected" + ] }, "rejectionReason": { "anyOf": [ @@ -109,11 +135,19 @@ { "type": "string", "enum": [ - "Blurry image", + "Wrong document", + "Fake document", + "Spam", + "Ownership mismatch - Name", + "Ownership mismatch - National ID", + "Unknown document type", + "Bad image quality", "Missing page", "Invalid document", "Expired document", - "Unreadable document" + "Unreadable document", + "Blurry image", + "Other" ] } ] @@ -134,14 +168,24 @@ }, "provider": { "type": "string", - "enum": ["gcs", "http", "stream", "base64", "ftp"] + "enum": [ + "gcs", + "http", + "stream", + "base64", + "ftp" + ] }, "uri": { "type": "string", "format": "uri" }, "type": { - "enum": ["pdf", "png", "jpg"] + "enum": [ + "pdf", + "png", + "jpg" + ] }, "data": { "type": "string" @@ -159,7 +203,11 @@ "additionalProperties": false } }, - "required": ["provider", "uri", "type"], + "required": [ + "provider", + "uri", + "type" + ], "additionalProperties": false } }, @@ -181,10 +229,19 @@ } } }, - "required": ["category", "type", "issuer", "pages", "properties"], + "required": [ + "category", + "type", + "issuer", + "pages", + "properties" + ], "additionalProperties": false } } }, - "required": ["entity", "documents"] -} + "required": [ + "entity", + "documents" + ] +} \ No newline at end of file From 4023c92f2d99bf7984959f3ed14e998154b2d319 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Thu, 13 Jul 2023 11:53:16 +0300 Subject: [PATCH 104/123] =?UTF-8?q?fix:=20removed=20grouping=20from=20appr?= =?UTF-8?q?oval=20rate=20quer=20&=20review=20time=20query=20now=E2=80=A6?= =?UTF-8?q?=20(#679)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: removed grouping from approval rate quer & review time query now ignores unassigned workflows * fix: lint * fix: format fix * fix: reworked approval rate query & updated models & types --- .../user/api/user-stats/user-stats.api.ts | 8 +- .../user/api/user-stats/user-stats.types.ts | 2 +- .../PercentageCard/PercentageCard.tsx | 2 +- .../documents/default-context-schema.json | 79 ++++--------------- .../metrics/repository/metrics.repository.ts | 5 +- .../repository/models/approval-rate.model.ts | 6 +- .../sql/aggregate-approval-rate.sql.ts | 43 ++++------ .../sql/aggregate-average-review-time.sql.ts | 2 +- .../types/aggregate-approval-rate.ts | 2 +- ...get-user-average-assignment-time.params.ts | 2 +- ...get-user-average-resolution-time.params.ts | 2 +- .../get-user-average-review-time.params.ts | 2 +- .../src/metrics/service/metrics.service.ts | 2 +- ...ser-workflow-processing-statistic.model.ts | 2 +- 14 files changed, 50 insertions(+), 109 deletions(-) diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts index 50b21e2e36..7dfd0b97e1 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.api.ts @@ -16,10 +16,10 @@ export const fetchUserStats = async (query: GetUserStatsDto): Promise<UserStats> result.data || ({} as IUserStats); const userStats: UserStats = { - approvalRate: approvalRate, - averageAssignmentTime: Number(averageAssignmentTime), - averageResolutionTime: Number(averageResolutionTime), - averageReviewTime: Number(averageReviewTime), + approvalRate: parseFloat(approvalRate), + averageAssignmentTime: parseInt(averageAssignmentTime), + averageResolutionTime: parseInt(averageResolutionTime), + averageReviewTime: parseInt(averageReviewTime), }; return userStats; diff --git a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts index b7ccd2a872..6dd4a5d08b 100644 --- a/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts +++ b/apps/workflows-dashboard/src/domains/user/api/user-stats/user-stats.types.ts @@ -4,7 +4,7 @@ export interface IResolvedCasesDailyMetric { } export interface IUserStats { - approvalRate: number; + approvalRate: string; averageResolutionTime: string; averageAssignmentTime: string; averageReviewTime: string; diff --git a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx index 5d541c8595..7e6b5bc3be 100644 --- a/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx +++ b/apps/workflows-dashboard/src/pages/Overview/components/molecules/UserStats/components/PercentageCard/PercentageCard.tsx @@ -11,7 +11,7 @@ export const PercentageCard = memo(({ title, percentage, isLoading }: Props) => return ( <MetricCard title={<MetricCard.Title className="text-sm" title={title} />} - content={<span className="text-3xl font-bold">{`${percentage.toFixed(0)}%`}</span>} + content={<span className="text-3xl font-bold">{`${percentage.toFixed(2)}%`}</span>} description="( last 30 days )" isLoading={isLoading} /> diff --git a/packages/common/src/schemas/documents/default-context-schema.json b/packages/common/src/schemas/documents/default-context-schema.json index a8083cac48..f98a284c83 100644 --- a/packages/common/src/schemas/documents/default-context-schema.json +++ b/packages/common/src/schemas/documents/default-context-schema.json @@ -6,10 +6,7 @@ "type": "object", "properties": { "type": { - "enum": [ - "individual", - "business" - ] + "enum": ["individual", "business"] }, "data": { "type": "object", @@ -27,19 +24,13 @@ "type": "string" } }, - "required": [ - "type" - ], + "required": ["type"], "anyOf": [ { - "required": [ - "id" - ] + "required": ["id"] }, { - "required": [ - "ballerineEntityId" - ] + "required": ["ballerineEntityId"] } ], "additionalProperties": false @@ -54,17 +45,11 @@ }, "category": { "type": "string", - "transform": [ - "trim", - "toLowerCase" - ] + "transform": ["trim", "toLowerCase"] }, "type": { "type": "string", - "transform": [ - "trim", - "toLowerCase" - ] + "transform": ["trim", "toLowerCase"] }, "issuer": { "type": "object", @@ -77,10 +62,7 @@ }, "country": { "type": "string", - "transform": [ - "trim", - "toUpperCase" - ] + "transform": ["trim", "toUpperCase"] }, "city": { "type": "string" @@ -89,9 +71,7 @@ "type": "object" } }, - "required": [ - "country" - ], + "required": ["country"], "additionalProperties": false }, "issuingVersion": { @@ -102,13 +82,7 @@ "properties": { "status": { "type": "string", - "enum": [ - "new", - "pending", - "revision", - "approved", - "rejected" - ] + "enum": ["new", "pending", "revision", "approved", "rejected"] }, "rejectionReason": { "anyOf": [ @@ -168,24 +142,14 @@ }, "provider": { "type": "string", - "enum": [ - "gcs", - "http", - "stream", - "base64", - "ftp" - ] + "enum": ["gcs", "http", "stream", "base64", "ftp"] }, "uri": { "type": "string", "format": "uri" }, "type": { - "enum": [ - "pdf", - "png", - "jpg" - ] + "enum": ["pdf", "png", "jpg"] }, "data": { "type": "string" @@ -203,11 +167,7 @@ "additionalProperties": false } }, - "required": [ - "provider", - "uri", - "type" - ], + "required": ["provider", "uri", "type"], "additionalProperties": false } }, @@ -229,19 +189,10 @@ } } }, - "required": [ - "category", - "type", - "issuer", - "pages", - "properties" - ], + "required": ["category", "type", "issuer", "pages", "properties"], "additionalProperties": false } } }, - "required": [ - "entity", - "documents" - ] -} \ No newline at end of file + "required": ["entity", "documents"] +} diff --git a/services/workflows-service/src/metrics/repository/metrics.repository.ts b/services/workflows-service/src/metrics/repository/metrics.repository.ts index bca941b61d..cd7341b4fd 100644 --- a/services/workflows-service/src/metrics/repository/metrics.repository.ts +++ b/services/workflows-service/src/metrics/repository/metrics.repository.ts @@ -107,10 +107,11 @@ export class MetricsRepository { const results = await this.prismaService.$queryRawUnsafe<IAggregateApprovalRate[]>( aggregateApprovalRateQuery, params.fromDate, - // params.userId, ); - return results.length ? plainToClass(ApprovalRateModel, results.at(-1)) : null; + return results.length + ? plainToClass(ApprovalRateModel, { approvalRate: results.at(-1)?.approvalRate }) + : null; } async getUserAverageResolutionTime( diff --git a/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts b/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts index 835fea84b3..8ba822dbb6 100644 --- a/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts +++ b/services/workflows-service/src/metrics/repository/models/approval-rate.model.ts @@ -1,8 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; -import { Transform } from 'class-transformer'; +import { Transform, Type } from 'class-transformer'; export class ApprovalRateModel { @ApiProperty() - @Transform(({ value }) => (value === null ? 0 : value)) - approvalRate!: number; + @Transform(({ value }) => (!value ? '0' : value)) + approvalRate!: string; } diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts index 3acf0f50c5..4a15bb2594 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-approval-rate.sql.ts @@ -1,29 +1,18 @@ export const aggregateApprovalRateQuery = ` -select - (case - when "resolvedCount" > 0 and "approvedCount" > 0 - then ("approvedCount"::numeric / "resolvedCount"::numeric * 100) - else 0 end - )::int as "approvalRate" -from - ( - select - ( - select - count(*) - from - "WorkflowRuntimeData" - where "resolvedAt" >= $1 - ) as "resolvedCount", - ( - select count(*) - from "WorkflowRuntimeData" - where "resolvedAt" >= $1 - and "status" = 'completed' - ) as "approvedCount" - from - "WorkflowRuntimeData" - group by "resolvedCount", "approvedCount" - -) as counts +SELECT + (CASE + WHEN counts."resolvedCount" > 0 AND counts."approvedCount" > 0 + THEN (counts."approvedCount"::int / counts."resolvedCount"::int * 100) + ELSE 0 + END)::numeric(5, 2)::varchar AS "approvalRate" +FROM ( + SELECT + (SELECT COUNT(*) + FROM "WorkflowRuntimeData" + WHERE "resolvedAt" >= $1) AS "resolvedCount", + (SELECT COUNT(*) + FROM "WorkflowRuntimeData" + WHERE context -> 'documents' @> '[{"decision": {"status": "approved"}}]' + AND "resolvedAt" >= $1) AS "approvedCount" +) AS counts; `; diff --git a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts index 8c8b0e3d52..185a8c6fde 100644 --- a/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/aggregate-average-review-time.sql.ts @@ -13,7 +13,7 @@ FROM ( "WorkflowRuntimeData" ON "User".id = "WorkflowRuntimeData"."assigneeId" WHERE - "WorkflowRuntimeData"."createdAt" IS NOT NULL + "WorkflowRuntimeData"."assignedAt" IS NOT NULL AND "WorkflowRuntimeData"."resolvedAt" >= $1 ) AS T diff --git a/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts b/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts index 9eff13914d..da2d515a22 100644 --- a/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts +++ b/services/workflows-service/src/metrics/repository/types/aggregate-approval-rate.ts @@ -1,3 +1,3 @@ export interface IAggregateApprovalRate { - approvalRate: number | null; + approvalRate: string | null; } diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts index 87ed506640..504918c825 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-assignment-time.params.ts @@ -1,3 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageAssignmentTimeParams extends BaseParams {} +export type GetUserAverageAssignmentTimeParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts index ddc5dd4a93..7e3ccf2c35 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-resolution-time.params.ts @@ -1,3 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageResolutionTimeParams extends BaseParams {} +export type GetUserAverageResolutionTimeParams = BaseParams; diff --git a/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts index 4ecb41ba9e..b7b2b56e59 100644 --- a/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts +++ b/services/workflows-service/src/metrics/repository/types/get-user-average-review-time.params.ts @@ -1,3 +1,3 @@ import { BaseParams } from '@/metrics/common/types/base-query.params'; -export interface GetUserAverageReviewTimeParams extends BaseParams {} +export type GetUserAverageReviewTimeParams = BaseParams; diff --git a/services/workflows-service/src/metrics/service/metrics.service.ts b/services/workflows-service/src/metrics/service/metrics.service.ts index c6306f7b78..b3e8f7ef9a 100644 --- a/services/workflows-service/src/metrics/service/metrics.service.ts +++ b/services/workflows-service/src/metrics/service/metrics.service.ts @@ -65,7 +65,7 @@ export class MetricsService { const statisticModel: UserWorkflowProcessingStatisticModel = new UserWorkflowProcessingStatisticModel(); - statisticModel.approvalRate = approvalRateModel?.approvalRate || 0; + statisticModel.approvalRate = approvalRateModel?.approvalRate || '0'; statisticModel.averageAssignmentTime = averageAssignmentTimeModel?.time || '0'; statisticModel.averageResolutionTime = averageResolutionTimeModel?.time || '0'; statisticModel.averageReviewTime = averageReviewTimeModel?.time || '0'; diff --git a/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts index c32dd146ee..5c7cf6ce71 100644 --- a/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts +++ b/services/workflows-service/src/metrics/service/models/user-workflow-processing-statistic.model.ts @@ -5,7 +5,7 @@ export class UserWorkflowProcessingStatisticModel { id!: string; @ApiProperty() - approvalRate!: number; + approvalRate!: string; @ApiProperty({ description: 'Average resolution time in milliseconds' }) averageResolutionTime!: string; From d4e63a1e0b69fa0a96773a62a6fc5c1576ee3ace Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 13 Jul 2023 14:37:18 +0300 Subject: [PATCH 105/123] alonp/fix/default context to js (#682) * fix(common-seed): create ts file with context schema instead of json * common version upgrade * common version upgrade --- apps/backoffice-v2/package.json | 4 +- examples/headless-example/CHANGELOG.md | 8 + examples/headless-example/package.json | 6 +- packages/common/CHANGELOG.md | 6 + packages/common/package.json | 2 +- packages/common/src/index.ts | 1 + .../documents/default-context-schema.ts | 198 ++++++++++++++++++ packages/common/src/schemas/index.ts | 1 + packages/workflow-core/CHANGELOG.md | 7 + packages/workflow-core/package.json | 4 +- pnpm-lock.yaml | 20 +- sdks/web-ui-sdk/CHANGELOG.md | 7 + sdks/web-ui-sdk/package.json | 4 +- sdks/workflow-browser-sdk/CHANGELOG.md | 8 + sdks/workflow-browser-sdk/package.json | 6 +- services/workflows-service/CHANGELOG.md | 7 + services/workflows-service/package.json | 4 +- services/workflows-service/scripts/seed.ts | 2 +- websites/docs/package.json | 2 +- 19 files changed, 270 insertions(+), 27 deletions(-) create mode 100644 packages/common/src/schemas/documents/default-context-schema.ts diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 71f4f2cfe7..4cc0451e1f 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -48,8 +48,8 @@ "build-storybook": "storybook build" }, "dependencies": { - "@ballerine/common": "0.5.5", - "@ballerine/workflow-browser-sdk": "^0.4.8", + "@ballerine/common": "0.5.6", + "@ballerine/workflow-browser-sdk": "^0.4.9", "@ballerine/workflow-node-sdk": "^0.4.3", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/examples/headless-example/CHANGELOG.md b/examples/headless-example/CHANGELOG.md index e852f7f655..011356781e 100644 --- a/examples/headless-example/CHANGELOG.md +++ b/examples/headless-example/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/headless-example +## 0.0.4 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.6 + - @ballerine/workflow-browser-sdk@0.4.9 + ## 0.0.3 ### Patch Changes diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 6fc170b8f1..b062ade564 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/headless-example", "private": true, - "version": "0.0.3", + "version": "0.0.4", "type": "module", "scripts": { "format": "prettier --plugin-search-dir=. --write .", @@ -31,8 +31,8 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/common": "0.5.5", - "@ballerine/workflow-browser-sdk": "^0.4.8", + "@ballerine/common": "0.5.6", + "@ballerine/workflow-browser-sdk": "^0.4.9", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", "@fontsource/inter": "^4.5.15", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index 98abc8abf5..b671de044a 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.5.6 + +### Patch Changes + +- change default context schema to ts + ## 0.5.5 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index e6766c2936..82e05e3eb3 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine <dev@ballerine.com>", - "version": "0.5.5", + "version": "0.5.6", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 7f9c63e6a5..8823868ddc 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -24,4 +24,5 @@ export { getDocumentsByCountry, getDocumentId, type TDocument, + defaultContextSchema, } from './schemas'; diff --git a/packages/common/src/schemas/documents/default-context-schema.ts b/packages/common/src/schemas/documents/default-context-schema.ts new file mode 100644 index 0000000000..30dfcf292e --- /dev/null +++ b/packages/common/src/schemas/documents/default-context-schema.ts @@ -0,0 +1,198 @@ +export const defaultContextSchema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + entity: { + type: 'object', + properties: { + type: { + enum: ['individual', 'business'], + }, + data: { + type: 'object', + properties: { + additionalInfo: { + type: 'object', + }, + }, + additionalProperties: true, + }, + ballerineEntityId: { + type: 'string', + }, + id: { + type: 'string', + }, + }, + required: ['type'], + anyOf: [ + { + required: ['id'], + }, + { + required: ['ballerineEntityId'], + }, + ], + additionalProperties: false, + }, + documents: { + type: 'array', + items: { + type: 'object', + properties: { + id: { + type: 'string', + }, + category: { + type: 'string', + transform: ['trim', 'toLowerCase'], + }, + type: { + type: 'string', + transform: ['trim', 'toLowerCase'], + }, + issuer: { + type: 'object', + properties: { + type: { + type: 'string', + }, + name: { + type: 'string', + }, + country: { + type: 'string', + transform: ['trim', 'toUpperCase'], + }, + city: { + type: 'string', + }, + additionalInfo: { + type: 'object', + }, + }, + required: ['country'], + additionalProperties: false, + }, + issuingVersion: { + type: 'integer', + }, + decision: { + type: 'object', + properties: { + status: { + type: 'string', + enum: ['new', 'pending', 'revision', 'approved', 'rejected'], + }, + rejectionReason: { + anyOf: [ + { + type: 'string', + }, + { + type: 'string', + enum: [ + 'Suspicious document', + 'Document does not match customer profile', + 'Potential identity theft', + 'Fake or altered document', + 'Document on watchlist or blacklist', + ], + }, + ], + }, + revisionReason: { + anyOf: [ + { + type: 'string', + }, + { + type: 'string', + enum: [ + 'Wrong document', + 'Fake document', + 'Spam', + 'Ownership mismatch - Name', + 'Ownership mismatch - National ID', + 'Unknown document type', + 'Bad image quality', + 'Missing page', + 'Invalid document', + 'Expired document', + 'Unreadable document', + 'Blurry image', + 'Other', + ], + }, + ], + }, + }, + additionalProperties: false, + }, + version: { + type: 'integer', + }, + pages: { + type: 'array', + items: { + type: 'object', + properties: { + ballerineFileId: { + type: 'string', + }, + provider: { + type: 'string', + enum: ['gcs', 'http', 'stream', 'base64', 'ftp'], + }, + uri: { + type: 'string', + format: 'uri', + }, + type: { + enum: ['pdf', 'png', 'jpg'], + }, + data: { + type: 'string', + }, + metadata: { + type: 'object', + properties: { + side: { + type: 'string', + }, + pageNumber: { + type: 'string', + }, + }, + additionalProperties: false, + }, + }, + required: ['provider', 'uri', 'type'], + additionalProperties: false, + }, + }, + properties: { + type: 'object', + properties: { + email: { + type: 'string', + format: 'email', + }, + expiryDate: { + type: 'string', + format: 'date', + }, + idNumber: { + type: 'string', + format: 'regex', + }, + }, + }, + }, + required: ['category', 'type', 'issuer', 'pages', 'properties'], + additionalProperties: false, + }, + }, + }, + required: ['entity', 'documents'], +}; diff --git a/packages/common/src/schemas/index.ts b/packages/common/src/schemas/index.ts index ba9dd26521..c8066a7024 100644 --- a/packages/common/src/schemas/index.ts +++ b/packages/common/src/schemas/index.ts @@ -1,5 +1,6 @@ export { type DefaultContextSchema } from './documents/context'; export { type TDefaultSchemaDocumentPage } from './documents/default-context-page-schema'; +export { defaultContextSchema } from './documents/default-context-schema'; export { ghanaDocuments, certificateOfResidenceGH, diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index 1f52364af2..2af246f407 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-core +## 0.4.16 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.6 + ## 0.4.15 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 1df22368b3..469f54a9d4 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.15", + "version": "0.4.16", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -29,7 +29,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.5", + "@ballerine/common": "0.5.6", "ajv": "^8.12.0", "jmespath": "^0.16.0", "json-logic-js": "^2.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef558ff361..ed04410018 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,10 +61,10 @@ importers: apps/backoffice-v2: dependencies: '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.8 + specifier: ^0.4.9 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': specifier: ^0.4.3 @@ -501,10 +501,10 @@ importers: examples/headless-example: dependencies: '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: ^0.4.8 + specifier: ^0.4.9 version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 @@ -816,7 +816,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../common ajv: specifier: ^8.12.0 @@ -955,7 +955,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -1076,10 +1076,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-core': - specifier: ^0.4.15 + specifier: ^0.4.16 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -1424,7 +1424,7 @@ importers: specifier: 3.325.0 version: 3.325.0(@aws-sdk/abort-controller@3.347.0)(@aws-sdk/client-s3@3.325.0) '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-node-sdk': specifier: ^0.4.2 @@ -1692,7 +1692,7 @@ importers: specifier: ^4.0.0 version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) '@ballerine/common': - specifier: 0.5.5 + specifier: 0.5.6 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index b29a114023..7fc7392895 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.3.7 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.6 + ## 1.3.6 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 9040504964..03972731c6 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.3.6", + "version": "1.3.7", "type": "module", "files": [ "dist" @@ -93,7 +93,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.5.5", + "@ballerine/common": "0.5.6", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index 2c57fcf521..8def59c74d 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.6 + - @ballerine/workflow-core@0.4.16 + ## 0.4.8 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index 2236ef08c7..f7d8bfea86 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine <dev@ballerine.com>", - "version": "0.4.8", + "version": "0.4.9", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -30,8 +30,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.5.5", - "@ballerine/workflow-core": "^0.4.15", + "@ballerine/common": "0.5.6", + "@ballerine/workflow-core": "^0.4.16", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index 54fd07255f..51eff2033a 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflows-service +## 0.4.17 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.5.6 + ## 0.4.16 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index e901c46453..ee12e35a26 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.4.16", + "version": "0.4.17", "description": "workflow-service", "scripts": { "setup": "npm run docker:db && npm run db:clean && npm run db:migrate-save && npm run seed", @@ -38,7 +38,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", - "@ballerine/common": "0.5.5", + "@ballerine/common": "0.5.6", "@ballerine/workflow-node-sdk": "^0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", diff --git a/services/workflows-service/scripts/seed.ts b/services/workflows-service/scripts/seed.ts index 35b53af319..d95d5ae512 100644 --- a/services/workflows-service/scripts/seed.ts +++ b/services/workflows-service/scripts/seed.ts @@ -10,7 +10,7 @@ import { generateBusiness, generateEndUser, } from './generate-end-user'; -import defaultContextSchema from '@ballerine/common/src/schemas/documents/default-context-schema.json'; +import { defaultContextSchema } from '@ballerine/common'; import { Salt } from '../src/auth/password/password.service'; import { env } from '../src/env'; import { generateUserNationalId } from './generate-user-national-id'; diff --git a/websites/docs/package.json b/websites/docs/package.json index 1278ef8fcc..7b80c5cb34 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -23,7 +23,7 @@ "@astrojs/react": "^2.2.1", "@astrojs/solid-js": "^1.2.3", "@astrojs/tailwind": "^4.0.0", - "@ballerine/common": "0.5.5", + "@ballerine/common": "0.5.6", "@docsearch/css": "^3.1.0", "@docsearch/react": "^3.1.0", "@types/node": "^18.0.0", From 1b824b7d80dc9041fa5534c58edcd2fa098e8790 Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Thu, 13 Jul 2023 15:00:43 +0300 Subject: [PATCH 106/123] Illia rudniev/feat/react UI lib (#666) * feat: initialize react-ui lib & tailwind,storybook,build * feat: added stories & shadcn components & extended monorepo build with ui * fix: lock fix * feat: added eslint & vitetest & cleaned packag.json & changed scrollbar * fix: replaced enum with const object * fix: fixed build & updated test config * fix: updated tsconfig target & added overrides for types * fix: removed overrides & unused packages & context view now uses scrollarea * fix: renamed context view column to JsonDialog --- package.json | 2 +- packages/ui/.eslintrc.cjs | 47 + packages/ui/.gitignore | 25 + packages/ui/.storybook/main.ts | 21 + packages/ui/.storybook/preview.ts | 16 + packages/ui/index.html | 16 + packages/ui/package.json | 75 + packages/ui/postcss.config.cjs | 6 + packages/ui/public/vite.svg | 1 + packages/ui/src/common/enums/index.ts | 1 + .../common/enums/workflow-health-status.ts | 8 + packages/ui/src/common/index.ts | 1 + packages/ui/src/components.ts | 15 + .../atoms/Button/Button.stories.tsx | 9 + .../ui/src/components/atoms/Button/Button.tsx | 49 + .../ui/src/components/atoms/Button/index.ts | 1 + .../atoms/Dialog/Dialog.stories.tsx | 13 + .../ui/src/components/atoms/Dialog/Dialog.tsx | 108 + .../ui/src/components/atoms/Dialog/index.ts | 1 + .../components/atoms/Dropdown/Dropdown.tsx | 184 + .../ui/src/components/atoms/Dropdown/index.ts | 1 + .../HealthIndicator.stories.tsx | 22 + .../atoms/HealthIndicator/HealthIndicator.tsx | 21 + .../components/atoms/HealthIndicator/index.ts | 1 + .../components/atoms/Input/Input.stories.tsx | 9 + .../ui/src/components/atoms/Input/Input.tsx | 21 + .../ui/src/components/atoms/Input/index.ts | 1 + .../components/atoms/Label/Label.stories.tsx | 9 + .../ui/src/components/atoms/Label/Label.tsx | 19 + .../ui/src/components/atoms/Label/index.ts | 1 + .../atoms/ScrollArea/ScrollArea.tsx | 27 + .../components/atoms/ScrollArea/Scrollbar.tsx | 23 + .../src/components/atoms/ScrollArea/index.ts | 2 + .../ui/src/components/atoms/Table/Table.tsx | 9 + .../src/components/atoms/Table/TableBody.tsx | 10 + .../components/atoms/Table/TableCaption.tsx | 10 + .../src/components/atoms/Table/TableCell.tsx | 14 + .../components/atoms/Table/TableFooter.tsx | 14 + .../src/components/atoms/Table/TableHead.tsx | 17 + .../components/atoms/Table/TableHeader.tsx | 10 + .../src/components/atoms/Table/TableRow.tsx | 17 + .../ui/src/components/atoms/Table/index.ts | 8 + .../WorkflowsTable/WorkflowsTable.stories.tsx | 69 + .../WorkflowsTable/WorkflowsTable.tsx | 122 + .../organisms/WorkflowsTable/columns.tsx | 69 + .../DataTableColumnHeader.tsx | 60 + .../components/DataTableColumnHeader/index.ts | 1 + .../components/JsonDialog/JsonDialog.tsx | 29 + .../components/JsonDialog/index.ts | 1 + .../ScrollContainer/ScrollContainer.tsx | 17 + .../components/ScrollContainer/index.ts | 1 + .../TableContainer/TableContainer.tsx | 21 + .../components/TableContainer/index.ts | 1 + .../organisms/WorkflowsTable/index.ts | 1 + .../organisms/WorkflowsTable/types.ts | 43 + .../utils/calculate-hour-difference.ts | 5 + .../WorkflowsTable/utils/format-date.ts | 3 + .../utils/get-workflow-health-status.ts | 29 + .../get-workflow-health-status.unit.test.ts | 52 + .../WorkflowsTable/utils/merge-columns.ts | 11 + packages/ui/src/global.css | 82 + packages/ui/src/index.ts | 1 + packages/ui/src/utils/ctw.ts | 4 + packages/ui/src/vite-env.d.ts | 1 + packages/ui/tailwind.config.cjs | 77 + packages/ui/tsconfig.eslint.json | 4 + packages/ui/tsconfig.json | 29 + packages/ui/tsconfig.node.json | 10 + packages/ui/vite.config.ts | 67 + pnpm-lock.yaml | 4611 +++++++++++++---- 70 files changed, 5325 insertions(+), 961 deletions(-) create mode 100644 packages/ui/.eslintrc.cjs create mode 100644 packages/ui/.gitignore create mode 100644 packages/ui/.storybook/main.ts create mode 100644 packages/ui/.storybook/preview.ts create mode 100644 packages/ui/index.html create mode 100644 packages/ui/package.json create mode 100644 packages/ui/postcss.config.cjs create mode 100644 packages/ui/public/vite.svg create mode 100644 packages/ui/src/common/enums/index.ts create mode 100644 packages/ui/src/common/enums/workflow-health-status.ts create mode 100644 packages/ui/src/common/index.ts create mode 100644 packages/ui/src/components.ts create mode 100644 packages/ui/src/components/atoms/Button/Button.stories.tsx create mode 100644 packages/ui/src/components/atoms/Button/Button.tsx create mode 100644 packages/ui/src/components/atoms/Button/index.ts create mode 100644 packages/ui/src/components/atoms/Dialog/Dialog.stories.tsx create mode 100644 packages/ui/src/components/atoms/Dialog/Dialog.tsx create mode 100644 packages/ui/src/components/atoms/Dialog/index.ts create mode 100644 packages/ui/src/components/atoms/Dropdown/Dropdown.tsx create mode 100644 packages/ui/src/components/atoms/Dropdown/index.ts create mode 100644 packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.stories.tsx create mode 100644 packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.tsx create mode 100644 packages/ui/src/components/atoms/HealthIndicator/index.ts create mode 100644 packages/ui/src/components/atoms/Input/Input.stories.tsx create mode 100644 packages/ui/src/components/atoms/Input/Input.tsx create mode 100644 packages/ui/src/components/atoms/Input/index.ts create mode 100644 packages/ui/src/components/atoms/Label/Label.stories.tsx create mode 100644 packages/ui/src/components/atoms/Label/Label.tsx create mode 100644 packages/ui/src/components/atoms/Label/index.ts create mode 100644 packages/ui/src/components/atoms/ScrollArea/ScrollArea.tsx create mode 100644 packages/ui/src/components/atoms/ScrollArea/Scrollbar.tsx create mode 100644 packages/ui/src/components/atoms/ScrollArea/index.ts create mode 100644 packages/ui/src/components/atoms/Table/Table.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableBody.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableCaption.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableCell.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableFooter.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableHead.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableHeader.tsx create mode 100644 packages/ui/src/components/atoms/Table/TableRow.tsx create mode 100644 packages/ui/src/components/atoms/Table/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.stories.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/columns.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/JsonDialog.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/ScrollContainer.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/TableContainer.tsx create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/index.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/types.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/utils/calculate-hour-difference.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/utils/format-date.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.unit.test.ts create mode 100644 packages/ui/src/components/organisms/WorkflowsTable/utils/merge-columns.ts create mode 100644 packages/ui/src/global.css create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/utils/ctw.ts create mode 100644 packages/ui/src/vite-env.d.ts create mode 100644 packages/ui/tailwind.config.cjs create mode 100644 packages/ui/tsconfig.eslint.json create mode 100644 packages/ui/tsconfig.json create mode 100644 packages/ui/tsconfig.node.json create mode 100644 packages/ui/vite.config.ts diff --git a/package.json b/package.json index 0457a4a97c..8c834af7ff 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "playwright:install": "nx run-many --target=playwright:install", "dev": "nx run-many --target=dev --projects=@ballerine/workflows-service,@ballerine/backoffice-v2", "start": "nx run-many --target=start --projects=@ballerine/web-ui-sdk", - "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/websocket-service", + "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/websocket-service,@ballerine/ui", "web-ui-sdk:dev": "nx run @ballerine/web-ui-sdk:dev", "web-ui-sdk:start": "nx run @ballerine/web-ui-sdk:start", "workflows-service:start": "nx run @ballerine/workflows-service:start", diff --git a/packages/ui/.eslintrc.cjs b/packages/ui/.eslintrc.cjs new file mode 100644 index 0000000000..b177750a4f --- /dev/null +++ b/packages/ui/.eslintrc.cjs @@ -0,0 +1,47 @@ +const config = require('../../packages/config/eslintrc.base.cjs'); + +/* eslint-env node */ + +module.exports = { + ...config, + env: { + ...config.env, + browser: true, + }, + parserOptions: { + ...config.parserOptions, + project: './tsconfig.eslint.json', + tsconfigRootDir: __dirname, + }, + plugins: ['tailwindcss', ...(config.plugins ?? [])], + extends: [ + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + 'plugin:tailwindcss/recommended', + ...(config.extends ?? []), + ], + rules: { + ...config.rules, + '@typescript-eslint/ban-ts-comment': 'warn', + 'comma-dangle': 'off', + 'multiline-ternary': 'off', + 'no-use-before-define': 'off', + 'space-before-function-paren': 'off', + 'react/prop-types': 'off', + 'react/no-unescaped-entities': 'off', + 'react/display-name': 'off', + 'react/react-in-jsx-scope': 'off', + 'tailwindcss/classnames-order': 'off', + 'tailwindcss/no-custom-classname': 'off', + }, + settings: { + ...config.settings, + tailwindcss: { + callees: ['ctw'], + }, + react: { + version: 'detect', + }, + }, + ignorePatterns: ['.eslintrc.cjs', ...(config.ignorePatterns ?? [])], +}; diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore new file mode 100644 index 0000000000..ca206d44cd --- /dev/null +++ b/packages/ui/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +lib diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts new file mode 100644 index 0000000000..3ab0a221f9 --- /dev/null +++ b/packages/ui/.storybook/main.ts @@ -0,0 +1,21 @@ +import type { StorybookConfig } from '@storybook/react-vite'; +const config: StorybookConfig = { + core: { + builder: '@storybook/builder-vite', // 👈 The builder enabled here. + }, + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [ + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-interactions', + '@storybook/addon-styling', + ], + framework: { + name: '@storybook/react-vite', + options: {}, + }, + docs: { + autodocs: 'tag', + }, +}; +export default config; diff --git a/packages/ui/.storybook/preview.ts b/packages/ui/.storybook/preview.ts new file mode 100644 index 0000000000..731f7e0754 --- /dev/null +++ b/packages/ui/.storybook/preview.ts @@ -0,0 +1,16 @@ +import type { Preview } from '@storybook/react'; +import '../src/global.css'; + +const preview: Preview = { + parameters: { + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/packages/ui/index.html b/packages/ui/index.html new file mode 100644 index 0000000000..b8967f12ad --- /dev/null +++ b/packages/ui/index.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vite + React + TS</title> + </head> + <script> + window.global = window; + </script> + <body> + <div id="root"></div> + <script type="module" src="/src/main.tsx"></script> + </body> +</html> diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 0000000000..ab4f2d3d8e --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,75 @@ +{ + "name": "@ballerine/ui", + "private": false, + "version": "0.0.1", + "type": "module", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "exports": { + ".": { + "import": "./lib/index.js", + "types": "./lib/index.d.ts" + }, + "./components/*": "./lib/components/*", + "./lib/style.css": "./lib/style.css" + }, + "scripts": { + "dev": "vite build --watch", + "build": "tsc && vite build", + "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build", + "test": "vitest run" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.0.2", + "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-label": "^2.0.1", + "@radix-ui/react-scroll-area": "^1.0.2", + "@radix-ui/react-slot": "^1.0.1", + "@tanstack/react-table": "^8.9.2", + "class-variance-authority": "^0.6.0", + "clsx": "^1.2.1", + "dayjs": "^1.11.6", + "lodash": "^4.17.21", + "lucide-react": "^0.144.0", + "react-json-view": "^1.21.3", + "tailwind-merge": "^1.10.0" + }, + "devDependencies": { + "@storybook/addon-essentials": "^7.0.26", + "@storybook/addon-interactions": "^7.0.26", + "@storybook/addon-links": "^7.0.26", + "@storybook/addon-styling": "^1.3.2", + "@storybook/blocks": "^7.0.26", + "@storybook/builder-vite": "^7.0.26", + "@storybook/react": "^7.0.26", + "@storybook/react-vite": "^7.0.26", + "@storybook/testing-library": "^0.0.14-next.2", + "@tailwindcss/line-clamp": "^0.4.4", + "@types/lodash": "^4.14.191", + "@types/node": "^20.4.1", + "@types/react": "^18.0.14", + "@types/react-dom": "^18.0.5", + "@typescript-eslint/eslint-plugin": "^5.61.0", + "@typescript-eslint/parser": "^5.61.0", + "@vitejs/plugin-react": "^4.0.1", + "autoprefixer": "^10.4.14", + "eslint": "^8.44.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.1", + "eslint-plugin-storybook": "^0.6.6", + "fast-glob": "^3.3.0", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "storybook": "^7.0.26", + "tailwindcss": "^3.3.2", + "tailwindcss-animate": "^1.0.5", + "typescript": "^4.9.5", + "vite": "^4.4.0", + "vite-plugin-dts": "^1.6.6", + "vitest": "^0.33.0" + } +} diff --git a/packages/ui/postcss.config.cjs b/packages/ui/postcss.config.cjs new file mode 100644 index 0000000000..12a703d900 --- /dev/null +++ b/packages/ui/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/packages/ui/public/vite.svg b/packages/ui/public/vite.svg new file mode 100644 index 0000000000..e7b8dfb1b2 --- /dev/null +++ b/packages/ui/public/vite.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> \ No newline at end of file diff --git a/packages/ui/src/common/enums/index.ts b/packages/ui/src/common/enums/index.ts new file mode 100644 index 0000000000..f7ae3a95e0 --- /dev/null +++ b/packages/ui/src/common/enums/index.ts @@ -0,0 +1 @@ +export * from './workflow-health-status'; diff --git a/packages/ui/src/common/enums/workflow-health-status.ts b/packages/ui/src/common/enums/workflow-health-status.ts new file mode 100644 index 0000000000..ec5895960e --- /dev/null +++ b/packages/ui/src/common/enums/workflow-health-status.ts @@ -0,0 +1,8 @@ +export const WorkflowHealthStatus = { + healthy: 'healthy', + failed: 'failed', + pending: 'pending', + 'pending-longterm': 'pending-longterm', +} as const; + +export type IWorkflowHealthStatus = keyof typeof WorkflowHealthStatus; diff --git a/packages/ui/src/common/index.ts b/packages/ui/src/common/index.ts new file mode 100644 index 0000000000..14790857ae --- /dev/null +++ b/packages/ui/src/common/index.ts @@ -0,0 +1 @@ +export * from './enums'; diff --git a/packages/ui/src/components.ts b/packages/ui/src/components.ts new file mode 100644 index 0000000000..4b02de003d --- /dev/null +++ b/packages/ui/src/components.ts @@ -0,0 +1,15 @@ +import './global.css'; + +// Atoms start +export * from '@components/atoms/Button'; +export * from '@components/atoms/Dialog'; +export * from '@components/atoms/Dropdown'; +export * from '@components/atoms/HealthIndicator'; +export * from '@components/atoms/Input'; +export * from '@components/atoms/Label'; +export * from '@components/atoms/Table'; +// Atoms end + +// Organisms start +export * from './components/organisms/WorkflowsTable'; +// Organims end diff --git a/packages/ui/src/components/atoms/Button/Button.stories.tsx b/packages/ui/src/components/atoms/Button/Button.stories.tsx new file mode 100644 index 0000000000..6d7f5aa64a --- /dev/null +++ b/packages/ui/src/components/atoms/Button/Button.stories.tsx @@ -0,0 +1,9 @@ +import { Button } from '@components/atoms/Button/Button'; + +export default { + component: Button, +}; + +export const Default = { + render: () => <Button>Click me</Button>, +}; diff --git a/packages/ui/src/components/atoms/Button/Button.tsx b/packages/ui/src/components/atoms/Button/Button.tsx new file mode 100644 index 0000000000..b17d7c6795 --- /dev/null +++ b/packages/ui/src/components/atoms/Button/Button.tsx @@ -0,0 +1,49 @@ +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, type VariantProps } from 'class-variance-authority'; +import { ctw } from '@utils/ctw'; + +const buttonVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', + outline: + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes<HTMLButtonElement>, + VariantProps<typeof buttonVariants> { + asChild?: boolean; +} + +const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : 'button'; + return ( + <Comp className={ctw(buttonVariants({ variant, size, className }))} ref={ref} {...props} /> + ); + }, +); +Button.displayName = 'Button'; + +export { Button, buttonVariants }; diff --git a/packages/ui/src/components/atoms/Button/index.ts b/packages/ui/src/components/atoms/Button/index.ts new file mode 100644 index 0000000000..8b166a86e4 --- /dev/null +++ b/packages/ui/src/components/atoms/Button/index.ts @@ -0,0 +1 @@ +export * from './Button'; diff --git a/packages/ui/src/components/atoms/Dialog/Dialog.stories.tsx b/packages/ui/src/components/atoms/Dialog/Dialog.stories.tsx new file mode 100644 index 0000000000..a2f43a2db7 --- /dev/null +++ b/packages/ui/src/components/atoms/Dialog/Dialog.stories.tsx @@ -0,0 +1,13 @@ +import { Dialog, DialogContent } from '@components/atoms/Dialog/Dialog'; + +export default { + component: Dialog, +}; + +export const Default = { + render: () => ( + <Dialog open> + <DialogContent>Hello World</DialogContent> + </Dialog> + ), +}; diff --git a/packages/ui/src/components/atoms/Dialog/Dialog.tsx b/packages/ui/src/components/atoms/Dialog/Dialog.tsx new file mode 100644 index 0000000000..70a8da1326 --- /dev/null +++ b/packages/ui/src/components/atoms/Dialog/Dialog.tsx @@ -0,0 +1,108 @@ +import * as React from 'react'; +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { X } from 'lucide-react'; +import { ctw } from '@utils/ctw'; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = ({ className, children, ...props }: DialogPrimitive.DialogPortalProps) => ( + <DialogPrimitive.Portal className={ctw(className)} {...props}> + <div className="fixed inset-0 z-50 flex items-start justify-center sm:items-center"> + {children} + </div> + </DialogPrimitive.Portal> +); +DialogPortal.displayName = DialogPrimitive.Portal.displayName; + +const DialogOverlay = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Overlay>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Overlay + ref={ref} + className={ctw( + 'bg-background/80 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in fixed inset-0 z-50 backdrop-blur-sm transition-all duration-100', + className, + )} + {...props} + /> +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> +>(({ className, children, ...props }, ref) => ( + <DialogPortal> + <DialogOverlay /> + <DialogPrimitive.Content + ref={ref} + className={ctw( + 'bg-background animate-in data-[state=open]:fade-in-90 data-[state=open]:slide-in-from-bottom-10 sm:zoom-in-90 data-[state=open]:sm:slide-in-from-bottom-0 fixed z-50 grid w-full gap-4 rounded-b-lg border p-6 shadow-lg sm:max-w-lg sm:rounded-lg', + className, + )} + {...props} + > + {children} + <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none"> + <X className="h-4 w-4" /> + <span className="sr-only">Close</span> + </DialogPrimitive.Close> + </DialogPrimitive.Content> + </DialogPortal> +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => ( + <div + className={ctw('flex flex-col space-y-1.5 text-center sm:text-left', className)} + {...props} + /> +); +DialogHeader.displayName = 'DialogHeader'; + +const DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => ( + <div + className={ctw('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} + {...props} + /> +); +DialogFooter.displayName = 'DialogFooter'; + +const DialogTitle = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Title>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Title + ref={ref} + className={ctw('text-lg font-semibold leading-none tracking-tight', className)} + {...props} + /> +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef< + React.ElementRef<typeof DialogPrimitive.Description>, + React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> +>(({ className, ...props }, ref) => ( + <DialogPrimitive.Description + ref={ref} + className={ctw('text-muted-foreground text-sm', className)} + {...props} + /> +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; + +export type DialogProps = DialogPrimitive.DialogProps; diff --git a/packages/ui/src/components/atoms/Dialog/index.ts b/packages/ui/src/components/atoms/Dialog/index.ts new file mode 100644 index 0000000000..a5d3159726 --- /dev/null +++ b/packages/ui/src/components/atoms/Dialog/index.ts @@ -0,0 +1 @@ +export * from './Dialog'; diff --git a/packages/ui/src/components/atoms/Dropdown/Dropdown.tsx b/packages/ui/src/components/atoms/Dropdown/Dropdown.tsx new file mode 100644 index 0000000000..09b254184b --- /dev/null +++ b/packages/ui/src/components/atoms/Dropdown/Dropdown.tsx @@ -0,0 +1,184 @@ +import * as React from 'react'; +import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; +import { Check, ChevronRight, Circle } from 'lucide-react'; +import { ctw } from '@utils/ctw'; + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + <DropdownMenuPrimitive.SubTrigger + ref={ref} + className={ctw( + 'focus:bg-accent data-[state=open]:bg-accent flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none', + inset && 'pl-8', + className, + )} + {...props} + > + {children} + <ChevronRight className="ml-auto h-4 w-4" /> + </DropdownMenuPrimitive.SubTrigger> +)); +DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.SubContent>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.SubContent + ref={ref} + className={ctw( + 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg', + className, + )} + {...props} + /> +)); +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Content>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> +>(({ className, sideOffset = 4, ...props }, ref) => ( + <DropdownMenuPrimitive.Portal> + <DropdownMenuPrimitive.Content + ref={ref} + sideOffset={sideOffset} + className={ctw( + 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border bg-white p-1 shadow-md', + className, + )} + {...props} + /> + </DropdownMenuPrimitive.Portal> +)); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Item>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Item + ref={ref} + className={ctw( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + inset && 'pl-8', + className, + )} + {...props} + /> +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem> +>(({ className, children, checked, ...props }, ref) => ( + <DropdownMenuPrimitive.CheckboxItem + ref={ref} + className={ctw( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + checked={checked} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Check className="h-4 w-4" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.CheckboxItem> +)); +DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> +>(({ className, children, ...props }, ref) => ( + <DropdownMenuPrimitive.RadioItem + ref={ref} + className={ctw( + 'focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50', + className, + )} + {...props} + > + <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> + <DropdownMenuPrimitive.ItemIndicator> + <Circle className="h-2 w-2 fill-current" /> + </DropdownMenuPrimitive.ItemIndicator> + </span> + {children} + </DropdownMenuPrimitive.RadioItem> +)); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Label>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + <DropdownMenuPrimitive.Label + ref={ref} + className={ctw('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)} + {...props} + /> +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef<typeof DropdownMenuPrimitive.Separator>, + React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator> +>(({ className, ...props }, ref) => ( + <DropdownMenuPrimitive.Separator + ref={ref} + className={ctw('bg-muted -mx-1 my-1 h-px', className)} + {...props} + /> +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => { + return ( + <span className={ctw('ml-auto text-xs tracking-widest opacity-60', className)} {...props} /> + ); +}; +DropdownMenuShortcut.displayName = 'DropdownMenuShortcut'; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +}; diff --git a/packages/ui/src/components/atoms/Dropdown/index.ts b/packages/ui/src/components/atoms/Dropdown/index.ts new file mode 100644 index 0000000000..2f29bad4e6 --- /dev/null +++ b/packages/ui/src/components/atoms/Dropdown/index.ts @@ -0,0 +1 @@ +export * from './Dropdown'; diff --git a/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.stories.tsx b/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.stories.tsx new file mode 100644 index 0000000000..54b2f86791 --- /dev/null +++ b/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.stories.tsx @@ -0,0 +1,22 @@ +import { WorkflowHealthStatus } from '@common/enums'; +import { HealthIndicator } from '@components/atoms/HealthIndicator/HealthIndicator'; + +export default { + component: HealthIndicator, +}; + +export const Healthy = { + render: () => <HealthIndicator healthStatus={WorkflowHealthStatus.healthy} />, +}; + +export const Failed = { + render: () => <HealthIndicator healthStatus={WorkflowHealthStatus.failed} />, +}; + +export const Pending = { + render: () => <HealthIndicator healthStatus={WorkflowHealthStatus.pending} />, +}; + +export const PendingLongterm = { + render: () => <HealthIndicator healthStatus={WorkflowHealthStatus['pending-longterm']} />, +}; diff --git a/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.tsx b/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.tsx new file mode 100644 index 0000000000..12a3470484 --- /dev/null +++ b/packages/ui/src/components/atoms/HealthIndicator/HealthIndicator.tsx @@ -0,0 +1,21 @@ +import { IWorkflowHealthStatus, WorkflowHealthStatus } from '@common/enums'; +import { ctw } from '@utils/ctw'; + +interface Props { + healthStatus: IWorkflowHealthStatus; + size?: number; +} + +export const HealthIndicator = ({ healthStatus, size = 20 }: Props) => { + return ( + <span + style={{ width: `${size}px`, height: `${size}px` }} + className={ctw('block', 'rounded-full', { + ['bg-green-400']: healthStatus === WorkflowHealthStatus.healthy, + ['bg-red-400']: healthStatus === WorkflowHealthStatus.failed, + ['bg-yellow-400']: healthStatus === WorkflowHealthStatus.pending, + ['bg-orange-400']: healthStatus === WorkflowHealthStatus['pending-longterm'], + })} + ></span> + ); +}; diff --git a/packages/ui/src/components/atoms/HealthIndicator/index.ts b/packages/ui/src/components/atoms/HealthIndicator/index.ts new file mode 100644 index 0000000000..0bd6afe835 --- /dev/null +++ b/packages/ui/src/components/atoms/HealthIndicator/index.ts @@ -0,0 +1 @@ +export * from './HealthIndicator'; diff --git a/packages/ui/src/components/atoms/Input/Input.stories.tsx b/packages/ui/src/components/atoms/Input/Input.stories.tsx new file mode 100644 index 0000000000..6d85d67272 --- /dev/null +++ b/packages/ui/src/components/atoms/Input/Input.stories.tsx @@ -0,0 +1,9 @@ +import { Input } from '@components/atoms/Input/Input'; + +export default { + component: Input, +}; + +export const Default = { + render: () => <Input />, +}; diff --git a/packages/ui/src/components/atoms/Input/Input.tsx b/packages/ui/src/components/atoms/Input/Input.tsx new file mode 100644 index 0000000000..f248cd2df6 --- /dev/null +++ b/packages/ui/src/components/atoms/Input/Input.tsx @@ -0,0 +1,21 @@ +import { ctw } from '@utils/ctw'; +import * as React from 'react'; + +const Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>( + ({ className, type, ...props }, ref) => { + return ( + <input + type={type} + className={ctw( + 'border-input bg-background placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50', + className, + )} + ref={ref} + {...props} + /> + ); + }, +); +Input.displayName = 'Input'; + +export { Input }; diff --git a/packages/ui/src/components/atoms/Input/index.ts b/packages/ui/src/components/atoms/Input/index.ts new file mode 100644 index 0000000000..ba9fe7ebc6 --- /dev/null +++ b/packages/ui/src/components/atoms/Input/index.ts @@ -0,0 +1 @@ +export * from './Input'; diff --git a/packages/ui/src/components/atoms/Label/Label.stories.tsx b/packages/ui/src/components/atoms/Label/Label.stories.tsx new file mode 100644 index 0000000000..3fca48aadb --- /dev/null +++ b/packages/ui/src/components/atoms/Label/Label.stories.tsx @@ -0,0 +1,9 @@ +import { Label } from '@components/atoms/Label/Label'; + +export default { + component: Label, +}; + +export const Default = { + render: () => <Label>Hello World</Label>, +}; diff --git a/packages/ui/src/components/atoms/Label/Label.tsx b/packages/ui/src/components/atoms/Label/Label.tsx new file mode 100644 index 0000000000..3ac317c9a1 --- /dev/null +++ b/packages/ui/src/components/atoms/Label/Label.tsx @@ -0,0 +1,19 @@ +'use client'; + +import * as React from 'react'; +import * as LabelPrimitive from '@radix-ui/react-label'; +import { cva, type VariantProps } from 'class-variance-authority'; +import { ctw } from '@utils/ctw'; + +const labelVariants = cva( + 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70', +); + +const Label = React.forwardRef< + React.ElementRef<typeof LabelPrimitive.Root>, + React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants> +>(({ className, ...props }, ref) => ( + <LabelPrimitive.Root ref={ref} className={ctw(labelVariants(), className)} {...props} /> +)); + +export { Label }; diff --git a/packages/ui/src/components/atoms/Label/index.ts b/packages/ui/src/components/atoms/Label/index.ts new file mode 100644 index 0000000000..ca58c61a25 --- /dev/null +++ b/packages/ui/src/components/atoms/Label/index.ts @@ -0,0 +1 @@ +export * from './Label'; diff --git a/packages/ui/src/components/atoms/ScrollArea/ScrollArea.tsx b/packages/ui/src/components/atoms/ScrollArea/ScrollArea.tsx new file mode 100644 index 0000000000..e35b630e6b --- /dev/null +++ b/packages/ui/src/components/atoms/ScrollArea/ScrollArea.tsx @@ -0,0 +1,27 @@ +import * as React from 'react'; +import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'; +import { ctw } from '@utils/ctw'; +import { ScrollBar } from '@components/atoms/ScrollArea'; + +interface Props extends ScrollAreaPrimitive.ScrollAreaProps { + orientation: 'vertical' | 'horizontal' | 'both'; +} + +export const ScrollArea = React.forwardRef< + React.ElementRef<React.FC<Props>>, + React.ComponentPropsWithoutRef<React.FC<Props>> +>(({ className, children, orientation, ...props }, ref) => ( + <ScrollAreaPrimitive.Root + ref={ref} + className={ctw('relative overflow-hidden', className)} + {...props} + > + <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]"> + {children} + </ScrollAreaPrimitive.Viewport> + <ScrollBar orientation="vertical" /> + <ScrollBar orientation="horizontal" /> + <ScrollAreaPrimitive.Corner /> + </ScrollAreaPrimitive.Root> +)); +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; diff --git a/packages/ui/src/components/atoms/ScrollArea/Scrollbar.tsx b/packages/ui/src/components/atoms/ScrollArea/Scrollbar.tsx new file mode 100644 index 0000000000..d44f6fd028 --- /dev/null +++ b/packages/ui/src/components/atoms/ScrollArea/Scrollbar.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'; +import { ctw } from '@utils/ctw'; + +export const ScrollBar = React.forwardRef< + React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>, + React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar> +>(({ className, orientation = 'vertical', ...props }, ref) => ( + <ScrollAreaPrimitive.ScrollAreaScrollbar + ref={ref} + orientation={orientation} + className={ctw( + 'touch-none select-none transition-colors', + orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]', + orientation === 'horizontal' && 'flex h-2.5 border-t border-t-transparent p-[1px]', + className, + )} + {...props} + > + <ScrollAreaPrimitive.ScrollAreaThumb className="bg-border rounded-full" /> + </ScrollAreaPrimitive.ScrollAreaScrollbar> +)); +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName; diff --git a/packages/ui/src/components/atoms/ScrollArea/index.ts b/packages/ui/src/components/atoms/ScrollArea/index.ts new file mode 100644 index 0000000000..8332e9acd5 --- /dev/null +++ b/packages/ui/src/components/atoms/ScrollArea/index.ts @@ -0,0 +1,2 @@ +export * from './ScrollArea'; +export * from './Scrollbar'; diff --git a/packages/ui/src/components/atoms/Table/Table.tsx b/packages/ui/src/components/atoms/Table/Table.tsx new file mode 100644 index 0000000000..a11b3c2e8d --- /dev/null +++ b/packages/ui/src/components/atoms/Table/Table.tsx @@ -0,0 +1,9 @@ +import * as React from 'react'; +import { ctw } from '@utils/ctw'; + +export const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>( + ({ className, ...props }, ref) => ( + <table ref={ref} className={ctw('caption-bottom w-full text-sm', className)} {...props} /> + ), +); +Table.displayName = 'Table'; diff --git a/packages/ui/src/components/atoms/Table/TableBody.tsx b/packages/ui/src/components/atoms/Table/TableBody.tsx new file mode 100644 index 0000000000..7b7f19e58b --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableBody.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <tbody ref={ref} className={ctw('[&_tr:last-child]:border-0', className)} {...props} /> +)); +TableBody.displayName = 'TableBody'; diff --git a/packages/ui/src/components/atoms/Table/TableCaption.tsx b/packages/ui/src/components/atoms/Table/TableCaption.tsx new file mode 100644 index 0000000000..188d818fb6 --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableCaption.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes<HTMLTableCaptionElement> +>(({ className, ...props }, ref) => ( + <caption ref={ref} className={ctw('text-muted-foreground mt-4 text-sm', className)} {...props} /> +)); +TableCaption.displayName = 'TableCaption'; diff --git a/packages/ui/src/components/atoms/Table/TableCell.tsx b/packages/ui/src/components/atoms/Table/TableCell.tsx new file mode 100644 index 0000000000..47585b645a --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableCell.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes<HTMLTableCellElement> +>(({ className, ...props }, ref) => ( + <td + ref={ref} + className={ctw('font-inter p-4 align-middle [&:has([role=checkbox])]:pr-0', className)} + {...props} + /> +)); +TableCell.displayName = 'TableCell'; diff --git a/packages/ui/src/components/atoms/Table/TableFooter.tsx b/packages/ui/src/components/atoms/Table/TableFooter.tsx new file mode 100644 index 0000000000..749490d8af --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableFooter.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <tfoot + ref={ref} + className={ctw('bg-primary text-primary-foreground font-medium', className)} + {...props} + /> +)); +TableFooter.displayName = 'TableFooter'; diff --git a/packages/ui/src/components/atoms/Table/TableHead.tsx b/packages/ui/src/components/atoms/Table/TableHead.tsx new file mode 100644 index 0000000000..6644a9d498 --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableHead.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes<HTMLTableCellElement> +>(({ className, ...props }, ref) => ( + <th + ref={ref} + className={ctw( + 'font-inter text-muted-foreground h-12 px-4 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0', + className, + )} + {...props} + /> +)); +TableHead.displayName = 'TableHead'; diff --git a/packages/ui/src/components/atoms/Table/TableHeader.tsx b/packages/ui/src/components/atoms/Table/TableHeader.tsx new file mode 100644 index 0000000000..f2f8ac87ff --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableHeader.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes<HTMLTableSectionElement> +>(({ className, ...props }, ref) => ( + <thead ref={ref} className={ctw('[&_tr]:border-b', className)} {...props} /> +)); +TableHeader.displayName = 'TableHeader'; diff --git a/packages/ui/src/components/atoms/Table/TableRow.tsx b/packages/ui/src/components/atoms/Table/TableRow.tsx new file mode 100644 index 0000000000..04ace97475 --- /dev/null +++ b/packages/ui/src/components/atoms/Table/TableRow.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { ctw } from '@utils/ctw'; + +export const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes<HTMLTableRowElement> +>(({ className, ...props }, ref) => ( + <tr + ref={ref} + className={ctw( + 'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', + className, + )} + {...props} + /> +)); +TableRow.displayName = 'TableRow'; diff --git a/packages/ui/src/components/atoms/Table/index.ts b/packages/ui/src/components/atoms/Table/index.ts new file mode 100644 index 0000000000..7a860f8a35 --- /dev/null +++ b/packages/ui/src/components/atoms/Table/index.ts @@ -0,0 +1,8 @@ +export * from './Table'; +export * from './TableBody'; +export * from './TableRow'; +export * from './TableCell'; +export * from './TableFooter'; +export * from './TableCaption'; +export * from './TableHead'; +export * from './TableHeader'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.stories.tsx b/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.stories.tsx new file mode 100644 index 0000000000..ad15c45674 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.stories.tsx @@ -0,0 +1,69 @@ +import { WorkflowsTable } from './WorkflowsTable'; +import { WorkflowTableItem } from './types'; + +export default { + component: WorkflowsTable, +}; + +function createTableData(count: number): WorkflowTableItem[] { + return new Array(count).fill(null).map((_, index) => ({ + id: `element-id-${index}`, + workflowDefinitionName: `Workflow-Name-${index}`, + workflowDefinitionId: `Workflow-ID-${index}`, + status: 'active', + state: null, + assignee: null, + context: { + some_context: 'hello world', + }, + createdAt: new Date(), + updatedAt: new Date(), + resolvedAt: new Date(), + })); +} + +export const Default = { + render: () => <WorkflowsTable items={createTableData(10)} onSort={() => {}} />, +}; + +export const Rounded = { + render: () => ( + <WorkflowsTable.Container> + <WorkflowsTable items={createTableData(10)} onSort={() => {}} /> + </WorkflowsTable.Container> + ), +}; + +export const StickyHeader = { + render: () => ( + <div className="h-[500px]"> + <WorkflowsTable.Container> + <WorkflowsTable items={createTableData(10)} onSort={() => {}} /> + </WorkflowsTable.Container> + </div> + ), +}; + +export const FancyScrollbars = { + render: () => ( + <div className="h-[500px]"> + <WorkflowsTable.Container> + <WorkflowsTable.ScrollContainer> + <WorkflowsTable items={createTableData(10)} onSort={() => {}} /> + </WorkflowsTable.ScrollContainer> + </WorkflowsTable.Container> + </div> + ), +}; + +export const FetchingData = { + render: () => ( + <WorkflowsTable.Container isFetching> + <WorkflowsTable items={createTableData(10)} onSort={() => {}} /> + </WorkflowsTable.Container> + ), +}; + +export const Empty = { + render: () => <WorkflowsTable items={[]} onSort={() => {}} isFetching={false} />, +}; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.tsx b/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.tsx new file mode 100644 index 0000000000..55210b5408 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/WorkflowsTable.tsx @@ -0,0 +1,122 @@ +import { Table } from '@components/atoms/Table/Table'; +import { TableBody } from '@components/atoms/Table/TableBody'; +import { TableCell } from '@components/atoms/Table/TableCell'; +import { TableHead } from '@components/atoms/Table/TableHead'; +import { TableHeader } from '@components/atoms/Table/TableHeader'; +import { TableRow } from '@components/atoms/Table/TableRow'; +import { useMemo } from 'react'; +import { useReactTable, flexRender, getCoreRowModel } from '@tanstack/react-table'; +import { defaultColumns } from './columns'; +import { InputColumn, WorkflowsTableSorting, WorkflowTableColumnDef } from './types'; +import keyBy from 'lodash/keyBy'; +import { mergeColumns } from './utils/merge-columns'; +import { WorkflowTableItem } from './types'; +import { TableContainer } from './components/TableContainer'; +import { ScrollContainer } from './components/ScrollContainer'; + +interface Props { + items: WorkflowTableItem[]; + sorting?: WorkflowsTableSorting; + isFetching?: boolean; + columns?: InputColumn[]; + onSort: (key: string, direction: 'asc' | 'desc') => void; +} + +export function WorkflowsTable({ items, isFetching, sorting, columns, onSort }: Props) { + // merging column parameters if provided + const tableColumns = useMemo((): WorkflowTableColumnDef<WorkflowTableItem>[] => { + if (!Array.isArray(columns) || !columns.length) return defaultColumns; + + const columnsMap = keyBy(columns, 'id'); + + return defaultColumns.map(defaultColumn => { + const columnParams = columnsMap[defaultColumn.accessorKey]; + + if (!columnParams) return defaultColumn; + + return mergeColumns<WorkflowTableItem>(defaultColumn, columnParams); + }); + }, [columns]); + + const table = useReactTable({ + columns: tableColumns, + data: items, + enableColumnResizing: true, + manualSorting: false, + state: { + sorting: sorting + ? [ + { + id: sorting.key, + desc: sorting.direction === 'desc', + }, + ] + : [], + }, + onSortingChange: updater => { + if (typeof updater === 'function') { + const newSortingValue = updater(table.getState().sorting); + table.setSorting(newSortingValue); + } else { + const sortingState = updater; + onSort(sortingState[0].id, sortingState[0].desc ? 'desc' : 'asc'); + } + }, + getCoreRowModel: getCoreRowModel(), + }); + + const isEmpty = !items.length && !isFetching; + + return ( + <Table> + <TableHeader> + {table.getHeaderGroups().map(({ id: headerRowId, headers }) => { + return ( + <TableRow key={headerRowId}> + {headers.map(header => ( + <TableHead key={header.id} className="font-inter sticky top-0 w-1/4 bg-white"> + {flexRender(header.column.columnDef.header, header.getContext())} + </TableHead> + ))} + </TableRow> + ); + })} + </TableHeader> + <TableBody> + {isEmpty ? ( + <TableRow> + <TableCell colSpan={table.getAllColumns().length} className="font-inter text-center"> + Workflows not found. + </TableCell> + </TableRow> + ) : ( + table.getRowModel().rows.map(row => { + return ( + <TableRow key={row.id}> + {row.getVisibleCells().map(cell => { + return ( + <TableCell + key={cell.id} + className="max-w-1/4 w-1/4 whitespace-nowrap" + title={String(cell.getValue())} + style={{ + minWidth: `${cell.column.getSize()}px`, + }} + > + <div className="line-clamp-1 overflow-hidden text-ellipsis break-all"> + {flexRender(cell.column.columnDef.cell, cell.getContext())} + </div> + </TableCell> + ); + })} + </TableRow> + ); + }) + )} + </TableBody> + </Table> + ); +} + +WorkflowsTable.Container = TableContainer; +WorkflowsTable.ScrollContainer = ScrollContainer; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/columns.tsx b/packages/ui/src/components/organisms/WorkflowsTable/columns.tsx new file mode 100644 index 0000000000..3c79823565 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/columns.tsx @@ -0,0 +1,69 @@ +import { WorkflowTableColumnDef, WorkflowTableItem } from './types'; +import { getWorkflowHealthStatus } from './utils/get-workflow-health-status'; +import { formatDate } from './utils/format-date'; +import { DataTableColumnHeader } from './components/DataTableColumnHeader'; +import { HealthIndicator } from '@components/atoms/HealthIndicator'; +import { JsonDialog } from './components/JsonDialog'; + +export const defaultColumns: WorkflowTableColumnDef<WorkflowTableItem>[] = [ + { + accessorKey: 'id', + cell: info => info.getValue<string>(), + header: () => 'ID', + }, + { + accessorKey: 'workflowDefinitionName', + cell: info => info.getValue<string>(), + header: ({ column }) => ( + <DataTableColumnHeader column={column} title="Workflow Definition Name" /> + ), + }, + { + accessorKey: 'status', + cell: info => ( + <div className="font-inter flex flex-row flex-nowrap gap-4 font-medium capitalize"> + <HealthIndicator healthStatus={getWorkflowHealthStatus(info.row.original)} /> + {info.getValue<string>() || ''} + </div> + ), + header: ({ column }) => <DataTableColumnHeader column={column} title="Status" />, + }, + { + accessorKey: 'state', + cell: info => info.getValue<string>(), + header: ({ column }) => <DataTableColumnHeader column={column} title="State" />, + }, + { + accessorKey: 'assignee', + accessorFn: row => (row.assignee ? `${row.assignee.firstName} ${row.assignee.lastName}` : '-'), + cell: info => info.getValue<string>(), + header: ({ column }) => <DataTableColumnHeader column={column} title="Assign To" />, + }, + { + accessorKey: 'context', + accessorFn: row => JSON.stringify(row.context), + cell: info => <JsonDialog context={info.getValue<string>()} />, + header: () => 'Context', + }, + { + accessorKey: 'view-workflow', + accessorFn: row => row.id, + cell: () => '-', + header: () => 'Workflow', + }, + { + accessorKey: 'resolvedAt', + cell: info => (info.getValue<Date>() ? formatDate(info.getValue<Date>()) : '-'), + header: ({ column }) => <DataTableColumnHeader column={column} title="Resolved At" />, + }, + { + accessorKey: 'createdBy', + cell: info => info.getValue<string>(), + header: ({ column }) => <DataTableColumnHeader column={column} title="Created By" />, + }, + { + accessorKey: 'createdAt', + cell: info => formatDate(info.getValue<Date>()), + header: ({ column }) => <DataTableColumnHeader column={column} title="Created At" />, + }, +]; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx b/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx new file mode 100644 index 0000000000..385e33eaba --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/DataTableColumnHeader.tsx @@ -0,0 +1,60 @@ +import { Column } from '@tanstack/react-table'; +import { ChevronsUpDown, EyeOff, SortAsc, SortDesc } from 'lucide-react'; +import { Button } from '@components/atoms/Button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@components/atoms/Dropdown'; +import { ctw } from '@utils/ctw'; + +interface DataTableColumnHeaderProps<TData, TValue> extends React.HTMLAttributes<HTMLDivElement> { + column: Column<TData, TValue>; + title: string; +} + +export function DataTableColumnHeader<TData, TValue>({ + column, + title, + className, +}: DataTableColumnHeaderProps<TData, TValue>) { + if (!column.getCanSort()) { + return <div className={ctw(className)}>{title}</div>; + } + + return ( + <div className={ctw('flex items-center space-x-2 whitespace-nowrap', className)}> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button variant="ghost" size="sm" className="data-[state=open]:bg-accent -ml-3 h-8"> + <span>{title}</span> + {column.getIsSorted() === 'desc' ? ( + <SortDesc className="ml-2 h-4 w-4" /> + ) : column.getIsSorted() === 'asc' ? ( + <SortAsc className="ml-2 h-4 w-4" /> + ) : ( + <ChevronsUpDown className="ml-2 h-4 w-4" /> + )} + </Button> + </DropdownMenuTrigger> + <DropdownMenuContent align="start"> + <DropdownMenuItem onClick={() => column.toggleSorting(false)}> + <SortAsc className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Asc + </DropdownMenuItem> + <DropdownMenuItem onClick={() => column.toggleSorting(true)}> + <SortDesc className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Desc + </DropdownMenuItem> + <DropdownMenuSeparator /> + <DropdownMenuItem onClick={() => column.toggleVisibility(false)}> + <EyeOff className="text-muted-foreground/70 mr-2 h-3.5 w-3.5" /> + Hide + </DropdownMenuItem> + </DropdownMenuContent> + </DropdownMenu> + </div> + ); +} diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/index.ts b/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/index.ts new file mode 100644 index 0000000000..6aa469ad2b --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/DataTableColumnHeader/index.ts @@ -0,0 +1 @@ +export * from './DataTableColumnHeader'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/JsonDialog.tsx b/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/JsonDialog.tsx new file mode 100644 index 0000000000..8fb000dd2c --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/JsonDialog.tsx @@ -0,0 +1,29 @@ +import { Button } from '@components/atoms/Button'; +import { Dialog, DialogContent, DialogTrigger } from '@components/atoms/Dialog'; +import { ScrollArea } from '@components/atoms/ScrollArea'; +import { CodeIcon } from 'lucide-react'; +import ReactJson from 'react-json-view'; + +interface Props { + context: string; +} + +export const JsonDialog = ({ context }: Props) => { + return ( + <Dialog> + <DialogTrigger asChild> + <Button className="flex items-center gap-2"> + <CodeIcon size="16" /> + View context + </Button> + </DialogTrigger> + <DialogContent className="h-[80vh] min-w-[80%] bg-white"> + <div className="pr-4"> + <ScrollArea orientation="both"> + <ReactJson src={context ? (JSON.parse(context) as object) : {}} /> + </ScrollArea> + </div> + </DialogContent> + </Dialog> + ); +}; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/index.ts b/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/index.ts new file mode 100644 index 0000000000..6c7847cec8 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/JsonDialog/index.ts @@ -0,0 +1 @@ +export * from './JsonDialog'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/ScrollContainer.tsx b/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/ScrollContainer.tsx new file mode 100644 index 0000000000..136fdf5d3a --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/ScrollContainer.tsx @@ -0,0 +1,17 @@ +// import Scrollbars from 'react-custom-scrollbars'; + +import { ScrollArea } from '@components/atoms/ScrollArea'; + +interface Props { + children: React.ReactNode; +} + +export function ScrollContainer({ children }: Props) { + return ( + <ScrollArea className="h-full" orientation="both"> + {children} + </ScrollArea> + ); +} + +ScrollContainer.displayName = 'ScrollContainer'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/index.ts b/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/index.ts new file mode 100644 index 0000000000..0d367b8b9d --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/ScrollContainer/index.ts @@ -0,0 +1 @@ +export * from './ScrollContainer'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/TableContainer.tsx b/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/TableContainer.tsx new file mode 100644 index 0000000000..30da825ec5 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/TableContainer.tsx @@ -0,0 +1,21 @@ +import { ctw } from '@utils/ctw'; + +interface Props { + isFetching?: boolean; + children: React.ReactNode; +} + +export function TableContainer({ children, isFetching }: Props) { + return ( + <div + className={ctw('relative w-full overflow-auto bg-white', 'h-full rounded-md border', { + ['opacity-40']: isFetching, + ['pointer-events-none']: isFetching, + })} + > + {children} + </div> + ); +} + +TableContainer.displayName = 'TableContainer'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/index.ts b/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/index.ts new file mode 100644 index 0000000000..2ca68880b4 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/components/TableContainer/index.ts @@ -0,0 +1 @@ +export * from './TableContainer'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/index.ts b/packages/ui/src/components/organisms/WorkflowsTable/index.ts new file mode 100644 index 0000000000..0d82108883 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/index.ts @@ -0,0 +1 @@ +export * from './WorkflowsTable'; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/types.ts b/packages/ui/src/components/organisms/WorkflowsTable/types.ts new file mode 100644 index 0000000000..412c8dc197 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/types.ts @@ -0,0 +1,43 @@ +import { AccessorFnColumnDef, ColumnDef } from '@tanstack/react-table'; + +export interface WorkflowTableItem { + id: string; + workflowDefinitionName: string; + workflowDefinitionId: string; + status: string; + state: string | null; + assignee: { + firstName: string; + lastName: string; + } | null; + context: object; + createdAt: Date; + updatedAt: Date; + resolvedAt: Date | null; +} + +export interface WorkflowsTableSorting { + key: string; + direction: 'asc' | 'desc'; +} + +export type WorkflowTableColumnKeys = + | 'id' + | 'workflowDefinitionName' + | 'status' + | 'state' + | 'assignee' + | 'context' + | 'view-workflow' + | 'resolvedAt' + | 'createdBy' + | 'createdAt'; + +export type WorkflowTableColumnDef<TData> = Omit<ColumnDef<TData>, 'accessorKey'> & { + accessorFn?: AccessorFnColumnDef<TData>['accessorFn']; + accessorKey: WorkflowTableColumnKeys; +}; + +export type InputColumn<TData = WorkflowTableItem> = Partial<WorkflowTableColumnDef<TData>> & { + id: WorkflowTableColumnKeys; +}; diff --git a/packages/ui/src/components/organisms/WorkflowsTable/utils/calculate-hour-difference.ts b/packages/ui/src/components/organisms/WorkflowsTable/utils/calculate-hour-difference.ts new file mode 100644 index 0000000000..b979318701 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/utils/calculate-hour-difference.ts @@ -0,0 +1,5 @@ +import dayjs from 'dayjs'; + +export function calculateHourDifference(dateA: Date, dateB: Date) { + return Math.abs(dayjs(dateB).diff(dateA, 'hour', false)); +} diff --git a/packages/ui/src/components/organisms/WorkflowsTable/utils/format-date.ts b/packages/ui/src/components/organisms/WorkflowsTable/utils/format-date.ts new file mode 100644 index 0000000000..b078ba7457 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/utils/format-date.ts @@ -0,0 +1,3 @@ +export function formatDate(date: Date): string { + return new Date(date).toLocaleString(); +} diff --git a/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.ts b/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.ts new file mode 100644 index 0000000000..99b26c5426 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.ts @@ -0,0 +1,29 @@ +import { calculateHourDifference } from './calculate-hour-difference'; +import { WorkflowTableItem } from '../types'; +import { IWorkflowHealthStatus, WorkflowHealthStatus } from '@common/enums'; + +export function getWorkflowHealthStatus(workflow: WorkflowTableItem): IWorkflowHealthStatus { + const { status, createdAt } = workflow; + + if (status === 'failed') return WorkflowHealthStatus.failed; + + if (status === 'completed') return WorkflowHealthStatus.healthy; + + const hourDifference = calculateHourDifference(new Date(createdAt), new Date()); + const TWO_HOURS = 2; + const SIX_HOURS = 6; + + if (status === 'active' && hourDifference < TWO_HOURS) { + return WorkflowHealthStatus.healthy; + } + + if (status === 'active' && hourDifference > TWO_HOURS && hourDifference < SIX_HOURS) { + return WorkflowHealthStatus.pending; + } + + if (status === 'active' && hourDifference > SIX_HOURS) { + return WorkflowHealthStatus['pending-longterm']; + } + + return WorkflowHealthStatus.failed; +} diff --git a/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.unit.test.ts b/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.unit.test.ts new file mode 100644 index 0000000000..e52e5c0db7 --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/utils/get-workflow-health-status.unit.test.ts @@ -0,0 +1,52 @@ +import { describe, test, expect } from 'vitest'; +import { WorkflowTableItem } from '../types'; +import { getWorkflowHealthStatus } from '../utils/get-workflow-health-status'; +import dayjs from 'dayjs'; +import { WorkflowHealthStatus } from '@common/enums'; + +describe('getWorkflowHealthStatus', () => { + describe('healthy status', () => { + test('healthy when status is completed', () => { + expect(getWorkflowHealthStatus({ status: 'completed' } as WorkflowTableItem)).toBe( + WorkflowHealthStatus.healthy, + ); + }); + + test('healthy when status pending/active and process started < 2 hours ago', () => { + const PAST_DATE_3O_MIN_AGO = dayjs().subtract(30, 'minutes'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_3O_MIN_AGO.toDate(), + } as WorkflowTableItem), + ).toBe(WorkflowHealthStatus.healthy); + }); + }); + + describe('pending status', () => { + test('pending when status pending/active and process started > 2 && < 6 hours', () => { + const PAST_DATE_3HOURS_AGO = dayjs().subtract(3, 'hours'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_3HOURS_AGO.toDate(), + } as WorkflowTableItem), + ).toBe(WorkflowHealthStatus.pending); + }); + }); + + describe('pending-longterm status', () => { + test('pending-longterm when status pending/active and process started > 6 hours', () => { + const PAST_DATE_8HOURS_AGO = dayjs().subtract(8, 'hours'); + + expect( + getWorkflowHealthStatus({ + status: 'active', + createdAt: PAST_DATE_8HOURS_AGO.toDate(), + } as WorkflowTableItem), + ).toBe(WorkflowHealthStatus['pending-longterm']); + }); + }); +}); diff --git a/packages/ui/src/components/organisms/WorkflowsTable/utils/merge-columns.ts b/packages/ui/src/components/organisms/WorkflowsTable/utils/merge-columns.ts new file mode 100644 index 0000000000..fcb3b8adee --- /dev/null +++ b/packages/ui/src/components/organisms/WorkflowsTable/utils/merge-columns.ts @@ -0,0 +1,11 @@ +import { InputColumn, WorkflowTableColumnDef } from '../types'; + +export function mergeColumns<TColumnData>( + leftColumn: WorkflowTableColumnDef<TColumnData>, + rightColumn: InputColumn<TColumnData>, +): WorkflowTableColumnDef<TColumnData> { + return { + ...leftColumn, + ...rightColumn, + }; +} diff --git a/packages/ui/src/global.css b/packages/ui/src/global.css new file mode 100644 index 0000000000..ec7ec28c42 --- /dev/null +++ b/packages/ui/src/global.css @@ -0,0 +1,82 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap'); +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + html, + body, + #root { + height: 100%; + @apply font-inter; + } + + :root { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 359 86% 63%; + --destructive-foreground: 359 86% 93%; + + --success: 152 51% 54%; + --success-foreground: 152 51% 84%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; + + --border: 216 34% 17%; + --input: 216 34% 17%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + + --ring: 216 34% 17%; + + --radius: 0.5rem; + } +} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/packages/ui/src/utils/ctw.ts b/packages/ui/src/utils/ctw.ts new file mode 100644 index 0000000000..f344e541d2 --- /dev/null +++ b/packages/ui/src/utils/ctw.ts @@ -0,0 +1,4 @@ +import { ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export const ctw = (...classNames: Array<ClassValue>) => twMerge(clsx(classNames)); diff --git a/packages/ui/src/vite-env.d.ts b/packages/ui/src/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/packages/ui/src/vite-env.d.ts @@ -0,0 +1 @@ +/// <reference types="vite/client" /> diff --git a/packages/ui/tailwind.config.cjs b/packages/ui/tailwind.config.cjs new file mode 100644 index 0000000000..49e805d1f4 --- /dev/null +++ b/packages/ui/tailwind.config.cjs @@ -0,0 +1,77 @@ +const { fontFamily } = require('tailwindcss/defaultTheme'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ['class'], + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px', + }, + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: 'calc(var(--radius) - 4px)', + }, + fontFamily: { + sans: ['var(--font-sans)', ...fontFamily.sans], + inter: ['Inter', 'sans-serif'], + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + }, + }, + plugins: [require('tailwindcss-animate'), require('@tailwindcss/line-clamp')], +}; diff --git a/packages/ui/tsconfig.eslint.json b/packages/ui/tsconfig.eslint.json new file mode 100644 index 0000000000..95fceb7782 --- /dev/null +++ b/packages/ui/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src", "e2e", "vite.config.ts"] +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json new file mode 100644 index 0000000000..50ed2e5203 --- /dev/null +++ b/packages/ui/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": false, + "types": ["node"], + "paths": { + "@components/*": ["./src/components/*"], + "@utils/*": ["./src/utils/*"], + "@common/*": ["./src/common/*"], + "class-variance-authority": ["node_modules/class-variance-authority"] + } + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/ui/tsconfig.node.json b/packages/ui/tsconfig.node.json new file mode 100644 index 0000000000..c53fe434e9 --- /dev/null +++ b/packages/ui/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ES6", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts new file mode 100644 index 0000000000..7e412c93f2 --- /dev/null +++ b/packages/ui/vite.config.ts @@ -0,0 +1,67 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import dts from 'vite-plugin-dts'; +import fg from 'fast-glob'; +import { resolve } from 'path'; +import tailwindcss from 'tailwindcss'; + +// Defines an array of entry points to be used to search for files. +const entryPoints = ['src/components/**/*.ts']; + +// Searches for files that match the patterns defined in the array of input points. +// Returns an array of absolute file paths. +const files = fg.sync(entryPoints, { absolute: true }); + +// Maps the file paths in the "files" array to an array of key-value pair. +const entities = files + //excluding test files + .filter(file => Boolean(file.match(/(?<=src\/)(?!.*\.test).*$/))) + .map(file => { + // Extract the part of the file path after the "src" folder and before the file extension. + const [key] = file.match(/(?<=src\/).*$/) || []; + + // Remove the file extension from the key. + const keyWithoutExt = key.replace(/\.[^.]*$/, ''); + + return [keyWithoutExt, file]; + }); + +// Convert the array of key-value pairs to an object using the Object.fromEntries() method. +// Returns an object where each key is the file name without the extension and the value is the absolute file path. +const entries = Object.fromEntries(entities); +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react(), dts(), tailwindcss()], + resolve: { + alias: { + '@components': resolve(__dirname, './src/components'), + '@common': resolve(__dirname, './src/common'), + '@utils': resolve(__dirname, './src/utils'), + }, + }, + test: { + exclude: ['node_modules', 'lib'], + }, + build: { + outDir: 'lib', + lib: { + entry: { + ...entries, + index: './src/index.ts', + }, + formats: ['es'], + name: 'ui', + }, + rollupOptions: { + external: ['react', 'react-dom', 'react/jsx-runtime'], + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + 'react/jsx-runtime': 'react/jsx-runtime', + }, + }, + }, + minify: true, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed04410018..817430fbfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true @@ -813,6 +813,148 @@ importers: specifier: ^0.28.4 version: 0.28.5(jsdom@20.0.3) + packages/ui: + dependencies: + '@radix-ui/react-dialog': + specifier: ^1.0.2 + version: 1.0.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.5 + version: 2.0.5(@types/react-dom@18.0.11)(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.1 + version: 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': + specifier: ^1.0.2 + version: 1.0.3(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.1 + version: 1.0.2(@types/react@18.0.37)(react@18.2.0) + '@tanstack/react-table': + specifier: ^8.9.2 + version: 8.9.2(react-dom@18.2.0)(react@18.2.0) + class-variance-authority: + specifier: ^0.6.0 + version: 0.6.0(typescript@4.9.5) + clsx: + specifier: ^1.2.1 + version: 1.2.1 + dayjs: + specifier: ^1.11.6 + version: 1.11.7 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + lucide-react: + specifier: ^0.144.0 + version: 0.144.0(react@18.2.0) + react-json-view: + specifier: ^1.21.3 + version: 1.21.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) + tailwind-merge: + specifier: ^1.10.0 + version: 1.13.2 + devDependencies: + '@storybook/addon-essentials': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-interactions': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-links': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-styling': + specifier: ^1.3.2 + version: 1.3.2(less@4.1.3)(postcss@8.4.24)(react-dom@18.2.0)(react@18.2.0)(webpack@5.76.2) + '@storybook/blocks': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/builder-vite': + specifier: ^7.0.26 + version: 7.0.26(typescript@4.9.5)(vite@4.4.2) + '@storybook/react': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) + '@storybook/react-vite': + specifier: ^7.0.26 + version: 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.2) + '@storybook/testing-library': + specifier: ^0.0.14-next.2 + version: 0.0.14-next.2 + '@tailwindcss/line-clamp': + specifier: ^0.4.4 + version: 0.4.4(tailwindcss@3.3.2) + '@types/lodash': + specifier: ^4.14.191 + version: 4.14.191 + '@types/node': + specifier: ^20.4.1 + version: 20.4.1 + '@types/react': + specifier: ^18.0.14 + version: 18.0.37 + '@types/react-dom': + specifier: ^18.0.5 + version: 18.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.61.0 + version: 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@vitejs/plugin-react': + specifier: ^4.0.1 + version: 4.0.2(vite@4.4.2) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.24) + eslint: + specifier: ^8.44.0 + version: 8.44.0 + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.0(eslint@8.44.0) + eslint-plugin-react-refresh: + specifier: ^0.4.1 + version: 0.4.2(eslint@8.44.0) + eslint-plugin-storybook: + specifier: ^0.6.6 + version: 0.6.11(eslint@8.44.0)(typescript@4.9.5) + fast-glob: + specifier: ^3.3.0 + version: 3.3.0 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + storybook: + specifier: ^7.0.26 + version: 7.0.26 + tailwindcss: + specifier: ^3.3.2 + version: 3.3.2(ts-node@10.9.1) + tailwindcss-animate: + specifier: ^1.0.5 + version: 1.0.5(tailwindcss@3.3.2) + typescript: + specifier: ^4.9.5 + version: 4.9.5 + vite: + specifier: ^4.4.0 + version: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite-plugin-dts: + specifier: ^1.6.6 + version: 1.7.3(@types/node@20.4.1)(vite@4.4.2) + vitest: + specifier: ^0.33.0 + version: 0.33.0(less@4.1.3) + packages/workflow-core: dependencies: '@ballerine/common': @@ -1690,7 +1832,7 @@ importers: version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5) '@astrojs/tailwind': specifier: ^4.0.0 - version: 4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1) + version: 4.0.0(astro@2.6.6)(tailwindcss@3.3.2)(ts-node@10.9.1) '@ballerine/common': specifier: 0.5.6 version: link:../../packages/common @@ -1742,13 +1884,13 @@ importers: version: 8.8.0(eslint@8.36.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 version: 0.21.1(eslint@8.36.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.36.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 @@ -1761,6 +1903,11 @@ importers: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@adobe/css-tools@4.2.0: resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==} dev: true @@ -1876,12 +2023,16 @@ packages: '@algolia/requester-common': 4.16.0 dev: false + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.18 /@angular-devkit/core@13.3.11: resolution: {integrity: sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==} @@ -2013,7 +2164,7 @@ packages: hasBin: true dependencies: '@astrojs/compiler': 1.5.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@vscode/emmet-helper': 2.8.6 events: 3.3.0 prettier: 2.8.8 @@ -2117,7 +2268,7 @@ packages: - vite dev: false - /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.2.7)(ts-node@10.9.1): + /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.3.2)(ts-node@10.9.1): resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} peerDependencies: astro: ^2.6.5 @@ -2127,7 +2278,7 @@ packages: autoprefixer: 10.4.14(postcss@8.4.24) postcss: 8.4.24 postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.3.2(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: false @@ -3059,7 +3210,7 @@ packages: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.5 dev: true /@babel/code-frame@7.22.5: @@ -3073,8 +3224,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/compat-data@7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + /@babel/compat-data@7.22.6: + resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} engines: {node: '>=6.9.0'} /@babel/core@7.17.9: @@ -3130,7 +3281,7 @@ packages: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) '@babel/helper-module-transforms': 7.22.5 '@babel/helpers': 7.22.5 '@babel/parser': 7.22.5 @@ -3151,7 +3302,7 @@ packages: dependencies: '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 /@babel/generator@7.22.5: @@ -3160,7 +3311,7 @@ packages: dependencies: '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.18.6: @@ -3168,6 +3319,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} @@ -3186,7 +3344,7 @@ packages: '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 dev: true @@ -3200,65 +3358,51 @@ packages: '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.5): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.22.5 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.17.9): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + /@babel/helper-compilation-targets@7.22.6(@babel/core@7.17.9): + resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.5 + '@babel/compat-data': 7.22.6 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 + browserslist: 4.21.9 lru-cache: 5.1.1 - semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + /@babel/helper-compilation-targets@7.22.6(@babel/core@7.21.3): + resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.5 + '@babel/compat-data': 7.22.6 '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 + browserslist: 4.21.9 lru-cache: 5.1.1 - semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + /@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.5): + resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.5 + '@babel/compat-data': 7.22.6 '@babel/core': 7.22.5 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.5 + '@nicolo-ribaudo/semver-v6': 6.3.3 + browserslist: 4.21.9 lru-cache: 5.1.1 - semver: 6.3.0 /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} @@ -3267,14 +3411,14 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color dev: true @@ -3286,14 +3430,14 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color dev: true @@ -3305,14 +3449,14 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 transitivePeerDependencies: - supports-color dev: true @@ -3324,7 +3468,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 dev: true @@ -3335,7 +3479,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 dev: true @@ -3346,7 +3490,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 dev: true @@ -3356,11 +3500,11 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3372,11 +3516,11 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -3388,21 +3532,16 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.1 + resolve: 1.22.2 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} @@ -3414,14 +3553,6 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-function-name@7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - dev: true - /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} @@ -3429,21 +3560,14 @@ packages: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - /@babel/helper-member-expression-to-functions@7.21.0: - resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 @@ -3453,7 +3577,7 @@ packages: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} @@ -3465,14 +3589,14 @@ packages: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.18.6 '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3484,7 +3608,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 @@ -3499,9 +3623,21 @@ packages: '@babel/types': 7.22.5 dev: true + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.17.9): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -3510,7 +3646,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 @@ -3525,7 +3661,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 @@ -3540,7 +3676,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.20.5 '@babel/types': 7.22.5 @@ -3553,8 +3689,22 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers@7.22.5: + resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 @@ -3582,31 +3732,23 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} - engines: {node: '>=6.9.0'} - /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} @@ -3636,9 +3778,9 @@ packages: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3653,15 +3795,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -3691,7 +3824,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3): @@ -3701,7 +3834,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.22.5): @@ -3711,7 +3844,7 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.17.9): @@ -3721,7 +3854,7 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.17.9) dev: true @@ -3733,7 +3866,7 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) dev: true @@ -3745,7 +3878,7 @@ packages: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) dev: true @@ -3757,8 +3890,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.9) transitivePeerDependencies: @@ -3773,7 +3906,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) transitivePeerDependencies: @@ -3788,7 +3921,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) transitivePeerDependencies: @@ -3803,7 +3936,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3816,7 +3949,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3829,7 +3962,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3842,7 +3975,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color @@ -3856,7 +3989,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) transitivePeerDependencies: - supports-color @@ -3870,7 +4003,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -3883,7 +4016,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) dev: true @@ -3894,7 +4027,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) dev: true @@ -3905,7 +4038,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) dev: true @@ -3916,7 +4049,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) dev: true @@ -3927,7 +4060,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) dev: true @@ -3938,7 +4071,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true @@ -3949,7 +4082,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) dev: true @@ -3960,7 +4093,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) dev: true @@ -3971,7 +4104,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) dev: true @@ -3982,7 +4115,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) dev: true @@ -3993,7 +4126,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) dev: true @@ -4004,7 +4137,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) dev: true @@ -4015,7 +4148,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) dev: true @@ -4026,7 +4159,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) dev: true @@ -4037,7 +4170,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) dev: true @@ -4048,7 +4181,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) dev: true @@ -4059,7 +4192,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) dev: true @@ -4070,7 +4203,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) dev: true @@ -4082,8 +4215,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) dev: true @@ -4096,8 +4229,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) dev: true @@ -4110,8 +4243,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) dev: true @@ -4123,7 +4256,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) dev: true @@ -4134,7 +4267,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) dev: true @@ -4145,7 +4278,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) dev: true @@ -4156,7 +4289,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.9) dev: true @@ -4168,7 +4301,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) dev: true @@ -4180,7 +4313,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) dev: true @@ -4193,7 +4326,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -4206,7 +4339,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -4219,7 +4352,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -4233,7 +4366,7 @@ packages: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color @@ -4248,7 +4381,7 @@ packages: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) transitivePeerDependencies: - supports-color @@ -4263,7 +4396,7 @@ packages: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -4277,7 +4410,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3): @@ -4288,7 +4421,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): @@ -4299,7 +4432,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.9): @@ -4308,7 +4441,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3): @@ -4317,7 +4450,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): @@ -4326,7 +4459,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): @@ -4335,7 +4468,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.17.9): @@ -4344,7 +4477,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3): @@ -4353,7 +4486,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): @@ -4362,7 +4495,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): @@ -4372,7 +4505,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3): @@ -4382,7 +4515,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): @@ -4392,7 +4525,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.9): @@ -4401,7 +4534,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3): @@ -4410,7 +4543,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): @@ -4419,7 +4552,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.9): @@ -4428,7 +4561,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3): @@ -4437,7 +4570,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): @@ -4446,7 +4579,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): @@ -4456,7 +4589,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3): @@ -4466,7 +4599,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.22.5): @@ -4476,7 +4609,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.3): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): @@ -4485,7 +4627,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.9): @@ -4494,7 +4636,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3): @@ -4503,7 +4645,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): @@ -4512,17 +4654,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.5): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.9): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -4530,7 +4672,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3): @@ -4539,7 +4681,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): @@ -4548,7 +4690,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): @@ -4557,7 +4699,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3): @@ -4566,7 +4708,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): @@ -4575,7 +4717,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): @@ -4584,7 +4726,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3): @@ -4593,7 +4735,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): @@ -4602,7 +4744,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): @@ -4611,7 +4753,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3): @@ -4620,7 +4762,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): @@ -4629,7 +4771,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): @@ -4638,7 +4780,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3): @@ -4647,7 +4789,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): @@ -4656,7 +4798,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): @@ -4665,7 +4807,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3): @@ -4674,7 +4816,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): @@ -4683,7 +4825,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): @@ -4693,7 +4835,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3): @@ -4703,7 +4845,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): @@ -4713,7 +4855,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.9): @@ -4723,7 +4865,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3): @@ -4733,7 +4875,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): @@ -4743,27 +4885,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.17.9): - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.22.5): - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.17.9): @@ -4773,27 +4915,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3): - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.22.5): - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.17.9): @@ -4804,7 +4946,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) transitivePeerDependencies: - supports-color @@ -4818,7 +4960,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) transitivePeerDependencies: - supports-color @@ -4832,7 +4974,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -4845,7 +4987,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3): @@ -4855,7 +4997,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.5): @@ -4865,7 +5007,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.17.9): @@ -4875,7 +5017,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3): @@ -4885,7 +5027,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.5): @@ -4895,7 +5037,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-classes@7.21.0(@babel/core@7.17.9): @@ -4906,13 +5048,13 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4926,13 +5068,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4946,13 +5088,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4965,30 +5107,30 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3): - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.22.5): - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.17.9): @@ -4998,7 +5140,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3): @@ -5008,7 +5150,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.5): @@ -5018,7 +5160,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.17.9): @@ -5029,7 +5171,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3): @@ -5040,7 +5182,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.22.5): @@ -5051,7 +5193,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.17.9): @@ -5061,7 +5203,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3): @@ -5071,7 +5213,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.5): @@ -5081,7 +5223,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.17.9): @@ -5092,7 +5234,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3): @@ -5103,7 +5245,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.22.5): @@ -5114,7 +5256,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.22.5): @@ -5124,7 +5266,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.22.5) dev: true @@ -5135,27 +5277,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3): - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.22.5): - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.17.9): @@ -5165,9 +5307,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3): @@ -5177,9 +5319,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.22.5): @@ -5189,9 +5331,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.17.9): @@ -5201,7 +5343,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3): @@ -5211,7 +5353,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.5): @@ -5221,7 +5363,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.17.9): @@ -5231,7 +5373,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3): @@ -5241,7 +5383,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.5): @@ -5251,7 +5393,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.17.9): @@ -5261,8 +5403,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5274,8 +5416,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5287,8 +5429,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5300,37 +5442,37 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3): - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.22.5): - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5342,10 +5484,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5357,10 +5499,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5372,10 +5514,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5387,8 +5529,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5400,8 +5542,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5413,8 +5555,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -5427,7 +5569,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3): @@ -5438,7 +5580,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.22.5): @@ -5449,7 +5591,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.17.9): @@ -5459,7 +5601,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3): @@ -5469,7 +5611,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.22.5): @@ -5479,7 +5621,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.17.9): @@ -5489,7 +5631,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color @@ -5502,7 +5644,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color @@ -5515,7 +5657,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color @@ -5528,7 +5670,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3): @@ -5538,7 +5680,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.22.5): @@ -5548,7 +5690,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.17.9): @@ -5558,7 +5700,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3): @@ -5568,7 +5710,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.5): @@ -5578,7 +5720,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.22.5): @@ -5588,7 +5730,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.22.5): @@ -5598,7 +5750,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.5): @@ -5608,11 +5770,25 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.22.5 + dev: true /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} @@ -5621,29 +5797,29 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3): - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.22.5): - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true @@ -5654,7 +5830,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3): @@ -5664,7 +5840,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.5): @@ -5674,7 +5850,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.17.9): @@ -5684,7 +5860,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3): @@ -5694,7 +5870,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.22.5): @@ -5704,7 +5880,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-spread@7.20.7(@babel/core@7.17.9): @@ -5714,7 +5890,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5725,7 +5901,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5736,7 +5912,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5747,7 +5923,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3): @@ -5757,7 +5933,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.5): @@ -5767,7 +5943,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.17.9): @@ -5777,7 +5953,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3): @@ -5787,7 +5963,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.5): @@ -5797,7 +5973,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.17.9): @@ -5807,7 +5983,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3): @@ -5817,7 +5993,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.5): @@ -5827,7 +6003,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.17.9): @@ -5839,8 +6015,8 @@ packages: '@babel/core': 7.17.9 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true @@ -5854,8 +6030,8 @@ packages: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true @@ -5867,27 +6043,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.22.5): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.17.9): @@ -5898,7 +6074,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3): @@ -5909,7 +6085,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.5): @@ -5920,7 +6096,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/preset-env@7.16.11(@babel/core@7.17.9): @@ -6014,10 +6190,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 + '@babel/compat-data': 7.22.6 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3) @@ -6051,22 +6227,22 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3) '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) @@ -6074,21 +6250,21 @@ packages: '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.3) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) - core-js-compat: 3.29.1 + core-js-compat: 3.31.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6100,10 +6276,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 + '@babel/compat-data': 7.22.6 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.5) @@ -6137,22 +6313,22 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.5) '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.5) '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.5) @@ -6160,21 +6336,195 @@ packages: '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.5) '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) - core-js-compat: 3.29.1 + core-js-compat: 3.31.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env@7.21.5(@babel/core@7.21.3): + resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.6 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) + core-js-compat: 3.31.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env@7.21.5(@babel/core@7.22.5): + resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.6 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) + core-js-compat: 3.31.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6187,7 +6537,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.5) dev: true @@ -6198,10 +6548,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 esutils: 2.0.3 dev: true @@ -6211,10 +6561,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 esutils: 2.0.3 dev: true @@ -6224,10 +6574,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 esutils: 2.0.3 dev: true @@ -6287,9 +6637,9 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 dev: true /@babel/template@7.22.5: @@ -6309,7 +6659,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -6326,7 +6676,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -6338,8 +6688,8 @@ packages: resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 /@babel/types@7.22.5: @@ -6864,6 +7214,14 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.18.11: + resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + /@esbuild/android-arm@0.15.18: resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} @@ -6897,6 +7255,14 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.18.11: + resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + optional: true + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} @@ -6922,6 +7288,14 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.18.11: + resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + optional: true + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} @@ -6947,6 +7321,14 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.18.11: + resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} @@ -6972,6 +7354,14 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.18.11: + resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} @@ -6997,6 +7387,14 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.18.11: + resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + optional: true + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} @@ -7022,6 +7420,14 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.18.11: + resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + /@esbuild/linux-arm64@0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} @@ -7047,6 +7453,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.18.11: + resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-arm@0.16.17: resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} @@ -7072,6 +7486,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.18.11: + resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} @@ -7097,6 +7519,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.18.11: + resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-loong64@0.15.18: resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} @@ -7130,6 +7560,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.18.11: + resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} @@ -7155,6 +7593,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.18.11: + resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} @@ -7180,6 +7626,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.18.11: + resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} @@ -7205,6 +7659,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.18.11: + resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} @@ -7230,8 +7692,16 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.16.17: - resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + /@esbuild/linux-s390x@0.18.11: + resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true + + /@esbuild/linux-x64@0.16.17: + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -7255,6 +7725,14 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.18.11: + resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} @@ -7280,6 +7758,14 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.18.11: + resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + optional: true + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} @@ -7305,6 +7791,14 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.18.11: + resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + optional: true + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} @@ -7330,6 +7824,14 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.18.11: + resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + optional: true + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} @@ -7355,6 +7857,14 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.18.11: + resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} @@ -7380,6 +7890,14 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.18.11: + resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} @@ -7405,6 +7923,14 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.18.11: + resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.22.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7435,6 +7961,16 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.44.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@eslint-community/regexpp@4.4.1: resolution: {integrity: sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -7446,7 +7982,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.6.0 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7462,7 +7998,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.6.0 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7479,7 +8015,24 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.2 + espree: 9.6.0 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc@2.1.0: + resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.6.0 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7500,6 +8053,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@8.44.0: + resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@faker-js/faker@7.6.0: resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} @@ -7692,6 +8250,17 @@ packages: transitivePeerDependencies: - supports-color + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -7742,15 +8311,15 @@ packages: slash: 3.0.0 dev: true - /@jest/console@29.5.0: - resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + /@jest/console@29.6.1: + resolution: {integrity: sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/node': 18.15.10 chalk: 4.1.2 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.6.1 + jest-util: 29.6.1 slash: 3.0.0 dev: true @@ -7808,11 +8377,11 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.5.0 - '@jest/reporters': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.1 + '@jest/reporters': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -7820,20 +8389,62 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 + jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) + jest-haste-map: 29.6.1 + jest-message-util: 29.6.1 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-resolve-dependencies: 29.5.0 - jest-runner: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - jest-watcher: 29.5.0 + jest-resolve: 29.6.1 + jest-resolve-dependencies: 29.6.1 + jest-runner: 29.6.1 + jest-runtime: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 + jest-watcher: 29.6.1 + micromatch: 4.0.5 + pretty-format: 29.6.1 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /@jest/core@29.6.1(ts-node@10.9.1): + resolution: {integrity: sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.6.1 + '@jest/reporters': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@types/node': 18.15.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) + jest-haste-map: 29.6.1 + jest-message-util: 29.6.1 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.1 + jest-resolve-dependencies: 29.6.1 + jest-runner: 29.6.1 + jest-runtime: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 + jest-watcher: 29.6.1 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -7851,29 +8462,29 @@ packages: jest-mock: 27.5.1 dev: true - /@jest/environment@29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + /@jest/environment@29.6.1: + resolution: {integrity: sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 + '@jest/fake-timers': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 - jest-mock: 29.5.0 + jest-mock: 29.6.1 dev: true - /@jest/expect-utils@29.5.0: - resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} + /@jest/expect-utils@29.6.1: + resolution: {integrity: sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect@29.5.0: - resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + /@jest/expect@29.6.1: + resolution: {integrity: sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.5.0 - jest-snapshot: 29.5.0 + expect: 29.6.1 + jest-snapshot: 29.6.1 transitivePeerDependencies: - supports-color dev: true @@ -7890,16 +8501,16 @@ packages: jest-util: 27.5.1 dev: true - /@jest/fake-timers@29.5.0: - resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + /@jest/fake-timers@29.6.1: + resolution: {integrity: sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.1.0 '@types/node': 18.15.10 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.6.1 + jest-mock: 29.6.1 + jest-util: 29.6.1 dev: true /@jest/globals@27.5.1: @@ -7911,14 +8522,14 @@ packages: expect: 27.5.1 dev: true - /@jest/globals@29.5.0: - resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + /@jest/globals@29.6.1: + resolution: {integrity: sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/types': 29.5.0 - jest-mock: 29.5.0 + '@jest/environment': 29.6.1 + '@jest/expect': 29.6.1 + '@jest/types': 29.6.1 + jest-mock: 29.6.1 transitivePeerDependencies: - supports-color dev: true @@ -7961,8 +8572,8 @@ packages: - supports-color dev: true - /@jest/reporters@29.5.0: - resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + /@jest/reporters@29.6.1: + resolution: {integrity: sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -7971,11 +8582,11 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jest/console': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.18 '@types/node': 18.15.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -7987,9 +8598,9 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.5.0 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-message-util: 29.6.1 + jest-util: 29.6.1 + jest-worker: 29.6.1 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -7998,11 +8609,11 @@ packages: - supports-color dev: true - /@jest/schemas@29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + /@jest/schemas@29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.25.24 + '@sinclair/typebox': 0.27.8 dev: true /@jest/source-map@27.5.1: @@ -8014,11 +8625,11 @@ packages: source-map: 0.6.1 dev: true - /@jest/source-map@29.4.3: - resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + /@jest/source-map@29.6.0: + resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -8033,12 +8644,12 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-result@29.5.0: - resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + /@jest/test-result@29.6.1: + resolution: {integrity: sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.1 + '@jest/types': 29.6.1 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true @@ -8055,13 +8666,13 @@ packages: - supports-color dev: true - /@jest/test-sequencer@29.5.0: - resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + /@jest/test-sequencer@29.6.1: + resolution: {integrity: sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 + '@jest/test-result': 29.6.1 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.1 slash: 3.0.0 dev: true @@ -8093,16 +8704,39 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.22.5 - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.1 jest-regex-util: 29.4.3 - jest-util: 29.5.0 + jest-util: 29.6.1 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/transform@29.6.1: + resolution: {integrity: sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.22.5 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.18 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.1 + jest-regex-util: 29.4.3 + jest-util: 29.6.1 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -8137,7 +8771,19 @@ packages: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.15.10 + '@types/yargs': 17.0.23 + chalk: 4.1.2 + dev: true + + /@jest/types@29.6.1: + resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.15.10 @@ -8145,6 +8791,23 @@ packages: chalk: 4.1.2 dev: true + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@4.9.5)(vite@4.4.2): + resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} + peerDependencies: + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + glob: 7.2.3 + glob-promise: 4.2.2(glob@7.2.3) + magic-string: 0.27.0 + react-docgen-typescript: 2.2.2(typescript@4.9.5) + typescript: 4.9.5 + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + dev: true + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.2(typescript@4.9.5)(vite@4.2.1): resolution: {integrity: sha512-BlArZRyCNaQXo9jSW1crabSqdQXlgIB9bh3W7WpKTeopUFy2PqOkVFdOv3FvvcJOu0A3pC/ECyQMiXxXK547MQ==} peerDependencies: @@ -8165,15 +8828,15 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -8187,14 +8850,17 @@ packages: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -8297,7 +8963,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.3 - '@types/react': 18.0.37 + '@types/react': 18.2.14 react: 18.2.0 dev: true @@ -8311,6 +8977,16 @@ packages: - '@types/node' dev: true + /@microsoft/api-extractor-model@7.26.4(@types/node@20.4.1): + resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.55.2(@types/node@20.4.1) + transitivePeerDependencies: + - '@types/node' + dev: true + /@microsoft/api-extractor@7.34.4(@types/node@18.15.10): resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} hasBin: true @@ -8323,7 +8999,27 @@ packages: '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.1 + resolve: 1.22.2 + semver: 7.3.8 + source-map: 0.6.1 + typescript: 4.8.4 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor@7.34.4(@types/node@20.4.1): + resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.26.4(@types/node@20.4.1) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.55.2(@types/node@20.4.1) + '@rushstack/rig-package': 0.3.18 + '@rushstack/ts-command-line': 4.13.2 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.2 semver: 7.3.8 source-map: 0.6.1 typescript: 4.8.4 @@ -8806,6 +9502,10 @@ packages: rxjs: 7.8.0 tslib: 2.5.2 + /@nicolo-ribaudo/semver-v6@6.3.3: + resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -10716,7 +11416,25 @@ packages: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.1 + resolve: 1.22.2 + semver: 7.3.8 + z-schema: 5.0.5 + dev: true + + /@rushstack/node-core-library@3.55.2(@types/node@20.4.1): + resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.4.1 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.2 semver: 7.3.8 z-schema: 5.0.5 dev: true @@ -10724,7 +11442,7 @@ packages: /@rushstack/rig-package@0.3.18: resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} dependencies: - resolve: 1.22.1 + resolve: 1.22.2 strip-json-comments: 3.1.1 dev: true @@ -10836,8 +11554,8 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: false - /@sinclair/typebox@0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@sinonjs/commons@1.8.6: @@ -10926,6 +11644,37 @@ packages: uuid-browser: 3.1.0 dev: true + /@storybook/addon-actions@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vVoqE0Zw0g1PPnGfho8vRwjpXhQCpRNBQ/2U83/CSodHWL/MBYENG0XMby90TC72M26gNmEh0dn1YCUXvLdiew==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + dequal: 2.0.3 + lodash: 4.17.21 + polished: 4.2.2 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-inspector: 6.0.1(react@18.2.0) + telejson: 7.1.0 + ts-dedent: 2.2.0 + uuid: 9.0.0 + dev: true + /@storybook/addon-backgrounds@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7hW961WzTV29jbVM051IzN7pNYTRrk5njDMV6eMsKD7KyzGDiqBAX3QuXnv95s8MLWUKSee7UZa4DUgQYfjxRg==} peerDependencies: @@ -10951,6 +11700,31 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/addon-backgrounds@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sjTkOnSsVBBl1GruVVsNKWEuLCbKjkNun1mzIklfYAiHz9hTZIhe9MA2SGZoDozMUDIXQqSoMDEc3rnDtfqsnQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + dev: true + /@storybook/addon-controls@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-25lH3wRmCHtW4N9PN9v12XsCttpi8rU80ZL+qzlAvak/bmdT7xXidNi9MTZHDZxbqDeBcs8N49wbymqixvEfMQ==} peerDependencies: @@ -10979,19 +11753,48 @@ packages: - supports-color dev: true - /@storybook/addon-docs@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-TT85AUqPRqH9Ry9Y80aVI+GoRCyLYC4xg0hWpNfhP3vdez4c2cpTHVGKY1aUIes0blj/iLd5eWv0IpAO9Jmg9g==} + /@storybook/addon-controls@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-mp1WuOYCPvR33orHn0XPABY5roF9Le8HnZwTpvfkrRMeMqLnYLnkCTZqY3JN/IOVlyQuYdqodP5CPDHNDLmvVg==} peerDependencies: - '@storybook/mdx1-csf': '>=1.0.0-0' react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: - '@storybook/mdx1-csf': + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/blocks': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.26 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@storybook/addon-docs@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TT85AUqPRqH9Ry9Y80aVI+GoRCyLYC4xg0hWpNfhP3vdez4c2cpTHVGKY1aUIes0blj/iLd5eWv0IpAO9Jmg9g==} + peerDependencies: + '@storybook/mdx1-csf': '>=1.0.0-0' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@storybook/mdx1-csf': optional: true dependencies: '@babel/core': 7.22.5 '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@jest/transform': 29.5.0 + '@jest/transform': 29.6.1 '@mdx-js/react': 2.3.0(react@18.2.0) '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 7.0.0-rc.10 @@ -11016,6 +11819,40 @@ packages: - supports-color dev: true + /@storybook/addon-docs@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-C8DOwfmPBWDUS1IJbyJxykgVVHVzSSL+JFh3FwtF0hsqwjlNW4OvGDFbz0oAxyxs4V46xVcvh4E95e3GkW36BQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@jest/transform': 29.5.0 + '@mdx-js/react': 2.3.0(react@18.2.0) + '@storybook/blocks': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/csf-plugin': 7.0.26 + '@storybook/csf-tools': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/mdx2-csf': 1.1.0 + '@storybook/node-logger': 7.0.26 + '@storybook/postinstall': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/react-dom-shim': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + fs-extra: 11.1.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + remark-external-links: 8.0.0 + remark-slug: 6.1.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/addon-essentials@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-a4Tnfu+v1yneou2oYrDikAmNHsv4z7jAjyS4npuJTEW2a1WW+WPw8340BfZBI/y89nFYM6zyZGqy26Gie/QqVA==} peerDependencies: @@ -11043,6 +11880,33 @@ packages: - supports-color dev: true + /@storybook/addon-essentials@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-r+IOtxbIqlCKO8fDgLppubYm+GEW3ZDxjPwXMQdDGem9ENpz0QLKb49r89+UYqnnaYjuYKjDNUOqy0gX2HfUXQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/addon-actions': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-backgrounds': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-docs': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-highlight': 7.0.26 + '@storybook/addon-measure': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-outline': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-toolbars': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-viewport': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.26 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.26 + '@storybook/preview-api': 7.0.26 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/addon-highlight@7.0.0-rc.10: resolution: {integrity: sha512-AvCElbBqs2nS6W5wh79zkeRINEAL3LH3RFcT3oLFwSR5sI3NiWAuADN37XK+HN2RGf6E6Z7/ue3EcqELZAgCLw==} dependencies: @@ -11051,6 +11915,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true + /@storybook/addon-highlight@7.0.26: + resolution: {integrity: sha512-+I+MoM7yXCA3YR2FwTSxSs6/IBpcc3Ey88WboGthR23ERmsgZOtum1S7KZ6cffNCOq4U0LzPkjKX2bICytFrIQ==} + dependencies: + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.0.26 + dev: true + /@storybook/addon-interactions@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-6MdBhlZ+vmS7tPoHPZn8hB5BJOw38ii670TvTy005UGj92+VeQRqlf9gVT5X7vnynmq6h/sj8MgSkSuqxL+3XA==} peerDependencies: @@ -11081,6 +11953,37 @@ packages: - supports-color dev: true + /@storybook/addon-interactions@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-trIbPFLdxF6XgGORhx8eSGmGZ/4/AekJyFluf2lgutGi4TPL5Xzrx3o1kTFPVdLAPplBuDIlVI4HSGHHH2zeTw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 7.0.26 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + jest-mock: 27.5.1 + polished: 4.2.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/addon-links@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Xgrm7o4RAqdnLwh/wGKyk7tL12eqQDLiyR2uahQrNUYG+MFz9hJCHzbBs/pVcOW2gdHRmdYMD6ZrZsk4/NehLA==} peerDependencies: @@ -11106,6 +12009,31 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/addon-links@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-og+8AUAUpHsT+MVjhdQmRNJw9RUkHn5FFoou003b9V4UlPPNDYTo/tNEqOhUXn2l/ESAROJlR/q/8Qjdes24pA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/router': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + dev: true + /@storybook/addon-measure@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GRjJPmjOcG0vLfJ5HvCoXq6GTjgR/Yxe8IXiC84aoUcwFTzMBHOb8J7doAY30SOqfuqBM3MTmTi7PBCHhFY6Cw==} peerDependencies: @@ -11128,6 +12056,28 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/addon-measure@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-iAnI6q3GB8uSydK+S4m4ANpy0GpMpHhmU0oBtu6OmyyzHUH1RJ7/fGfBnzx6YT+rIOlqSFocxYGn74ylsp33Wg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/types': 7.0.26 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/addon-outline@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Om+MFhkROJRtxHlVJ+DpLg+ROzdtFyNtWXgkQVH9YAo44SBkrBJbAAUj+0XmeWxr2gO3HEdLhRS4whoWBKAVbg==} peerDependencies: @@ -11151,6 +12101,72 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/addon-outline@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-oL7D0IWO0M6hMw5cWEC6JdKXlGadlVIdhIrVN+0gdFxuxCHTGpebQ02DCvyfls29UssEOxPaO1XMdu9tDlctbg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/types': 7.0.26 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-styling@1.3.2(less@4.1.3)(postcss@8.4.24)(react-dom@18.2.0)(react@18.2.0)(webpack@5.76.2): + resolution: {integrity: sha512-pxc2ncCH3jlOjsJFOmUECxIFvC4jmUxd0noeEC4shGfKvGhsssHpxcVtA36+s3JhDdx+Yhrk/0KeYoMe+35/qg==} + hasBin: true + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + '@storybook/api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + css-loader: 6.8.1(webpack@5.76.2) + less-loader: 11.1.3(less@4.1.3)(webpack@5.76.2) + postcss-loader: 7.3.3(postcss@8.4.24)(webpack@5.76.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + resolve-url-loader: 5.0.0 + sass-loader: 13.3.2(webpack@5.76.2) + style-loader: 3.3.3(webpack@5.76.2) + transitivePeerDependencies: + - encoding + - fibers + - less + - node-sass + - postcss + - sass + - sass-embedded + - supports-color + - webpack + dev: true + /@storybook/addon-toolbars@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zpCFJKO5TOfEcVPRWj9oyftgsONJltFndLVtuWwVGaILcL0bGSahFtVhtwen3geCm+mi3AISgmsbCz5ABbsPyg==} peerDependencies: @@ -11171,6 +12187,26 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/addon-toolbars@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DrwqcWuCLjaTNFtAYUxO2VaLrr2ibhB3ZQwW7J6a4YFCJaV49wempGPq3BzTWvrPUtMxGp7J3ZusdH9jBgCzjA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/addon-viewport@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aAEp2TEFSTjVmAfpWll3Kb0/tMFezWVEGI3WKlx2M5ladEC+jDygZrGovb4BpnknDQaHkrN0s9dsjUWTLmslww==} peerDependencies: @@ -11195,6 +12231,30 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/addon-viewport@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-veAYxnR11sojXC7tlnBZ/USiafhWCsZNvjxmywl/XCh3MeDGFFDb2NN1s/7irAYXfNMOhgPGZED19BN9cQ8QRQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + memoizerific: 1.11.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/addons@6.5.16(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==} peerDependencies: @@ -11243,6 +12303,23 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/api@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-czS5iWE3Px3e0sXjgt1T+LDiT6Tl4gXYPmHIaWpKGDCh4W2zrGolOvB0WqDt3IKhDGnXxaJF5jn705OGBQOptw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/blocks@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-E+v4EjHaSaHbFK2hiFcBW3X2Yz8+xANmioT94jr2AxvywAELMh5eOLByFwVdNK7e9umv7Qo2/icNvAzpaJdmrw==} peerDependencies: @@ -11277,6 +12354,41 @@ packages: - supports-color dev: true + /@storybook/blocks@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-VNYB6Y1Ocja8HVg4Bm1w7LvqRSEc9aLVD8BnI8BInHvekvxhaxTkfpA18qds7d8+RmerrJqAUhGx0jkIB/cvwA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-events': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/docs-tools': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/preview-api': 7.0.26 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + '@types/lodash': 4.14.191 + color-convert: 2.0.1 + dequal: 2.0.3 + lodash: 4.17.21 + markdown-to-jsx: 7.2.0(react@18.2.0) + memoizerific: 1.11.3 + polished: 4.2.2 + react: 18.2.0 + react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + telejson: 7.1.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/builder-manager@7.0.0-rc.10: resolution: {integrity: sha512-uAlbCZcbtVNQOSqzeddGG6Xdrz6cNmXbrV9aN1Jbua7HPAvq/p4SenJuf9YQLt7i2KAkMsNLcfM5kf9HHyPzIw==} dependencies: @@ -11300,6 +12412,30 @@ packages: - supports-color dev: true + /@storybook/builder-manager@7.0.26: + resolution: {integrity: sha512-1Uk3dL3Yu5AuimfHAghBHs11wf7B+a+277astqLx7HSeh3L49zcDZS4NhGHKmtQjsEorbvmtty3s16q2k+fM8A==} + dependencies: + '@fal-works/esbuild-plugin-global-externals': 2.1.2 + '@storybook/core-common': 7.0.26 + '@storybook/manager': 7.0.26 + '@storybook/node-logger': 7.0.26 + '@types/ejs': 3.1.2 + '@types/find-cache-dir': 3.2.1 + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.17.19) + browser-assert: 1.2.1 + ejs: 3.1.9 + esbuild: 0.17.19 + esbuild-plugin-alias: 0.2.1 + express: 4.18.2 + find-cache-dir: 3.3.2 + fs-extra: 11.1.1 + process: 0.11.10 + util: 0.12.5 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/builder-vite@7.0.0-rc.10(typescript@4.9.5)(vite@4.2.1): resolution: {integrity: sha512-sMPNSj2z+Zf3h+ZOG+ZAH8uVA++rqFu+Ehq6bX0asgMuOJoEbpi372p3l9ru9YyySNBlgQkgD2uZLCpIrFZNeQ==} peerDependencies: @@ -11344,6 +12480,48 @@ packages: - supports-color dev: true + /@storybook/builder-vite@7.0.26(typescript@4.9.5)(vite@4.4.2): + resolution: {integrity: sha512-PRvySwvJEBLTZcUCKIULdxeFZeoDeK5odGFN0oIJhGZlOEI7jzbAcBT9SEZUh+Cv4Pk93XFr5+ZJCm/yrmF8RA==} + peerDependencies: + '@preact/preset-vite': '*' + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 + vite-plugin-glimmerx: '*' + peerDependenciesMeta: + '@preact/preset-vite': + optional: true + typescript: + optional: true + vite-plugin-glimmerx: + optional: true + dependencies: + '@storybook/channel-postmessage': 7.0.26 + '@storybook/channel-websocket': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/core-common': 7.0.26 + '@storybook/csf-plugin': 7.0.26 + '@storybook/mdx2-csf': 1.1.0 + '@storybook/node-logger': 7.0.26 + '@storybook/preview': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/types': 7.0.26 + browser-assert: 1.2.1 + es-module-lexer: 0.9.3 + express: 4.18.2 + fs-extra: 11.1.1 + glob: 8.1.0 + glob-promise: 6.0.2(glob@8.1.0) + magic-string: 0.27.0 + remark-external-links: 8.0.0 + remark-slug: 6.1.0 + rollup: 2.70.2 + typescript: 4.9.5 + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/channel-postmessage@7.0.0-rc.10: resolution: {integrity: sha512-U7jx10NwqXiQRMnsY+Dwl8Lkc7a1zAA6fHHDMxxa1AKE7ISDoRi4dIrWs5BmOgi2IdFo52bexIE9RTOgPTuUew==} dependencies: @@ -11355,6 +12533,17 @@ packages: telejson: 7.1.0 dev: true + /@storybook/channel-postmessage@7.0.26: + resolution: {integrity: sha512-ZvFLr/tUD9dWIjQtIn1JXHjqrbOP/uEEOqzwpKSVj0Cl4Vgc12s8hecbzBufkOF7fwLsFvfieSi7ENOmjoncdQ==} + dependencies: + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + qs: 6.11.2 + telejson: 7.1.0 + dev: true + /@storybook/channel-postmessage@7.1.0-rc.1: resolution: {integrity: sha512-bX3j4EQIftkDMeXzL9JCAKSBR6FxAC6YfjavGBdhBIrOAdAqgP8opX65PJHpmN7j93hhaPqkMxsrJrtvqfTFXQ==} dependencies: @@ -11371,6 +12560,15 @@ packages: telejson: 7.1.0 dev: true + /@storybook/channel-websocket@7.0.26: + resolution: {integrity: sha512-c+0VcZf78RGnT/pWrH85yydt0azRKAHZF3SHWKM4+W8qOFr0Mk0+jqhPh1uoUoPDpBZDTKS/nzXY8cwUVwF/eA==} + dependencies: + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/global': 5.0.0 + telejson: 7.1.0 + dev: true + /@storybook/channels@6.5.16: resolution: {integrity: sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==} dependencies: @@ -11383,6 +12581,10 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true + /@storybook/channels@7.0.26: + resolution: {integrity: sha512-Br3XILhrtuL5Sdp91I04kKjJzSqU/N8gGL6B6nIfnuaHUvGMDuMCHAB+g7aoiyH5dnpDZ6yBVGNwtYAyJA+0Og==} + dev: true + /@storybook/channels@7.1.0-rc.1: resolution: {integrity: sha512-I7qwZdtTr+0q4/6x0UhqNy3LuvMZzHW9+cJrJwlpxfXDv9KHXQc4t1FJrWgeUymTreckLUWkwuO0DrRa8s594g==} dependencies: @@ -11394,22 +12596,70 @@ packages: tiny-invariant: 1.3.1 dev: true - /@storybook/cli@7.0.0-rc.10: - resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==} + /@storybook/cli@7.0.0-rc.10: + resolution: {integrity: sha512-UTncMAUO6+WvXW0IrUDBlN94X5BDCre4qvlZLnPU6LDDZ53MOjESO4U+k/3B/ARRNFaFoiDh+hfkBLg3ulLqgg==} + hasBin: true + dependencies: + '@babel/core': 7.22.5 + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) + '@ndelangen/get-tarball': 3.0.7 + '@storybook/codemod': 7.0.0-rc.10 + '@storybook/core-common': 7.0.0-rc.10 + '@storybook/core-server': 7.0.0-rc.10 + '@storybook/csf-tools': 7.0.0-rc.10 + '@storybook/node-logger': 7.0.0-rc.10 + '@storybook/telemetry': 7.0.0-rc.10 + '@storybook/types': 7.0.0-rc.10 + '@types/semver': 7.3.13 + boxen: 5.1.2 + chalk: 4.1.2 + commander: 6.2.1 + cross-spawn: 7.0.3 + detect-indent: 6.1.0 + envinfo: 7.8.1 + execa: 5.1.1 + express: 4.18.2 + find-up: 5.0.0 + fs-extra: 11.1.1 + get-npm-tarball-url: 2.0.3 + get-port: 5.1.1 + giget: 1.1.2 + globby: 11.1.0 + jscodeshift: 0.14.0(@babel/preset-env@7.20.2) + leven: 3.1.0 + prettier: 2.8.8 + prompts: 2.4.2 + puppeteer-core: 2.1.1 + read-pkg-up: 7.0.1 + semver: 7.5.3 + shelljs: 0.8.5 + simple-update-notifier: 1.1.0 + strip-json-comments: 3.1.1 + tempy: 1.0.1 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@storybook/cli@7.0.26: + resolution: {integrity: sha512-sZ136wRUYTdhhm/thegFoI47wOzl2X+K9eaiTTp0ARwnIUhXAPDQ0MKOD36hKbCX5T/pBE7r++7WoEReIbUDqQ==} hasBin: true dependencies: '@babel/core': 7.22.5 - '@babel/preset-env': 7.20.2(@babel/core@7.22.5) + '@babel/preset-env': 7.21.5(@babel/core@7.22.5) '@ndelangen/get-tarball': 3.0.7 - '@storybook/codemod': 7.0.0-rc.10 - '@storybook/core-common': 7.0.0-rc.10 - '@storybook/core-server': 7.0.0-rc.10 - '@storybook/csf-tools': 7.0.0-rc.10 - '@storybook/node-logger': 7.0.0-rc.10 - '@storybook/telemetry': 7.0.0-rc.10 - '@storybook/types': 7.0.0-rc.10 + '@storybook/codemod': 7.0.26 + '@storybook/core-common': 7.0.26 + '@storybook/core-server': 7.0.26 + '@storybook/csf-tools': 7.0.26 + '@storybook/node-logger': 7.0.26 + '@storybook/telemetry': 7.0.26 + '@storybook/types': 7.0.26 '@types/semver': 7.3.13 - boxen: 5.1.2 chalk: 4.1.2 commander: 6.2.1 cross-spawn: 7.0.3 @@ -11423,8 +12673,9 @@ packages: get-port: 5.1.1 giget: 1.1.2 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.20.2) + jscodeshift: 0.14.0(@babel/preset-env@7.21.5) leven: 3.1.0 + ora: 5.4.1 prettier: 2.8.8 prompts: 2.4.2 puppeteer-core: 2.1.1 @@ -11456,6 +12707,12 @@ packages: '@storybook/global': 5.0.0 dev: true + /@storybook/client-logger@7.0.26: + resolution: {integrity: sha512-OMVLbgceoeuM8sWOfTX/9a4zCrH78G32hg7x8yXLZnRJ9OLaHJHzUM0Onc4MLudqVUdaKH0c8ejpBXUyIr1rJQ==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + /@storybook/client-logger@7.1.0-rc.1: resolution: {integrity: sha512-9gIDb6K7cotqZie+BbhCFg0Lk2yMHkJEnC0/0cPXO7FqRhx75kHrGIsdrZShylZUjLoLQZQoV5z2mr085NO4Eg==} dependencies: @@ -11482,6 +12739,26 @@ packages: - supports-color dev: true + /@storybook/codemod@7.0.26: + resolution: {integrity: sha512-H9sV59FfGrGzGM+UZQclNglnc4cOkQvvF3EOWlR3BfDhx+STSB9VbCR308ygjUYw2TXZ2s5seCvHtVvA2yhILA==} + dependencies: + '@babel/core': 7.21.3 + '@babel/preset-env': 7.21.5(@babel/core@7.21.3) + '@babel/types': 7.21.3 + '@storybook/csf': 0.1.0 + '@storybook/csf-tools': 7.0.26 + '@storybook/node-logger': 7.0.26 + '@storybook/types': 7.0.26 + cross-spawn: 7.0.3 + globby: 11.1.0 + jscodeshift: 0.14.0(@babel/preset-env@7.21.5) + lodash: 4.17.21 + prettier: 2.8.8 + recast: 0.23.1 + transitivePeerDependencies: + - supports-color + dev: true + /@storybook/components@6.5.16(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-LzBOFJKITLtDcbW9jXl0/PaG+4xAz25PK8JxPZpIALbmOpYWOAPcO6V9C2heX6e6NgWFMUxjplkULEk9RCQMNA==} peerDependencies: @@ -11518,6 +12795,24 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/components@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-n0TVWEF4Bc9JAyEIaN0PqwglbaYYRcPVG7ka+5wgGmBiuDlWI1SXd4EXxv2u0mVibHvtkHvOn6/GaZ1vG45p6g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + util-deprecate: 1.0.2 + dev: true + /@storybook/core-client@7.0.0-rc.10: resolution: {integrity: sha512-Z1zhznMt0NA9PNvBB/JplGAubZp3OszVseIYKj52WmPJHhD/VSlrCMGh9AVkSUsVunF4ciK92GvyMBPuYE/5LA==} dependencies: @@ -11525,6 +12820,13 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true + /@storybook/core-client@7.0.26: + resolution: {integrity: sha512-1DA8mLnr0f6EuL74859IDK99a7CGNgMIN0/cAVNgYxq0WA4j+9ajsJ+/RIAgnS2NLVLR9kbezUtBEx4/H88IRA==} + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/preview-api': 7.0.26 + dev: true + /@storybook/core-common@7.0.0-rc.10: resolution: {integrity: sha512-csHdcVH7+YMj13WQ68OU6+6H9eYF9Sjhj84RDvlOuwJ0reXftf0RLFJwNrazwLPi7Wypxd0K/MhiM/mZOoY2+A==} dependencies: @@ -11535,19 +12837,48 @@ packages: chalk: 4.1.2 esbuild: 0.17.19 esbuild-register: 3.4.2(esbuild@0.17.19) - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 + find-up: 5.0.0 + fs-extra: 11.1.1 + glob: 8.1.0 + glob-promise: 6.0.2(glob@8.1.0) + handlebars: 4.7.7 + lazy-universal-dotenv: 4.0.0 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/core-common@7.0.26: + resolution: {integrity: sha512-rojZblzB0egNXX0bZ7R3TuPDiBSIhxpZCrorrDMHOZ8F+zuBxyTiZ0yMxEDn7i46T2n1vX+hUHhwZVxZrLn/ZQ==} + dependencies: + '@storybook/node-logger': 7.0.26 + '@storybook/types': 7.0.26 + '@types/node': 16.18.25 + '@types/node-fetch': 2.6.4 + '@types/pretty-hrtime': 1.0.1 + chalk: 4.1.2 + esbuild: 0.17.19 + esbuild-register: 3.4.2(esbuild@0.17.19) + file-system-cache: 2.3.0 find-up: 5.0.0 fs-extra: 11.1.1 glob: 8.1.0 glob-promise: 6.0.2(glob@8.1.0) handlebars: 4.7.7 lazy-universal-dotenv: 4.0.0 + node-fetch: 2.6.9 picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 resolve-from: 5.0.0 ts-dedent: 2.2.0 transitivePeerDependencies: + - encoding - supports-color dev: true @@ -11561,6 +12892,10 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true + /@storybook/core-events@7.0.26: + resolution: {integrity: sha512-ckZszphEAYs9wp8tPVhayEMzk8JxCiQfzbq0S45sbdqdTrl40PmsOjv5iPNaUYElI/Stfz+v4gDCEUfOsxyC+w==} + dev: true + /@storybook/core-events@7.1.0-rc.1: resolution: {integrity: sha512-cuWpVQxJLLHZ8dxO17yySQdaj20VFYZC/Cm4guKv+/RH0aI+kALkoe5zJ6JnUSjwPujrZI6c/9bHVsjqi3czzQ==} dev: true @@ -11584,7 +12919,7 @@ packages: '@storybook/types': 7.0.0-rc.10 '@types/detect-port': 1.3.2 '@types/node': 16.18.25 - '@types/node-fetch': 2.6.3 + '@types/node-fetch': 2.6.4 '@types/pretty-hrtime': 1.0.1 '@types/semver': 7.3.13 better-opn: 2.1.1 @@ -11617,6 +12952,57 @@ packages: - utf-8-validate dev: true + /@storybook/core-server@7.0.26: + resolution: {integrity: sha512-QieqH19jBPZafxJVmCVK6GTYkRN/CJ8RQUvyRH2KNhqXP0tHYfL51FlU70ldo/vHX6Ax4Cje5hx/Nln9+DOMNg==} + dependencies: + '@aw-web-design/x-default-browser': 1.4.88 + '@discoveryjs/json-ext': 0.5.7 + '@storybook/builder-manager': 7.0.26 + '@storybook/core-common': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/csf-tools': 7.0.26 + '@storybook/docs-mdx': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/manager': 7.0.26 + '@storybook/node-logger': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/telemetry': 7.0.26 + '@storybook/types': 7.0.26 + '@types/detect-port': 1.3.2 + '@types/node': 16.18.25 + '@types/node-fetch': 2.6.4 + '@types/pretty-hrtime': 1.0.1 + '@types/semver': 7.3.13 + better-opn: 2.1.1 + chalk: 4.1.2 + cli-table3: 0.6.3 + compression: 1.7.4 + detect-port: 1.5.1 + express: 4.18.2 + fs-extra: 11.1.1 + globby: 11.1.0 + ip: 2.0.0 + lodash: 4.17.21 + node-fetch: 2.6.9 + open: 8.4.2 + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + semver: 7.5.3 + serve-favicon: 2.5.0 + telejson: 7.1.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + watchpack: 2.4.0 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@storybook/csf-plugin@7.0.0-rc.10: resolution: {integrity: sha512-+o8eQ1FFV7JXWh17pi5oFhuuSSpzsIP+5+/qY2ugE5JJBuVL8fM3jW0bFClZy9qpOeXYDgtfqMNlk9qSjvCQDw==} dependencies: @@ -11626,6 +13012,15 @@ packages: - supports-color dev: true + /@storybook/csf-plugin@7.0.26: + resolution: {integrity: sha512-D+wZvKlFxI/Vur8SRvkwKujOdV8ZL6xKiCX/07nFJXhhZoaeM+E78xPCL613Hj15GloujMkAnv7CT2rCiFJYow==} + dependencies: + '@storybook/csf-tools': 7.0.26 + unplugin: 0.10.2 + transitivePeerDependencies: + - supports-color + dev: true + /@storybook/csf-tools@7.0.0-rc.10: resolution: {integrity: sha512-gNn6Kkps/IaeNessIdxGmCciMyg7BWihoGCkq23yH1iAoslmc44coaVXAzLTFBork6AHYck6uiMI7LLaUNot1A==} dependencies: @@ -11642,6 +13037,22 @@ packages: - supports-color dev: true + /@storybook/csf-tools@7.0.26: + resolution: {integrity: sha512-O8WJNOkvgrGV6gS/5ERkgqiXOxoXMuHtzdJpIM9DHPhzkSxB1Inl3WrX/dRRDNtmiHf87hBUuzhgo7YR7z4tuQ==} + dependencies: + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + '@storybook/csf': 0.1.0 + '@storybook/types': 7.0.26 + fs-extra: 11.1.1 + recast: 0.23.1 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /@storybook/csf@0.0.1: resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} dependencies: @@ -11670,6 +13081,10 @@ packages: resolution: {integrity: sha512-JbgBf/EMBtx65iXtB3pOiX3818UeL9jZ+KAY241OAPqJVXjMQ5KaVOdg/57MSmd508HDIGx7CiImOMEmWwQ9/g==} dev: true + /@storybook/docs-mdx@0.1.0: + resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} + dev: true + /@storybook/docs-tools@7.0.0-rc.10: resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==} dependencies: @@ -11684,6 +13099,21 @@ packages: - supports-color dev: true + /@storybook/docs-tools@7.0.26: + resolution: {integrity: sha512-Ibpm/OTR2XmJgix5w+wMYbDwN0zp5e/pcqSHy36OvkBOG588IKSSzYdBjGdTLPHWBoehp2Kyndw/5dL/09ftXA==} + dependencies: + '@babel/core': 7.22.5 + '@storybook/core-common': 7.0.26 + '@storybook/preview-api': 7.0.26 + '@storybook/types': 7.0.26 + '@types/doctrine': 0.0.3 + doctrine: 3.0.0 + lodash: 4.17.21 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/global@5.0.0: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true @@ -11698,6 +13128,16 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true + /@storybook/instrumenter@7.0.26: + resolution: {integrity: sha512-7Ty0LTslgkm5RyH6CqTAKhWz/cF6wq/sNdMYKwvVZHWNZ2LKMtXD0RWM2caCPruAGOQ9+52H+3s4TZGKaPSSWQ==} + dependencies: + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.0.26 + dev: true + /@storybook/instrumenter@7.1.0-rc.1: resolution: {integrity: sha512-o/WTL1loHHd6ynay/BCowjC5EXz5ce4GfjeZkEkAMiSAdskPV2jCnxYaz6Sq9+wMwZkEEmt36pgvQQjqi3Od1g==} dependencies: @@ -11733,10 +13173,43 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/manager-api@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/2p6lU7r30qMXob/UnzRL9yq7XjoE+YQXv1KhrcePfMBARbelYw9RYhYT/AkXGtb9/Fa95uG3lNvoDLC1IQfMQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/router': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + semver: 7.5.3 + store2: 2.14.2 + telejson: 7.1.0 + ts-dedent: 2.2.0 + dev: true + /@storybook/manager@7.0.0-rc.10: resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==} dev: true + /@storybook/manager@7.0.26: + resolution: {integrity: sha512-mxjU/pmHr8xL96HCipqazvZWQkxBPCbpZ2+YsJuJoLFN4m7RoOK21VK0euBW24NlSg7Vp57XGQcrJCv6xUTKMg==} + dev: true + + /@storybook/mdx2-csf@1.1.0: + resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + dev: true + /@storybook/mdx2-csf@1.1.0-next.1: resolution: {integrity: sha512-ONvFBZySHsBIkUYGrUM8FCG2tDKf663TIErztPSOghOpmBGyFLjSsXJHkNWiRi4c740PoemLqJd2XZZVlXRVLQ==} dev: true @@ -11750,10 +13223,23 @@ packages: pretty-hrtime: 1.0.3 dev: true + /@storybook/node-logger@7.0.26: + resolution: {integrity: sha512-3Jqv3fRb8+Mn/aNl4IztgUAS/pvouVzpfHDc8+6KYAoFMeDXwHVlfF/+gRCpd/fbYaTHGrycIs5G48bC190Dgg==} + dependencies: + '@types/npmlog': 4.1.4 + chalk: 4.1.2 + npmlog: 5.0.1 + pretty-hrtime: 1.0.3 + dev: true + /@storybook/postinstall@7.0.0-rc.10: resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==} dev: true + /@storybook/postinstall@7.0.26: + resolution: {integrity: sha512-NhJBpQ+49RWF63UkdwrEwBLJBjAZeTlruPWfXGUb343iaGNNTsD3jajbToFHncibewH83yk6MeGfiyUva60oJw==} + dev: true + /@storybook/preview-api@7.0.0-rc.10: resolution: {integrity: sha512-3oBm6Che7ctbOLS3TTbuySbLdxA1xqLDgn8AaOadCd4SmCfhxZNor35RO1TlN8S8pQPsGlT9UBWB4xKxhq0e2A==} dependencies: @@ -11774,6 +13260,26 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/preview-api@7.0.26: + resolution: {integrity: sha512-uJwA4errBOZOoDF2T7Z2oLqjAYvvjMr31sTsOoT0niJtWr29RQp8yS6VoSrsuh+y3FAVqBEl5pS+DX3IGLjvxw==} + dependencies: + '@storybook/channel-postmessage': 7.0.26 + '@storybook/channels': 7.0.26 + '@storybook/client-logger': 7.0.26 + '@storybook/core-events': 7.0.26 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/types': 7.0.26 + '@types/qs': 6.9.7 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.2 + synchronous-promise: 2.0.17 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + /@storybook/preview-api@7.1.0-rc.1: resolution: {integrity: sha512-Wme9IZvMolGtyAbbx6Z31+AHxP5EltizYiSmBwxZrX5uxMSvNMS8MbB0A85mrnw9I0U0MORSqDeclUQ8S/CL5g==} dependencies: @@ -11798,6 +13304,10 @@ packages: resolution: {integrity: sha512-885uU20XL54s31lAyIu5MaiD4t23gJ0X/JEMz2/LTvfluYDtQg66gXhMibKqEPgMHcPOND5ZrGoYPdaLDG20Dw==} dev: true + /@storybook/preview@7.0.26: + resolution: {integrity: sha512-9Uaxl/MEMYqjLlKAeAF2ATuaM0yQagXUfu2bEOpuor2ys9XoisDkvB7jfsCVqMZHeQ+mCdYyBICHhgqzxcO2Zg==} + dev: true + /@storybook/react-dom-shim@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-oRmjN4HLo/gumufM6xrCYMncggbsNQ2UC+0Wju2zs86v6mLmoG8CCVnTE2nyUBiy5IDZ464nBhdGYkkuUEYzrg==} peerDependencies: @@ -11808,6 +13318,16 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/react-dom-shim@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-heobG4IovYAD9fo7qmUHylCSQjDd1eXDCOaTiy+XVKobHAJgkz1gKqbaFSP6KLkPE4cKyScku2K9mY0tcKIhMw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/react-vite@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.2.1): resolution: {integrity: sha512-UqPAu/9FC7m3jcTcw6MgXzi9BTkAxKpr+t0lNgccyczvMRdWf5UNXPm9rdCEb7wmQx22DzwVmGPe+PFgVOIMsg==} engines: {node: '>=16'} @@ -11824,19 +13344,85 @@ packages: ast-types: 0.14.2 magic-string: 0.27.0 react: 18.2.0 - react-docgen: 6.0.0-alpha.3 + react-docgen: 6.0.0-alpha.3 + react-dom: 18.2.0(react@18.2.0) + vite: 4.2.1(@types/node@18.15.10) + transitivePeerDependencies: + - '@preact/preset-vite' + - '@storybook/mdx1-csf' + - supports-color + - typescript + - vite-plugin-glimmerx + dev: true + + /@storybook/react-vite@7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.2): + resolution: {integrity: sha512-yDkZAvlJ9RcXSuGZy8NdDhI394P7CRme7x6VtpgCi+iPaVW9A5laK7zOe1ewYnAcbKH6g7EJWQWDz2+PqAGiFw==} + engines: {node: '>=16'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + vite: ^3.0.0 || ^4.0.0 + dependencies: + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.4.2) + '@rollup/pluginutils': 4.2.1 + '@storybook/builder-vite': 7.0.26(typescript@4.9.5)(vite@4.4.2) + '@storybook/react': 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) + '@vitejs/plugin-react': 3.1.0(vite@4.4.2) + ast-types: 0.14.2 + magic-string: 0.27.0 + react: 18.2.0 + react-docgen: 6.0.0-alpha.3 + react-dom: 18.2.0(react@18.2.0) + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + transitivePeerDependencies: + - '@preact/preset-vite' + - encoding + - supports-color + - typescript + - vite-plugin-glimmerx + dev: true + + /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): + resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==} + engines: {node: '>=16.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/client-logger': 7.0.0-rc.10 + '@storybook/core-client': 7.0.0-rc.10 + '@storybook/docs-tools': 7.0.0-rc.10 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.0.0-rc.10 + '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.0-rc.10 + '@types/escodegen': 0.0.6 + '@types/estree': 0.0.51 + '@types/node': 16.18.25 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + escodegen: 2.0.0 + html-tags: 3.3.1 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vite: 4.2.1(@types/node@18.15.10) + react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + ts-dedent: 2.2.0 + type-fest: 2.19.0 + typescript: 4.9.5 + util-deprecate: 1.0.2 transitivePeerDependencies: - - '@preact/preset-vite' - - '@storybook/mdx1-csf' - supports-color - - typescript - - vite-plugin-glimmerx dev: true - /@storybook/react@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): - resolution: {integrity: sha512-AFN4Jzyp27jhe5qnbtG45yAHq/e3bkdL9p0di2t+AdHXyse8naud2pTzD/j3bbaU23R1iDVwVPQ+X7kAktu0EA==} + /@storybook/react@7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5): + resolution: {integrity: sha512-+YK/1vF2Pd/PX7Ss5yPCIh9hee7iMVbu86gdjV9n9r6G244jQ7HLtdA01JKfq92/UgoysSWUjUECrxrUvcsh5w==} engines: {node: '>=16.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -11846,13 +13432,13 @@ packages: typescript: optional: true dependencies: - '@storybook/client-logger': 7.0.0-rc.10 - '@storybook/core-client': 7.0.0-rc.10 - '@storybook/docs-tools': 7.0.0-rc.10 + '@storybook/client-logger': 7.0.26 + '@storybook/core-client': 7.0.26 + '@storybook/docs-tools': 7.0.26 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.0.0-rc.10 - '@storybook/react-dom-shim': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.0-rc.10 + '@storybook/preview-api': 7.0.26 + '@storybook/react-dom-shim': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.26 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 16.18.25 @@ -11871,6 +13457,7 @@ packages: typescript: 4.9.5 util-deprecate: 1.0.2 transitivePeerDependencies: + - encoding - supports-color dev: true @@ -11902,6 +13489,19 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/router@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OfLittKxdahsgKsmQFoBX9q5tN/aqKMhhc/WbW88UPAQCUcEuazB0CwM+LI9YXY+n5L+vpLI4lGlgaqvPy4hHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 7.0.26 + memoizerific: 1.11.3 + qs: 6.11.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/semver@7.3.2: resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==} engines: {node: '>=10'} @@ -11928,6 +13528,23 @@ packages: - supports-color dev: true + /@storybook/telemetry@7.0.26: + resolution: {integrity: sha512-TgvtARAiD+SNyWJJfQdPiWW5JQkbX1UdHKEqEhoJXsGDkEi2Zpb+1tdeP1qZ3Gfbd1K0/LDpXGcqLv6/deSEdg==} + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/core-common': 7.0.26 + chalk: 4.1.2 + detect-package-manager: 2.0.1 + fetch-retry: 5.0.4 + fs-extra: 11.1.1 + isomorphic-unfetch: 3.1.0 + nanoid: 3.3.6 + read-pkg-up: 7.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: @@ -11938,6 +13555,16 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/testing-library@0.0.14-next.2: + resolution: {integrity: sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==} + dependencies: + '@storybook/client-logger': 7.0.26 + '@storybook/instrumenter': 7.0.26 + '@testing-library/dom': 8.20.0 + '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) + ts-dedent: 2.2.0 + dev: true + /@storybook/theming@6.5.16(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==} peerDependencies: @@ -11966,13 +13593,36 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/theming@7.0.26(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7hxpT2yq+xZonSsEZHOF+HDHx6GE0qlys3EQ63K9XCJ8VeBnq9M5zHvMK9iXl90093ufxpvWsfDWgtja2zvmTw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) + '@storybook/client-logger': 7.0.26 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/types@7.0.0-rc.10: resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==} dependencies: '@storybook/channels': 7.0.0-rc.10 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 + dev: true + + /@storybook/types@7.0.26: + resolution: {integrity: sha512-5RBi6agtDglNXdffmw4+Fyv2dUdlIdeOdUj0O5+JRYajTxfHdurZd9r/42z4OstN+ORDkLA/svt8Q9JyRpIb6Q==} + dependencies: + '@storybook/channels': 7.0.26 + '@types/babel__core': 7.20.0 + '@types/express': 4.17.9 + file-system-cache: 2.3.0 dev: true /@storybook/types@7.1.0-rc.1: @@ -12151,6 +13801,14 @@ packages: tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false + /@tailwindcss/line-clamp@0.4.4(tailwindcss@3.3.2): + resolution: {integrity: sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==} + peerDependencies: + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' + dependencies: + tailwindcss: 3.3.2(ts-node@10.9.1) + dev: true + /@tanstack/match-sorter-utils@8.7.6: resolution: {integrity: sha512-2AMpRiA6QivHOUiBpQAVxjiHAA68Ei23ZUMNaRJrN6omWiSFLoYrxGcT6BXtuzp0Jw4h6HZCmGGIM/gbwebO2A==} engines: {node: '>=12'} @@ -12269,7 +13927,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@testing-library/dom': 8.20.0 - '@types/react-dom': 18.0.11 + '@types/react-dom': 18.2.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -12307,7 +13965,7 @@ packages: /@ts-morph/common@0.18.1: resolution: {integrity: sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA==} dependencies: - fast-glob: 3.2.12 + fast-glob: 3.3.0 minimatch: 5.1.6 mkdirp: 1.0.4 path-browserify: 1.0.1 @@ -12374,18 +14032,18 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 /@types/bcrypt@5.0.0: resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} @@ -12403,13 +14061,17 @@ packages: /@types/chai-subset@1.3.3: resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} dependencies: - '@types/chai': 4.3.4 + '@types/chai': 4.3.5 dev: true /@types/chai@4.3.4: resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} dev: true + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + /@types/classnames@2.3.1: resolution: {integrity: sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==} deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. @@ -12752,8 +14414,8 @@ packages: '@types/unist': 2.0.6 dev: false - /@types/node-fetch@2.6.3: - resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} + /@types/node-fetch@2.6.4: + resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: '@types/node': 18.15.10 form-data: 3.0.1 @@ -12776,6 +14438,10 @@ packages: /@types/node@20.3.2: resolution: {integrity: sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==} + /@types/node@20.4.1: + resolution: {integrity: sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==} + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -12862,13 +14528,19 @@ packages: /@types/react-custom-scrollbars@4.0.10: resolution: {integrity: sha512-1T430E+usndUjymkXB8k/zGpWehggircq/QaQMuFLMJceccAcD9vcmbUXF1LjeVP/+P4wI/bad6BF1E+7IGlqA==} dependencies: - '@types/react': 18.0.37 + '@types/react': 18.2.14 dev: true /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.0.37 + '@types/react': 18.2.14 + + /@types/react-dom@18.2.6: + resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} + dependencies: + '@types/react': 18.2.14 + dev: true /@types/react@17.0.53: resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} @@ -12892,6 +14564,13 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.1 + /@types/react@18.2.14: + resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.1 + /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: @@ -13093,7 +14772,7 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@5.0.2): resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13105,24 +14784,52 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@5.0.2) '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/type-utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 + eslint: 8.38.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 semver: 7.3.8 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.4.1 + '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/type-utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.36.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.3 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@5.0.2): - resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} + /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -13133,18 +14840,18 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.59.0(eslint@8.38.0)(typescript@5.0.2) - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/type-utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) - '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/type-utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 - grapheme-splitter: 1.0.4 + eslint: 8.44.0 + graphemer: 1.4.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + semver: 7.5.3 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -13207,7 +14914,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@5.0.2): resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13219,7 +14926,27 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.38.0 + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.61.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.36.0 typescript: 4.9.5 @@ -13227,8 +14954,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@5.0.2): - resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} + /@typescript-eslint/parser@5.61.0(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -13237,12 +14964,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 - typescript: 5.0.2 + eslint: 8.44.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -13271,6 +14998,14 @@ packages: '@typescript-eslint/visitor-keys': 5.59.0 dev: true + /@typescript-eslint/scope-manager@5.61.0: + resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + dev: true + /@typescript-eslint/type-utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13311,7 +15046,7 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): + /@typescript-eslint/type-utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13321,8 +15056,28 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.38.0 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@5.61.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.36.0 tsutils: 3.21.0(typescript@4.9.5) @@ -13331,8 +15086,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): - resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} + /@typescript-eslint/type-utils@5.61.0(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -13341,12 +15096,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) - '@typescript-eslint/utils': 5.59.0(eslint@8.38.0)(typescript@5.0.2) + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + eslint: 8.44.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -13366,6 +15121,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/types@5.61.0: + resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5): resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} engines: {node: ^10.12.0 || >=12.0.0} @@ -13408,7 +15168,7 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.59.0(typescript@4.9.5): + /@typescript-eslint/typescript-estree@5.59.0(typescript@5.0.2): resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -13423,14 +15183,14 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 3.21.0(typescript@5.0.2) + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.59.0(typescript@5.0.2): - resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} + /@typescript-eslint/typescript-estree@5.61.0(typescript@4.9.5): + resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -13438,31 +15198,71 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/visitor-keys': 5.59.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + eslint: 8.22.0 + eslint-scope: 5.1.1 + semver: 7.5.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.56.0 + '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) + eslint: 8.36.0 + eslint-scope: 5.1.1 + semver: 7.5.3 transitivePeerDependencies: - supports-color + - typescript dev: true - /@typescript-eslint/utils@5.56.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - eslint: 8.22.0 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + eslint: 8.38.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13470,19 +15270,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==} + /@typescript-eslint/utils@5.61.0(eslint@8.22.0)(typescript@4.9.5): + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.56.0 - '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + eslint: 8.22.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13490,8 +15290,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} + /@typescript-eslint/utils@5.61.0(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -13499,9 +15299,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) eslint: 8.36.0 eslint-scope: 5.1.1 semver: 7.5.3 @@ -13510,19 +15310,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): - resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} + /@typescript-eslint/utils@5.61.0(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) - eslint: 8.38.0 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + eslint: 8.44.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -13554,6 +15354,14 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@typescript-eslint/visitor-keys@5.61.0: + resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@vitejs/plugin-react-swc@3.2.0(vite@4.2.1): resolution: {integrity: sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==} peerDependencies: @@ -13570,8 +15378,8 @@ packages: vite: ^4.1.0-beta.0 dependencies: '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 vite: 4.2.1(@types/node@18.15.10) @@ -13579,6 +15387,22 @@ packages: - supports-color dev: true + /@vitejs/plugin-react@3.1.0(vite@4.4.2): + resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.1.0-beta.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) + magic-string: 0.27.0 + react-refresh: 0.14.0 + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + transitivePeerDependencies: + - supports-color + dev: true + /@vitejs/plugin-react@4.0.0(vite@4.3.9): resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -13594,6 +15418,21 @@ packages: - supports-color dev: true + /@vitejs/plugin-react@4.0.2(vite@4.4.2): + resolution: {integrity: sha512-zbnVp3Esfg33zDaoLrjxG+p/dPiOtpvJA+1oOEQwSxMMTRL9zi1eghIcd2WtLjkcKnPsa3S15LzS/OzDn2BOCA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) + react-refresh: 0.14.0 + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + transitivePeerDependencies: + - supports-color + dev: true + /@vitest/coverage-istanbul@0.28.5(jsdom@20.0.3): resolution: {integrity: sha512-na1pkr3AVrdFflzuBXsBh1MvBfhSMrv4nfd4N8rm0HEJlvlbQc+GiqNwtwzfO8TPsXxcjNphSIMp5wvCy+0xrQ==} dependencies: @@ -13611,6 +15450,7 @@ packages: - happy-dom - jsdom - less + - lightningcss - sass - stylus - sugarss @@ -13634,6 +15474,14 @@ packages: chai: 4.3.7 dev: true + /@vitest/expect@0.33.0: + resolution: {integrity: sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==} + dependencies: + '@vitest/spy': 0.33.0 + '@vitest/utils': 0.33.0 + chai: 4.3.7 + dev: true + /@vitest/runner@0.28.5: resolution: {integrity: sha512-NKkHtLB+FGjpp5KmneQjTcPLWPTDfB7ie+MmF1PnUBf/tGe2OjGxWyB62ySYZ25EYp9krR5Bw0YPLS/VWh1QiA==} dependencies: @@ -13650,6 +15498,22 @@ packages: pathe: 1.1.0 dev: true + /@vitest/runner@0.33.0: + resolution: {integrity: sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==} + dependencies: + '@vitest/utils': 0.33.0 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.33.0: + resolution: {integrity: sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==} + dependencies: + magic-string: 0.30.1 + pathe: 1.1.1 + pretty-format: 29.6.1 + dev: true + /@vitest/spy@0.28.5: resolution: {integrity: sha512-7if6rsHQr9zbmvxN7h+gGh2L9eIIErgf8nSKYDlg07HHimCxp4H6I/X/DPXktVPPLQfiZ1Cw2cbDIx9fSqDjGw==} dependencies: @@ -13662,6 +15526,12 @@ packages: tinyspy: 1.1.1 dev: true + /@vitest/spy@0.33.0: + resolution: {integrity: sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==} + dependencies: + tinyspy: 2.1.1 + dev: true + /@vitest/utils@0.28.5: resolution: {integrity: sha512-UyZdYwdULlOa4LTUSwZ+Paz7nBHGTT72jKwdFSV4IjHF1xsokp+CabMdhjvVhYwkLfO88ylJT46YMilnkSARZA==} dependencies: @@ -13681,6 +15551,14 @@ packages: pretty-format: 27.5.1 dev: true + /@vitest/utils@0.33.0: + resolution: {integrity: sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 29.6.1 + dev: true + /@vscode/emmet-helper@2.8.6: resolution: {integrity: sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ==} dependencies: @@ -13956,16 +15834,16 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.2): + /acorn-import-assertions@1.8.0(acorn@8.10.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -13976,12 +15854,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} @@ -14003,6 +15881,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -14017,6 +15900,14 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 + dev: true + /agent-base@5.1.1: resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} engines: {node: '>= 6.0.0'} @@ -14190,7 +16081,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -14410,12 +16300,12 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@astrojs/compiler': 0.32.0 - '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/types': 5.61.0 astrojs-compiler-sync: 0.3.2(@astrojs/compiler@0.32.0) debug: 4.3.4(supports-color@8.1.1) - eslint-scope: 7.1.1 + eslint-scope: 7.2.0 eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + espree: 9.6.0 transitivePeerDependencies: - supports-color dev: true @@ -14458,7 +16348,7 @@ packages: esbuild: 0.17.19 estree-walker: 3.0.0 execa: 6.1.0 - fast-glob: 3.2.12 + fast-glob: 3.3.0 github-slugger: 2.0.0 gray-matter: 4.0.3 html-escaper: 3.0.3 @@ -14483,13 +16373,14 @@ packages: typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.3.9(@types/node@18.15.10) - vitefu: 0.2.4(vite@4.3.9) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vitefu: 0.2.4(vite@4.4.2) yargs-parser: 21.1.1 zod: 3.21.4 transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss @@ -14614,7 +16505,7 @@ packages: '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 - resolve: 1.22.1 + resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: false @@ -14638,14 +16529,14 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.22.5): - resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + /babel-jest@29.6.1(@babel/core@7.22.5): + resolution: {integrity: sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.22.5 - '@jest/transform': 29.5.0 + '@jest/transform': 29.6.1 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0(@babel/core@7.22.5) @@ -14660,7 +16551,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -14696,7 +16587,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.22.5 html-entities: 2.3.3 validate-html-nesting: 1.2.1 @@ -14760,7 +16651,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) - core-js-compat: 3.29.1 + core-js-compat: 3.31.1 transitivePeerDependencies: - supports-color dev: true @@ -14772,7 +16663,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) - core-js-compat: 3.29.1 + core-js-compat: 3.31.1 transitivePeerDependencies: - supports-color dev: true @@ -14919,6 +16810,10 @@ packages: engines: {node: '>=0.6'} dev: true + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -15094,10 +16989,20 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001470 - electron-to-chromium: 1.4.340 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) + caniuse-lite: 1.0.30001514 + electron-to-chromium: 1.4.454 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.5) + + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001514 + electron-to-chromium: 1.4.454 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.9) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -15259,6 +17164,9 @@ packages: /caniuse-lite@1.0.30001470: resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} + /caniuse-lite@1.0.30001514: + resolution: {integrity: sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==} + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false @@ -15664,7 +17572,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -15896,6 +17803,11 @@ packages: keygrip: 1.1.0 dev: false + /copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + dependencies: + is-what: 3.14.1 + /copy-anything@3.0.3: resolution: {integrity: sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==} engines: {node: '>=12.13'} @@ -15906,7 +17818,13 @@ packages: /core-js-compat@3.29.1: resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 + dev: true + + /core-js-compat@3.31.1: + resolution: {integrity: sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==} + dependencies: + browserslist: 4.21.9 dev: true /core-js@3.29.1: @@ -15960,6 +17878,16 @@ packages: path-type: 4.0.0 dev: true + /cosmiconfig@8.2.0: + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + /cpu-features@0.0.8: resolution: {integrity: sha512-BbHBvtYhUhksqTjr6bhNOjGgMnhwhGTQmOoZGD+K7BCaQDCuZl/Ve1ZxUSMRwVC4D/rkCPQ2MAIeYzrWyK7eEg==} engines: {node: '>=10.0.0'} @@ -16023,6 +17951,23 @@ packages: engines: {node: '>=8'} dev: true + /css-loader@6.8.1(webpack@5.76.2): + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.24) + postcss-modules-scope: 3.0.0(postcss@8.4.24) + postcss-modules-values: 4.0.0(postcss@8.4.24) + postcss-value-parser: 4.2.0 + semver: 7.5.3 + webpack: 5.76.2(esbuild@0.17.19) + dev: true + /css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -16208,7 +18153,7 @@ packages: css-selector-tokenizer: 0.8.0 postcss: 8.4.21 postcss-js: 4.0.1(postcss@8.4.21) - tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + tailwindcss: 3.3.2(ts-node@10.9.1) transitivePeerDependencies: - ts-node dev: true @@ -16717,8 +18662,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.340: - resolution: {integrity: sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==} + /electron-to-chromium@1.4.454: + resolution: {integrity: sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==} /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -16749,6 +18694,11 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + /enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} dev: false @@ -16793,6 +18743,14 @@ packages: hasBin: true dev: true + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + optional: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -17223,6 +19181,35 @@ packages: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 + /esbuild@0.18.11: + resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.11 + '@esbuild/android-arm64': 0.18.11 + '@esbuild/android-x64': 0.18.11 + '@esbuild/darwin-arm64': 0.18.11 + '@esbuild/darwin-x64': 0.18.11 + '@esbuild/freebsd-arm64': 0.18.11 + '@esbuild/freebsd-x64': 0.18.11 + '@esbuild/linux-arm': 0.18.11 + '@esbuild/linux-arm64': 0.18.11 + '@esbuild/linux-ia32': 0.18.11 + '@esbuild/linux-loong64': 0.18.11 + '@esbuild/linux-mips64el': 0.18.11 + '@esbuild/linux-ppc64': 0.18.11 + '@esbuild/linux-riscv64': 0.18.11 + '@esbuild/linux-s390x': 0.18.11 + '@esbuild/linux-x64': 0.18.11 + '@esbuild/netbsd-x64': 0.18.11 + '@esbuild/openbsd-x64': 0.18.11 + '@esbuild/sunos-x64': 0.18.11 + '@esbuild/win32-arm64': 0.18.11 + '@esbuild/win32-ia32': 0.18.11 + '@esbuild/win32-x64': 0.18.11 + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -17289,7 +19276,7 @@ packages: eslint: 8.36.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -17299,11 +19286,11 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 @@ -17320,7 +19307,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true @@ -17330,7 +19317,7 @@ packages: dependencies: debug: 3.2.7 is-core-module: 2.11.0 - resolve: 1.22.1 + resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: true @@ -17414,7 +19401,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -17435,7 +19422,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) debug: 3.2.7 eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 @@ -17572,7 +19559,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -17582,7 +19569,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -17590,7 +19577,7 @@ packages: doctrine: 2.1.0 eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -17618,7 +19605,7 @@ packages: ignore: 5.2.4 is-core-module: 2.11.0 minimatch: 3.1.2 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.5.3 dev: true @@ -17649,6 +19636,15 @@ packages: eslint: 8.38.0 dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.44.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.44.0 + dev: true + /eslint-plugin-react-refresh@0.3.4(eslint@8.38.0): resolution: {integrity: sha512-E0ViBglxSQAERBp6eTj5fPgtCRtDonnbCFiVQBhf4Dto2blJRxg1dFUMdMh7N6ljTI4UwPhHwYDQ3Dyo4m6bwA==} peerDependencies: @@ -17657,6 +19653,14 @@ packages: eslint: 8.38.0 dev: true + /eslint-plugin-react-refresh@0.4.2(eslint@8.44.0): + resolution: {integrity: sha512-AjT+7woNvaIiFoFqiD7nsd/M1MoW1h+8SAdfCpQ/1LSFkIH9DNAawBsTHj/1sWjijkVXRfF/rOiXFm+4xZrZ5Q==} + peerDependencies: + eslint: '>=7' + dependencies: + eslint: 8.44.0 + dev: true + /eslint-plugin-react@7.32.2(eslint@8.22.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} @@ -17688,7 +19692,7 @@ packages: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -17697,6 +19701,22 @@ packages: - typescript dev: true + /eslint-plugin-storybook@0.6.11(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-lIVmCqQgA0bhcuS1yWYBFrnPHBKPEQI+LHPDtlN81UE1/17onCqgwUW7Nyt7gS2OHjCAiOR4npjTGEoe0hssKw==} + engines: {node: 12.x || 14.x || >= 16} + peerDependencies: + eslint: '>=6' + dependencies: + '@storybook/csf': 0.0.1 + '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + eslint: 8.44.0 + requireindex: 1.2.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /eslint-plugin-svelte3@4.0.0(eslint@8.22.0)(svelte@3.57.0): resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: @@ -17713,7 +19733,7 @@ packages: peerDependencies: tailwindcss: ^3.2.2 dependencies: - fast-glob: 3.2.12 + fast-glob: 3.3.0 postcss: 8.4.24 tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false @@ -17748,7 +19768,7 @@ packages: eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.36.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.36.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17758,7 +19778,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-rule-composer: 0.3.0 dev: true @@ -17783,6 +19803,14 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 + /eslint-scope@7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -17970,20 +19998,77 @@ packages: - supports-color dev: true + /eslint@8.44.0: + resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) + '@eslint-community/regexpp': 4.4.1 + '@eslint/eslintrc': 2.1.0 + '@eslint/js': 8.44.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.6.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree@9.5.0: resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.1 /espree@9.5.2: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.1 + dev: true + + /espree@9.6.0: + resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.1 /esprima@4.0.1: @@ -18171,15 +20256,16 @@ packages: jest-message-util: 27.5.1 dev: true - /expect@29.5.0: - resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + /expect@29.6.1: + resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.5.0 + '@jest/expect-utils': 29.6.1 + '@types/node': 18.15.10 jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-util: 29.6.1 dev: true /express-cookie@4.17.1: @@ -18323,26 +20409,26 @@ packages: micromatch: 4.0.5 dev: false - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} + /fast-glob@3.2.7: + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: true - /fast-glob@3.2.7: - resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} - engines: {node: '>=8'} + /fast-glob@3.3.0: + resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -18450,13 +20536,6 @@ packages: dependencies: flat-cache: 3.0.4 - /file-system-cache@2.1.1: - resolution: {integrity: sha512-vgZ1uDsK29DM4pptUOv47zdJO2tYM5M/ERyAE9Jk0QBN6e64Md+a+xJSOp68dCCDH4niFMVD8nC8n8A5ic0bmg==} - dependencies: - fs-extra: 11.1.1 - ramda: 0.28.0 - dev: true - /file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} dependencies: @@ -18938,7 +21017,7 @@ packages: https-proxy-agent: 5.0.1 mri: 1.2.0 node-fetch-native: 1.1.0 - pathe: 1.1.0 + pathe: 1.1.1 tar: 6.1.13 transitivePeerDependencies: - supports-color @@ -18999,8 +21078,19 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@7.1.4: - resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} + /glob@7.1.4: + resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -19008,7 +21098,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -19101,7 +21190,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.0 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -19111,7 +21200,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.0 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -19139,6 +21228,10 @@ packages: /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /graphql-tag@2.12.6(graphql@16.6.0): resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -19566,6 +21659,14 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + + /icss-utils@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.24 dev: true /idb-keyval@3.2.0: @@ -19579,6 +21680,13 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + optional: true + /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: false @@ -20118,6 +22226,9 @@ packages: get-intrinsic: 1.2.0 dev: true + /is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + /is-what@4.1.8: resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} engines: {node: '>=12.13'} @@ -20173,7 +22284,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.22.5 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -20272,27 +22383,27 @@ packages: - supports-color dev: true - /jest-circus@29.5.0: - resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + /jest-circus@29.6.1: + resolution: {integrity: sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.1 + '@jest/expect': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.5.0 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-each: 29.6.1 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-runtime: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 p-limit: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.6 @@ -20340,16 +22451,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/core': 29.6.1(ts-node@10.9.1) + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) + jest-util: 29.6.1 + jest-validate: 29.6.1 prompts: 2.4.2 yargs: 17.7.1 transitivePeerDependencies: @@ -20368,16 +22479,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1) - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/core': 29.6.1(ts-node@10.9.1) + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-config: 29.6.1(@types/node@20.3.1)(ts-node@10.9.1) + jest-util: 29.6.1 + jest-validate: 29.6.1 prompts: 2.4.2 yargs: 17.7.1 transitivePeerDependencies: @@ -20427,8 +22538,8 @@ packages: - utf-8-validate dev: true - /jest-config@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + /jest-config@29.6.1(@types/node@18.15.10)(ts-node@10.9.1): + resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -20440,26 +22551,26 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@jest/test-sequencer': 29.5.0 - '@jest/types': 29.5.0 + '@jest/test-sequencer': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 - babel-jest: 29.5.0(@babel/core@7.22.5) + babel-jest: 29.6.1(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.5.0 - jest-environment-node: 29.5.0 + jest-circus: 29.6.1 + jest-environment-node: 29.6.1 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-runner: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-resolve: 29.6.1 + jest-runner: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) @@ -20467,8 +22578,8 @@ packages: - supports-color dev: true - /jest-config@29.5.0(@types/node@20.3.1)(ts-node@10.9.1): - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + /jest-config@29.6.1(@types/node@20.3.1)(ts-node@10.9.1): + resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -20480,26 +22591,26 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@jest/test-sequencer': 29.5.0 - '@jest/types': 29.5.0 + '@jest/test-sequencer': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 20.3.1 - babel-jest: 29.5.0(@babel/core@7.22.5) + babel-jest: 29.6.1(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.5.0 - jest-environment-node: 29.5.0 + jest-circus: 29.6.1 + jest-environment-node: 29.6.1 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-runner: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-resolve: 29.6.1 + jest-runner: 29.6.1 + jest-util: 29.6.1 + jest-validate: 29.6.1 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) @@ -20527,14 +22638,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-diff@29.5.0: - resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + /jest-diff@29.6.1: + resolution: {integrity: sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true /jest-docblock@27.5.1: @@ -20562,15 +22673,15 @@ packages: pretty-format: 27.5.1 dev: true - /jest-each@29.5.0: - resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + /jest-each@29.6.1: + resolution: {integrity: sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 chalk: 4.1.2 jest-get-type: 29.4.3 - jest-util: 29.5.0 - pretty-format: 29.5.0 + jest-util: 29.6.1 + pretty-format: 29.6.1 dev: true /jest-environment-jsdom@27.5.1: @@ -20603,16 +22714,16 @@ packages: jest-util: 27.5.1 dev: true - /jest-environment-node@29.5.0: - resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} + /jest-environment-node@29.6.1: + resolution: {integrity: sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.1 + '@jest/fake-timers': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 - jest-mock: 29.5.0 - jest-util: 29.5.0 + jest-mock: 29.6.1 + jest-util: 29.6.1 dev: true /jest-get-type@26.3.0: @@ -20650,19 +22761,19 @@ packages: fsevents: 2.3.2 dev: true - /jest-haste-map@29.5.0: - resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + /jest-haste-map@29.6.1: + resolution: {integrity: sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/graceful-fs': 4.1.6 '@types/node': 18.15.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.4.3 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-util: 29.6.1 + jest-worker: 29.6.1 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: @@ -20702,12 +22813,12 @@ packages: pretty-format: 27.5.1 dev: true - /jest-leak-detector@29.5.0: - resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + /jest-leak-detector@29.6.1: + resolution: {integrity: sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true /jest-matcher-utils@27.5.1: @@ -20720,14 +22831,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-matcher-utils@29.5.0: - resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + /jest-matcher-utils@29.6.1: + resolution: {integrity: sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.5.0 + jest-diff: 29.6.1 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true /jest-message-util@27.5.1: @@ -20745,17 +22856,17 @@ packages: stack-utils: 2.0.6 dev: true - /jest-message-util@29.5.0: - resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} + /jest-message-util@29.6.1: + resolution: {integrity: sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.22.5 - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.1 slash: 3.0.0 stack-utils: 2.0.6 dev: true @@ -20779,13 +22890,13 @@ packages: '@types/node': 18.15.10 dev: true - /jest-mock@29.5.0: - resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + /jest-mock@29.6.1: + resolution: {integrity: sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/node': 18.15.10 - jest-util: 29.5.0 + jest-util: 29.6.1 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -20800,7 +22911,7 @@ packages: jest-resolve: 27.5.1 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + /jest-pnp-resolver@1.2.3(jest-resolve@29.6.1): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -20809,7 +22920,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.5.0 + jest-resolve: 29.6.1 dev: true /jest-regex-util@27.5.1: @@ -20833,12 +22944,12 @@ packages: - supports-color dev: true - /jest-resolve-dependencies@29.5.0: - resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + /jest-resolve-dependencies@29.6.1: + resolution: {integrity: sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.5.0 + jest-snapshot: 29.6.1 transitivePeerDependencies: - supports-color dev: true @@ -20854,22 +22965,22 @@ packages: jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) jest-util: 27.5.1 jest-validate: 27.5.1 - resolve: 1.22.1 + resolve: 1.22.2 resolve.exports: 1.1.1 slash: 3.0.0 dev: true - /jest-resolve@29.5.0: - resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + /jest-resolve@29.6.1: + resolution: {integrity: sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) - jest-util: 29.5.0 - jest-validate: 29.5.0 - resolve: 1.22.1 + jest-haste-map: 29.6.1 + jest-pnp-resolver: 1.2.3(jest-resolve@29.6.1) + jest-util: 29.6.1 + jest-validate: 29.6.1 + resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 dev: true @@ -20906,29 +23017,29 @@ packages: - utf-8-validate dev: true - /jest-runner@29.5.0: - resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + /jest-runner@29.6.1: + resolution: {integrity: sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/environment': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.1 + '@jest/environment': 29.6.1 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 jest-docblock: 29.4.3 - jest-environment-node: 29.5.0 - jest-haste-map: 29.5.0 - jest-leak-detector: 29.5.0 - jest-message-util: 29.5.0 - jest-resolve: 29.5.0 - jest-runtime: 29.5.0 - jest-util: 29.5.0 - jest-watcher: 29.5.0 - jest-worker: 29.5.0 + jest-environment-node: 29.6.1 + jest-haste-map: 29.6.1 + jest-leak-detector: 29.6.1 + jest-message-util: 29.6.1 + jest-resolve: 29.6.1 + jest-runtime: 29.6.1 + jest-util: 29.6.1 + jest-watcher: 29.6.1 + jest-worker: 29.6.1 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: @@ -20965,30 +23076,30 @@ packages: - supports-color dev: true - /jest-runtime@29.5.0: - resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + /jest-runtime@29.6.1: + resolution: {integrity: sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/globals': 29.5.0 - '@jest/source-map': 29.4.3 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.1 + '@jest/fake-timers': 29.6.1 + '@jest/globals': 29.6.1 + '@jest/source-map': 29.6.0 + '@jest/test-result': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 + jest-haste-map: 29.6.1 + jest-message-util: 29.6.1 + jest-mock: 29.6.1 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-resolve: 29.6.1 + jest-snapshot: 29.6.1 + jest-util: 29.6.1 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -21009,7 +23120,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/transform': 27.5.1 @@ -21033,32 +23144,30 @@ packages: - supports-color dev: true - /jest-snapshot@29.5.0: - resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + /jest-snapshot@29.6.1: + resolution: {integrity: sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) - '@babel/traverse': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.22.5 - '@jest/expect-utils': 29.5.0 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.3 + '@jest/expect-utils': 29.6.1 + '@jest/transform': 29.6.1 + '@jest/types': 29.6.1 '@types/prettier': 2.7.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 - expect: 29.5.0 + expect: 29.6.1 graceful-fs: 4.2.11 - jest-diff: 29.5.0 + jest-diff: 29.6.1 jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-matcher-utils: 29.6.1 + jest-message-util: 29.6.1 + jest-util: 29.6.1 natural-compare: 1.4.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 semver: 7.5.3 transitivePeerDependencies: - supports-color @@ -21080,7 +23189,19 @@ packages: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 + '@types/node': 18.15.10 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-util@29.6.1: + resolution: {integrity: sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.1 '@types/node': 18.15.10 chalk: 4.1.2 ci-info: 3.8.0 @@ -21100,16 +23221,16 @@ packages: pretty-format: 27.5.1 dev: true - /jest-validate@29.5.0: - resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + /jest-validate@29.6.1: + resolution: {integrity: sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.6.1 dev: true /jest-watcher@27.5.1: @@ -21125,17 +23246,17 @@ packages: string-length: 4.0.2 dev: true - /jest-watcher@29.5.0: - resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + /jest-watcher@29.6.1: + resolution: {integrity: sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/test-result': 29.6.1 + '@jest/types': 29.6.1 '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.5.0 + jest-util: 29.6.1 string-length: 4.0.2 dev: true @@ -21157,12 +23278,12 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + /jest-worker@29.6.1: + resolution: {integrity: sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 18.15.10 - jest-util: 29.5.0 + jest-util: 29.6.1 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -21228,6 +23349,10 @@ packages: - ts-node dev: true + /jiti@1.19.1: + resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} + hasBin: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -21282,7 +23407,7 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) '@babel/preset-env': 7.20.2(@babel/core@7.22.5) '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) @@ -21301,6 +23426,36 @@ packages: - supports-color dev: true + /jscodeshift@0.14.0(@babel/preset-env@7.21.5): + resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + dependencies: + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/preset-env': 7.21.5(@babel/core@7.22.5) + '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) + '@babel/register': 7.21.0(@babel/core@7.22.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) + chalk: 4.1.2 + flow-parser: 0.202.1 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: true + /jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} @@ -21311,7 +23466,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.10.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -21566,6 +23721,36 @@ packages: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} dev: false + /less-loader@11.1.3(less@4.1.3)(webpack@5.76.2): + resolution: {integrity: sha512-A5b7O8dH9xpxvkosNrP0dFp2i/dISOJa9WwGF3WJflfqIERE2ybxh1BFDj5CovC2+jCE4M354mk90hN6ziXlVw==} + engines: {node: '>= 14.15.0'} + peerDependencies: + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + dependencies: + less: 4.1.3 + webpack: 5.76.2(esbuild@0.17.19) + dev: true + + /less@4.1.3: + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.5.2 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -21601,7 +23786,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /lint-staged@11.2.6: resolution: {integrity: sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==} @@ -21657,6 +23841,15 @@ packages: engines: {node: '>=6.11.5'} dev: true + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true + /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -21928,13 +24121,19 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /magic-string@0.30.1: + resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} dependencies: pify: 4.0.1 semver: 5.7.1 - dev: true /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -22431,8 +24630,8 @@ packages: /micromark-extension-mdxjs@1.0.0: resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) micromark-extension-mdx-expression: 1.0.4 micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 @@ -22763,10 +24962,19 @@ packages: /mlly@1.2.0: resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} dependencies: - acorn: 8.8.2 - pathe: 1.1.0 - pkg-types: 1.0.2 - ufo: 1.1.1 + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 + dev: true + + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + dependencies: + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 dev: true /moment@2.29.4: @@ -22901,7 +25109,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -22920,6 +25127,19 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + debug: 3.2.7 + iconv-lite: 0.6.3 + sax: 1.2.4 + transitivePeerDependencies: + - supports-color + optional: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -23071,8 +25291,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -23086,7 +25306,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 + resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -23360,6 +25580,18 @@ packages: type-check: 0.4.0 word-wrap: 1.2.3 + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -23516,6 +25748,10 @@ packages: unist-util-visit-children: 2.0.2 dev: false + /parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} @@ -23638,6 +25874,10 @@ packages: resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} dev: true + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true @@ -23688,7 +25928,6 @@ packages: /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} - dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -23710,12 +25949,12 @@ packages: find-up: 5.0.0 dev: true - /pkg-types@1.0.2: - resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.4.0 + pathe: 1.1.1 dev: true /playwright-core@1.32.1: @@ -23757,7 +25996,7 @@ packages: postcss: 8.4.21 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 /postcss-import@14.1.0(postcss@8.4.24): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} @@ -23768,7 +26007,18 @@ packages: postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.2 + + /postcss-import@15.1.0(postcss@8.4.24): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -23838,7 +26088,61 @@ packages: postcss: 8.4.24 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) yaml: 2.3.1 - dev: false + + /postcss-loader@7.3.3(postcss@8.4.24)(webpack@5.76.2): + resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 8.2.0 + jiti: 1.19.1 + postcss: 8.4.24 + semver: 7.5.3 + webpack: 5.76.2(esbuild@0.17.19) + dev: true + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.24 + dev: true + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.24): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.0.0(postcss@8.4.24): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.24): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 + dev: true /postcss-nested@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} @@ -23858,6 +26162,15 @@ packages: postcss: 8.4.24 postcss-selector-parser: 6.0.11 + /postcss-nested@6.0.1(postcss@8.4.24): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.11 + /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -24039,11 +26352,11 @@ packages: react-is: 17.0.2 dev: true - /pretty-format@29.5.0: - resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} + /pretty-format@29.6.1: + resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -24119,6 +26432,10 @@ packages: /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + optional: true + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -24225,10 +26542,6 @@ packages: performance-now: 2.1.0 dev: false - /ramda@0.28.0: - resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} - dev: true - /ramda@0.29.0: resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} dev: true @@ -24324,7 +26637,7 @@ packages: estree-to-babel: 3.2.1 neo-async: 2.6.2 node-dir: 0.1.17 - resolve: 1.22.1 + resolve: 1.22.2 strip-indent: 3.0.0 transitivePeerDependencies: - supports-color @@ -24809,7 +27122,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.1 + resolve: 1.22.2 dev: true /redent@3.0.0: @@ -24850,6 +27163,10 @@ packages: '@babel/runtime': 7.21.0 dev: true + /regex-parser@2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: true + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} @@ -25075,6 +27392,17 @@ packages: global-dirs: 0.1.1 dev: true + /resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 8.4.24 + source-map: 0.6.1 + dev: true + /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -25105,6 +27433,14 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true @@ -25310,6 +27646,13 @@ packages: optionalDependencies: fsevents: 2.3.2 + /rollup@3.26.2: + resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -25379,6 +27722,29 @@ packages: dependencies: suf-log: 2.5.3 + /sass-loader@13.3.2(webpack@5.76.2): + resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} + engines: {node: '>= 14.15.0'} + 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 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + neo-async: 2.6.2 + webpack: 5.76.2(esbuild@0.17.19) + dev: true + /sass@1.60.0: resolution: {integrity: sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==} engines: {node: '>=12.0.0'} @@ -25389,6 +27755,10 @@ packages: source-map-js: 1.0.2 dev: true + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + optional: true + /saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -25436,7 +27806,6 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - dev: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -25786,7 +28155,6 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: true /source-map@0.7.3: resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} @@ -25900,6 +28268,10 @@ packages: resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} dev: true + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + /stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -25930,6 +28302,18 @@ packages: - utf-8-validate dev: true + /storybook@7.0.26: + resolution: {integrity: sha512-N6+/QBIahTnOJ3mQFNh+PIimjw+yUUoBlnMq8kE1Rg6QFi8ErEK8xte6uppiTh+7ShpqeLhp9ipuDV6DwJ9Aqg==} + hasBin: true + dependencies: + '@storybook/cli': 7.0.26 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: @@ -26101,13 +28485,13 @@ packages: /strip-literal@0.4.2: resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /strnum@1.0.5: @@ -26123,6 +28507,15 @@ packages: through: 2.3.8 dev: true + /style-loader@3.3.3(webpack@5.76.2): + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.76.2(esbuild@0.17.19) + dev: true + /style-to-object@0.4.1: resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} dependencies: @@ -26146,6 +28539,19 @@ packages: - utf-8-validate dev: false + /sucrase@3.32.0: + resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.5 + ts-interface-checker: 0.1.13 + /suf-log@2.5.3: resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} dependencies: @@ -26261,7 +28667,7 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 chokidar: 3.5.3 - fast-glob: 3.2.12 + fast-glob: 3.3.0 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 @@ -26406,6 +28812,14 @@ packages: tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) dev: false + /tailwindcss-animate@1.0.5(tailwindcss@3.3.2): + resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.3.2(ts-node@10.9.1) + dev: true + /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} @@ -26419,7 +28833,7 @@ packages: detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.0 glob-parent: 6.0.2 is-glob: 4.0.3 lilconfig: 2.1.0 @@ -26452,7 +28866,7 @@ packages: detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.0 glob-parent: 6.0.2 is-glob: 4.0.3 lilconfig: 2.1.0 @@ -26472,6 +28886,37 @@ packages: transitivePeerDependencies: - ts-node + /tailwindcss@3.3.2(ts-node@10.9.1): + resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.19.1 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-import: 15.1.0(postcss@8.4.24) + postcss-js: 4.0.1(postcss@8.4.24) + postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.24) + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + resolve: 1.22.2 + sucrase: 3.32.0 + transitivePeerDependencies: + - ts-node + /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -26572,6 +29017,31 @@ packages: supports-hyperlinks: 2.3.0 dev: true + /terser-webpack-plugin@5.3.7(esbuild@0.17.19)(webpack@5.76.2): + resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + esbuild: 0.17.19 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.1 + terser: 5.16.8 + webpack: 5.76.2(esbuild@0.17.19) + dev: true + /terser-webpack-plugin@5.3.7(webpack@5.76.2): resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} @@ -26588,7 +29058,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 @@ -26602,7 +29072,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.2 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -26683,13 +29153,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: true /throat@6.0.2: resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} @@ -26737,6 +29205,10 @@ packages: resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==} dev: true + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + /tinypool@0.3.1: resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} engines: {node: '>=14.0.0'} @@ -26747,11 +29219,21 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.6.0: + resolution: {integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@1.1.1: resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} engines: {node: '>=14.0.0'} dev: true + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -26868,6 +29350,9 @@ packages: typescript: 4.9.5 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /ts-jest@27.0.3(jest@27.0.6)(typescript@4.9.5): resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -27000,7 +29485,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.15.10 - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -27065,7 +29550,7 @@ packages: '@types/json5': 0.0.30 '@types/resolve': 1.20.2 json5: 2.2.3 - resolve: 1.22.1 + resolve: 1.22.2 strip-bom: 4.0.0 type-fest: 0.13.1 dev: false @@ -27262,6 +29747,11 @@ packages: /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} + dev: false + + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -27442,7 +29932,7 @@ packages: /unplugin@0.10.2: resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.6 @@ -27453,8 +29943,8 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db@1.0.11(browserslist@4.21.5): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -27463,6 +29953,16 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -27659,7 +30159,6 @@ packages: /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true - dev: false /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} @@ -27691,7 +30190,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -27772,10 +30271,11 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss @@ -27793,10 +30293,33 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-node@0.33.0(@types/node@18.15.10)(less@4.1.3): + resolution: {integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@8.1.1) + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss @@ -27841,7 +30364,7 @@ packages: chokidar: 3.5.3 commander: 8.3.0 eslint: 8.38.0 - fast-glob: 3.2.12 + fast-glob: 3.3.0 fs-extra: 11.1.1 lodash.debounce: 4.0.8 lodash.pick: 4.4.0 @@ -27867,7 +30390,7 @@ packages: '@rollup/pluginutils': 5.0.2(rollup@2.70.2) '@rushstack/node-core-library': 3.55.2(@types/node@18.15.10) debug: 4.3.4(supports-color@8.1.1) - fast-glob: 3.2.12 + fast-glob: 3.3.0 fs-extra: 10.1.0 kolorist: 1.7.0 ts-morph: 17.0.1 @@ -27878,6 +30401,27 @@ packages: - supports-color dev: true + /vite-plugin-dts@1.7.3(@types/node@20.4.1)(vite@4.4.2): + resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: '>=2.9.0' + dependencies: + '@microsoft/api-extractor': 7.34.4(@types/node@20.4.1) + '@rollup/pluginutils': 5.0.2(rollup@2.70.2) + '@rushstack/node-core-library': 3.55.2(@types/node@20.4.1) + debug: 4.3.4(supports-color@8.1.1) + fast-glob: 3.3.0 + fs-extra: 10.1.0 + kolorist: 1.7.0 + ts-morph: 17.0.1 + vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + dev: true + /vite-plugin-html@3.2.0(vite@4.0.3): resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==} peerDependencies: @@ -27890,7 +30434,7 @@ packages: dotenv: 16.0.3 dotenv-expand: 8.0.3 ejs: 3.1.9 - fast-glob: 3.2.12 + fast-glob: 3.3.0 fs-extra: 10.1.0 html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 @@ -28082,7 +30626,7 @@ packages: optionalDependencies: fsevents: 2.3.2 - /vite@4.3.9(@types/node@18.15.10): + /vite@4.3.9(@types/node@20.3.1): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -28107,20 +30651,21 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.10 + '@types/node': 20.3.1 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 - /vite@4.3.9(@types/node@20.3.1): - resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + /vite@4.4.2(@types/node@18.15.10)(less@4.1.3): + resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -28130,6 +30675,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -28139,12 +30686,50 @@ packages: terser: optional: true dependencies: - '@types/node': 20.3.1 - esbuild: 0.17.19 + '@types/node': 18.15.10 + esbuild: 0.18.11 + less: 4.1.3 postcss: 8.4.24 - rollup: 3.25.1 + rollup: 3.26.2 + optionalDependencies: + fsevents: 2.3.2 + + /vite@4.4.2(@types/node@20.4.1)(less@4.1.3): + resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.4.1 + esbuild: 0.18.11 + less: 4.1.3 + postcss: 8.4.24 + rollup: 3.26.2 optionalDependencies: fsevents: 2.3.2 + dev: true /vitefu@0.2.4(vite@3.2.5): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} @@ -28168,7 +30753,7 @@ packages: vite: 4.2.1(@types/node@20.3.2) dev: true - /vitefu@0.2.4(vite@4.3.9): + /vitefu@0.2.4(vite@4.4.2): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -28176,7 +30761,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(@types/node@18.15.10) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) dev: false /vitest@0.24.5(jsdom@20.0.3): @@ -28266,11 +30851,12 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) vite-node: 0.28.5(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: - less + - lightningcss - sass - stylus - sugarss @@ -28330,11 +30916,77 @@ packages: tinybench: 2.4.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.3.9(@types/node@18.15.10) + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) vite-node: 0.29.8(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@0.33.0(less@4.1.3): + resolution: {integrity: sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + 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 + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 18.15.10 + '@vitest/expect': 0.33.0 + '@vitest/runner': 0.33.0 + '@vitest/snapshot': 0.33.0 + '@vitest/spy': 0.33.0 + '@vitest/utils': 0.33.0 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + debug: 4.3.4(supports-color@8.1.1) + local-pkg: 0.4.3 + magic-string: 0.30.1 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.6.0 + vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite-node: 0.33.0(@types/node@18.15.10)(less@4.1.3) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss - sass - stylus - sugarss @@ -28557,9 +31209,9 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.2 - acorn-import-assertions: 1.8.0(acorn@8.8.2) - browserslist: 4.21.5 + acorn: 8.10.0 + acorn-import-assertions: 1.8.0(acorn@8.10.0) + browserslist: 4.21.9 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 @@ -28582,6 +31234,46 @@ packages: - uglify-js dev: true + /webpack@5.76.2(esbuild@0.17.19): + resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.10.0 + acorn-import-assertions: 1.8.0(acorn@8.10.0) + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.12.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.7(esbuild@0.17.19)(webpack@5.76.2) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: @@ -28910,7 +31602,6 @@ packages: /yaml@2.3.1: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} - dev: false /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} From 0cd2be204eedcd9b2769d245d0767ab0793e5a73 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Sun, 16 Jul 2023 10:30:50 +0300 Subject: [PATCH 107/123] Authentication layouts using react-router-dom (#617) * refactor(backoffice-v2): no longer using useEffect to redirect based on auth state now using <Navigate/> and navigating to the last page of the user * refactor(shouldredirect): wrapped in useMemo (PR comment) * feat(authprovider): added a full screen loader * fix(useselectentityfilteronmount): updated dependency array * feat(backoffice-v2): now returning full screen loader instead of null --- apps/backoffice-v2/src/Router/Router.tsx | 67 +++++++++++++------ .../components/atoms/Skeleton/Skeleton.tsx | 6 ++ .../FullScreenLoader/FullScreenLoader.tsx | 37 ++++++++++ .../components/templates/Layout/Layout.tsx | 16 ----- .../templates/Providers/Providers.tsx | 14 ++-- .../useZodSearchParams/useZodSearchParams.tsx | 6 ++ .../AuthenticatedLayout.layout.tsx | 30 ++++++--- .../AuthenticatedLayout.loader.ts} | 10 +-- .../useAuthenticatedLayout.tsx | 33 --------- .../useAuthenticatedLayoutLogic.tsx | 27 ++++++++ .../UnauthenticatedLayout.layout.tsx | 28 ++++++-- .../UnauthenticatedLayout.loader.ts | 9 +++ .../useUnauthenticatedLayout.tsx | 34 ---------- .../useUnauthenticatedLayoutLogic.tsx | 23 +++++++ .../context/AuthProvider/AuthProvider.tsx | 14 +--- .../useAuthRedirects/useAuthRedirects.tsx | 58 ---------------- .../src/domains/auth/fetchers.ts | 2 + .../useSignInMutation/useSignInMutation.tsx | 6 +- .../useSignOutMutation/useSignOutMutation.tsx | 6 +- .../hooks/useSelectEntity/useSelectEntity.tsx | 5 +- .../useSelectEntityFilterOnMount.tsx | 20 ++++-- .../useSelectEntityOnMount.tsx | 23 ++++--- apps/backoffice-v2/src/index.css | 17 +++++ .../src/pages/Entity/Entity.loader.ts | 8 ++- .../src/pages/Entity/Entity.page.tsx | 8 +-- .../Entity/hooks/useEntity/useEntity.tsx | 6 +- .../src/pages/Root/Root.error.tsx | 35 +++++----- .../src/pages/Root/Root.loader.ts | 2 +- .../src/pages/Root/Root.page.tsx | 5 +- .../src/pages/SignIn/SignIn.page.tsx | 5 +- 30 files changed, 310 insertions(+), 250 deletions(-) create mode 100644 apps/backoffice-v2/src/common/components/atoms/Skeleton/Skeleton.tsx create mode 100644 apps/backoffice-v2/src/common/components/molecules/FullScreenLoader/FullScreenLoader.tsx delete mode 100644 apps/backoffice-v2/src/common/components/templates/Layout/Layout.tsx rename apps/backoffice-v2/src/{pages/Locale/Locale.loader.ts => domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.loader.ts} (60%) delete mode 100644 apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayout/useAuthenticatedLayout.tsx create mode 100644 apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayoutLogic/useAuthenticatedLayoutLogic.tsx create mode 100644 apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.loader.ts delete mode 100644 apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayout/useUnauthenticatedLayout.tsx create mode 100644 apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayoutLogic/useUnauthenticatedLayoutLogic.tsx delete mode 100644 apps/backoffice-v2/src/domains/auth/context/AuthProvider/hooks/useAuthRedirects/useAuthRedirects.tsx diff --git a/apps/backoffice-v2/src/Router/Router.tsx b/apps/backoffice-v2/src/Router/Router.tsx index 7c94fff0d1..7727ae9a85 100644 --- a/apps/backoffice-v2/src/Router/Router.tsx +++ b/apps/backoffice-v2/src/Router/Router.tsx @@ -10,9 +10,12 @@ import { RouteError } from '../common/components/atoms/RouteError/RouteError'; import { CaseManagement } from '../pages/CaseManagement/CaseManagement.page'; import { rootLoader } from '../pages/Root/Root.loader'; import { entitiesLoader } from '../pages/Entities/Entities.loader'; -import { localeLoader } from '../pages/Locale/Locale.loader'; -import { Locale } from '../pages/Locale/Locale.page'; +import { authenticatedLayoutLoader } from '../domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.loader'; import { entityLoader } from '../pages/Entity/Entity.loader'; +import { AuthenticatedLayout } from '../domains/auth/components/AuthenticatedLayout'; +import { UnauthenticatedLayout } from '../domains/auth/components/UnauthenticatedLayout'; +import { Locale } from '../pages/Locale/Locale.page'; +import { unauthenticatedLayoutLoader } from '../domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.loader'; const router = createBrowserRouter([ { @@ -21,35 +24,57 @@ const router = createBrowserRouter([ loader: rootLoader, errorElement: <RootError />, children: [ - ...(env.VITE_AUTH_ENABLED - ? [ - { - path: '/:locale/auth/sign-in', - element: <SignIn />, - }, - ] - : []), { - path: '/:locale', - element: <Locale />, - loader: localeLoader, + element: <UnauthenticatedLayout />, + loader: unauthenticatedLayoutLoader, + errorElement: <RouteError />, + children: [ + { + path: '/:locale', + element: <Locale />, + errorElement: <RouteError />, + children: [ + ...(env.VITE_AUTH_ENABLED + ? [ + { + path: '/:locale/auth/sign-in', + element: <SignIn />, + errorElement: <RouteError />, + }, + ] + : []), + ], + }, + ], + }, + { + element: <AuthenticatedLayout />, + loader: authenticatedLayoutLoader, errorElement: <RouteError />, children: [ { - path: '/:locale/case-management', - element: <CaseManagement />, + path: '/:locale', + element: <Locale />, + errorElement: <RouteError />, children: [ { - path: '/:locale/case-management/entities', - element: <Entities />, - loader: entitiesLoader, + path: '/:locale/case-management', + element: <CaseManagement />, errorElement: <RouteError />, children: [ { - path: '/:locale/case-management/entities/:entityId', - element: <Entity />, - loader: entityLoader, + path: '/:locale/case-management/entities', + element: <Entities />, + loader: entitiesLoader, errorElement: <RouteError />, + children: [ + { + path: '/:locale/case-management/entities/:entityId', + element: <Entity />, + loader: entityLoader, + errorElement: <RouteError />, + }, + ], }, ], }, diff --git a/apps/backoffice-v2/src/common/components/atoms/Skeleton/Skeleton.tsx b/apps/backoffice-v2/src/common/components/atoms/Skeleton/Skeleton.tsx new file mode 100644 index 0000000000..e190f8ff84 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/atoms/Skeleton/Skeleton.tsx @@ -0,0 +1,6 @@ +import { ComponentProps, FunctionComponent } from 'react'; +import { ctw } from '../../../utils/ctw/ctw'; + +export const Skeleton: FunctionComponent<ComponentProps<'div'>> = ({ className, ...props }) => ( + <div className={ctw('animate-pulse rounded-md bg-muted', className)} {...props} /> +); diff --git a/apps/backoffice-v2/src/common/components/molecules/FullScreenLoader/FullScreenLoader.tsx b/apps/backoffice-v2/src/common/components/molecules/FullScreenLoader/FullScreenLoader.tsx new file mode 100644 index 0000000000..3ad5784c0d --- /dev/null +++ b/apps/backoffice-v2/src/common/components/molecules/FullScreenLoader/FullScreenLoader.tsx @@ -0,0 +1,37 @@ +import React, { FunctionComponent } from 'react'; + +export const FullScreenLoader: FunctionComponent = () => { + return ( + <div className={`d-full mt-32 flex justify-center`}> + <svg + width="414" + height="608" + viewBox="-2 -2 32 38" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + className={`animated-path`} + fill={`transparent`} + strokeWidth={1} + stroke={`black`} + d="M15.0495 34.0001C11.7759 34.0001 9.24159 32.4364 7.99481 31.4764C7.16779 30.8416 7.02056 29.6619 7.66275 28.8444C8.30493 28.0269 9.49847 27.8813 10.3223 28.5161C11.2151 29.2036 13.0571 30.3431 15.3283 30.244C19.1689 30.0768 22.7996 26.5282 22.7996 22.9393C22.7996 21.1495 22.4644 19.9635 21.5622 18.5701L21.5278 18.5143C19.786 15.6005 16.0112 13.6404 12.1361 13.6404C11.1776 13.6404 10.2879 13.7642 9.48907 14.012C8.48976 14.3216 7.4278 13.7704 7.11454 12.7826C6.80127 11.7948 7.35888 10.742 8.35819 10.4354C9.52353 10.0763 10.7922 9.89355 12.133 9.89355C17.3708 9.89355 22.3266 12.5163 24.77 16.579C26.0575 18.5824 26.5838 20.428 26.5838 22.9393C26.5838 28.4728 21.2928 33.74 15.4849 33.9908C15.3346 33.997 15.1873 34.0001 15.0401 34.0001H15.0495Z" + /> + <path + className={`animated-path`} + fill={`transparent`} + strokeWidth={1} + stroke={`black`} + d="M6.81973 26.2184C2.93214 26.2184 0 23.3727 0 19.6011C0 18.1736 0.523149 16.7244 1.55692 15.2938L1.59451 15.2442C1.71668 15.0708 1.85138 14.9005 1.99548 14.7302C2.09573 14.6095 2.42152 14.2224 2.94467 13.7207C3.6965 12.9993 4.8963 13.0178 5.6262 13.761C6.3561 14.5042 6.33731 15.6901 5.58548 16.4116C5.17197 16.808 4.94015 17.0929 4.93702 17.096L4.89316 17.1486C4.82111 17.2291 4.75846 17.3096 4.70521 17.3871L4.64255 17.4769C4.43267 17.7679 3.79048 18.6535 3.79048 19.6042C3.79048 21.2918 5.03413 22.4716 6.81973 22.4716C8.80582 22.4716 12.6339 21.9328 15.9451 18.3191L15.967 18.2974L16.5183 17.7153C17.2326 16.9597 18.4324 16.9195 19.1999 17.6286C19.9642 18.3346 20.005 19.5206 19.2876 20.2792L18.7488 20.849C14.4602 25.5217 9.43548 26.2215 6.82286 26.2215L6.81973 26.2184Z" + /> + <path + stroke={`black`} + strokeWidth={1} + className={`animated-path`} + fill={`transparent`} + d="M9.12705 20.0439C8.19979 20.0439 7.38844 19.372 7.25373 18.4368C6.76818 15.1018 6.60841 12.0703 6.76504 9.16576C6.79324 4.10601 10.9659 0 16.0877 0C21.2096 0 25.4136 4.13388 25.4136 9.2184C25.4136 12.1849 24.5678 13.9375 23.2019 15.8047C22.5879 16.6439 21.4007 16.8297 20.5549 16.2228C19.7059 15.6158 19.518 14.4454 20.132 13.6062C21.1438 12.2251 21.6231 11.2157 21.6231 9.2184C21.6231 6.20237 19.1421 3.74991 16.0909 3.74991C13.0397 3.74991 10.5587 6.20237 10.5587 9.2184V9.32058C10.4083 11.9898 10.5555 14.7953 11.0066 17.9011C11.157 18.9261 10.4365 19.8767 9.39958 20.0253C9.30874 20.0377 9.21789 20.0439 9.12705 20.0439Z" + /> + </svg> + </div> + ); +}; diff --git a/apps/backoffice-v2/src/common/components/templates/Layout/Layout.tsx b/apps/backoffice-v2/src/common/components/templates/Layout/Layout.tsx deleted file mode 100644 index 5746217174..0000000000 --- a/apps/backoffice-v2/src/common/components/templates/Layout/Layout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { FunctionComponentWithChildren } from '../../../types'; -import { useIsAuthenticated } from '../../../../domains/auth/context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; -import { UnauthenticatedLayout } from '../../../../domains/auth/components/UnauthenticatedLayout'; -import { AuthenticatedLayout } from '../../../../domains/auth/components/AuthenticatedLayout'; -import React from 'react'; -import { env } from '../../../env/env'; - -export const Layout: FunctionComponentWithChildren = ({ children }) => { - const isAuthenticated = useIsAuthenticated(); - - if (!isAuthenticated && env.VITE_AUTH_ENABLED) { - return <UnauthenticatedLayout>{children}</UnauthenticatedLayout>; - } - - return <AuthenticatedLayout>{children}</AuthenticatedLayout>; -}; diff --git a/apps/backoffice-v2/src/common/components/templates/Providers/Providers.tsx b/apps/backoffice-v2/src/common/components/templates/Providers/Providers.tsx index 720e1232af..f6afa08b9d 100644 --- a/apps/backoffice-v2/src/common/components/templates/Providers/Providers.tsx +++ b/apps/backoffice-v2/src/common/components/templates/Providers/Providers.tsx @@ -3,23 +3,21 @@ import { FunctionComponent, PropsWithChildren } from 'react'; import { queryClient } from '../../../../lib/react-query/query-client'; import { AuthProvider } from '../../../../domains/auth/context/AuthProvider/AuthProvider'; import { env } from '../../../env/env'; -// import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { useLocation } from 'react-router-dom'; export const Providers: FunctionComponent<PropsWithChildren> = ({ children }) => { + const { state } = useLocation(); + return ( <QueryClientProvider client={queryClient}> <AuthProvider - protectedRoutes={ - [ - // Uses String.prototype.startsWith until authenticated layout is implemented. - '/en/case-management/', - ] as const - } redirectAuthenticatedTo={'/en/case-management/entities'} redirectUnauthenticatedTo={'/en/auth/sign-in'} signInOptions={{ redirect: env.VITE_AUTH_ENABLED, - callbackUrl: '/en/case-management/entities', + callbackUrl: state?.from + ? `${state?.from?.pathname}${state?.from?.search}` + : '/en/case-management/entities', }} signOutOptions={{ redirect: env.VITE_AUTH_ENABLED, diff --git a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx index 5617e4423f..4f896d8ad4 100644 --- a/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx +++ b/apps/backoffice-v2/src/common/hooks/useZodSearchParams/useZodSearchParams.tsx @@ -19,6 +19,7 @@ export const useZodSearchParams = <TSchema extends AnyZodObject>( [schema, searchParamsAsObject], ); const navigate = useNavigate(); + const { state } = useLocation(); const onSetSearchParams = useCallback( (searchParams: Record<string, unknown>) => { navigate( @@ -26,6 +27,11 @@ export const useZodSearchParams = <TSchema extends AnyZodObject>( ...parsedSearchParams, ...searchParams, })}`, + { + state: { + from: state?.from, + }, + }, ); }, [pathname, parsedSearchParams, setSearchParams], diff --git a/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.layout.tsx b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.layout.tsx index e2216a46b5..925c18c75c 100644 --- a/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.layout.tsx +++ b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.layout.tsx @@ -1,19 +1,33 @@ import { Header } from '../../../../common/components/organisms/Header'; -import { FunctionComponentWithChildren } from '../../../../common/types'; -import { useSelectEntityFilterOnMount } from '../../../entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount'; +import { useAuthenticatedLayoutLogic } from './hooks/useAuthenticatedLayoutLogic/useAuthenticatedLayoutLogic'; +import { Navigate, Outlet } from 'react-router-dom'; +import { FunctionComponent } from 'react'; +import { FullScreenLoader } from '../../../../common/components/molecules/FullScreenLoader/FullScreenLoader'; -export const AuthenticatedLayout: FunctionComponentWithChildren = ({ children }) => { - // Should only be uncommented once `useAuthRedirects` is no longer in use in `AuthProvider` - // useAuthenticatedLayout(); - useSelectEntityFilterOnMount(); +export const AuthenticatedLayout: FunctionComponent = () => { + const { shouldRedirect, isLoading, redirectUnauthenticatedTo, location } = + useAuthenticatedLayoutLogic(); + + if (isLoading) return <FullScreenLoader />; + + if (shouldRedirect) { + return ( + <Navigate + to={redirectUnauthenticatedTo} + replace + state={{ + from: location, + }} + /> + ); + } return ( <div className="drawer-mobile drawer"> <input id="app-drawer" type="checkbox" className="drawer-toggle" /> <div className={`drawer-content`}> <main className={`grid h-full grid-cols-[285px_1fr]`}> - {/*<Outlet />*/} - {children} + <Outlet /> </main> </div> <div className={`drawer-side w-56`}> diff --git a/apps/backoffice-v2/src/pages/Locale/Locale.loader.ts b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.loader.ts similarity index 60% rename from apps/backoffice-v2/src/pages/Locale/Locale.loader.ts rename to apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.loader.ts index d2ddef8469..a0fd6fc53f 100644 --- a/apps/backoffice-v2/src/pages/Locale/Locale.loader.ts +++ b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/AuthenticatedLayout.loader.ts @@ -1,10 +1,10 @@ -import { env } from '../../common/env/env'; -import { authQueryKeys } from '../../domains/auth/query-keys'; -import { queryClient } from '../../lib/react-query/query-client'; -import { filtersQueryKeys } from '../../domains/filters/query-keys'; +import { env } from '../../../../common/env/env'; +import { authQueryKeys } from '../../query-keys'; +import { queryClient } from '../../../../lib/react-query/query-client'; +import { filtersQueryKeys } from '../../../filters/query-keys'; import { LoaderFunction } from 'react-router-dom'; -export const localeLoader: LoaderFunction = async () => { +export const authenticatedLayoutLoader: LoaderFunction = async () => { if (!env.VITE_AUTH_ENABLED) return null; const authenticatedUser = authQueryKeys.authenticatedUser(); diff --git a/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayout/useAuthenticatedLayout.tsx b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayout/useAuthenticatedLayout.tsx deleted file mode 100644 index a120c06467..0000000000 --- a/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayout/useAuthenticatedLayout.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { useAuthContext } from '../../../../context/AuthProvider/hooks/useAuthContext/useAuthContext'; -import { useAuthenticatedUserQuery } from '../../../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; -import { useIsAuthenticated } from '../../../../context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; -import { useEffect } from 'react'; -import { env } from '../../../../../../common/env/env'; -import { useLocation, useNavigate } from 'react-router-dom'; - -export const useAuthenticatedLayout = () => { - const { redirectUnauthenticatedTo } = useAuthContext(); - const { isLoading } = useAuthenticatedUserQuery(); - const isAuthenticated = useIsAuthenticated(); - const navigate = useNavigate(); - const { pathname } = useLocation(); - const disableRedirect = true; - - useEffect(() => { - // When loading the user could be signed in or signed out. - if (isLoading || !env.VITE_AUTH_ENABLED) return; - - // Navigate to the sign-in page if the user is signed out. - if ( - disableRedirect || - isAuthenticated || - !redirectUnauthenticatedTo || - pathname === redirectUnauthenticatedTo - ) - return; - - void navigate(redirectUnauthenticatedTo, { - replace: true, - }); - }, [isLoading, isAuthenticated, navigate, pathname, redirectUnauthenticatedTo, disableRedirect]); -}; diff --git a/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayoutLogic/useAuthenticatedLayoutLogic.tsx b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayoutLogic/useAuthenticatedLayoutLogic.tsx new file mode 100644 index 0000000000..4518a2fcfc --- /dev/null +++ b/apps/backoffice-v2/src/domains/auth/components/AuthenticatedLayout/hooks/useAuthenticatedLayoutLogic/useAuthenticatedLayoutLogic.tsx @@ -0,0 +1,27 @@ +import { useAuthContext } from '../../../../context/AuthProvider/hooks/useAuthContext/useAuthContext'; +import { useAuthenticatedUserQuery } from '../../../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; +import { useIsAuthenticated } from '../../../../context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; +import { env } from '../../../../../../common/env/env'; +import { useLocation } from 'react-router-dom'; +import { useMemo } from 'react'; + +export const useAuthenticatedLayoutLogic = () => { + const { redirectUnauthenticatedTo } = useAuthContext(); + const { isLoading } = useAuthenticatedUserQuery(); + const isAuthenticated = useIsAuthenticated(); + const location = useLocation(); + const shouldRedirect = useMemo( + () => + [!isLoading, !isAuthenticated, !!redirectUnauthenticatedTo, env.VITE_AUTH_ENABLED].every( + Boolean, + ), + [isLoading, isAuthenticated, redirectUnauthenticatedTo], + ); + + return { + shouldRedirect, + isLoading, + redirectUnauthenticatedTo, + location, + }; +}; diff --git a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.layout.tsx b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.layout.tsx index 614d24731f..9c841502d5 100644 --- a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.layout.tsx +++ b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.layout.tsx @@ -1,13 +1,29 @@ -import { FunctionComponentWithChildren } from '../../../../common/types'; +import { useUnauthenticatedLayoutLogic } from './hooks/useUnauthenticatedLayoutLogic/useUnauthenticatedLayoutLogic'; +import { Navigate, Outlet } from 'react-router-dom'; +import { FunctionComponent } from 'react'; +import { FullScreenLoader } from '../../../../common/components/molecules/FullScreenLoader/FullScreenLoader'; -export const UnauthenticatedLayout: FunctionComponentWithChildren = ({ children }) => { - // Should only be uncommented once `useAuthRedirects` is no longer in use in `AuthProvider` - // useUnauthenticatedLayout(); +export const UnauthenticatedLayout: FunctionComponent = () => { + const { isLoading, shouldRedirect, redirectAuthenticatedTo, state } = + useUnauthenticatedLayoutLogic(); + + if (isLoading) return <FullScreenLoader />; + + if (shouldRedirect) { + return ( + <Navigate + to={redirectAuthenticatedTo} + replace + state={{ + from: state?.from, + }} + /> + ); + } return ( <main className={`h-full`}> - {/*<Outlet />*/} - {children} + <Outlet /> </main> ); }; diff --git a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.loader.ts b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.loader.ts new file mode 100644 index 0000000000..024fa73c5c --- /dev/null +++ b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/UnauthenticatedLayout.loader.ts @@ -0,0 +1,9 @@ +import { LoaderFunction, redirect } from 'react-router-dom'; + +export const unauthenticatedLayoutLoader: LoaderFunction = async ({ request }) => { + const url = new URL(request.url); + + if (url.pathname === `/en/auth/sign-in`) return null; + + return redirect(`/en/auth/sign-in`); +}; diff --git a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayout/useUnauthenticatedLayout.tsx b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayout/useUnauthenticatedLayout.tsx deleted file mode 100644 index 89ba723444..0000000000 --- a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayout/useUnauthenticatedLayout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { useAuthenticatedUserQuery } from '../../../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; -import { useIsAuthenticated } from '../../../../context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; -import { useAuthContext } from '../../../../context/AuthProvider/hooks/useAuthContext/useAuthContext'; -import { useEffect } from 'react'; -import { env } from '../../../../../../common/env/env'; -import { useLocation, useNavigate } from 'react-router-dom'; - -export const useUnauthenticatedLayout = () => { - const { isLoading } = useAuthenticatedUserQuery(); - const isAuthenticated = useIsAuthenticated(); - const navigate = useNavigate(); - const { pathname } = useLocation(); - const { redirectAuthenticatedTo } = useAuthContext(); - const disableRedirect = true; - - useEffect(() => { - // When loading the user could be signed in or signed out. - if (isLoading || !env.VITE_AUTH_ENABLED) return; - - // Navigate to the entities page if the user is signed in. - if ( - // Implement authenticated layout before removing disableRedirect. - disableRedirect || - !isAuthenticated || - !redirectAuthenticatedTo || - pathname.startsWith(redirectAuthenticatedTo) - ) - return; - - void navigate(redirectAuthenticatedTo, { - replace: true, - }); - }, [isLoading, isAuthenticated, navigate, pathname, redirectAuthenticatedTo, disableRedirect]); -}; diff --git a/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayoutLogic/useUnauthenticatedLayoutLogic.tsx b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayoutLogic/useUnauthenticatedLayoutLogic.tsx new file mode 100644 index 0000000000..fa38b4dffc --- /dev/null +++ b/apps/backoffice-v2/src/domains/auth/components/UnauthenticatedLayout/hooks/useUnauthenticatedLayoutLogic/useUnauthenticatedLayoutLogic.tsx @@ -0,0 +1,23 @@ +import { useAuthenticatedUserQuery } from '../../../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; +import { useIsAuthenticated } from '../../../../context/AuthProvider/hooks/useIsAuthenticated/useIsAuthenticated'; +import { useAuthContext } from '../../../../context/AuthProvider/hooks/useAuthContext/useAuthContext'; +import { useLocation } from 'react-router-dom'; +import { useMemo } from 'react'; + +export const useUnauthenticatedLayoutLogic = () => { + const { isLoading } = useAuthenticatedUserQuery(); + const isAuthenticated = useIsAuthenticated(); + const { redirectAuthenticatedTo } = useAuthContext(); + const { state } = useLocation(); + const shouldRedirect = useMemo( + () => [!isLoading, isAuthenticated, redirectAuthenticatedTo].every(Boolean), + [isLoading, isAuthenticated, redirectAuthenticatedTo], + ); + + return { + isLoading, + shouldRedirect, + redirectAuthenticatedTo, + state, + }; +}; diff --git a/apps/backoffice-v2/src/domains/auth/context/AuthProvider/AuthProvider.tsx b/apps/backoffice-v2/src/domains/auth/context/AuthProvider/AuthProvider.tsx index 55f6c96bfd..f377f1bc68 100644 --- a/apps/backoffice-v2/src/domains/auth/context/AuthProvider/AuthProvider.tsx +++ b/apps/backoffice-v2/src/domains/auth/context/AuthProvider/AuthProvider.tsx @@ -1,8 +1,8 @@ import { FunctionComponentWithChildren } from '../../../../common/types'; -import { createContext, useMemo } from 'react'; +import React, { createContext, useMemo } from 'react'; import { env } from '../../../../common/env/env'; import { useAuthenticatedUserQuery } from '../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; -import { useAuthRedirects } from './hooks/useAuthRedirects/useAuthRedirects'; +import { FullScreenLoader } from '../../../../common/components/molecules/FullScreenLoader/FullScreenLoader'; export const AuthContext = createContext<{ redirectAuthenticatedTo?: string; @@ -18,7 +18,6 @@ export const AuthContext = createContext<{ }>(undefined); export const AuthProvider: FunctionComponentWithChildren<{ - protectedRoutes?: readonly string[]; redirectAuthenticatedTo?: string; redirectUnauthenticatedTo?: string; signInOptions?: { @@ -31,7 +30,6 @@ export const AuthProvider: FunctionComponentWithChildren<{ }; }> = ({ children, - protectedRoutes, redirectAuthenticatedTo, redirectUnauthenticatedTo, signInOptions, @@ -48,14 +46,8 @@ export const AuthProvider: FunctionComponentWithChildren<{ [redirectAuthenticatedTo, redirectUnauthenticatedTo, signInOptions, signOutOptions], ); - useAuthRedirects({ - protectedRoutes, - redirectAuthenticatedTo, - redirectUnauthenticatedTo, - }); - // Don't render the children to avoid a flash of wrong state (i.e. authenticated layout). - if (isLoading && env.VITE_AUTH_ENABLED) return null; + if (isLoading && env.VITE_AUTH_ENABLED) return <FullScreenLoader />; return <AuthContext.Provider value={contextValues}>{children}</AuthContext.Provider>; }; diff --git a/apps/backoffice-v2/src/domains/auth/context/AuthProvider/hooks/useAuthRedirects/useAuthRedirects.tsx b/apps/backoffice-v2/src/domains/auth/context/AuthProvider/hooks/useAuthRedirects/useAuthRedirects.tsx deleted file mode 100644 index 01ff939eb5..0000000000 --- a/apps/backoffice-v2/src/domains/auth/context/AuthProvider/hooks/useAuthRedirects/useAuthRedirects.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { useAuthenticatedUserQuery } from '../../../../hooks/queries/useAuthenticatedUserQuery/useAuthenticatedUserQuery'; -import { useEffect } from 'react'; -import { env } from '../../../../../../common/env/env'; -import { useIsAuthenticated } from '../useIsAuthenticated/useIsAuthenticated'; -import { useLocation, useNavigate } from 'react-router-dom'; - -export const useAuthRedirects = ({ - protectedRoutes, - redirectAuthenticatedTo, - redirectUnauthenticatedTo, -}: { - protectedRoutes: ReadonlyArray<string>; - redirectAuthenticatedTo?: string; - redirectUnauthenticatedTo?: string; -}) => { - const { isLoading } = useAuthenticatedUserQuery(); - const isAuthenticated = useIsAuthenticated(); - const navigate = useNavigate(); - const { pathname } = useLocation(); - - useEffect(() => { - const shouldRedirect = [ - // When loading the user could be signed in or signed out. - !isLoading, - env.VITE_AUTH_ENABLED, - !!redirectAuthenticatedTo, - isAuthenticated, - !pathname.startsWith(redirectAuthenticatedTo), - // Remove once authenticated layout is implemented. - !protectedRoutes?.every(route => pathname.startsWith(route)), - ].every(Boolean); - - if (!shouldRedirect) return; - - // Navigate to the entities page if the user is signed in. - - void navigate(redirectAuthenticatedTo, { - replace: true, - }); - }, [isLoading, isAuthenticated, navigate, pathname, redirectAuthenticatedTo, protectedRoutes]); - - useEffect(() => { - const shouldRedirect = [ - !isLoading, - env.VITE_AUTH_ENABLED, - !!redirectUnauthenticatedTo, - !isAuthenticated, - pathname !== redirectUnauthenticatedTo, - ].every(Boolean); - - if (!shouldRedirect) return; - - // Navigate to the sign-in page if the user is signed out. - navigate(redirectUnauthenticatedTo, { - replace: true, - }); - }, [isLoading, isAuthenticated, navigate, pathname, redirectUnauthenticatedTo]); -}; diff --git a/apps/backoffice-v2/src/domains/auth/fetchers.ts b/apps/backoffice-v2/src/domains/auth/fetchers.ts index 9d81f2d51d..2b8b2a1aca 100644 --- a/apps/backoffice-v2/src/domains/auth/fetchers.ts +++ b/apps/backoffice-v2/src/domains/auth/fetchers.ts @@ -4,6 +4,7 @@ import { z } from 'zod'; import { handleZodError } from '../../common/utils/handle-zod-error/handle-zod-error'; import { Method } from '../../common/enums'; import { AuthenticatedUserSchema } from './validation-schemas'; +import { sleep } from '@ballerine/common'; export const fetchSignOut = async ({ callbackUrl }: ISignInProps) => { const [session, error] = await apiClient({ @@ -51,6 +52,7 @@ export const fetchAuthenticatedUser = async () => { user: AuthenticatedUserSchema, }), }); + await sleep(2000); return handleZodError(error, session); }; diff --git a/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignInMutation/useSignInMutation.tsx b/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignInMutation/useSignInMutation.tsx index 41c64cb035..81fd8c2c0c 100644 --- a/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignInMutation/useSignInMutation.tsx +++ b/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignInMutation/useSignInMutation.tsx @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useNavigate } from 'react-router-dom'; +import { useLocation, useNavigate } from 'react-router-dom'; import { ISignInProps } from './interfaces'; import { fetchSignIn } from '../../../fetchers'; import { authQueryKeys } from '../../../query-keys'; @@ -8,6 +8,7 @@ export const useSignInMutation = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const getSession = authQueryKeys.authenticatedUser(); + const { state } = useLocation(); return useMutation({ mutationFn: ({ callbackUrl, body }: ISignInProps) => @@ -25,6 +26,9 @@ export const useSignInMutation = () => { void navigate(callbackUrl, { replace: true, + state: { + from: state?.from, + }, }); }, onSettled: () => { diff --git a/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignOutMutation/useSignOutMutation.tsx b/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignOutMutation/useSignOutMutation.tsx index e70f7ca416..59b9dd8f03 100644 --- a/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignOutMutation/useSignOutMutation.tsx +++ b/apps/backoffice-v2/src/domains/auth/hooks/mutations/useSignOutMutation/useSignOutMutation.tsx @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useNavigate } from 'react-router-dom'; +import { useLocation, useNavigate } from 'react-router-dom'; import { ISignInProps } from '../useSignInMutation/interfaces'; import { authQueryKeys } from '../../../query-keys'; import { fetchSignOut } from '../../../fetchers'; @@ -8,6 +8,7 @@ export const useSignOutMutation = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); const authenticatedUser = authQueryKeys.authenticatedUser(); + const { state } = useLocation(); return useMutation({ mutationFn: ({ callbackUrl }: ISignInProps) => @@ -26,6 +27,9 @@ export const useSignOutMutation = () => { void navigate(callbackUrl, { replace: true, + state: { + from: state?.from, + }, }); }, onSettled: () => { diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntity/useSelectEntity.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntity/useSelectEntity.tsx index bd10ad9b91..c738c8c756 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntity/useSelectEntity.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntity/useSelectEntity.tsx @@ -4,7 +4,7 @@ import { useCallback } from 'react'; export const useSelectEntity = () => { const navigate = useNavigate(); const { locale = 'en' } = useParams(); - const { search } = useLocation(); + const { search, state } = useLocation(); return useCallback( (entityId: string) => () => { @@ -12,6 +12,9 @@ export const useSelectEntity = () => { void navigate(`/${locale}/case-management/entities/${entityId}${search}`, { replace: true, + state: { + from: state?.from, + }, }); }, [locale, navigate, search], diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx index df08b085da..cd45de51cc 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityFilterOnMount/useSelectEntityFilterOnMount.tsx @@ -1,8 +1,9 @@ import { useFiltersQuery } from '../../../filters/hooks/queries/useFiltersQuery/useFiltersQuery'; -import { useEffect } from 'react'; +import { useEffect, useMemo } from 'react'; import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; import { useEntityType } from '../../../../common/hooks/useEntityType/useEntityType'; +import { searchParamsToObject } from '../../../../common/hooks/useZodSearchParams/utils/search-params-to-object'; export const useSelectEntityFilterOnMount = () => { const { data: filters } = useFiltersQuery(); @@ -11,10 +12,19 @@ export const useSelectEntityFilterOnMount = () => { const entity = useEntityType(); const navigate = useNavigate(); const [firstFilter] = filters ?? []; + const { state } = useLocation(); + const prevFilterId = useMemo( + () => searchParamsToObject(new URLSearchParams(state?.from?.search))?.filterId, + [state?.from?.search], + ); useEffect(() => { - if ((entity && filterId) || !firstFilter) return; + if ((entity && filterId) || (!firstFilter && !prevFilterId)) return; - navigate(`/${locale}/case-management/entities?filterId=${firstFilter?.id}`); - }, [entity, filterId, firstFilter, setSearchParams]); + navigate(`/${locale}/case-management/entities?filterId=${prevFilterId || firstFilter?.id}`, { + state: { + from: state?.from, + }, + }); + }, [entity, filterId, firstFilter, locale, navigate, prevFilterId, state?.from]); }; diff --git a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx index cdee4d9c05..8e2aedb909 100644 --- a/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx +++ b/apps/backoffice-v2/src/domains/entities/hooks/useSelectEntityOnMount/useSelectEntityOnMount.tsx @@ -1,5 +1,5 @@ -import { useEffect } from 'react'; -import { useParams } from 'react-router-dom'; +import { useEffect, useMemo } from 'react'; +import { matchPath, useLocation, useParams } from 'react-router-dom'; import { useSelectEntity } from '../useSelectEntity/useSelectEntity'; import { useWorkflowsQuery } from '../../../workflows/hooks/queries/useWorkflowsQuery/useWorkflowsQuery'; import { useSearchParamsByEntity } from '../../../../common/hooks/useSearchParamsByEntity/useSearchParamsByEntity'; @@ -9,19 +9,26 @@ import { useEntityType } from '../../../../common/hooks/useEntityType/useEntityT * @description Sets the selected end user to the first end user in the array on mount if no user is currently selected. Returns the select end user handler. */ export const useSelectEntityOnMount = () => { - const { entityId } = useParams(); + const { entityId: caseId } = useParams(); const [{ filterId, filter, sortBy, sortDir, page, pageSize }] = useSearchParamsByEntity(); const { data } = useWorkflowsQuery({ filterId, filter, sortBy, sortDir, page, pageSize }); const { data: workflows } = data || { data: [] }; const onSelectEntity = useSelectEntity(); const entity = useEntityType(); const firstCaseId = workflows?.[0]?.id; + const { state } = useLocation(); + const prevCaseId = useMemo(() => { + const match = matchPath( + '/:locale/case-management/entities/:entityId', + state?.from?.pathname ?? '', + ); - useEffect(() => { - if (entityId) return; + return match?.params?.entityId; + }, [state?.from?.pathname]); - if (!firstCaseId) return; + useEffect(() => { + if (caseId || (!firstCaseId && !prevCaseId)) return; - onSelectEntity(firstCaseId)(); - }, [entity, firstCaseId, entityId, onSelectEntity]); + onSelectEntity(prevCaseId || firstCaseId)(); + }, [entity, firstCaseId, caseId, onSelectEntity, prevCaseId]); }; diff --git a/apps/backoffice-v2/src/index.css b/apps/backoffice-v2/src/index.css index 60531b8b1c..d7e51f33d8 100644 --- a/apps/backoffice-v2/src/index.css +++ b/apps/backoffice-v2/src/index.css @@ -112,3 +112,20 @@ font-feature-settings: 'rlig' 1, 'calt' 1; } } + +@layer components { + .animated-path { + stroke-dasharray: 320; + stroke-dashoffset: 0; + animation: animate-stroke 5s linear alternate infinite; + } + + @keyframes animate-stroke { + from { + stroke-dashoffset: 320; + } + to { + stroke-dashoffset: 0; + } + } +} diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts b/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts index 6f6348c78f..235bab503d 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts +++ b/apps/backoffice-v2/src/pages/Entity/Entity.loader.ts @@ -2,12 +2,18 @@ import { searchParamsToObject } from '../../common/hooks/useZodSearchParams/util import { queryClient } from '../../lib/react-query/query-client'; import { LoaderFunction } from 'react-router-dom'; import { workflowsQueryKeys } from '../../domains/workflows/query-keys'; +import { authQueryKeys } from '../../domains/auth/query-keys'; export const entityLoader: LoaderFunction = async ({ request, params }) => { const url = new URL(request.url); const { filterId } = searchParamsToObject(url.searchParams); + const authenticatedUser = authQueryKeys.authenticatedUser(); + const session = await queryClient.ensureQueryData( + authenticatedUser.queryKey, + authenticatedUser.queryFn, + ); - if (!filterId) { + if (!filterId || !session?.user) { return null; } diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx index b5746ddb2c..657ad8b732 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx +++ b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx @@ -12,10 +12,10 @@ export const Entity = () => { <Case> {/* Reject and approve header */} <Case.Actions - id={workflow.id} - fullName={selectedEntity.name} - avatarUrl={selectedEntity.avatarUrl} - showResolutionButtons={workflow.workflowDefinition.config?.workflowLevelResolution} + id={workflow?.id} + fullName={selectedEntity?.name} + avatarUrl={selectedEntity?.avatarUrl} + showResolutionButtons={workflow?.workflowDefinition?.config?.workflowLevelResolution} /> <Case.Content key={selectedEntity?.id}> {Array.isArray(tasks) && diff --git a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx index 5d97e35b10..f6f3927e24 100644 --- a/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx +++ b/apps/backoffice-v2/src/pages/Entity/hooks/useEntity/useEntity.tsx @@ -23,13 +23,13 @@ export const useEntity = () => { const { data: workflow, isLoading } = useWorkflowQuery({ workflowId: entityId, filterId }); const docsData = useStorageFilesQuery( - workflow.context.documents?.flatMap(({ pages }) => + workflow?.context?.documents?.flatMap(({ pages }) => pages?.map(({ ballerineFileId }) => ballerineFileId), ), ); const results = []; - workflow.context.documents?.forEach((document, docIndex) => { + workflow?.context?.documents?.forEach((document, docIndex) => { document?.pages.forEach((page, pageIndex) => { if (!results[docIndex]) { results[docIndex] = []; @@ -37,7 +37,7 @@ export const useEntity = () => { results[docIndex][pageIndex] = docsData.shift().data; }); }); - const selectedEntity = workflow.entity; + const selectedEntity = workflow?.entity; const issuerCountryCode = extractCountryCodeFromWorkflow(workflow); const documentsSchemas = !!issuerCountryCode && getDocumentsByCountry(issuerCountryCode); const octetToFileType = (base64: string, fileType: string) => diff --git a/apps/backoffice-v2/src/pages/Root/Root.error.tsx b/apps/backoffice-v2/src/pages/Root/Root.error.tsx index 67210ecd6b..a3a48a3134 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.error.tsx +++ b/apps/backoffice-v2/src/pages/Root/Root.error.tsx @@ -3,7 +3,6 @@ import { Link } from 'react-router-dom'; import { FunctionComponent } from 'react'; import { Providers } from '../../common/components/templates/Providers/Providers'; import { Toaster } from 'react-hot-toast'; -import { Layout } from '../../common/components/templates/Layout/Layout'; import { ErrorAlert } from '../../common/components/atoms/ErrorAlert/ErrorAlert'; export const RootError: FunctionComponent = () => { @@ -16,24 +15,22 @@ export const RootError: FunctionComponent = () => { duration: 1000 * 3, }} /> - <Layout> - <section - className={`col-span-full mx-auto mt-32 grid h-full w-full max-w-4xl grid-cols-2 flex-col`} - > - <div> - <ErrorAlert> - Something went wrong. - <div className={`flex justify-end`}> - <Button asChild className={`border-destructive`} variant={`outline`} size={`sm`}> - <Link to={`/en`} replace> - Try again - </Link> - </Button> - </div> - </ErrorAlert> - </div> - </section> - </Layout> + <section + className={`col-span-full mx-auto mt-32 grid h-full w-full max-w-4xl grid-cols-2 flex-col`} + > + <div> + <ErrorAlert> + Something went wrong. + <div className={`flex justify-end`}> + <Button asChild className={`border-destructive`} variant={`outline`} size={`sm`}> + <Link to={`/en`} replace> + Try again + </Link> + </Button> + </div> + </ErrorAlert> + </div> + </section> </Providers> ); }; diff --git a/apps/backoffice-v2/src/pages/Root/Root.loader.ts b/apps/backoffice-v2/src/pages/Root/Root.loader.ts index b487419236..31a470f1e4 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.loader.ts +++ b/apps/backoffice-v2/src/pages/Root/Root.loader.ts @@ -5,5 +5,5 @@ export const rootLoader: LoaderFunction = ({ request }) => { if (url.pathname.startsWith('/en')) return null; - return redirect(`/en${url.pathname === '/' ? '' : url.pathname}`); + return redirect(`/en${url.pathname === '/' ? '' : url.pathname}${url.search}`); }; diff --git a/apps/backoffice-v2/src/pages/Root/Root.page.tsx b/apps/backoffice-v2/src/pages/Root/Root.page.tsx index e9b6935f76..726ff32277 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.page.tsx +++ b/apps/backoffice-v2/src/pages/Root/Root.page.tsx @@ -1,7 +1,6 @@ import { Outlet } from 'react-router-dom'; import { Providers } from '../../common/components/templates/Providers/Providers'; import { Toaster } from 'react-hot-toast'; -import { Layout } from '../../common/components/templates/Layout/Layout'; import { FunctionComponent, lazy, Suspense } from 'react'; const ReactQueryDevtools = lazy(() => @@ -22,9 +21,7 @@ export const Root: FunctionComponent = () => { duration: 1000 * 3, }} /> - <Layout> - <Outlet /> - </Layout> + <Outlet /> <Suspense> <ReactQueryDevtools /> </Suspense> diff --git a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx index 9ccfcd7645..24762afb36 100644 --- a/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx +++ b/apps/backoffice-v2/src/pages/SignIn/SignIn.page.tsx @@ -20,6 +20,7 @@ import { FormControl } from '../../common/components/organisms/Form/Form.Control import { FormMessage } from '../../common/components/organisms/Form/Form.Message'; import { env } from '../../common/env/env'; import { ErrorAlert } from '../../common/components/atoms/ErrorAlert/ErrorAlert'; +import { FullScreenLoader } from '../../common/components/molecules/FullScreenLoader/FullScreenLoader'; export const SignIn: FunctionComponent = () => { const SignInSchema = z.object({ @@ -54,12 +55,12 @@ export const SignIn: FunctionComponent = () => { }); // Handles a flash of content on sign in - if (isAuthenticated) return null; + if (isAuthenticated) return <FullScreenLoader />; return ( <section className={`flex h-full flex-col items-center justify-center`}> <div className={`mb-16`}> - {!!env.VITE_IMAGE_LOGO_URL ? ( + {env.VITE_IMAGE_LOGO_URL ? ( <img className={`w-40`} src={env.VITE_IMAGE_LOGO_URL} /> ) : ( <BallerineLogo /> From f15a5d79fbca94f2bf0183462f5d0577a088f657 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Mon, 17 Jul 2023 09:50:59 +0300 Subject: [PATCH 108/123] publish ui package (#692) --- packages/ui/CHANGELOG.md | 7 +++++++ packages/ui/package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 packages/ui/CHANGELOG.md diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md new file mode 100644 index 0000000000..9fdaad8f4c --- /dev/null +++ b/packages/ui/CHANGELOG.md @@ -0,0 +1,7 @@ +# @ballerine/ui + +## 0.0.2 + +### Patch Changes + +- First release diff --git a/packages/ui/package.json b/packages/ui/package.json index ab4f2d3d8e..12c18ef25e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/ui", "private": false, - "version": "0.0.1", + "version": "0.0.2", "type": "module", "main": "lib/index.js", "types": "lib/index.d.ts", From 2a3ce3fe457fc98f8f5edf7a7cb2ba165ff132ad Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Mon, 17 Jul 2023 10:36:30 +0300 Subject: [PATCH 109/123] fix(*): renamed lib to dist (#693) --- packages/ui/.gitignore | 2 +- packages/ui/package.json | 12 +- packages/ui/vite.config.ts | 4 +- pnpm-lock.yaml | 3079 +++++++++++++++++------------------- 4 files changed, 1465 insertions(+), 1632 deletions(-) diff --git a/packages/ui/.gitignore b/packages/ui/.gitignore index ca206d44cd..6b959615a8 100644 --- a/packages/ui/.gitignore +++ b/packages/ui/.gitignore @@ -22,4 +22,4 @@ dist-ssr *.njsproj *.sln *.sw? -lib +dist diff --git a/packages/ui/package.json b/packages/ui/package.json index 12c18ef25e..610d6d6f2a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -3,15 +3,15 @@ "private": false, "version": "0.0.2", "type": "module", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "exports": { ".": { - "import": "./lib/index.js", - "types": "./lib/index.d.ts" + "import": "./dist/index.js", + "types": "./dist/index.d.ts" }, - "./components/*": "./lib/components/*", - "./lib/style.css": "./lib/style.css" + "./components/*": "./dist/components/*", + "./dist/style.css": "./dist/style.css" }, "scripts": { "dev": "vite build --watch", diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts index 7e412c93f2..c77a8af09e 100644 --- a/packages/ui/vite.config.ts +++ b/packages/ui/vite.config.ts @@ -40,10 +40,10 @@ export default defineConfig({ }, }, test: { - exclude: ['node_modules', 'lib'], + exclude: ['node_modules', 'dist'], }, build: { - outDir: 'lib', + outDir: 'dist', lib: { entry: { ...entries, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 817430fbfb..8a9239e7a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8 +1,4 @@ -lockfileVersion: '6.1' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false +lockfileVersion: '6.0' importers: @@ -273,7 +269,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -829,7 +825,7 @@ importers: version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.1 - version: 1.0.2(@types/react@18.0.37)(react@18.2.0) + version: 1.0.1(react@18.2.0) '@tanstack/react-table': specifier: ^8.9.2 version: 8.9.2(react-dom@18.2.0)(react@18.2.0) @@ -853,7 +849,7 @@ importers: version: 1.21.3(@types/react@18.0.37)(react-dom@18.2.0)(react@18.2.0) tailwind-merge: specifier: ^1.10.0 - version: 1.13.2 + version: 1.10.0 devDependencies: '@storybook/addon-essentials': specifier: ^7.0.26 @@ -872,13 +868,13 @@ importers: version: 7.0.26(react-dom@18.2.0)(react@18.2.0) '@storybook/builder-vite': specifier: ^7.0.26 - version: 7.0.26(typescript@4.9.5)(vite@4.4.2) + version: 7.0.26(typescript@4.9.5)(vite@4.4.0) '@storybook/react': specifier: ^7.0.26 version: 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) '@storybook/react-vite': specifier: ^7.0.26 - version: 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.2) + version: 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.0) '@storybook/testing-library': specifier: ^0.0.14-next.2 version: 0.0.14-next.2 @@ -905,7 +901,7 @@ importers: version: 5.61.0(eslint@8.44.0)(typescript@4.9.5) '@vitejs/plugin-react': specifier: ^4.0.1 - version: 4.0.2(vite@4.4.2) + version: 4.0.1(vite@4.4.0) autoprefixer: specifier: ^10.4.14 version: 10.4.14(postcss@8.4.24) @@ -917,7 +913,7 @@ importers: version: 4.6.0(eslint@8.44.0) eslint-plugin-react-refresh: specifier: ^0.4.1 - version: 0.4.2(eslint@8.44.0) + version: 0.4.1(eslint@8.44.0) eslint-plugin-storybook: specifier: ^0.6.6 version: 0.6.11(eslint@8.44.0)(typescript@4.9.5) @@ -947,10 +943,10 @@ importers: version: 4.9.5 vite: specifier: ^4.4.0 - version: 4.4.2(@types/node@20.4.1)(less@4.1.3) + version: 4.4.0(@types/node@20.4.1)(less@4.1.3) vite-plugin-dts: specifier: ^1.6.6 - version: 1.7.3(@types/node@20.4.1)(vite@4.4.2) + version: 1.7.3(@types/node@20.4.1)(vite@4.4.0) vitest: specifier: ^0.33.0 version: 0.33.0(less@4.1.3) @@ -1820,40 +1816,40 @@ importers: dependencies: '@algolia/client-search': specifier: ^4.13.1 - version: 4.16.0 + version: 4.13.1 '@astrojs/mdx': specifier: 0.19.7 - version: 0.19.7(astro@2.6.6) + version: 0.19.7(astro@2.7.2) '@astrojs/react': specifier: ^2.2.1 - version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) + version: 2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0) '@astrojs/solid-js': specifier: ^1.2.3 - version: 1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5) + version: 1.2.3(@babel/core@7.22.5)(solid-js@1.4.3)(vite@3.2.5) '@astrojs/tailwind': specifier: ^4.0.0 - version: 4.0.0(astro@2.6.6)(tailwindcss@3.3.2)(ts-node@10.9.1) + version: 4.0.0(astro@2.7.2)(tailwindcss@3.3.2)(ts-node@10.9.1) '@ballerine/common': specifier: 0.5.6 version: link:../../packages/common '@docsearch/css': specifier: ^3.1.0 - version: 3.3.3 + version: 3.1.0 '@docsearch/react': specifier: ^3.1.0 - version: 3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0) + version: 3.1.0(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0) '@types/node': specifier: ^18.0.0 version: 18.15.10 '@types/react': specifier: ^17.0.45 - version: 17.0.53 + version: 17.0.45 '@types/react-dom': specifier: ^18.0.0 version: 18.0.11 astro: specifier: ^2.6.6 - version: 2.6.6(@types/node@18.15.10) + version: 2.7.2(@types/node@18.15.10) react: specifier: ^18.2.0 version: 18.2.0 @@ -1865,7 +1861,7 @@ importers: version: 0.14.2 solid-js: specifier: ^1.4.3 - version: 1.6.15 + version: 1.4.3 vite: specifier: ~3.2.5 version: 3.2.5(@types/node@18.15.10) @@ -1878,25 +1874,25 @@ importers: version: 1.0.2 eslint: specifier: ^8.28.0 - version: 8.36.0 + version: 8.44.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.8.0(eslint@8.36.0) + version: 8.8.0(eslint@8.44.0) eslint-config-standard-with-typescript: specifier: ^23.0.0 - version: 23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5) + version: 23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.44.0)(typescript@4.9.5) eslint-plugin-astro: specifier: ^0.21.0 - version: 0.21.1(eslint@8.36.0) + version: 0.21.0(eslint@8.44.0) eslint-plugin-unused-imports: specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.36.0) + version: 2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.44.0) html-escaper: specifier: ^3.0.3 version: 3.0.3 prettier: specifier: ^2.8.0 - version: 2.8.7 + version: 2.8.8 prettier-plugin-astro: specifier: ^0.10.0 version: 0.10.0 @@ -1912,115 +1908,139 @@ packages: resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==} dev: true - /@algolia/autocomplete-core@1.7.4: - resolution: {integrity: sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==} + /@algolia/autocomplete-core@1.6.3: + resolution: {integrity: sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA==} dependencies: - '@algolia/autocomplete-shared': 1.7.4 + '@algolia/autocomplete-shared': 1.6.3 dev: false - /@algolia/autocomplete-preset-algolia@1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0): - resolution: {integrity: sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' + /@algolia/autocomplete-shared@1.6.3: + resolution: {integrity: sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg==} + dev: false + + /@algolia/cache-browser-local-storage@4.18.0: + resolution: {integrity: sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==} dependencies: - '@algolia/autocomplete-shared': 1.7.4 - '@algolia/client-search': 4.16.0 - algoliasearch: 4.16.0 + '@algolia/cache-common': 4.18.0 dev: false - /@algolia/autocomplete-shared@1.7.4: - resolution: {integrity: sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==} + /@algolia/cache-common@4.13.1: + resolution: {integrity: sha512-7Vaf6IM4L0Jkl3sYXbwK+2beQOgVJ0mKFbz/4qSxKd1iy2Sp77uTAazcX+Dlexekg1fqGUOSO7HS4Sx47ZJmjA==} dev: false - /@algolia/cache-browser-local-storage@4.16.0: - resolution: {integrity: sha512-jVrk0YB3tjOhD5/lhBtYCVCeLjZmVpf2kdi4puApofytf/R0scjWz0GdozlW4HhU+Prxmt/c9ge4QFjtv5OAzQ==} + /@algolia/cache-common@4.18.0: + resolution: {integrity: sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==} + dev: false + + /@algolia/cache-in-memory@4.18.0: + resolution: {integrity: sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==} dependencies: - '@algolia/cache-common': 4.16.0 + '@algolia/cache-common': 4.18.0 dev: false - /@algolia/cache-common@4.16.0: - resolution: {integrity: sha512-4iHjkSYQYw46pITrNQgXXhvUmcekI8INz1m+SzmqLX8jexSSy4Ky4zfGhZzhhhLHXUP3+x/PK/c0qPjxEvRwKQ==} + /@algolia/client-account@4.18.0: + resolution: {integrity: sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==} + dependencies: + '@algolia/client-common': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/transporter': 4.18.0 dev: false - /@algolia/cache-in-memory@4.16.0: - resolution: {integrity: sha512-p7RYykvA6Ip6QENxrh99nOD77otVh1sJRivcgcVpnjoZb5sIN3t33eUY1DpB9QSBizcrW+qk19rNkdnZ43a+PQ==} + /@algolia/client-analytics@4.18.0: + resolution: {integrity: sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==} dependencies: - '@algolia/cache-common': 4.16.0 + '@algolia/client-common': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 dev: false - /@algolia/client-account@4.16.0: - resolution: {integrity: sha512-eydcfpdIyuWoKgUSz5iZ/L0wE/Wl7958kACkvTHLDNXvK/b8Z1zypoJavh6/km1ZNQmFpeYS2jrmq0kUSFn02w==} + /@algolia/client-common@4.13.1: + resolution: {integrity: sha512-LcDoUE0Zz3YwfXJL6lJ2OMY2soClbjrrAKB6auYVMNJcoKZZ2cbhQoFR24AYoxnGUYBER/8B+9sTBj5bj/Gqbg==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/requester-common': 4.13.1 + '@algolia/transporter': 4.13.1 dev: false - /@algolia/client-analytics@4.16.0: - resolution: {integrity: sha512-cONWXH3BfilgdlCofUm492bJRWtpBLVW/hsUlfoFtiX1u05xoBP7qeiDwh9RR+4pSLHLodYkHAf5U4honQ55Qg==} + /@algolia/client-common@4.18.0: + resolution: {integrity: sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 dev: false - /@algolia/client-common@4.16.0: - resolution: {integrity: sha512-QVdR4019ukBH6f5lFr27W60trRxQF1SfS1qo0IP6gjsKhXhUVJuHxOCA6ArF87jrNkeuHEoRoDU+GlvaecNo8g==} + /@algolia/client-personalization@4.18.0: + resolution: {integrity: sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==} dependencies: - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 dev: false - /@algolia/client-personalization@4.16.0: - resolution: {integrity: sha512-irtLafssDGPuhYqIwxqOxiWlVYvrsBD+EMA1P9VJtkKi3vSNBxiWeQ0f0Tn53cUNdSRNEssfoEH84JL97SV2SQ==} + /@algolia/client-search@4.13.1: + resolution: {integrity: sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.13.1 + '@algolia/requester-common': 4.13.1 + '@algolia/transporter': 4.13.1 dev: false - /@algolia/client-search@4.16.0: - resolution: {integrity: sha512-xsfrAE1jO/JDh1wFrRz+alVyW+aA6qnkzmbWWWZWEgVF3EaFqzIf9r1l/aDtDdBtNTNhX9H3Lg31+BRtd5izQA==} + /@algolia/client-search@4.18.0: + resolution: {integrity: sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==} dependencies: - '@algolia/client-common': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/client-common': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/transporter': 4.18.0 + dev: false + + /@algolia/logger-common@4.13.1: + resolution: {integrity: sha512-L6slbL/OyZaAXNtS/1A8SAbOJeEXD5JcZeDCPYDqSTYScfHu+2ePRTDMgUTY4gQ7HsYZ39N1LujOd8WBTmM2Aw==} dev: false - /@algolia/logger-common@4.16.0: - resolution: {integrity: sha512-U9H8uCzSDuePJmbnjjTX21aPDRU6x74Tdq3dJmdYu2+pISx02UeBJm4kSgc9RW5jcR5j35G9gnjHY9Q3ngWbyQ==} + /@algolia/logger-common@4.18.0: + resolution: {integrity: sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==} dev: false - /@algolia/logger-console@4.16.0: - resolution: {integrity: sha512-+qymusiM+lPZKrkf0tDjCQA158eEJO2IU+Nr/sJ9TFyI/xkFPjNPzw/Qbc8Iy/xcOXGlc6eMgmyjtVQqAWq6UA==} + /@algolia/logger-console@4.18.0: + resolution: {integrity: sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==} dependencies: - '@algolia/logger-common': 4.16.0 + '@algolia/logger-common': 4.18.0 dev: false - /@algolia/requester-browser-xhr@4.16.0: - resolution: {integrity: sha512-gK+kvs6LHl/PaOJfDuwjkopNbG1djzFLsVBklGBsSU6h6VjFkxIpo6Qq80IK14p9cplYZfhfaL12va6Q9p3KVQ==} + /@algolia/requester-browser-xhr@4.18.0: + resolution: {integrity: sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==} dependencies: - '@algolia/requester-common': 4.16.0 + '@algolia/requester-common': 4.18.0 + dev: false + + /@algolia/requester-common@4.13.1: + resolution: {integrity: sha512-eGVf0ID84apfFEuXsaoSgIxbU3oFsIbz4XiotU3VS8qGCJAaLVUC5BUJEkiFENZIhon7hIB4d0RI13HY4RSA+w==} + dev: false + + /@algolia/requester-common@4.18.0: + resolution: {integrity: sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==} dev: false - /@algolia/requester-common@4.16.0: - resolution: {integrity: sha512-3Zmcs/iMubcm4zqZ3vZG6Zum8t+hMWxGMzo0/uY2BD8o9q5vMxIYI0c4ocdgQjkXcix189WtZNkgjSOBzSbkdw==} + /@algolia/requester-node-http@4.18.0: + resolution: {integrity: sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==} + dependencies: + '@algolia/requester-common': 4.18.0 dev: false - /@algolia/requester-node-http@4.16.0: - resolution: {integrity: sha512-L8JxM2VwZzh8LJ1Zb8TFS6G3icYsCKZsdWW+ahcEs1rGWmyk9SybsOe1MLnjonGBaqPWJkn9NjS7mRdjEmBtKA==} + /@algolia/transporter@4.13.1: + resolution: {integrity: sha512-pICnNQN7TtrcYJqqPEXByV8rJ8ZRU2hCiIKLTLRyNpghtQG3VAFk6fVtdzlNfdUGZcehSKGarPIZEHlQXnKjgw==} dependencies: - '@algolia/requester-common': 4.16.0 + '@algolia/cache-common': 4.13.1 + '@algolia/logger-common': 4.13.1 + '@algolia/requester-common': 4.13.1 dev: false - /@algolia/transporter@4.16.0: - resolution: {integrity: sha512-H9BVB2EAjT65w7XGBNf5drpsW39x2aSZ942j4boSAAJPPlLmjtj5IpAP7UAtsV8g9Beslonh0bLa1XGmE/P0BA==} + /@algolia/transporter@4.18.0: + resolution: {integrity: sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==} dependencies: - '@algolia/cache-common': 4.16.0 - '@algolia/logger-common': 4.16.0 - '@algolia/requester-common': 4.16.0 + '@algolia/cache-common': 4.18.0 + '@algolia/logger-common': 4.18.0 + '@algolia/requester-common': 4.18.0 dev: false /@alloc/quick-lru@5.2.0: @@ -2032,7 +2052,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 /@angular-devkit/core@13.3.11: resolution: {integrity: sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==} @@ -2155,8 +2175,8 @@ packages: /@astrojs/compiler@1.5.1: resolution: {integrity: sha512-iIGKu/uzB8sJ5VveQf0eHrVPPFEcrvSlp4qShYMOuY2aMmK2RVXQlX9dUjtmBQ+NAokfIOb7fwCutvH+p13l+g==} - /@astrojs/internal-helpers@0.1.0: - resolution: {integrity: sha512-OSwvoFkTqVowiyP+codQeQZWoq/HOwY32x17NxDglWoCx2sdyXzplDZoVV4/3odmSEY6/A+48WMl5qkjmP1CXw==} + /@astrojs/internal-helpers@0.1.1: + resolution: {integrity: sha512-+LySbvFbjv2nO2m/e78suleQOGEru4Cnx73VsZbrQgB2u7A4ddsQg3P2T0zC0e10jgcT+c6nNlKeLpa6nRhQIg==} dev: false /@astrojs/language-server@1.0.8: @@ -2164,7 +2184,7 @@ packages: hasBin: true dependencies: '@astrojs/compiler': 1.5.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 '@vscode/emmet-helper': 2.8.6 events: 3.3.0 prettier: 2.8.8 @@ -2178,13 +2198,13 @@ packages: vscode-uri: 3.0.7 dev: false - /@astrojs/markdown-remark@2.2.1(astro@2.6.6): + /@astrojs/markdown-remark@2.2.1(astro@2.7.2): resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==} peerDependencies: astro: ^2.5.0 dependencies: '@astrojs/prism': 2.1.2 - astro: 2.6.6(@types/node@18.15.10) + astro: 2.7.2(@types/node@18.15.10) github-slugger: 1.5.0 import-meta-resolve: 2.2.2 rehype-raw: 6.1.1 @@ -2193,7 +2213,7 @@ packages: remark-parse: 10.0.1 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 - shiki: 0.14.2 + shiki: 0.14.3 unified: 10.1.2 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -2201,15 +2221,15 @@ packages: - supports-color dev: false - /@astrojs/mdx@0.19.7(astro@2.6.6): + /@astrojs/mdx@0.19.7(astro@2.7.2): resolution: {integrity: sha512-mfEbBD7oi8yBHhcJucEjnrquREkJ3os+jioURP8BR2B8tOV2rV2j8trvmLUgfS+P/+HevGObxCTjcRYxn6T7eg==} engines: {node: '>=16.12.0'} dependencies: - '@astrojs/markdown-remark': 2.2.1(astro@2.6.6) + '@astrojs/markdown-remark': 2.2.1(astro@2.7.2) '@astrojs/prism': 2.1.2 '@mdx-js/mdx': 2.3.0 - acorn: 8.8.2 - es-module-lexer: 1.2.0 + acorn: 8.9.0 + es-module-lexer: 1.3.0 estree-util-visit: 1.2.1 github-slugger: 1.5.0 gray-matter: 4.0.3 @@ -2219,7 +2239,7 @@ packages: remark-frontmatter: 4.0.1 remark-gfm: 3.0.1 remark-smartypants: 2.0.0 - shiki: 0.14.2 + shiki: 0.14.3 source-map: 0.7.4 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -2235,7 +2255,7 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): + /@astrojs/react@2.2.1(@types/react-dom@18.0.11)(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-nq5Zr8iWdwjSp5fh1NReaCplwsnL4w5PXAY5XWu1jE/frxEfF/ycGHrrhwWW0uJHX9G+kUtmQLR0GBhlR4FmAw==} engines: {node: '>=16.12.0'} peerDependencies: @@ -2245,8 +2265,8 @@ packages: react-dom: ^17.0.2 || ^18.0.0 dependencies: '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@types/react': 17.0.53 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@types/react': 17.0.45 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2254,27 +2274,27 @@ packages: - supports-color dev: false - /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.6.15)(vite@3.2.5): + /@astrojs/solid-js@1.2.3(@babel/core@7.22.5)(solid-js@1.4.3)(vite@3.2.5): resolution: {integrity: sha512-YyWQVcIeUMGKTnK3myXmBrG6dfYL5qiQNn8fv50jV0nPgahLeSUTIVxtt5WtqmbFr5kGTwDyk63TZoUvCUWJXA==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: solid-js: ^1.4.3 dependencies: - babel-preset-solid: 1.6.13(@babel/core@7.22.5) - solid-js: 1.6.15 + babel-preset-solid: 1.7.7(@babel/core@7.22.5) + solid-js: 1.4.3 vitefu: 0.2.4(vite@3.2.5) transitivePeerDependencies: - '@babel/core' - vite dev: false - /@astrojs/tailwind@4.0.0(astro@2.6.6)(tailwindcss@3.3.2)(ts-node@10.9.1): + /@astrojs/tailwind@4.0.0(astro@2.7.2)(tailwindcss@3.3.2)(ts-node@10.9.1): resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} peerDependencies: astro: ^2.6.5 tailwindcss: ^3.0.24 dependencies: - astro: 2.6.6(@types/node@18.15.10) + astro: 2.7.2(@types/node@18.15.10) autoprefixer: 10.4.14(postcss@8.4.24) postcss: 8.4.24 postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) @@ -3210,7 +3230,7 @@ packages: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.18.6 dev: true /@babel/code-frame@7.22.5: @@ -3224,8 +3244,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/compat-data@7.22.6: - resolution: {integrity: sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==} + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} engines: {node: '>=6.9.0'} /@babel/core@7.17.9: @@ -3233,15 +3253,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -3281,7 +3301,7 @@ packages: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-module-transforms': 7.22.5 '@babel/helpers': 7.22.5 '@babel/parser': 7.22.5 @@ -3302,8 +3322,9 @@ packages: dependencies: '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 + dev: true /@babel/generator@7.22.5: resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} @@ -3311,16 +3332,9 @@ packages: dependencies: '@babel/types': 7.22.5 '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -3344,7 +3358,7 @@ packages: '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.9 + browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true @@ -3358,51 +3372,65 @@ packages: '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.9 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.6(@babel/core@7.17.9): - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.17.9): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.17.9 '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 + browserslist: 4.21.5 lru-cache: 5.1.1 + semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.6(@babel/core@7.21.3): - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 + browserslist: 4.21.5 lru-cache: 5.1.1 + semver: 6.3.0 dev: true - /@babel/helper-compilation-targets@7.22.6(@babel/core@7.22.5): - resolution: {integrity: sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 '@babel/helper-validator-option': 7.22.5 - '@nicolo-ribaudo/semver-v6': 6.3.3 - browserslist: 4.21.9 + browserslist: 4.21.5 lru-cache: 5.1.1 + semver: 6.3.0 /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.17.9): resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} @@ -3414,11 +3442,11 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3433,11 +3461,11 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3452,11 +3480,11 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -3500,7 +3528,7 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -3516,7 +3544,7 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -3532,7 +3560,7 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -3542,6 +3570,11 @@ packages: - supports-color dev: true + /@babel/helper-environment-visitor@7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} @@ -3560,14 +3593,21 @@ packages: '@babel/template': 7.22.5 '@babel/types': 7.22.5 + /@babel/helper-hoist-variables@7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + /@babel/helper-member-expression-to-functions@7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 @@ -3589,13 +3629,13 @@ packages: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color @@ -3608,7 +3648,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 @@ -3623,13 +3663,6 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} @@ -3689,22 +3722,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 @@ -3732,23 +3751,31 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-split-export-declaration@7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-split-export-declaration@7.22.5: + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + /@babel/helper-string-parser@7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} @@ -3778,8 +3805,8 @@ packages: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color @@ -3795,6 +3822,15 @@ packages: transitivePeerDependencies: - supports-color + /@babel/highlight@7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -4016,7 +4052,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.9) dev: true @@ -4027,7 +4063,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) dev: true @@ -4038,7 +4074,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) dev: true @@ -4049,7 +4085,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.9) dev: true @@ -4060,7 +4096,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3) dev: true @@ -4071,7 +4107,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true @@ -4082,7 +4118,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.9) dev: true @@ -4093,7 +4129,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3) dev: true @@ -4104,7 +4140,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) dev: true @@ -4115,7 +4151,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.9) dev: true @@ -4126,7 +4162,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3) dev: true @@ -4137,7 +4173,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) dev: true @@ -4148,7 +4184,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.9) dev: true @@ -4159,7 +4195,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) dev: true @@ -4170,7 +4206,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) dev: true @@ -4181,7 +4217,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.9) dev: true @@ -4192,7 +4228,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3) dev: true @@ -4203,7 +4239,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) dev: true @@ -4215,8 +4251,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.9) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.17.9) dev: true @@ -4229,8 +4265,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) dev: true @@ -4243,8 +4279,8 @@ packages: dependencies: '@babel/compat-data': 7.21.0 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) dev: true @@ -4256,7 +4292,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.9) dev: true @@ -4267,7 +4303,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3) dev: true @@ -4278,7 +4314,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) dev: true @@ -4326,7 +4362,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -4339,7 +4375,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -4352,7 +4388,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -4364,7 +4400,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.9) @@ -4379,7 +4415,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) @@ -4394,7 +4430,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) @@ -4410,7 +4446,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3): @@ -4421,7 +4457,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): @@ -4432,7 +4468,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.9): @@ -4441,7 +4477,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3): @@ -4450,7 +4486,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): @@ -4459,7 +4495,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): @@ -4477,7 +4513,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3): @@ -4486,7 +4522,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): @@ -4495,7 +4531,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.9): @@ -4505,7 +4541,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3): @@ -4515,7 +4551,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): @@ -4525,7 +4561,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.9): @@ -4534,7 +4570,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3): @@ -4543,7 +4579,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): @@ -4552,7 +4588,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.9): @@ -4561,7 +4597,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3): @@ -4570,7 +4606,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): @@ -4579,7 +4615,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.22.5): @@ -4636,7 +4672,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3): @@ -4645,7 +4681,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): @@ -4654,7 +4690,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): @@ -4672,7 +4708,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3): @@ -4681,7 +4717,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): @@ -4690,7 +4726,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.9): @@ -4699,7 +4735,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3): @@ -4708,7 +4744,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): @@ -4717,7 +4753,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.9): @@ -4726,7 +4762,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3): @@ -4735,7 +4771,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): @@ -4744,7 +4780,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.9): @@ -4753,7 +4789,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3): @@ -4762,7 +4798,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): @@ -4771,7 +4807,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.9): @@ -4780,7 +4816,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3): @@ -4789,7 +4825,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): @@ -4798,7 +4834,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.9): @@ -4807,7 +4843,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3): @@ -4816,7 +4852,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): @@ -4825,7 +4861,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.9): @@ -4835,7 +4871,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3): @@ -4845,7 +4881,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): @@ -4855,7 +4891,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.9): @@ -4865,7 +4901,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3): @@ -4875,7 +4911,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): @@ -4885,11 +4921,11 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.17.9): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.17.9): + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4898,8 +4934,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.22.5): + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4915,26 +4951,36 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3): + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -4945,7 +4991,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.17.9) transitivePeerDependencies: @@ -4959,7 +5005,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3) transitivePeerDependencies: @@ -4973,7 +5019,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.5) transitivePeerDependencies: @@ -4987,7 +5033,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3): @@ -4997,7 +5043,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.5): @@ -5007,7 +5053,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.17.9): @@ -5017,7 +5063,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3): @@ -5027,7 +5073,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.5): @@ -5037,7 +5083,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-classes@7.21.0(@babel/core@7.17.9): @@ -5047,14 +5093,14 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5067,14 +5113,14 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5087,14 +5133,14 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5107,28 +5153,39 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3): + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 + dev: true + + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 dev: true @@ -5140,7 +5197,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3): @@ -5150,7 +5207,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.5): @@ -5160,7 +5217,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.17.9): @@ -5203,7 +5260,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3): @@ -5213,7 +5270,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.5): @@ -5223,7 +5280,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.17.9): @@ -5277,26 +5334,36 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3): + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5307,7 +5374,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.17.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5319,7 +5386,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5331,7 +5398,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -5343,7 +5410,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3): @@ -5353,7 +5420,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.5): @@ -5363,7 +5430,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.17.9): @@ -5373,7 +5440,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3): @@ -5383,7 +5450,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.5): @@ -5393,7 +5460,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.17.9): @@ -5403,8 +5470,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5416,8 +5483,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5429,8 +5496,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5442,34 +5509,48 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3): + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.22.5): + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 @@ -5484,10 +5565,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true @@ -5499,9 +5580,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color @@ -5514,9 +5595,9 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color @@ -5529,8 +5610,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5542,8 +5623,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5555,8 +5636,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true @@ -5601,7 +5682,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3): @@ -5611,7 +5692,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.22.5): @@ -5621,7 +5702,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.17.9): @@ -5670,7 +5751,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3): @@ -5680,7 +5761,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.22.5): @@ -5690,7 +5771,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.17.9): @@ -5700,7 +5781,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3): @@ -5710,7 +5791,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.5): @@ -5720,7 +5801,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.22.5): @@ -5730,7 +5811,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.5): @@ -5750,7 +5831,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.5): @@ -5763,8 +5844,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx@7.21.0(@babel/core@7.22.5): - resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5776,49 +5857,46 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.22.5 - /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.5 + '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/types': 7.22.5 + regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.17.9): + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3): resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.22.5): + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.3 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.3): resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true @@ -5830,7 +5908,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3): @@ -5840,7 +5918,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.5): @@ -5850,7 +5928,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.17.9): @@ -5860,7 +5938,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3): @@ -5870,7 +5948,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.22.5): @@ -5880,7 +5958,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-spread@7.20.7(@babel/core@7.17.9): @@ -5890,7 +5968,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5901,7 +5979,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5912,7 +5990,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true @@ -5923,7 +6001,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3): @@ -5933,7 +6011,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.5): @@ -5943,7 +6021,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.17.9): @@ -5953,7 +6031,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3): @@ -5963,7 +6041,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.5): @@ -5973,7 +6051,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.17.9): @@ -5983,7 +6061,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3): @@ -5993,7 +6071,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.5): @@ -6003,7 +6081,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.17.9): @@ -6013,10 +6091,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.17.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.17.9) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.17.9) transitivePeerDependencies: - supports-color dev: true @@ -6028,10 +6106,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true @@ -6043,26 +6121,36 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.3): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3): + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.22.5): + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.3): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -6074,7 +6162,7 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3): @@ -6085,7 +6173,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.5): @@ -6096,7 +6184,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/preset-env@7.16.11(@babel/core@7.17.9): @@ -6105,11 +6193,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.17.9) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.17.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.17.9) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.17.9) '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.17.9) @@ -6174,7 +6262,7 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.17.9) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.17.9) '@babel/preset-modules': 0.1.5(@babel/core@7.17.9) - '@babel/types': 7.21.3 + '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.17.9) babel-plugin-polyfill-corejs3: 0.5.3(@babel/core@7.17.9) babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.9) @@ -6190,9 +6278,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) @@ -6227,22 +6315,22 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3) '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) @@ -6250,21 +6338,21 @@ packages: '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3) '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3) '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) '@babel/preset-modules': 0.1.5(@babel/core@7.21.3) '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) - core-js-compat: 3.31.1 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6276,9 +6364,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) @@ -6313,22 +6401,22 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.5) '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.22.5) '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.5) '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.5) @@ -6336,21 +6424,21 @@ packages: '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.22.5) '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.5) '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.5) '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.22.5) '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.5) '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) - core-js-compat: 3.31.1 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6362,9 +6450,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.6 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.3 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.21.3) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3) @@ -6437,94 +6525,7 @@ packages: babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3) - core-js-compat: 3.31.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-env@7.21.5(@babel/core@7.22.5): - resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.6 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.6(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.5) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.22.5) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.22.5) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.22.5) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.5) - '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) - '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) - core-js-compat: 3.31.1 + core-js-compat: 3.29.1 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6548,10 +6549,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.17.9) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.17.9) - '@babel/types': 7.22.5 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true @@ -6561,10 +6562,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.3 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3) - '@babel/types': 7.22.5 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true @@ -6574,10 +6575,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.5) - '@babel/types': 7.22.5 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: true @@ -6588,8 +6589,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.17.9) transitivePeerDependencies: - supports-color @@ -6602,8 +6603,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) transitivePeerDependencies: - supports-color @@ -6637,7 +6638,7 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.18.6 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 dev: true @@ -6659,13 +6660,14 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/traverse@7.22.5: resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} @@ -6676,7 +6678,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -6688,8 +6690,8 @@ packages: resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 /@babel/types@7.22.5: @@ -7123,33 +7125,23 @@ packages: engines: {node: '>=10.0.0'} dev: true - /@docsearch/css@3.3.3: - resolution: {integrity: sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==} + /@docsearch/css@3.1.0: + resolution: {integrity: sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA==} dev: false - /@docsearch/react@3.3.3(@algolia/client-search@4.16.0)(@types/react@17.0.53)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==} + /@docsearch/react@3.1.0(@types/react@17.0.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' react-dom: '>= 16.8.0 < 19.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true dependencies: - '@algolia/autocomplete-core': 1.7.4 - '@algolia/autocomplete-preset-algolia': 1.7.4(@algolia/client-search@4.16.0)(algoliasearch@4.16.0) - '@docsearch/css': 3.3.3 - '@types/react': 17.0.53 - algoliasearch: 4.16.0 + '@algolia/autocomplete-core': 1.6.3 + '@docsearch/css': 3.1.0 + '@types/react': 17.0.45 + algoliasearch: 4.18.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@algolia/client-search' dev: false /@emmetio/abbreviation@2.2.3: @@ -7214,8 +7206,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + /@esbuild/android-arm64@0.18.12: + resolution: {integrity: sha512-BMAlczRqC/LUt2P97E4apTBbkvS9JTJnp2DKFbCwpZ8vBvXVbNdqmvzW/OsdtI/+mGr+apkkpqGM8WecLkPgrA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -7255,8 +7247,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm@0.18.12: + resolution: {integrity: sha512-LIxaNIQfkFZbTLb4+cX7dozHlAbAshhFE5PKdro0l+FnCpx1GDJaQ2WMcqm+ToXKMt8p8Uojk/MFRuGyz3V5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -7288,8 +7280,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + /@esbuild/android-x64@0.18.12: + resolution: {integrity: sha512-zU5MyluNsykf5cOJ0LZZZjgAHbhPJ1cWfdH1ZXVMXxVMhEV0VZiZXQdwBBVvmvbF28EizeK7obG9fs+fpmS0eQ==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -7321,8 +7313,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + /@esbuild/darwin-arm64@0.18.12: + resolution: {integrity: sha512-zUZMep7YONnp6954QOOwEBwFX9svlKd3ov6PkxKd53LGTHsp/gy7vHaPGhhjBmEpqXEXShi6dddjIkmd+NgMsA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -7354,8 +7346,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-x64@0.18.12: + resolution: {integrity: sha512-ohqLPc7i67yunArPj1+/FeeJ7AgwAjHqKZ512ADk3WsE3FHU9l+m5aa7NdxXr0HmN1bjDlUslBjWNbFlD9y12Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -7387,8 +7379,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/freebsd-arm64@0.18.12: + resolution: {integrity: sha512-GIIHtQXqgeOOqdG16a/A9N28GpkvjJnjYMhOnXVbn3EDJcoItdR58v/pGN31CHjyXDc8uCcRnFWmqaJt24AYJg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -7420,8 +7412,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-x64@0.18.12: + resolution: {integrity: sha512-zK0b9a1/0wZY+6FdOS3BpZcPc1kcx2G5yxxfEJtEUzVxI6n/FrC2Phsxj/YblPuBchhBZ/1wwn7AyEBUyNSa6g==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -7453,8 +7445,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + /@esbuild/linux-arm64@0.18.12: + resolution: {integrity: sha512-JKgG8Q/LL/9sw/iHHxQyVMoQYu3rU3+a5Z87DxC+wAu3engz+EmctIrV+FGOgI6gWG1z1+5nDDbXiRMGQZXqiw==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -7486,8 +7478,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + /@esbuild/linux-arm@0.18.12: + resolution: {integrity: sha512-y75OijvrBE/1XRrXq1jtrJfG26eHeMoqLJ2dwQNwviwTuTtHGCojsDO6BJNF8gU+3jTn1KzJEMETytwsFSvc+Q==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -7519,8 +7511,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + /@esbuild/linux-ia32@0.18.12: + resolution: {integrity: sha512-yoRIAqc0B4lDIAAEFEIu9ttTRFV84iuAl0KNCN6MhKLxNPfzwCBvEMgwco2f71GxmpBcTtn7KdErueZaM2rEvw==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -7560,8 +7552,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + /@esbuild/linux-loong64@0.18.12: + resolution: {integrity: sha512-qYgt3dHPVvf/MgbIBpJ4Sup/yb9DAopZ3a2JgMpNKIHUpOdnJ2eHBo/aQdnd8dJ21X/+sS58wxHtA9lEazYtXQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -7593,8 +7585,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-mips64el@0.18.12: + resolution: {integrity: sha512-wHphlMLK4ufNOONqukELfVIbnGQJrHJ/mxZMMrP2jYrPgCRZhOtf0kC4yAXBwnfmULimV1qt5UJJOw4Kh13Yfg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -7626,8 +7618,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-ppc64@0.18.12: + resolution: {integrity: sha512-TeN//1Ft20ZZW41+zDSdOI/Os1bEq5dbvBvYkberB7PHABbRcsteeoNVZFlI0YLpGdlBqohEpjrn06kv8heCJg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -7659,8 +7651,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + /@esbuild/linux-riscv64@0.18.12: + resolution: {integrity: sha512-AgUebVS4DoAblBgiB2ACQ/8l4eGE5aWBb8ZXtkXHiET9mbj7GuWt3OnsIW/zX+XHJt2RYJZctbQ2S/mDjbp0UA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -7692,8 +7684,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-s390x@0.18.12: + resolution: {integrity: sha512-dJ3Rb3Ei2u/ysSXd6pzleGtfDdc2MuzKt8qc6ls8vreP1G3B7HInX3i7gXS4BGeVd24pp0yqyS7bJ5NHaI9ing==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -7725,8 +7717,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + /@esbuild/linux-x64@0.18.12: + resolution: {integrity: sha512-OrNJMGQbPaVyHHcDF8ybNSwu7TDOfX8NGpXCbetwOSP6txOJiWlgQnRymfC9ocR1S0Y5PW0Wb1mV6pUddqmvmQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -7758,8 +7750,8 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + /@esbuild/netbsd-x64@0.18.12: + resolution: {integrity: sha512-55FzVCAiwE9FK8wWeCRuvjazNRJ1QqLCYGZVB6E8RuQuTeStSwotpSW4xoRGwp3a1wUsaVCdYcj5LGCASVJmMg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -7791,8 +7783,8 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/openbsd-x64@0.18.12: + resolution: {integrity: sha512-qnluf8rfb6Y5Lw2tirfK2quZOBbVqmwxut7GPCIJsM8lc4AEUj9L8y0YPdLaPK0TECt4IdyBdBD/KRFKorlK3g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -7824,8 +7816,8 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + /@esbuild/sunos-x64@0.18.12: + resolution: {integrity: sha512-+RkKpVQR7bICjTOPUpkTBTaJ4TFqQBX5Ywyd/HSdDkQGn65VPkTsR/pL4AMvuMWy+wnXgIl4EY6q4mVpJal8Kg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -7857,8 +7849,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/win32-arm64@0.18.12: + resolution: {integrity: sha512-GNHuciv0mFM7ouzsU0+AwY+7eV4Mgo5WnbhfDCQGtpvOtD1vbOiRjPYG6dhmMoFyBjj+pNqQu2X+7DKn0KQ/Gw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -7890,8 +7882,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + /@esbuild/win32-ia32@0.18.12: + resolution: {integrity: sha512-kR8cezhYipbbypGkaqCTWIeu4zID17gamC8YTPXYtcN3E5BhhtTnwKBn9I0PJur/T6UVwIEGYzkffNL0lFvxEw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -7923,8 +7915,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-x64@0.18.12: + resolution: {integrity: sha512-O0UYQVkvfM/jO8a4OwoV0mAKSJw+mjWTAd1MJd/1FCX6uiMdLmMRPK/w6e9OQ0ob2WGxzIm9va/KG0Ja4zIOgg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -7982,7 +7974,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.0 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -7998,7 +7990,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.0 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -8015,7 +8007,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.0 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -8311,15 +8303,15 @@ packages: slash: 3.0.0 dev: true - /@jest/console@29.6.1: - resolution: {integrity: sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==} + /@jest/console@29.5.0: + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@types/node': 18.15.10 chalk: 4.1.2 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 dev: true @@ -8377,53 +8369,11 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.6.1 - '@jest/reporters': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 - '@types/node': 18.15.10 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.8.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.5.0 - jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) - jest-haste-map: 29.6.1 - jest-message-util: 29.6.1 - jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-resolve-dependencies: 29.6.1 - jest-runner: 29.6.1 - jest-runtime: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 - jest-watcher: 29.6.1 - micromatch: 4.0.5 - pretty-format: 29.6.1 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /@jest/core@29.6.1(ts-node@10.9.1): - resolution: {integrity: sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 29.6.1 - '@jest/reporters': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -8431,20 +8381,20 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) - jest-haste-map: 29.6.1 - jest-message-util: 29.6.1 + jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-resolve-dependencies: 29.6.1 - jest-runner: 29.6.1 - jest-runtime: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 - jest-watcher: 29.6.1 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 micromatch: 4.0.5 - pretty-format: 29.6.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -8462,29 +8412,29 @@ packages: jest-mock: 27.5.1 dev: true - /@jest/environment@29.6.1: - resolution: {integrity: sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==} + /@jest/environment@29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.6.1 - '@jest/types': 29.6.1 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 - jest-mock: 29.6.1 + jest-mock: 29.5.0 dev: true - /@jest/expect-utils@29.6.1: - resolution: {integrity: sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==} + /@jest/expect-utils@29.5.0: + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: true - /@jest/expect@29.6.1: - resolution: {integrity: sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==} + /@jest/expect@29.5.0: + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.6.1 - jest-snapshot: 29.6.1 + expect: 29.5.0 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -8501,16 +8451,16 @@ packages: jest-util: 27.5.1 dev: true - /@jest/fake-timers@29.6.1: - resolution: {integrity: sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==} + /@jest/fake-timers@29.5.0: + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.1.0 '@types/node': 18.15.10 - jest-message-util: 29.6.1 - jest-mock: 29.6.1 - jest-util: 29.6.1 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true /@jest/globals@27.5.1: @@ -8522,14 +8472,14 @@ packages: expect: 27.5.1 dev: true - /@jest/globals@29.6.1: - resolution: {integrity: sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==} + /@jest/globals@29.5.0: + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/expect': 29.6.1 - '@jest/types': 29.6.1 - jest-mock: 29.6.1 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/types': 29.5.0 + jest-mock: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -8572,8 +8522,8 @@ packages: - supports-color dev: true - /@jest/reporters@29.6.1: - resolution: {integrity: sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==} + /@jest/reporters@29.5.0: + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8582,11 +8532,11 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@jridgewell/trace-mapping': 0.3.17 '@types/node': 18.15.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -8598,9 +8548,9 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.6.1 - jest-util: 29.6.1 - jest-worker: 29.6.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + jest-worker: 29.5.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -8609,11 +8559,11 @@ packages: - supports-color dev: true - /@jest/schemas@29.6.0: - resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + /@jest/schemas@29.4.3: + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.25.24 dev: true /@jest/source-map@27.5.1: @@ -8625,11 +8575,11 @@ packages: source-map: 0.6.1 dev: true - /@jest/source-map@29.6.0: - resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} + /@jest/source-map@29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -8644,12 +8594,12 @@ packages: collect-v8-coverage: 1.0.1 dev: true - /@jest/test-result@29.6.1: - resolution: {integrity: sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==} + /@jest/test-result@29.5.0: + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.1 - '@jest/types': 29.6.1 + '@jest/console': 29.5.0 + '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true @@ -8666,13 +8616,13 @@ packages: - supports-color dev: true - /@jest/test-sequencer@29.6.1: - resolution: {integrity: sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==} + /@jest/test-sequencer@29.5.0: + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.1 + '@jest/test-result': 29.5.0 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -8704,39 +8654,16 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.22.5 - '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.18 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 - jest-regex-util: 29.4.3 - jest-util: 29.6.1 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/transform@29.6.1: - resolution: {integrity: sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.22.5 - '@jest/types': 29.6.1 - '@jridgewell/trace-mapping': 0.3.18 + '@jest/types': 29.5.0 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 + jest-haste-map: 29.5.0 jest-regex-util: 29.4.3 - jest-util: 29.6.1 + jest-util: 29.5.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -8771,19 +8698,7 @@ packages: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.6.0 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.10 - '@types/yargs': 17.0.23 - chalk: 4.1.2 - dev: true - - /@jest/types@29.6.1: - resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.0 + '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.15.10 @@ -8791,7 +8706,7 @@ packages: chalk: 4.1.2 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@4.9.5)(vite@4.4.2): + /@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@4.9.5)(vite@4.4.0): resolution: {integrity: sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==} peerDependencies: typescript: '>= 4.3.x' @@ -8805,7 +8720,7 @@ packages: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@4.9.5) typescript: 4.9.5 - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) dev: true /@joshwooding/vite-plugin-react-docgen-typescript@0.2.2(typescript@4.9.5)(vite@4.2.1): @@ -8828,7 +8743,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.4.14 /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} @@ -8836,7 +8751,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -8850,7 +8765,7 @@ packages: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 dev: true /@jridgewell/sourcemap-codec@1.4.14: @@ -8859,8 +8774,8 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -8878,10 +8793,6 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: true - /@ljharb/has-package-exports-patterns@0.0.2: - resolution: {integrity: sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==} - dev: false - /@lukeed/csprng@1.0.1: resolution: {integrity: sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==} engines: {node: '>=8'} @@ -8963,7 +8874,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.3 - '@types/react': 18.2.14 + '@types/react': 18.0.37 react: 18.2.0 dev: true @@ -9156,7 +9067,7 @@ packages: tsconfig-paths: 4.1.2 tsconfig-paths-webpack-plugin: 4.0.1 typescript: 4.9.5 - webpack: 5.76.2 + webpack: 5.76.2(esbuild@0.17.19) webpack-node-externals: 3.0.0 transitivePeerDependencies: - '@swc/core' @@ -9502,10 +9413,6 @@ packages: rxjs: 7.8.0 tslib: 2.5.2 - /@nicolo-ribaudo/semver-v6@6.3.3: - resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} - hasBin: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -11278,7 +11185,7 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@rollup/pluginutils': 3.1.0(rollup@2.70.2) '@types/babel__core': 7.20.0 rollup: 2.70.2 @@ -11554,8 +11461,8 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: false - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@sinclair/typebox@0.25.24: + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true /@sinonjs/commons@1.8.6: @@ -11793,8 +11700,8 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@jest/transform': 29.6.1 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@jest/transform': 29.5.0 '@mdx-js/react': 2.3.0(react@18.2.0) '@storybook/blocks': 7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 7.0.0-rc.10 @@ -12138,15 +12045,15 @@ packages: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - '@storybook/api': 7.0.26(react-dom@18.2.0)(react@18.2.0) - '@storybook/components': 7.0.26(react-dom@18.2.0)(react@18.2.0) - '@storybook/core-common': 7.0.26 - '@storybook/core-events': 7.0.26 - '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) - '@storybook/node-logger': 7.0.26 - '@storybook/preview-api': 7.0.26 - '@storybook/theming': 7.0.26(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.0.26 + '@storybook/api': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/core-common': 7.0.27 + '@storybook/core-events': 7.0.27 + '@storybook/manager-api': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/node-logger': 7.0.27 + '@storybook/preview-api': 7.0.27 + '@storybook/theming': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.27 css-loader: 6.8.1(webpack@5.76.2) less-loader: 11.1.3(less@4.1.3)(webpack@5.76.2) postcss-loader: 7.3.3(postcss@8.4.24)(webpack@5.76.2) @@ -12303,8 +12210,8 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/api@7.0.26(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-czS5iWE3Px3e0sXjgt1T+LDiT6Tl4gXYPmHIaWpKGDCh4W2zrGolOvB0WqDt3IKhDGnXxaJF5jn705OGBQOptw==} + /@storybook/api@7.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kvqtnahIdyp+c7qwG/IhY6e1ynet/G9k92J6n3UEpMqy0b+jKMpGE45uGdiMg5EDVGjvlDqN8Ed7v/ZDJFjlOw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -12314,8 +12221,8 @@ packages: react-dom: optional: true dependencies: - '@storybook/client-logger': 7.0.26 - '@storybook/manager-api': 7.0.26(react-dom@18.2.0)(react@18.2.0) + '@storybook/client-logger': 7.0.27 + '@storybook/manager-api': 7.0.27(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -12480,7 +12387,7 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.0.26(typescript@4.9.5)(vite@4.4.2): + /@storybook/builder-vite@7.0.26(typescript@4.9.5)(vite@4.4.0): resolution: {integrity: sha512-PRvySwvJEBLTZcUCKIULdxeFZeoDeK5odGFN0oIJhGZlOEI7jzbAcBT9SEZUh+Cv4Pk93XFr5+ZJCm/yrmF8RA==} peerDependencies: '@preact/preset-vite': '*' @@ -12516,7 +12423,7 @@ packages: remark-slug: 6.1.0 rollup: 2.70.2 typescript: 4.9.5 - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) transitivePeerDependencies: - encoding - supports-color @@ -12544,11 +12451,22 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-rc.1: - resolution: {integrity: sha512-bX3j4EQIftkDMeXzL9JCAKSBR6FxAC6YfjavGBdhBIrOAdAqgP8opX65PJHpmN7j93hhaPqkMxsrJrtvqfTFXQ==} + /@storybook/channel-postmessage@7.0.27: + resolution: {integrity: sha512-ScpiStUHvtgy9RrCFNyzzH9l+zHF80lSwW/BZ1MRETJ9ZaOVPrm03U0Ju01wJC57DYPROwPU/wKMetNqKKEhdA==} + dependencies: + '@storybook/channels': 7.0.27 + '@storybook/client-logger': 7.0.27 + '@storybook/core-events': 7.0.27 + '@storybook/global': 5.0.0 + qs: 6.11.2 + telejson: 7.1.0 + dev: true + + /@storybook/channel-postmessage@7.1.0-rc.2: + resolution: {integrity: sha512-XQQFN9xYdUwAdWcQopBaNPkj65bSwyBsGEDKFQd1zvwvEv4QKiMWqQVnx84yXfEUu9b4jVolyyB5tQGLS4/6Fw==} dependencies: - '@storybook/channels': 7.1.0-rc.1 - '@storybook/client-logger': 7.1.0-rc.1 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -12585,11 +12503,15 @@ packages: resolution: {integrity: sha512-Br3XILhrtuL5Sdp91I04kKjJzSqU/N8gGL6B6nIfnuaHUvGMDuMCHAB+g7aoiyH5dnpDZ6yBVGNwtYAyJA+0Og==} dev: true - /@storybook/channels@7.1.0-rc.1: - resolution: {integrity: sha512-I7qwZdtTr+0q4/6x0UhqNy3LuvMZzHW9+cJrJwlpxfXDv9KHXQc4t1FJrWgeUymTreckLUWkwuO0DrRa8s594g==} + /@storybook/channels@7.0.27: + resolution: {integrity: sha512-YppvPa1qMyC+oCQJ3tf7Quzpf2NnBlvIRLPJiGAMssUwX5qE0iKe9lTtkNwMaNxEvzz6rDxewSlz+f/MWr4gPw==} + dev: true + + /@storybook/channels@7.1.0-rc.2: + resolution: {integrity: sha512-P9u0l5T0N2zMo387f0+eRBZ29Jg2+mfalBcsvTs2TYR9Kb/plQlEXhvIRxJm3W/OeEvS2vxixN2YOFeZGWlUYg==} dependencies: - '@storybook/client-logger': 7.1.0-rc.1 - '@storybook/core-events': 7.1.0-rc.1 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -12650,7 +12572,7 @@ packages: hasBin: true dependencies: '@babel/core': 7.22.5 - '@babel/preset-env': 7.21.5(@babel/core@7.22.5) + '@babel/preset-env': 7.20.2(@babel/core@7.22.5) '@ndelangen/get-tarball': 3.0.7 '@storybook/codemod': 7.0.26 '@storybook/core-common': 7.0.26 @@ -12673,7 +12595,7 @@ packages: get-port: 5.1.1 giget: 1.1.2 globby: 11.1.0 - jscodeshift: 0.14.0(@babel/preset-env@7.21.5) + jscodeshift: 0.14.0(@babel/preset-env@7.20.2) leven: 3.1.0 ora: 5.4.1 prettier: 2.8.8 @@ -12713,8 +12635,14 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-rc.1: - resolution: {integrity: sha512-9gIDb6K7cotqZie+BbhCFg0Lk2yMHkJEnC0/0cPXO7FqRhx75kHrGIsdrZShylZUjLoLQZQoV5z2mr085NO4Eg==} + /@storybook/client-logger@7.0.27: + resolution: {integrity: sha512-t4F0ByHP4MNiyVI5sgqtxSccr4RmPAqTr/h6CeGLJKWzUYobBV5hwKUd/qlfwdjev2u9C7AdLFPBKVcHX5PteA==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + + /@storybook/client-logger@7.1.0-rc.2: + resolution: {integrity: sha512-O0JLRCFrL7YLMd8sBHdLCqbJBLxW8nCrj7cOwkxt1HY73vy4u/VRujmVZbElaG5QJIoZNUZERyL+oSChthKWlg==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -12813,6 +12741,24 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/components@7.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-utt4fA1td7QHpvuD/9dWm9UEoO5xTU3EsXk/U2fPUQzN9NEsbWKV/QubUYIpVy5iwwgUyMvqzWHM0veAriJW5A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 7.0.27 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.27 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + util-deprecate: 1.0.2 + dev: true + /@storybook/core-client@7.0.0-rc.10: resolution: {integrity: sha512-Z1zhznMt0NA9PNvBB/JplGAubZp3OszVseIYKj52WmPJHhD/VSlrCMGh9AVkSUsVunF4ciK92GvyMBPuYE/5LA==} dependencies: @@ -12882,6 +12828,35 @@ packages: - supports-color dev: true + /@storybook/core-common@7.0.27: + resolution: {integrity: sha512-nlHXpn3CghCwkeIffZ7/PzcraCDXNZz+cnR4L8vtgJn1n6W7y92mxfF8gkRHuiYHWHbPWRVP9M5vAmVoiNMxjw==} + dependencies: + '@storybook/node-logger': 7.0.27 + '@storybook/types': 7.0.27 + '@types/node': 16.18.25 + '@types/node-fetch': 2.6.4 + '@types/pretty-hrtime': 1.0.1 + chalk: 4.1.2 + esbuild: 0.17.19 + esbuild-register: 3.4.2(esbuild@0.17.19) + file-system-cache: 2.3.0 + find-up: 5.0.0 + fs-extra: 11.1.1 + glob: 8.1.0 + glob-promise: 6.0.2(glob@8.1.0) + handlebars: 4.7.7 + lazy-universal-dotenv: 4.0.0 + node-fetch: 2.6.9 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@storybook/core-events@6.5.16: resolution: {integrity: sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==} dependencies: @@ -12896,8 +12871,12 @@ packages: resolution: {integrity: sha512-ckZszphEAYs9wp8tPVhayEMzk8JxCiQfzbq0S45sbdqdTrl40PmsOjv5iPNaUYElI/Stfz+v4gDCEUfOsxyC+w==} dev: true - /@storybook/core-events@7.1.0-rc.1: - resolution: {integrity: sha512-cuWpVQxJLLHZ8dxO17yySQdaj20VFYZC/Cm4guKv+/RH0aI+kALkoe5zJ6JnUSjwPujrZI6c/9bHVsjqi3czzQ==} + /@storybook/core-events@7.0.27: + resolution: {integrity: sha512-sNnqgO5i5DUIqeQfNbr987KWvAciMN9FmMBuYdKjVFMqWFyr44HTgnhfKwZZKl+VMDYkHA9Do7UGSYZIKy0P4g==} + dev: true + + /@storybook/core-events@7.1.0-rc.2: + resolution: {integrity: sha512-qoYLet2G2vNxpVKPTqLovGNoNSNjID7V2vk9hdUis51osOiVHlgJwXxkz33fUOI18y1JbYoVRM8LZaFaMHGF2g==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -12919,7 +12898,7 @@ packages: '@storybook/types': 7.0.0-rc.10 '@types/detect-port': 1.3.2 '@types/node': 16.18.25 - '@types/node-fetch': 2.6.4 + '@types/node-fetch': 2.6.3 '@types/pretty-hrtime': 1.0.1 '@types/semver': 7.3.13 better-opn: 2.1.1 @@ -13138,14 +13117,14 @@ packages: '@storybook/preview-api': 7.0.26 dev: true - /@storybook/instrumenter@7.1.0-rc.1: - resolution: {integrity: sha512-o/WTL1loHHd6ynay/BCowjC5EXz5ce4GfjeZkEkAMiSAdskPV2jCnxYaz6Sq9+wMwZkEEmt36pgvQQjqi3Od1g==} + /@storybook/instrumenter@7.1.0-rc.2: + resolution: {integrity: sha512-xmtSNDfSWRkaMIcAlm3ga6ZjHoZgs0xBR3wEgDBtcygaWewvTtuBK4MxgT5NpJjPxGpjVakzjxGoITLQgrk0Kw==} dependencies: - '@storybook/channels': 7.1.0-rc.1 - '@storybook/client-logger': 7.1.0-rc.1 - '@storybook/core-events': 7.1.0-rc.1 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-rc.1 + '@storybook/preview-api': 7.1.0-rc.2 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -13198,6 +13177,31 @@ packages: ts-dedent: 2.2.0 dev: true + /@storybook/manager-api@7.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CVgy4ti8h0Xc4nxiPujTzhMANl9wmfLGvSA9ZX6YUBbKFV4UOL4oj105iHPW7Ngse6Qoqj0rnhkOSmLczXT03w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/channels': 7.0.27 + '@storybook/client-logger': 7.0.27 + '@storybook/core-events': 7.0.27 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/router': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.0.27(react-dom@18.2.0)(react@18.2.0) + '@storybook/types': 7.0.27 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + semver: 7.5.3 + store2: 2.14.2 + telejson: 7.1.0 + ts-dedent: 2.2.0 + dev: true + /@storybook/manager@7.0.0-rc.10: resolution: {integrity: sha512-WmGyBFPCaW7ee57nSaPCb5teeI3mUBL+cRY3wXi7n+tzCHuWlYM/AWmQgOtb2goMgt7iZn76+uL9JUfTbvfRCg==} dev: true @@ -13232,6 +13236,15 @@ packages: pretty-hrtime: 1.0.3 dev: true + /@storybook/node-logger@7.0.27: + resolution: {integrity: sha512-idoK+sDaTTPuxHcKhxn+l27Omhxvr1TQ0ALw1h8ehyMbW8TZBdWvYLYfmiWeI3+NQtmeudzxhKSVYTmAY4qDJw==} + dependencies: + '@types/npmlog': 4.1.4 + chalk: 4.1.2 + npmlog: 5.0.1 + pretty-hrtime: 1.0.3 + dev: true + /@storybook/postinstall@7.0.0-rc.10: resolution: {integrity: sha512-TLmwMcIuCGBTsFU2reyUTCofFyN9nCO6TXku8DzqD4UIj89RqVN+ngaOSl8uuqKhCYglocEWM4g88OG1Oaljjw==} dev: true @@ -13280,16 +13293,36 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-rc.1: - resolution: {integrity: sha512-Wme9IZvMolGtyAbbx6Z31+AHxP5EltizYiSmBwxZrX5uxMSvNMS8MbB0A85mrnw9I0U0MORSqDeclUQ8S/CL5g==} + /@storybook/preview-api@7.0.27: + resolution: {integrity: sha512-FhauTuLzRsaIaEORQP5lxYrzwRgZPMnfYEPnzduyGgPiY6VZkS6wIiO6pKzat83V1L4J7m5aZhTB3HtvTwPhvg==} + dependencies: + '@storybook/channel-postmessage': 7.0.27 + '@storybook/channels': 7.0.27 + '@storybook/client-logger': 7.0.27 + '@storybook/core-events': 7.0.27 + '@storybook/csf': 0.1.0 + '@storybook/global': 5.0.0 + '@storybook/types': 7.0.27 + '@types/qs': 6.9.7 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.2 + synchronous-promise: 2.0.17 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/preview-api@7.1.0-rc.2: + resolution: {integrity: sha512-E+X5I1BzFF5aTmclkmoVBYQB+JMx1SUCdkzl+GGX9Wxh5JmyTQDI90ynv0k1aJNvPmC5mS2EMmeqcYoz+AuYZA==} dependencies: - '@storybook/channel-postmessage': 7.1.0-rc.1 - '@storybook/channels': 7.1.0-rc.1 - '@storybook/client-logger': 7.1.0-rc.1 - '@storybook/core-events': 7.1.0-rc.1 + '@storybook/channel-postmessage': 7.1.0-rc.2 + '@storybook/channels': 7.1.0-rc.2 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/core-events': 7.1.0-rc.2 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-rc.1 + '@storybook/types': 7.1.0-rc.2 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -13355,7 +13388,7 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react-vite@7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.2): + /@storybook/react-vite@7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5)(vite@4.4.0): resolution: {integrity: sha512-yDkZAvlJ9RcXSuGZy8NdDhI394P7CRme7x6VtpgCi+iPaVW9A5laK7zOe1ewYnAcbKH6g7EJWQWDz2+PqAGiFw==} engines: {node: '>=16'} peerDependencies: @@ -13363,17 +13396,17 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 vite: ^3.0.0 || ^4.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.4.2) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@4.9.5)(vite@4.4.0) '@rollup/pluginutils': 4.2.1 - '@storybook/builder-vite': 7.0.26(typescript@4.9.5)(vite@4.4.2) + '@storybook/builder-vite': 7.0.26(typescript@4.9.5)(vite@4.4.0) '@storybook/react': 7.0.26(react-dom@18.2.0)(react@18.2.0)(typescript@4.9.5) - '@vitejs/plugin-react': 3.1.0(vite@4.4.2) + '@vitejs/plugin-react': 3.1.0(vite@4.4.0) ast-types: 0.14.2 magic-string: 0.27.0 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -13502,6 +13535,19 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/router@7.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Onflm2mERipuYB3SR+0CFAZKPbDiLsJdgX09BP8bGrg7dVYwiGkL5dc9H/CP0KPxtC7kXT8x1Zc+yx0Y0kWiJw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@storybook/client-logger': 7.0.27 + memoizerific: 1.11.3 + qs: 6.11.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/semver@7.3.2: resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==} engines: {node: '>=10'} @@ -13548,8 +13594,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-rc.1 - '@storybook/instrumenter': 7.1.0-rc.1 + '@storybook/client-logger': 7.1.0-rc.2 + '@storybook/instrumenter': 7.1.0-rc.2 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -13607,11 +13653,25 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/theming@7.0.27(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-l2Lc8xX8QXQO8c9gpzdUUJ+0YqLoh8w74I7lzxiife0TzEQrhWD9aRJAVimm8Vzfq5x3CNeJNFHc5PcG8ypQig==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) + '@storybook/client-logger': 7.0.27 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@storybook/types@7.0.0-rc.10: resolution: {integrity: sha512-aKyz4eJaWsywqX8kL2syTL8jGZFildIw/Z5o5S13KZwR+Vdijss2sNoDIAUK5XgSi9vxG/Jd13CS5zTEBaSpMA==} dependencies: '@storybook/channels': 7.0.0-rc.10 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/express': 4.17.9 file-system-cache: 2.3.0 dev: true @@ -13620,16 +13680,25 @@ packages: resolution: {integrity: sha512-5RBi6agtDglNXdffmw4+Fyv2dUdlIdeOdUj0O5+JRYajTxfHdurZd9r/42z4OstN+ORDkLA/svt8Q9JyRpIb6Q==} dependencies: '@storybook/channels': 7.0.26 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/express': 4.17.9 file-system-cache: 2.3.0 dev: true - /@storybook/types@7.1.0-rc.1: - resolution: {integrity: sha512-pm5xlgY37nPRm+SZJrSHJAk5oGgVA1ft/5T4zaw/C4Hkh2PtzlvP16CG1kdVug1AHRKWUSKNJYELdzYsCbvUhg==} + /@storybook/types@7.0.27: + resolution: {integrity: sha512-pmJuIm+kGaZiDMyl2i5KFS9iGWrpW1jVcp9OMtHeK20LBzY5Hxq/JMc3E+fbVNkAX2hVlVGbbVUNPTvd9AjbrA==} dependencies: - '@storybook/channels': 7.1.0-rc.1 - '@types/babel__core': 7.20.0 + '@storybook/channels': 7.0.27 + '@types/babel__core': 7.20.1 + '@types/express': 4.17.9 + file-system-cache: 2.3.0 + dev: true + + /@storybook/types@7.1.0-rc.2: + resolution: {integrity: sha512-pd19JdNEE+yuqBNlvk61423ZWQHrbsVafEmiJLD0wL4oWBZts7dijZPYiyrw+Fhw/EuXWsLg0edizBk2Id+JmA==} + dependencies: + '@storybook/channels': 7.1.0-rc.2 + '@types/babel__core': 7.20.1 '@types/express': 4.17.9 file-system-cache: 2.3.0 dev: true @@ -13927,7 +13996,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@testing-library/dom': 8.20.0 - '@types/react-dom': 18.2.6 + '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -14023,8 +14092,18 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.3 + dev: true + + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + dependencies: + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -14032,18 +14111,18 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.21.3 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.21.3 /@types/bcrypt@5.0.0: resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} @@ -14414,6 +14493,13 @@ packages: '@types/unist': 2.0.6 dev: false + /@types/node-fetch@2.6.3: + resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} + dependencies: + '@types/node': 18.15.10 + form-data: 3.0.1 + dev: true + /@types/node-fetch@2.6.4: resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: @@ -14528,22 +14614,16 @@ packages: /@types/react-custom-scrollbars@4.0.10: resolution: {integrity: sha512-1T430E+usndUjymkXB8k/zGpWehggircq/QaQMuFLMJceccAcD9vcmbUXF1LjeVP/+P4wI/bad6BF1E+7IGlqA==} dependencies: - '@types/react': 18.2.14 + '@types/react': 18.0.37 dev: true /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: - '@types/react': 18.2.14 - - /@types/react-dom@18.2.6: - resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} - dependencies: - '@types/react': 18.2.14 - dev: true + '@types/react': 18.0.37 - /@types/react@17.0.53: - resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} + /@types/react@17.0.45: + resolution: {integrity: sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 @@ -14564,13 +14644,6 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.1 - /@types/react@18.2.14: - resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==} - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.1 - /@types/readdir-glob@1.1.1: resolution: {integrity: sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==} dependencies: @@ -14793,41 +14866,13 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.5.3 tsutils: 3.21.0(typescript@5.0.2) typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/type-utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.3 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5): resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -14914,28 +14959,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@5.0.2): - resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.38.0 - typescript: 5.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@5.61.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + /@typescript-eslint/parser@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -14944,12 +14969,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 - typescript: 4.9.5 + eslint: 8.38.0 + typescript: 5.0.2 transitivePeerDependencies: - supports-color dev: true @@ -15066,26 +15091,6 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@5.61.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.36.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils@5.61.0(eslint@8.44.0)(typescript@4.9.5): resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -15168,6 +15173,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@5.59.0(typescript@4.9.5): + resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.3 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@5.59.0(typescript@5.0.2): resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -15250,19 +15276,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): + /@typescript-eslint/utils@5.59.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) - eslint: 8.38.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + eslint: 8.22.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -15270,19 +15296,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.61.0(eslint@8.22.0)(typescript@4.9.5): - resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + /@typescript-eslint/utils@5.59.0(eslint@8.38.0)(typescript@5.0.2): + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.22.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) - eslint: 8.22.0 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.2) + eslint: 8.38.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -15290,19 +15316,19 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.61.0(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + /@typescript-eslint/utils@5.59.0(eslint@8.44.0)(typescript@4.9.5): + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0(typescript@4.9.5) + eslint: 8.44.0 eslint-scope: 5.1.1 semver: 7.5.3 transitivePeerDependencies: @@ -15387,7 +15413,7 @@ packages: - supports-color dev: true - /@vitejs/plugin-react@3.1.0(vite@4.4.2): + /@vitejs/plugin-react@3.1.0(vite@4.4.0): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -15398,7 +15424,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) transitivePeerDependencies: - supports-color dev: true @@ -15418,8 +15444,8 @@ packages: - supports-color dev: true - /@vitejs/plugin-react@4.0.2(vite@4.4.2): - resolution: {integrity: sha512-zbnVp3Esfg33zDaoLrjxG+p/dPiOtpvJA+1oOEQwSxMMTRL9zi1eghIcd2WtLjkcKnPsa3S15LzS/OzDn2BOCA==} + /@vitejs/plugin-react@4.0.1(vite@4.4.0): + resolution: {integrity: sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 @@ -15428,7 +15454,7 @@ packages: '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.5) '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) react-refresh: 0.14.0 - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) transitivePeerDependencies: - supports-color dev: true @@ -15487,7 +15513,7 @@ packages: dependencies: '@vitest/utils': 0.28.5 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 dev: true /@vitest/runner@0.29.8: @@ -15495,7 +15521,7 @@ packages: dependencies: '@vitest/utils': 0.29.8 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 dev: true /@vitest/runner@0.33.0: @@ -15511,7 +15537,7 @@ packages: dependencies: magic-string: 0.30.1 pathe: 1.1.1 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /@vitest/spy@0.28.5: @@ -15556,7 +15582,7 @@ packages: dependencies: diff-sequences: 29.4.3 loupe: 2.3.6 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /@vscode/emmet-helper@2.8.6: @@ -15834,16 +15860,16 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 acorn-walk: 8.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.10.0): + /acorn-import-assertions@1.8.0(acorn@8.9.0): resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.10.0 + acorn: 8.9.0 dev: true /acorn-jsx@5.3.2(acorn@7.4.1): @@ -15854,12 +15880,19 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.8.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.2 + + /acorn-jsx@5.3.2(acorn@8.9.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.9.0 /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} @@ -15881,13 +15914,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.9.0: + resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} hasBin: true @@ -16012,23 +16045,23 @@ packages: uri-js: 4.4.1 dev: false - /algoliasearch@4.16.0: - resolution: {integrity: sha512-HAjKJ6bBblaXqO4dYygF4qx251GuJ6zCZt+qbJ+kU7sOC+yc84pawEjVpJByh+cGP2APFCsao2Giz50cDlKNPA==} + /algoliasearch@4.18.0: + resolution: {integrity: sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==} dependencies: - '@algolia/cache-browser-local-storage': 4.16.0 - '@algolia/cache-common': 4.16.0 - '@algolia/cache-in-memory': 4.16.0 - '@algolia/client-account': 4.16.0 - '@algolia/client-analytics': 4.16.0 - '@algolia/client-common': 4.16.0 - '@algolia/client-personalization': 4.16.0 - '@algolia/client-search': 4.16.0 - '@algolia/logger-common': 4.16.0 - '@algolia/logger-console': 4.16.0 - '@algolia/requester-browser-xhr': 4.16.0 - '@algolia/requester-common': 4.16.0 - '@algolia/requester-node-http': 4.16.0 - '@algolia/transporter': 4.16.0 + '@algolia/cache-browser-local-storage': 4.18.0 + '@algolia/cache-common': 4.18.0 + '@algolia/cache-in-memory': 4.18.0 + '@algolia/client-account': 4.18.0 + '@algolia/client-analytics': 4.18.0 + '@algolia/client-common': 4.18.0 + '@algolia/client-personalization': 4.18.0 + '@algolia/client-search': 4.18.0 + '@algolia/logger-common': 4.18.0 + '@algolia/logger-console': 4.18.0 + '@algolia/requester-browser-xhr': 4.18.0 + '@algolia/requester-common': 4.18.0 + '@algolia/requester-node-http': 4.18.0 + '@algolia/transporter': 4.18.0 dev: false /ansi-align@3.0.1: @@ -16310,8 +16343,8 @@ packages: - supports-color dev: true - /astro@2.6.6(@types/node@18.15.10): - resolution: {integrity: sha512-npeTXVaSOWKYYF6Znj6Yfxfq+WIFZ9u/Q+vtFP3nXbl7/XimvE+LbmWoK+hPFBOXC/KRLHxqQSltXJX5ALFmFg==} + /astro@2.7.2(@types/node@18.15.10): + resolution: {integrity: sha512-2+vjXeVGU04aecs0mm93Qx9KdeVDw4OTeBIijs2Z+QLoe4RUYZnkqx5gR70VNfnoMdXoPp7+wB+ARcb0+ee/yg==} engines: {node: '>=16.12.0', npm: '>=6.14.0'} hasBin: true peerDependencies: @@ -16321,20 +16354,20 @@ packages: optional: true dependencies: '@astrojs/compiler': 1.5.1 - '@astrojs/internal-helpers': 0.1.0 + '@astrojs/internal-helpers': 0.1.1 '@astrojs/language-server': 1.0.8 - '@astrojs/markdown-remark': 2.2.1(astro@2.6.6) + '@astrojs/markdown-remark': 2.2.1(astro@2.7.2) '@astrojs/telemetry': 2.1.1 '@astrojs/webapi': 2.2.0 '@babel/core': 7.22.5 - '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.22.5) - '@babel/traverse': 7.21.3 + '@babel/generator': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/yargs-parser': 21.0.0 - acorn: 8.8.2 + acorn: 8.9.0 boxen: 6.2.1 chokidar: 3.5.3 ci-info: 3.8.0 @@ -16344,7 +16377,7 @@ packages: deepmerge-ts: 4.3.0 devalue: 4.3.2 diff: 5.1.0 - es-module-lexer: 1.2.0 + es-module-lexer: 1.3.0 esbuild: 0.17.19 estree-walker: 3.0.0 execa: 6.1.0 @@ -16356,25 +16389,23 @@ packages: kleur: 4.1.5 magic-string: 0.27.0 mime: 3.0.0 - ora: 6.3.0 + ora: 6.3.1 p-limit: 4.0.0 path-to-regexp: 6.2.1 preferred-pm: 3.0.3 prompts: 2.4.2 rehype: 12.0.1 - semver: 7.3.8 + semver: 7.5.3 server-destroy: 1.0.1 - shiki: 0.14.2 - slash: 4.0.0 + shiki: 0.14.3 string-width: 5.1.2 - strip-ansi: 7.0.1 - supports-esm: 1.0.0 + strip-ansi: 7.1.0 tsconfig-resolver: 3.0.1 typescript: 4.9.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) - vitefu: 0.2.4(vite@4.4.2) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) + vitefu: 0.2.4(vite@4.4.0) yargs-parser: 21.1.1 zod: 3.21.4 transitivePeerDependencies: @@ -16505,7 +16536,7 @@ packages: '@babel/types': 7.22.5 eslint: 8.22.0 eslint-visitor-keys: 1.3.0 - resolve: 1.22.2 + resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: false @@ -16519,7 +16550,7 @@ packages: '@babel/core': 7.22.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 27.5.1(@babel/core@7.22.5) chalk: 4.1.2 @@ -16529,15 +16560,15 @@ packages: - supports-color dev: true - /babel-jest@29.6.1(@babel/core@7.22.5): - resolution: {integrity: sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==} + /babel-jest@29.5.0(@babel/core@7.22.5): + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.22.5 - '@jest/transform': 29.6.1 - '@types/babel__core': 7.20.0 + '@jest/transform': 29.5.0 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 @@ -16566,7 +16597,7 @@ packages: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.18.3 dev: true @@ -16576,12 +16607,12 @@ packages: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.18.3 dev: true - /babel-plugin-jsx-dom-expressions@0.35.19(@babel/core@7.22.5): - resolution: {integrity: sha512-Y1Qg6Yt5XaRfGewxmF0ac6bnqo2xdsIdPd1J6/El4E+7m5Ej76jcHYeHWJsoPbVmbZXc5TGenwZMP9ueHjja/g==} + /babel-plugin-jsx-dom-expressions@0.36.10(@babel/core@7.22.5): + resolution: {integrity: sha512-QA2k/14WGw+RgcGGnEuLWwnu4em6CGhjeXtjvgOYyFHYS2a+CzPeaVQHDOlfuiBcjq/3hWMspHMIMnPEOIzdBg==} peerDependencies: '@babel/core': ^7.20.12 dependencies: @@ -16590,7 +16621,7 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) '@babel/types': 7.22.5 html-entities: 2.3.3 - validate-html-nesting: 1.2.1 + validate-html-nesting: 1.2.2 dev: false /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.17.9): @@ -16598,7 +16629,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.17.9) semver: 6.3.0 @@ -16611,7 +16642,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.3 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) semver: 6.3.0 @@ -16624,7 +16655,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) semver: 6.3.0 @@ -16651,7 +16682,7 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3) - core-js-compat: 3.31.1 + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true @@ -16663,7 +16694,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) - core-js-compat: 3.31.1 + core-js-compat: 3.29.1 transitivePeerDependencies: - supports-color dev: true @@ -16743,13 +16774,13 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true - /babel-preset-solid@1.6.13(@babel/core@7.22.5): - resolution: {integrity: sha512-W78rLK4xv48k2Jb/VFynu42oCQufcDYFz6gmhMYslKy/PJCfNxdp85QCg1wTcrmCoPQK2TcHMVcL8nVvvTBHxQ==} + /babel-preset-solid@1.7.7(@babel/core@7.22.5): + resolution: {integrity: sha512-tdxVzx3kgcIjNXAOmGRbzIhFBPeJjSakiN9yM+IYdL/+LtXNnbGqb0Va5tJb8Sjbk+QVEriovCyuzB5T7jeTvg==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.5 - babel-plugin-jsx-dom-expressions: 0.35.19(@babel/core@7.22.5) + babel-plugin-jsx-dom-expressions: 0.36.10(@babel/core@7.22.5) dev: false /backo2@1.0.2: @@ -16989,20 +17020,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001514 - electron-to-chromium: 1.4.454 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.5) - - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001514 - electron-to-chromium: 1.4.454 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001470 + electron-to-chromium: 1.4.340 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10(browserslist@4.21.5) /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -17164,9 +17185,6 @@ packages: /caniuse-lite@1.0.30001470: resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} - /caniuse-lite@1.0.30001514: - resolution: {integrity: sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==} - /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false @@ -17818,13 +17836,7 @@ packages: /core-js-compat@3.29.1: resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} dependencies: - browserslist: 4.21.9 - dev: true - - /core-js-compat@3.31.1: - resolution: {integrity: sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==} - dependencies: - browserslist: 4.21.9 + browserslist: 4.21.5 dev: true /core-js@3.29.1: @@ -18662,8 +18674,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.454: - resolution: {integrity: sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==} + /electron-to-chromium@1.4.340: + resolution: {integrity: sha512-zx8hqumOqltKsv/MF50yvdAlPF9S/4PXbyfzJS6ZGhbddGkRegdwImmfSVqCkEziYzrIGZ/TlrzBND4FysfkDg==} /element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -18819,8 +18831,8 @@ packages: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true - /es-module-lexer@1.2.0: - resolution: {integrity: sha512-2BMfqBDeVCcOlLaL1ZAfp+D868SczNpKArrTM3dhpd7dK/OVlogzY15qpUngt+LMTq5UC/csb9vVQAgupucSbA==} + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} dev: false /es-set-tostringtag@2.0.1: @@ -19181,34 +19193,34 @@ packages: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + /esbuild@0.18.12: + resolution: {integrity: sha512-XuOVLDdtsDslXStStduT41op21Ytmf4/BDS46aa3xPJ7X5h2eMWBF1oAe3QjUH3bDksocNXgzGUZ7XHIBya6Tg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 + '@esbuild/android-arm': 0.18.12 + '@esbuild/android-arm64': 0.18.12 + '@esbuild/android-x64': 0.18.12 + '@esbuild/darwin-arm64': 0.18.12 + '@esbuild/darwin-x64': 0.18.12 + '@esbuild/freebsd-arm64': 0.18.12 + '@esbuild/freebsd-x64': 0.18.12 + '@esbuild/linux-arm': 0.18.12 + '@esbuild/linux-arm64': 0.18.12 + '@esbuild/linux-ia32': 0.18.12 + '@esbuild/linux-loong64': 0.18.12 + '@esbuild/linux-mips64el': 0.18.12 + '@esbuild/linux-ppc64': 0.18.12 + '@esbuild/linux-riscv64': 0.18.12 + '@esbuild/linux-s390x': 0.18.12 + '@esbuild/linux-x64': 0.18.12 + '@esbuild/netbsd-x64': 0.18.12 + '@esbuild/openbsd-x64': 0.18.12 + '@esbuild/sunos-x64': 0.18.12 + '@esbuild/win32-arm64': 0.18.12 + '@esbuild/win32-ia32': 0.18.12 + '@esbuild/win32-x64': 0.18.12 /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -19276,7 +19288,16 @@ packages: eslint: 8.36.0 dev: true - /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0)(typescript@4.9.5): + /eslint-config-prettier@8.8.0(eslint@8.44.0): + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.44.0 + dev: true + + /eslint-config-standard-with-typescript@23.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.44.0)(typescript@4.9.5): resolution: {integrity: sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -19286,19 +19307,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - eslint: 8.36.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0) - eslint-plugin-n: 15.6.1(eslint@8.36.0) - eslint-plugin-promise: 6.1.1(eslint@8.36.0) + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + eslint: 8.44.0 + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.44.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-n: 15.6.1(eslint@8.44.0) + eslint-plugin-promise: 6.1.1(eslint@8.44.0) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0): + /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.44.0): resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -19306,10 +19327,10 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0) - eslint-plugin-n: 15.6.1(eslint@8.36.0) - eslint-plugin-promise: 6.1.1(eslint@8.36.0) + eslint: 8.44.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-n: 15.6.1(eslint@8.44.0) + eslint-plugin-promise: 6.1.1(eslint@8.44.0) dev: true /eslint-import-resolver-node@0.3.7: @@ -19317,7 +19338,7 @@ packages: dependencies: debug: 3.2.7 is-core-module: 2.11.0 - resolve: 1.22.2 + resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true @@ -19372,88 +19393,30 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-astro@0.21.1(eslint@8.36.0): - resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} + /eslint-plugin-astro@0.21.0(eslint@8.44.0): + resolution: {integrity: sha512-7pEhTfYT+tlOMOSmQV77TNgCeuFZgqSAqJPTHh6LYlwLqYyBQLURc5RRtlQqCJkufSh4Fan4nsV3LXCT/vjpCA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=7.0.0' dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 - '@typescript-eslint/types': 5.56.0 + '@typescript-eslint/types': 5.61.0 astro-eslint-parser: 0.9.5 - eslint: 8.36.0 - eslint-utils: 3.0.0(eslint@8.36.0) + eslint: 8.44.0 + eslint-utils: 3.0.0(eslint@8.44.0) postcss: 8.4.24 postcss-selector-parser: 6.0.11 + sourcemap-codec: 1.4.8 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es@4.1.0(eslint@8.36.0): + /eslint-plugin-es@4.1.0(eslint@8.44.0): resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.36.0 + eslint: 8.44.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true @@ -19463,103 +19426,37 @@ packages: engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.36.0 - ignore: 5.2.4 - dev: true - - /eslint-plugin-functional@3.7.2(eslint@8.36.0)(typescript@4.9.5): - resolution: {integrity: sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg==} - engines: {node: '>=10.18.0'} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - tsutils: ^3.0.0 - typescript: ^3.4.1 || ^4.0.0 - peerDependenciesMeta: - tsutils: - optional: true - typescript: - optional: true - dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.36.0)(typescript@4.9.5) - array.prototype.flatmap: 1.3.1 - deepmerge: 4.3.1 - escape-string-regexp: 4.0.0 - eslint: 8.36.0 - object.fromentries: 2.0.6 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 + dependencies: + escape-string-regexp: 1.0.5 eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color + ignore: 5.2.4 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} + /eslint-plugin-functional@3.7.2(eslint@8.36.0)(typescript@4.9.5): + resolution: {integrity: sha512-BuWPOeE0nuXYlZjObYOHnYf7G3iG+sysxw84I579MsrH+hy5XdXb2sdabmXQ5z7eFGCg2/DWNbZ/yz5GAgtcUg==} + engines: {node: '>=10.18.0'} peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + tsutils: ^3.0.0 + typescript: ^3.4.1 || ^4.0.0 peerDependenciesMeta: - '@typescript-eslint/parser': + tsutils: + optional: true + typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 + '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.36.0)(typescript@4.9.5) array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 + deepmerge: 4.3.1 + escape-string-regexp: 4.0.0 + eslint: 8.36.0 + object.fromentries: 2.0.6 + typescript: 4.9.5 transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.36.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -19569,7 +19466,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.36.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -19577,7 +19474,7 @@ packages: doctrine: 2.1.0 eslint: 8.36.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -19592,16 +19489,16 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.6.1(eslint@8.36.0): + /eslint-plugin-n@15.6.1(eslint@8.44.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '>=7.0.0' dependencies: builtins: 5.0.1 - eslint: 8.36.0 - eslint-plugin-es: 4.1.0(eslint@8.36.0) - eslint-utils: 3.0.0(eslint@8.36.0) + eslint: 8.44.0 + eslint-plugin-es: 4.1.0(eslint@8.44.0) + eslint-utils: 3.0.0(eslint@8.44.0) ignore: 5.2.4 is-core-module: 2.11.0 minimatch: 3.1.2 @@ -19609,13 +19506,13 @@ packages: semver: 7.5.3 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.36.0): + /eslint-plugin-promise@6.1.1(eslint@8.44.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.36.0 + eslint: 8.44.0 dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.22.0): @@ -19653,8 +19550,8 @@ packages: eslint: 8.38.0 dev: true - /eslint-plugin-react-refresh@0.4.2(eslint@8.44.0): - resolution: {integrity: sha512-AjT+7woNvaIiFoFqiD7nsd/M1MoW1h+8SAdfCpQ/1LSFkIH9DNAawBsTHj/1sWjijkVXRfF/rOiXFm+4xZrZ5Q==} + /eslint-plugin-react-refresh@0.4.1(eslint@8.44.0): + resolution: {integrity: sha512-QgrvtRJkmV+m4w953LS146+6RwEe5waouubFVNLBfOjXJf6MLczjymO8fOcKj9jMS8aKkTCMJqiPu2WEeFI99A==} peerDependencies: eslint: '>=7' dependencies: @@ -19692,7 +19589,7 @@ packages: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.61.0(eslint@8.22.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.22.0)(typescript@4.9.5) eslint: 8.22.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -19708,7 +19605,7 @@ packages: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.0(eslint@8.44.0)(typescript@4.9.5) eslint: 8.44.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -19768,7 +19665,7 @@ packages: eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.36.0): + /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.44.0): resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -19778,8 +19675,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.36.0)(typescript@4.9.5) - eslint: 8.36.0 + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5) + eslint: 8.44.0 eslint-rule-composer: 0.3.0 dev: true @@ -19837,6 +19734,16 @@ packages: eslint-visitor-keys: 2.1.0 dev: true + /eslint-utils@3.0.0(eslint@8.44.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.44.0 + eslint-visitor-keys: 2.1.0 + dev: true + /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} @@ -19958,7 +19865,7 @@ packages: '@eslint-community/regexpp': 4.4.1 '@eslint/eslintrc': 2.0.3 '@eslint/js': 8.38.0 - '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -19967,7 +19874,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 + eslint-scope: 7.2.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 esquery: 1.5.0 @@ -20050,26 +19957,26 @@ packages: resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) eslint-visitor-keys: 3.4.1 /espree@9.5.2: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.1 - dev: true /espree@9.6.0: resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.1 + dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -20256,16 +20163,15 @@ packages: jest-message-util: 27.5.1 dev: true - /expect@29.6.1: - resolution: {integrity: sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==} + /expect@29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.6.1 - '@types/node': 18.15.10 + '@jest/expect-utils': 29.5.0 jest-get-type: 29.4.3 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 dev: true /express-cookie@4.17.1: @@ -20409,6 +20315,16 @@ packages: micromatch: 4.0.5 dev: false + /fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + /fast-glob@3.2.7: resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} engines: {node: '>=8'} @@ -20747,7 +20663,7 @@ packages: semver: 7.5.3 tapable: 2.2.1 typescript: 4.9.5 - webpack: 5.76.2 + webpack: 5.76.2(esbuild@0.17.19) dev: true /form-data@2.5.1: @@ -21315,12 +21231,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-package-exports@1.3.0: - resolution: {integrity: sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==} - dependencies: - '@ljharb/has-package-exports-patterns': 0.0.2 - dev: false - /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: @@ -22383,27 +22293,27 @@ packages: - supports-color dev: true - /jest-circus@29.6.1: - resolution: {integrity: sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==} + /jest-circus@29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/expect': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/types': 29.6.1 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.6.1 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-runtime: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.6.1 + pretty-format: 29.5.0 pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.6 @@ -22451,16 +22361,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.1(ts-node@10.9.1) - '@jest/test-result': 29.6.1 - '@jest/types': 29.6.1 + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.1(@types/node@18.15.10)(ts-node@10.9.1) - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-config: 29.5.0(@types/node@18.15.10)(ts-node@10.9.1) + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 yargs: 17.7.1 transitivePeerDependencies: @@ -22479,16 +22389,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.6.1(ts-node@10.9.1) - '@jest/test-result': 29.6.1 - '@jest/types': 29.6.1 + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.1(@types/node@20.3.1)(ts-node@10.9.1) - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-config: 29.5.0(@types/node@20.3.1)(ts-node@10.9.1) + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 yargs: 17.7.1 transitivePeerDependencies: @@ -22538,8 +22448,8 @@ packages: - utf-8-validate dev: true - /jest-config@29.6.1(@types/node@18.15.10)(ts-node@10.9.1): - resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} + /jest-config@29.5.0(@types/node@18.15.10)(ts-node@10.9.1): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -22551,26 +22461,26 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@jest/test-sequencer': 29.6.1 - '@jest/types': 29.6.1 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 - babel-jest: 29.6.1(@babel/core@7.22.5) + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.6.1 - jest-environment-node: 29.6.1 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-runner: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.6.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) @@ -22578,8 +22488,8 @@ packages: - supports-color dev: true - /jest-config@29.6.1(@types/node@20.3.1)(ts-node@10.9.1): - resolution: {integrity: sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==} + /jest-config@29.5.0(@types/node@20.3.1)(ts-node@10.9.1): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -22591,26 +22501,26 @@ packages: optional: true dependencies: '@babel/core': 7.22.5 - '@jest/test-sequencer': 29.6.1 - '@jest/types': 29.6.1 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 20.3.1 - babel-jest: 29.6.1(@babel/core@7.22.5) + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.6.1 - jest-environment-node: 29.6.1 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-runner: 29.6.1 - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.6.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 ts-node: 10.9.1(@types/node@18.15.10)(typescript@4.9.5) @@ -22638,14 +22548,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-diff@29.6.1: - resolution: {integrity: sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==} + /jest-diff@29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /jest-docblock@27.5.1: @@ -22673,15 +22583,15 @@ packages: pretty-format: 27.5.1 dev: true - /jest-each@29.6.1: - resolution: {integrity: sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==} + /jest-each@29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 chalk: 4.1.2 jest-get-type: 29.4.3 - jest-util: 29.6.1 - pretty-format: 29.6.1 + jest-util: 29.5.0 + pretty-format: 29.5.0 dev: true /jest-environment-jsdom@27.5.1: @@ -22714,16 +22624,16 @@ packages: jest-util: 27.5.1 dev: true - /jest-environment-node@29.6.1: - resolution: {integrity: sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==} + /jest-environment-node@29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/fake-timers': 29.6.1 - '@jest/types': 29.6.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 - jest-mock: 29.6.1 - jest-util: 29.6.1 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true /jest-get-type@26.3.0: @@ -22761,19 +22671,19 @@ packages: fsevents: 2.3.2 dev: true - /jest-haste-map@29.6.1: - resolution: {integrity: sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==} + /jest-haste-map@29.5.0: + resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 '@types/node': 18.15.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.4.3 - jest-util: 29.6.1 - jest-worker: 29.6.1 + jest-util: 29.5.0 + jest-worker: 29.5.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: @@ -22813,12 +22723,12 @@ packages: pretty-format: 27.5.1 dev: true - /jest-leak-detector@29.6.1: - resolution: {integrity: sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==} + /jest-leak-detector@29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /jest-matcher-utils@27.5.1: @@ -22831,14 +22741,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-matcher-utils@29.6.1: - resolution: {integrity: sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==} + /jest-matcher-utils@29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.6.1 + jest-diff: 29.5.0 jest-get-type: 29.4.3 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /jest-message-util@27.5.1: @@ -22856,17 +22766,17 @@ packages: stack-utils: 2.0.6 dev: true - /jest-message-util@29.6.1: - resolution: {integrity: sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==} + /jest-message-util@29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.22.5 - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.6.1 + pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true @@ -22890,13 +22800,13 @@ packages: '@types/node': 18.15.10 dev: true - /jest-mock@29.6.1: - resolution: {integrity: sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==} + /jest-mock@29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@types/node': 18.15.10 - jest-util: 29.6.1 + jest-util: 29.5.0 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -22911,7 +22821,7 @@ packages: jest-resolve: 27.5.1 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.6.1): + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -22920,7 +22830,7 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.6.1 + jest-resolve: 29.5.0 dev: true /jest-regex-util@27.5.1: @@ -22944,12 +22854,12 @@ packages: - supports-color dev: true - /jest-resolve-dependencies@29.6.1: - resolution: {integrity: sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==} + /jest-resolve-dependencies@29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.6.1 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -22970,16 +22880,16 @@ packages: slash: 3.0.0 dev: true - /jest-resolve@29.6.1: - resolution: {integrity: sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==} + /jest-resolve@29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 - jest-pnp-resolver: 1.2.3(jest-resolve@29.6.1) - jest-util: 29.6.1 - jest-validate: 29.6.1 + jest-haste-map: 29.5.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) + jest-util: 29.5.0 + jest-validate: 29.5.0 resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 @@ -23017,29 +22927,29 @@ packages: - utf-8-validate dev: true - /jest-runner@29.6.1: - resolution: {integrity: sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==} + /jest-runner@29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.6.1 - '@jest/environment': 29.6.1 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 + '@jest/console': 29.5.0 + '@jest/environment': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 jest-docblock: 29.4.3 - jest-environment-node: 29.6.1 - jest-haste-map: 29.6.1 - jest-leak-detector: 29.6.1 - jest-message-util: 29.6.1 - jest-resolve: 29.6.1 - jest-runtime: 29.6.1 - jest-util: 29.6.1 - jest-watcher: 29.6.1 - jest-worker: 29.6.1 + jest-environment-node: 29.5.0 + jest-haste-map: 29.5.0 + jest-leak-detector: 29.5.0 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 + jest-worker: 29.5.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: @@ -23076,30 +22986,30 @@ packages: - supports-color dev: true - /jest-runtime@29.6.1: - resolution: {integrity: sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==} + /jest-runtime@29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.6.1 - '@jest/fake-timers': 29.6.1 - '@jest/globals': 29.6.1 - '@jest/source-map': 29.6.0 - '@jest/test-result': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/globals': 29.5.0 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 29.6.1 - jest-message-util: 29.6.1 - jest-mock: 29.6.1 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 jest-regex-util: 29.4.3 - jest-resolve: 29.6.1 - jest-snapshot: 29.6.1 - jest-util: 29.6.1 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -23120,7 +23030,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 '@jest/transform': 27.5.1 @@ -23144,30 +23054,32 @@ packages: - supports-color dev: true - /jest-snapshot@29.6.1: - resolution: {integrity: sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==} + /jest-snapshot@29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.22.5 '@babel/generator': 7.22.5 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 - '@jest/expect-utils': 29.6.1 - '@jest/transform': 29.6.1 - '@jest/types': 29.6.1 + '@jest/expect-utils': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 - expect: 29.6.1 + expect: 29.5.0 graceful-fs: 4.2.11 - jest-diff: 29.6.1 + jest-diff: 29.5.0 jest-get-type: 29.4.3 - jest-matcher-utils: 29.6.1 - jest-message-util: 29.6.1 - jest-util: 29.6.1 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 natural-compare: 1.4.0 - pretty-format: 29.6.1 + pretty-format: 29.5.0 semver: 7.5.3 transitivePeerDependencies: - supports-color @@ -23189,19 +23101,7 @@ packages: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 - '@types/node': 18.15.10 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-util@29.6.1: - resolution: {integrity: sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 '@types/node': 18.15.10 chalk: 4.1.2 ci-info: 3.8.0 @@ -23221,16 +23121,16 @@ packages: pretty-format: 27.5.1 dev: true - /jest-validate@29.6.1: - resolution: {integrity: sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==} + /jest-validate@29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.1 + '@jest/types': 29.5.0 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.6.1 + pretty-format: 29.5.0 dev: true /jest-watcher@27.5.1: @@ -23246,17 +23146,17 @@ packages: string-length: 4.0.2 dev: true - /jest-watcher@29.6.1: - resolution: {integrity: sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==} + /jest-watcher@29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.6.1 - '@jest/types': 29.6.1 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 '@types/node': 18.15.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.6.1 + jest-util: 29.5.0 string-length: 4.0.2 dev: true @@ -23278,12 +23178,12 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker@29.6.1: - resolution: {integrity: sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==} + /jest-worker@29.5.0: + resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 18.15.10 - jest-util: 29.6.1 + jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -23407,7 +23307,7 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) '@babel/preset-env': 7.20.2(@babel/core@7.22.5) '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) @@ -23437,8 +23337,8 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/preset-env': 7.21.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.22.5) + '@babel/preset-env': 7.21.5(@babel/core@7.21.3) '@babel/preset-flow': 7.18.6(@babel/core@7.22.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.22.5) '@babel/register': 7.21.0(@babel/core@7.22.5) @@ -23466,7 +23366,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.10.0 + acorn: 8.9.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -24630,8 +24530,8 @@ packages: /micromark-extension-mdxjs@1.0.0: resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) micromark-extension-mdx-expression: 1.0.4 micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 @@ -24962,16 +24862,16 @@ packages: /mlly@1.2.0: resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.1.2 + pkg-types: 1.0.2 + ufo: 1.1.1 dev: true /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 @@ -25291,8 +25191,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -25606,8 +25506,8 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 - /ora@6.3.0: - resolution: {integrity: sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==} + /ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: chalk: 5.2.0 @@ -25617,7 +25517,7 @@ packages: is-unicode-supported: 1.3.0 log-symbols: 5.1.0 stdin-discarder: 0.1.0 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 wcwidth: 1.0.1 dev: false @@ -25949,6 +25849,14 @@ packages: find-up: 5.0.0 dev: true + /pkg-types@1.0.2: + resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.0 + pathe: 1.1.1 + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -26007,7 +25915,7 @@ packages: postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.1 /postcss-import@15.1.0(postcss@8.4.24): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -26352,11 +26260,11 @@ packages: react-is: 17.0.2 dev: true - /pretty-format@29.6.1: - resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} + /pretty-format@29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.6.0 + '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -26751,7 +26659,7 @@ packages: react-base16-styling: 0.6.0 react-dom: 18.2.0(react@18.2.0) react-lifecycles-compat: 3.0.4 - react-textarea-autosize: 8.5.1(@types/react@18.0.37)(react@18.2.0) + react-textarea-autosize: 8.5.2(@types/react@18.0.37)(react@18.2.0) transitivePeerDependencies: - '@types/react' - encoding @@ -26959,8 +26867,8 @@ packages: tslib: 2.5.2 dev: false - /react-textarea-autosize@8.5.1(@types/react@18.0.37)(react@18.2.0): - resolution: {integrity: sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog==} + /react-textarea-autosize@8.5.2(@types/react@18.0.37)(react@18.2.0): + resolution: {integrity: sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -27573,7 +27481,7 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 jest-worker: 26.6.2 rollup: 2.70.2 serialize-javascript: 4.0.0 @@ -27632,13 +27540,6 @@ packages: optionalDependencies: fsevents: 2.3.2 - /rollup@3.20.2: - resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - /rollup@3.25.1: resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -27830,6 +27731,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} @@ -28004,6 +27906,15 @@ packages: vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 + /shiki@0.14.3: + resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + dependencies: + ansi-sequence-parser: 1.1.0 + jsonc-parser: 3.2.0 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + dev: false + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -28074,6 +27985,7 @@ packages: /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + dev: true /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} @@ -28118,10 +28030,8 @@ packages: resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==} dev: true - /solid-js@1.6.15: - resolution: {integrity: sha512-xEuMUIdDf4YRFT4i3XEJCNg4Y21lZiWWPSEqj0R3UnLLpENGJVXkqpmbIyRU5CuMImKPIEu5CYgmFKL7Npfe1A==} - dependencies: - csstype: 3.1.1 + /solid-js@1.4.3: + resolution: {integrity: sha512-3uh2cbT4ICronIasLAxycF6SVgvqcfwFCDCzlEA9CEahn1qQg8Rw8aRGiI4O51PrHcN5aPRO9knYYRCs0PgzcQ==} dev: false /sorcery@0.10.0: @@ -28370,7 +28280,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} @@ -28442,8 +28352,8 @@ packages: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -28485,13 +28395,13 @@ packages: /strip-literal@0.4.2: resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 dev: true /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 dev: true /strnum@1.0.5: @@ -28641,12 +28551,6 @@ packages: dependencies: has-flag: 4.0.0 - /supports-esm@1.0.0: - resolution: {integrity: sha512-96Am8CDqUaC0I2+C/swJ0yEvM8ZnGn4unoers/LSdE4umhX7mELzqyLzx3HnZAluq5PXIsGMKqa7NkqaeHMPcg==} - dependencies: - has-package-exports: 1.3.0 - dev: false - /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} @@ -28667,7 +28571,7 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 chokidar: 3.5.3 - fast-glob: 3.3.0 + fast-glob: 3.2.12 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 @@ -28866,7 +28770,7 @@ packages: detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.0 + fast-glob: 3.2.12 glob-parent: 6.0.2 is-glob: 4.0.3 lilconfig: 2.1.0 @@ -29033,7 +28937,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 esbuild: 0.17.19 jest-worker: 27.5.1 schema-utils: 3.1.1 @@ -29042,37 +28946,13 @@ packages: webpack: 5.76.2(esbuild@0.17.19) dev: true - /terser-webpack-plugin@5.3.7(webpack@5.76.2): - resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.18 - jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.1 - terser: 5.16.8 - webpack: 5.76.2 - dev: true - /terser@5.16.8: resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.10.0 + acorn: 8.9.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -29455,7 +29335,7 @@ packages: micromatch: 4.0.5 semver: 7.3.8 typescript: 4.9.5 - webpack: 5.76.2 + webpack: 5.76.2(esbuild@0.17.19) dev: true /ts-morph@17.0.1: @@ -29485,7 +29365,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 '@types/node': 18.15.10 - acorn: 8.10.0 + acorn: 8.9.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -29747,7 +29627,6 @@ packages: /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} - dev: false /ufo@1.1.2: resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} @@ -29932,7 +29811,7 @@ packages: /unplugin@0.10.2: resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==} dependencies: - acorn: 8.10.0 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.6 @@ -29943,8 +29822,8 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.5): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /update-browserslist-db@1.0.10(browserslist@4.21.5): + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -29953,16 +29832,6 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.9 - escalade: 3.1.1 - picocolors: 1.0.0 - /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -30190,13 +30059,13 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true - /validate-html-nesting@1.2.1: - resolution: {integrity: sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==} + /validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} dev: false /validate-npm-package-license@3.0.4: @@ -30267,11 +30136,11 @@ packages: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) mlly: 1.2.0 - pathe: 1.1.0 + pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) transitivePeerDependencies: - '@types/node' - less @@ -30291,9 +30160,9 @@ packages: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) mlly: 1.2.0 - pathe: 1.1.0 + pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) transitivePeerDependencies: - '@types/node' - less @@ -30315,7 +30184,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) transitivePeerDependencies: - '@types/node' - less @@ -30364,7 +30233,7 @@ packages: chokidar: 3.5.3 commander: 8.3.0 eslint: 8.38.0 - fast-glob: 3.3.0 + fast-glob: 3.2.12 fs-extra: 11.1.1 lodash.debounce: 4.0.8 lodash.pick: 4.4.0 @@ -30401,7 +30270,7 @@ packages: - supports-color dev: true - /vite-plugin-dts@1.7.3(@types/node@20.4.1)(vite@4.4.2): + /vite-plugin-dts@1.7.3(@types/node@20.4.1)(vite@4.4.0): resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -30415,7 +30284,7 @@ packages: fs-extra: 10.1.0 kolorist: 1.7.0 ts-morph: 17.0.1 - vite: 4.4.2(@types/node@20.4.1)(less@4.1.3) + vite: 4.4.0(@types/node@20.4.1)(less@4.1.3) transitivePeerDependencies: - '@types/node' - rollup @@ -30555,7 +30424,7 @@ packages: esbuild: 0.16.17 postcss: 8.4.24 resolve: 1.22.1 - rollup: 3.20.2 + rollup: 3.26.2 optionalDependencies: fsevents: 2.3.2 dev: true @@ -30589,7 +30458,7 @@ packages: esbuild: 0.17.14 postcss: 8.4.24 resolve: 1.22.1 - rollup: 3.20.2 + rollup: 3.26.2 optionalDependencies: fsevents: 2.3.2 @@ -30622,7 +30491,7 @@ packages: esbuild: 0.17.14 postcss: 8.4.24 resolve: 1.22.1 - rollup: 3.20.2 + rollup: 3.26.2 optionalDependencies: fsevents: 2.3.2 @@ -30658,8 +30527,8 @@ packages: optionalDependencies: fsevents: 2.3.2 - /vite@4.4.2(@types/node@18.15.10)(less@4.1.3): - resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} + /vite@4.4.0(@types/node@18.15.10)(less@4.1.3): + resolution: {integrity: sha512-Wf+DCEjuM8aGavEYiF77hnbxEZ+0+/jC9nABR46sh5Xi+GYeSvkeEFRiVuI3x+tPjxgZeS91h1jTAQTPFgePpA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -30687,15 +30556,15 @@ packages: optional: true dependencies: '@types/node': 18.15.10 - esbuild: 0.18.11 + esbuild: 0.18.12 less: 4.1.3 postcss: 8.4.24 rollup: 3.26.2 optionalDependencies: fsevents: 2.3.2 - /vite@4.4.2(@types/node@20.4.1)(less@4.1.3): - resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} + /vite@4.4.0(@types/node@20.4.1)(less@4.1.3): + resolution: {integrity: sha512-Wf+DCEjuM8aGavEYiF77hnbxEZ+0+/jC9nABR46sh5Xi+GYeSvkeEFRiVuI3x+tPjxgZeS91h1jTAQTPFgePpA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -30723,7 +30592,7 @@ packages: optional: true dependencies: '@types/node': 20.4.1 - esbuild: 0.18.11 + esbuild: 0.18.12 less: 4.1.3 postcss: 8.4.24 rollup: 3.26.2 @@ -30753,7 +30622,7 @@ packages: vite: 4.2.1(@types/node@20.3.2) dev: true - /vitefu@0.2.4(vite@4.4.2): + /vitefu@0.2.4(vite@4.4.0): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -30761,7 +30630,7 @@ packages: vite: optional: true dependencies: - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) dev: false /vitest@0.24.5(jsdom@20.0.3): @@ -30836,7 +30705,7 @@ packages: '@vitest/runner': 0.28.5 '@vitest/spy': 0.28.5 '@vitest/utils': 0.28.5 - acorn: 8.8.2 + acorn: 8.9.0 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 @@ -30851,7 +30720,7 @@ packages: tinybench: 2.4.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) vite-node: 0.28.5(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -30916,7 +30785,7 @@ packages: tinybench: 2.4.0 tinypool: 0.4.0 tinyspy: 1.1.1 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) vite-node: 0.29.8(@types/node@18.15.10) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -30968,7 +30837,7 @@ packages: '@vitest/snapshot': 0.33.0 '@vitest/spy': 0.33.0 '@vitest/utils': 0.33.0 - acorn: 8.10.0 + acorn: 8.9.0 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.7 @@ -30981,7 +30850,7 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.6.0 - vite: 4.4.2(@types/node@18.15.10)(less@4.1.3) + vite: 4.4.0(@types/node@18.15.10)(less@4.1.3) vite-node: 0.33.0(@types/node@18.15.10)(less@4.1.3) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -31194,46 +31063,6 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: true - /webpack@5.76.2: - resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.10.0 - acorn-import-assertions: 1.8.0(acorn@8.10.0) - browserslist: 4.21.9 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.12.0 - es-module-lexer: 0.9.3 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.1.1 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.7(webpack@5.76.2) - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /webpack@5.76.2(esbuild@0.17.19): resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} engines: {node: '>=10.13.0'} @@ -31249,9 +31078,9 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.10.0 - acorn-import-assertions: 1.8.0(acorn@8.10.0) - browserslist: 4.21.9 + acorn: 8.9.0 + acorn-import-assertions: 1.8.0(acorn@8.9.0) + browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 @@ -31471,7 +31300,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false /wrappy@1.0.2: @@ -31717,3 +31546,7 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false From dc5d81b99f03e5173ccf3c7532b600832d5d8b94 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Mon, 17 Jul 2023 10:43:26 +0300 Subject: [PATCH 110/123] publish ui package --- packages/ui/CHANGELOG.md | 6 ++++++ packages/ui/package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 9fdaad8f4c..54344390d3 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/ui +## 0.1.0 + +### Minor Changes + +- Update UI components + ## 0.0.2 ### Patch Changes diff --git a/packages/ui/package.json b/packages/ui/package.json index 610d6d6f2a..2b44d7414f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/ui", "private": false, - "version": "0.0.2", + "version": "0.1.0", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", From 0c5693f754445c19f332efe6cde12da100922e9c Mon Sep 17 00:00:00 2001 From: Illia Rudniev <cheskmr@gmail.com> Date: Mon, 17 Jul 2023 22:38:22 +0300 Subject: [PATCH 111/123] Illia rudniev/fix/active agents stats (#697) * fix: agents stats now fetching all available users & updated endpoints & ui * feat: added favicon --- apps/workflows-dashboard/index.html | 3 +- .../public/favicon-16x16.png | Bin 0 -> 543 bytes .../public/favicon-32x32.png | Bin 0 -> 813 bytes apps/workflows-dashboard/public/vite.svg | 1 - .../domains/workflows/api/users/users.api.ts | 2 +- .../workflows/api/users/users.types.ts | 2 +- .../AgentsActivityChart.tsx | 3 +- .../useActivePerWorkflowStatsQuery.ts | 1 - .../useActiveUsersQuery.ts | 5 +- pnpm-lock.yaml | 210 +++++++++++++++++- .../src/metrics/dto/get-active-users.dto.ts | 3 - .../src/metrics/metrics.controller.ts | 11 +- .../metrics/repository/metrics.repository.ts | 8 +- ...ve-user.model.ts => metrics-user.model.ts} | 2 +- .../repository/sql/select-active-users.sql.ts | 3 +- .../types/list-active-users.params.ts | 3 - .../src/metrics/service/metrics.service.ts | 7 +- 17 files changed, 218 insertions(+), 46 deletions(-) create mode 100644 apps/workflows-dashboard/public/favicon-16x16.png create mode 100644 apps/workflows-dashboard/public/favicon-32x32.png delete mode 100644 apps/workflows-dashboard/public/vite.svg delete mode 100644 services/workflows-service/src/metrics/dto/get-active-users.dto.ts rename services/workflows-service/src/metrics/repository/models/{active-user.model.ts => metrics-user.model.ts} (86%) delete mode 100644 services/workflows-service/src/metrics/repository/types/list-active-users.params.ts diff --git a/apps/workflows-dashboard/index.html b/apps/workflows-dashboard/index.html index 778fbf165d..9fb404d483 100644 --- a/apps/workflows-dashboard/index.html +++ b/apps/workflows-dashboard/index.html @@ -2,7 +2,8 @@ <html lang="en"> <head> <meta charset="UTF-8" /> - <link rel="icon" type="image/svg+xml" href="/vite.svg" /> + <link rel="icon" type="image/png" sizes="32x32" href="/public/favicon-32x32.png" /> + <link rel="icon" type="image/png" sizes="16x16" href="/public/favicon-16x16.png" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Workflow Dashboard</title> </head> diff --git a/apps/workflows-dashboard/public/favicon-16x16.png b/apps/workflows-dashboard/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fb2708f5bd8e2f3e2dcb05d5980660438e3022 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UASkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY0t>0)3IFPO6{&;}^Ml;rL1!tlSn|IB_MkF&rd zvY3H^TNs2H8D`Cq01C2~c>21sKW7!^kP=CYm%9WMTJP!N7$R{wIpF}K#LPq<j-|6# z)TG{vZE1M7Y5jBE{cg4`*)MF>&Ml}~JEai_T0unQ&;H+kwaY~knfBaU6!o;`yU2GV z10XOoFnDs+`0WP&WRYFWp^9Rb{hq(p-(Ra=xVz36B>U&LYW=TkTH8fee{o$<cH~Y? zLGesZ=U=9rD;Os4nJ;bK{OV-nnS$~q_vT$Je>;JT83<fH{0mn;xppi61l!|>+D_kQ z=>KR~p|~&u7zhliC9V-ADTyViR>?)FK#IZ0z{ptFz*N`BIK;rh%E-*h$Uxh`z{<d2 z_qqDjC>nC}Q!>*kacej=`M5YxLwHq4L`hI$xk5ovep+TuszOO+L8?M#K}j+LL&coO zpLjS5!!$Hb`JX=H`80@uS(#fenOj&{*n6@Fv#^3ogUR6(X64Nx3a4*eIdSC75t$?G fryD#Lc<C{`5*IA_<YYP(Xa$3(tDnm{r-UW|AKJUT literal 0 HcmV?d00001 diff --git a/apps/workflows-dashboard/public/favicon-32x32.png b/apps/workflows-dashboard/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..5664f07edd9a5cf0fc94754cd7376d024b52192e GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU`q0KcVYP7-hXC4kjGiz z5n0T@z%2~Ij105pNB{-dOFVsD*`KqDb4ZD##mik{U|`(q>Eak-ar*2eTMubQk>me= zUSe5dC=je@>AmtrK+KecXl-7Lj%7C%X0F`9&VGE>(hCO<`Zje;6MAuJ?Sll}rjN|B zTefDnM&Amsk1|m@*x#MrQ*rO^ea}~OpXc2FcJKGcivQpL9r)VrI-m1u>ZwzY-i2=2 zZLB)^r@p>S_!r^jA)6*0J3PHCctP;Ppe@httu{HjA#(p4@#(7>9(?4pxAJWen<>k{ zklhqL^?B%PdxwH2({#faZZX~2_xV+8Zj8p8Nqk{;=ex@S_Ojf_w|G#&^594GBEF<! z92H4l?HAOZuWEU;OTl2ena+z>m%rW9`nilL|HIe(Pbx_v7iK-L*uBPufn||$%AEqu z>m25*vQ^6%mO8(FSop5}OGEwC_W_gcWVk$NUbd~xh3`e<Y<tTWE#J!mE8LPVz4s|P zx0d<M`<bsZ>x87IuBh9^{H0iTf&9k@`ldgpq%6D5{(v|9FPkK9aC?`I-qB_=hIx^G z;*xx(8w<9Z?BA=I#qePb+vJ_6?{B%{X2XzBJu7Y1p(l5pykx86^laYTP2P6)jKMv_ zPbz=im5c*tOEyH?&el5F{O|(n^cOk#+WX@pH+(Jq$nigX4r9l%9k=DDH~9hMR<*=6 zq9i4;B-JXpC>2OC7#SED>l&Eq8X1QeSXddESs58<8yHv_80<b*zZykDZhlH;S|x4` zrzRg42Wkkf3W+EQN-S3>D9TUE%t=)!sVqoU$Sf#HW?-n8^Y{}FM`4(T#wq{PXFQ(< zF)%B0>m_pwD+_y17GV}vaA`0(oWiWUIYi;~jVmXPoH-(Mg#C1b#{w@shF9W(C7+y3 Rrvj~D@O1TaS?83{1OVW#N0<Nr literal 0 HcmV?d00001 diff --git a/apps/workflows-dashboard/public/vite.svg b/apps/workflows-dashboard/public/vite.svg deleted file mode 100644 index e7b8dfb1b2..0000000000 --- a/apps/workflows-dashboard/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> \ No newline at end of file diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts index 407594de3a..40f0b1b01e 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.api.ts @@ -3,7 +3,7 @@ import { GetActiveUsersDto } from '@app/domains/workflows/api/users/users.types' import { request } from '@app/lib/request'; export const fetchActiveUsers = async (query: GetActiveUsersDto): Promise<IUser[]> => { - const result = await request.get<IUser[]>('/metrics/users/active-users', { params: query }); + const result = await request.get<IUser[]>('/metrics/users', { params: query }); return result.data; }; diff --git a/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts index 39267726dc..b95f59e164 100644 --- a/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts +++ b/apps/workflows-dashboard/src/domains/workflows/api/users/users.types.ts @@ -7,5 +7,5 @@ export interface IUser { } export interface GetActiveUsersDto { - fromDate: number; + // fromDate: number; } diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx index a0f22ceeb5..272e7d4b5b 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx +++ b/apps/workflows-dashboard/src/pages/Workflows/components/molecules/AgentsActivityChart/AgentsActivityChart.tsx @@ -18,7 +18,7 @@ export const AgentsActivityChart = ({ isLoading, data }: Props) => { const chartItems = useMemo( () => data.map(item => { - const hourDifference = dayjs(item.lastActiveAt).diff(Date.now(), 'hour'); + const hourDifference = Math.abs(dayjs(item.lastActiveAt).diff(Date.now(), 'hour')); return ( <div @@ -41,7 +41,6 @@ export const AgentsActivityChart = ({ isLoading, data }: Props) => { return ( <MetricListChart title="Online/Offline Agents" - description={'( last 1 hour )'} isLoading={isLoading} items={chartItems} emptyPlaceholder={<div>No recent activity found.</div>} diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts index 86a51e9a4e..aa19251a88 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/ActivePerWorkflow/hooks/useActivePerWorkflowStatsQuery/useActivePerWorkflowStatsQuery.ts @@ -3,7 +3,6 @@ import { useQuery } from '@tanstack/react-query'; export const useActivePerWorkflowStatsQuery = () => { const { data = [], isLoading, isFetching } = useQuery(workflowMetricsKeys.workflowRuntimeStats()); - console.log('data', data); return { data, diff --git a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts index e7522ab146..a2f2224df9 100644 --- a/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts +++ b/apps/workflows-dashboard/src/pages/Workflows/components/organisms/metrics/AgentsActivityStats/hooks/useActiveUsersQuery/useActiveUsersQuery.ts @@ -1,12 +1,9 @@ import { usersKeys } from '@app/domains/workflows/api/users'; -import { useWorkflowFilters } from '@app/pages/Workflows/components/providers/WorkflowsFiltersProvider/hooks/useWorkflowFilters'; import { useQuery } from '@tanstack/react-query'; export const useActiveUsersQuery = () => { - const { filters } = useWorkflowFilters(); const { data = [], isLoading } = useQuery({ - ...usersKeys.activeUsers({ fromDate: filters.fromDate! }), - enabled: Boolean(filters.fromDate), + ...usersKeys.activeUsers({}), }); return { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a9239e7a9..bcfe8b6b85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,8 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false importers: @@ -269,7 +273,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -9067,7 +9071,7 @@ packages: tsconfig-paths: 4.1.2 tsconfig-paths-webpack-plugin: 4.0.1 typescript: 4.9.5 - webpack: 5.76.2(esbuild@0.17.19) + webpack: 5.76.2 webpack-node-externals: 3.0.0 transitivePeerDependencies: - '@swc/core' @@ -19311,7 +19315,7 @@ packages: '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) eslint: 8.44.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.44.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.44.0) eslint-plugin-n: 15.6.1(eslint@8.44.0) eslint-plugin-promise: 6.1.1(eslint@8.44.0) typescript: 4.9.5 @@ -19328,7 +19332,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.44.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.44.0) eslint-plugin-n: 15.6.1(eslint@8.44.0) eslint-plugin-promise: 6.1.1(eslint@8.44.0) dev: true @@ -19393,6 +19397,64 @@ packages: - supports-color dev: true + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.44.0): + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.44.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-astro@0.21.0(eslint@8.44.0): resolution: {integrity: sha512-7pEhTfYT+tlOMOSmQV77TNgCeuFZgqSAqJPTHh6LYlwLqYyBQLURc5RRtlQqCJkufSh4Fan4nsV3LXCT/vjpCA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -19489,6 +19551,72 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.44.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.44.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.44.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-n@15.6.1(eslint@8.44.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -20663,7 +20791,7 @@ packages: semver: 7.5.3 tapable: 2.2.1 typescript: 4.9.5 - webpack: 5.76.2(esbuild@0.17.19) + webpack: 5.76.2 dev: true /form-data@2.5.1: @@ -28946,6 +29074,30 @@ packages: webpack: 5.76.2(esbuild@0.17.19) dev: true + /terser-webpack-plugin@5.3.7(webpack@5.76.2): + resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.1 + terser: 5.16.8 + webpack: 5.76.2 + dev: true + /terser@5.16.8: resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==} engines: {node: '>=10'} @@ -29335,7 +29487,7 @@ packages: micromatch: 4.0.5 semver: 7.3.8 typescript: 4.9.5 - webpack: 5.76.2(esbuild@0.17.19) + webpack: 5.76.2 dev: true /ts-morph@17.0.1: @@ -31063,6 +31215,46 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: true + /webpack@5.76.2: + resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.9.0 + acorn-import-assertions: 1.8.0(acorn@8.9.0) + browserslist: 4.21.5 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.12.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.7(webpack@5.76.2) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /webpack@5.76.2(esbuild@0.17.19): resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==} engines: {node: '>=10.13.0'} @@ -31546,7 +31738,3 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false diff --git a/services/workflows-service/src/metrics/dto/get-active-users.dto.ts b/services/workflows-service/src/metrics/dto/get-active-users.dto.ts deleted file mode 100644 index 32c824d16a..0000000000 --- a/services/workflows-service/src/metrics/dto/get-active-users.dto.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { DateQueryParamsDto } from '@/metrics/common/dto/date-query-params.dto'; - -export class GetActiveUsersDto extends DateQueryParamsDto {} diff --git a/services/workflows-service/src/metrics/metrics.controller.ts b/services/workflows-service/src/metrics/metrics.controller.ts index 10a59ba6a5..1c218a662f 100644 --- a/services/workflows-service/src/metrics/metrics.controller.ts +++ b/services/workflows-service/src/metrics/metrics.controller.ts @@ -1,11 +1,10 @@ import { NotFoundException } from '@/errors'; -import { GetActiveUsersDto } from '@/metrics/dto/get-active-users.dto'; import { GetUserCasesResolvedDailyDto } from '@/metrics/dto/get-user-cases-resolved-daily.dto'; import { GetUserWorkflowProcessingStatisticDto } from '@/metrics/dto/get-user-workflow-processing-statistic.dto'; import { GetUsersAssignedCasesStatisticDto } from '@/metrics/dto/get-users-assigned-cases-statistic.dto'; import { GetUsersResolvedCasesStatisticDto } from '@/metrics/dto/get-users-resolved-cases-statistic.dto'; import { GetWorkflowRuntimesStatusCountDto } from '@/metrics/dto/get-workflow-runtimes-status-count.dto'; -import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { MetricsUserModel } from '@/metrics/repository/models/metrics-user.model'; import { UserAssignedCasesStatisticModel } from '@/metrics/repository/models/user-assigned-cases-statistic.model'; import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; import { UserResolvedCasesStatisticModel } from '@/metrics/repository/models/user-resolved-cases-statistic.model'; @@ -78,10 +77,10 @@ export class MetricsController { }); } - @ApiOkResponse({ type: [ActiveUserModel] }) + @ApiOkResponse({ type: [MetricsUserModel] }) @common.HttpCode(200) - @common.Get('/users/active-users') - async getActiveUsers(@common.Query() query: GetActiveUsersDto): Promise<ActiveUserModel[]> { - return await this.metricsService.listActiveUsers(query); + @common.Get('/users') + async getActiveUsers(): Promise<MetricsUserModel[]> { + return await this.metricsService.listActiveUsers(); } } diff --git a/services/workflows-service/src/metrics/repository/metrics.repository.ts b/services/workflows-service/src/metrics/repository/metrics.repository.ts index cd7341b4fd..02911bd2dc 100644 --- a/services/workflows-service/src/metrics/repository/metrics.repository.ts +++ b/services/workflows-service/src/metrics/repository/metrics.repository.ts @@ -25,8 +25,7 @@ import { ListUserCasesResolvedDailyParams } from '@/metrics/repository/types/lis import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; import { IAggregateCasesResolvedDaily } from '@/metrics/repository/types/aggregate-cases-resolved-daily'; import { aggregateDailyCasesResolvedQuery } from '@/metrics/repository/sql/aggregate-daily-cases-resolved.sql'; -import { ListActiveUsersParams } from '@/metrics/repository/types/list-active-users.params'; -import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { MetricsUserModel } from '@/metrics/repository/models/metrics-user.model'; import { ISelectActiveUser } from '@/metrics/repository/types/select-active-user'; import { selectActiveUsersQuery } from '@/metrics/repository/sql/select-active-users.sql'; import { FindUsersAssignedCasesStatisticParams } from '@/metrics/repository/types/find-users-assigned-cases-statistic.params'; @@ -172,12 +171,11 @@ export class MetricsRepository { ); } - async listActiveUsers(params: ListActiveUsersParams): Promise<ActiveUserModel[]> { + async listUsers(): Promise<MetricsUserModel[]> { const results = await this.prismaService.$queryRawUnsafe<ISelectActiveUser[]>( selectActiveUsersQuery, - params.fromDate, ); - return results.map(result => plainToClass(ActiveUserModel, result)); + return results.map(result => plainToClass(MetricsUserModel, result)); } } diff --git a/services/workflows-service/src/metrics/repository/models/active-user.model.ts b/services/workflows-service/src/metrics/repository/models/metrics-user.model.ts similarity index 86% rename from services/workflows-service/src/metrics/repository/models/active-user.model.ts rename to services/workflows-service/src/metrics/repository/models/metrics-user.model.ts index ab388adeee..d088317425 100644 --- a/services/workflows-service/src/metrics/repository/models/active-user.model.ts +++ b/services/workflows-service/src/metrics/repository/models/metrics-user.model.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; -export class ActiveUserModel { +export class MetricsUserModel { @ApiProperty() id!: string; diff --git a/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts b/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts index 44916984e0..7b671aaf85 100644 --- a/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts +++ b/services/workflows-service/src/metrics/repository/sql/select-active-users.sql.ts @@ -2,5 +2,4 @@ export const selectActiveUsersQuery = ` select id, "firstName", "lastName", "lastActiveAt" from "User" - where "User"."lastActiveAt" >= $1 -order by "lastActiveAt" desc`; +order by "lastActiveAt" desc nulls last`; diff --git a/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts b/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts deleted file mode 100644 index bce6e550db..0000000000 --- a/services/workflows-service/src/metrics/repository/types/list-active-users.params.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { BaseParams } from '@/metrics/common/types/base-query.params'; - -export type ListActiveUsersParams = BaseParams; diff --git a/services/workflows-service/src/metrics/service/metrics.service.ts b/services/workflows-service/src/metrics/service/metrics.service.ts index b3e8f7ef9a..f217837af3 100644 --- a/services/workflows-service/src/metrics/service/metrics.service.ts +++ b/services/workflows-service/src/metrics/service/metrics.service.ts @@ -1,5 +1,5 @@ import { MetricsRepository } from '@/metrics/repository/metrics.repository'; -import { ActiveUserModel } from '@/metrics/repository/models/active-user.model'; +import { MetricsUserModel } from '@/metrics/repository/models/metrics-user.model'; import { UserAssignedCasesStatisticModel } from '@/metrics/repository/models/user-assigned-cases-statistic.model'; import { CasesResolvedInDay } from '@/metrics/repository/models/cases-resolved-daily.model'; import { UserResolvedCasesStatisticModel } from '@/metrics/repository/models/user-resolved-cases-statistic.model'; @@ -8,7 +8,6 @@ import { WorkflowRuntimeStatusCaseCountModel } from '@/metrics/repository/models import { FindUsersAssignedCasesStatisticParams } from '@/metrics/repository/types/find-users-assigned-cases-statistic.params'; import { FindUsersResolvedCasesStatisticParams } from '@/metrics/repository/types/find-users-resolved-cases-statistic.params'; import { GetRuntimeStatusCaseCountParams } from '@/metrics/repository/types/get-runtime-status-case-count.params'; -import { ListActiveUsersParams } from '@/metrics/repository/types/list-active-users.params'; import { ListUserCasesResolvedDailyParams } from '@/metrics/repository/types/list-user-cases-resolved-daily.params'; import { UserWorkflowProcessingStatisticModel } from '@/metrics/service/models/user-workflow-processing-statistic.model'; import { GetUserWorkflowProcessingStatisticParams } from '@/metrics/service/types/get-user-workflow-processing-statistic.params'; @@ -79,7 +78,7 @@ export class MetricsService { return await this.metricsRepository.listCasesResolvedDaily(params); } - async listActiveUsers(params: ListActiveUsersParams): Promise<ActiveUserModel[]> { - return await this.metricsRepository.listActiveUsers(params); + async listActiveUsers(): Promise<MetricsUserModel[]> { + return await this.metricsRepository.listUsers(); } } From d5c710aeb6acc9153996a8577667fe5e42ba6259 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Sat, 22 Jul 2023 08:17:25 +0300 Subject: [PATCH 112/123] fix(editabledetails): fixes status not updating from revision to approved or rejected (#687) Co-authored-by: Alon Peretz <Alonp99@gmail.com> --- .../components/EditableDetails/EditableDetails.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index c0d40af6f5..0fc61a470a 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -38,12 +38,6 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ workflowId, }) => { const [formData, setFormData] = useState(data); - const useInitialCategorySetValue = () => { - useEffect(() => { - const categoryValue = form.getValues('category'); - form.setValue('category', categoryValue); - }, [form, data, setFormData]); - }; const POSITIVE_VALUE_INDICATOR = ['approved']; const NEGATIVE_VALUE_INDICATOR = ['revision', 'rejected']; const isDecisionPositive = (isDecisionComponent: boolean, value: string) => { @@ -111,6 +105,11 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ data, }); + // Ensures that the form is reset when the data changes from other instances of `useUpdateWorkflowByIdMutation` i.e. in `useCallToActionLogic`. + useEffect(() => { + form.reset(defaultValues); + }, [form.reset, defaultValues]); + return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className={`flex h-full flex-col`}> From 1fceb5965c6465d312fd282493bef7d832c4d1e4 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 23 Jul 2023 15:27:11 +0300 Subject: [PATCH 113/123] Revert "fix(editabledetails): fixes status not updating from revision to approved or rejected (#687)" This reverts commit d5c710aeb6acc9153996a8577667fe5e42ba6259. --- .../components/EditableDetails/EditableDetails.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index 0fc61a470a..c0d40af6f5 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -38,6 +38,12 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ workflowId, }) => { const [formData, setFormData] = useState(data); + const useInitialCategorySetValue = () => { + useEffect(() => { + const categoryValue = form.getValues('category'); + form.setValue('category', categoryValue); + }, [form, data, setFormData]); + }; const POSITIVE_VALUE_INDICATOR = ['approved']; const NEGATIVE_VALUE_INDICATOR = ['revision', 'rejected']; const isDecisionPositive = (isDecisionComponent: boolean, value: string) => { @@ -105,11 +111,6 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ data, }); - // Ensures that the form is reset when the data changes from other instances of `useUpdateWorkflowByIdMutation` i.e. in `useCallToActionLogic`. - useEffect(() => { - form.reset(defaultValues); - }, [form.reset, defaultValues]); - return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className={`flex h-full flex-col`}> From b1ccffe284bc0935936d34afcd03329ad650f8ee Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 23 Jul 2023 21:57:44 +0300 Subject: [PATCH 114/123] lock ballerine node package --- services/workflows-service/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index ee12e35a26..c424ce238f 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -39,7 +39,7 @@ "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", "@ballerine/common": "0.5.6", - "@ballerine/workflow-node-sdk": "^0.4.2", + "@ballerine/workflow-node-sdk": "0.4.2", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", "@nestjs/common": "^9.3.12", From 2128b988d79d489310716a53d8f5fa278fdf82a6 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Sun, 23 Jul 2023 22:04:22 +0300 Subject: [PATCH 115/123] lock ballerine node package --- pnpm-lock.yaml | 114 +++++++++++++++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 41 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcfe8b6b85..f5003e99f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -1569,8 +1569,8 @@ importers: specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-node-sdk': - specifier: ^0.4.2 - version: link:../../sdks/workflow-node-sdk + specifier: 0.4.2 + version: 0.4.2 '@faker-js/faker': specifier: ^7.6.0 version: 7.6.0 @@ -6710,6 +6710,35 @@ packages: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true + /@ballerine/common@0.5.9: + resolution: {integrity: sha512-5tPfpsQ0ibg/H2qSOQ1aeRDDaAig7A+p8nsX6CNTEMUZ/8Pa4Hs02DgRjCWGlQjmczOWblCfwA0+AVj25Ht5qg==} + engines: {node: '>=12'} + dependencies: + ajv: 8.12.0 + json-schema-to-zod: 0.6.3 + dev: false + + /@ballerine/workflow-core@0.4.19: + resolution: {integrity: sha512-F+VeepJVsEp83S7R6F2JoDQzpEq4dgIxPdbqBm2pK7idJo+z9W+yEODsNRURuWuy68GxEmAP5AFFDgRs7HcJ6Q==} + engines: {node: '>=12'} + dependencies: + '@ballerine/common': 0.5.9 + ajv: 8.12.0 + i18n-iso-countries: 7.6.0 + jmespath: 0.16.0 + json-logic-js: 2.0.2 + xstate: 4.38.0 + dev: false + + /@ballerine/workflow-node-sdk@0.4.2: + resolution: {integrity: sha512-3VdcGQVqgOkcohdgbxFB8GFcCMy/eJOyD95E49OPnUEAYECxtxxwyRkJpDMlDiAzYtSznOHG5Is6Z+i0qNQYFA==} + engines: {node: '>=12'} + dependencies: + '@ballerine/workflow-core': 0.4.19 + json-logic-js: 2.0.2 + xstate: 4.38.0 + dev: false + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -12466,13 +12495,6 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-rc.2: - resolution: {integrity: sha512-XQQFN9xYdUwAdWcQopBaNPkj65bSwyBsGEDKFQd1zvwvEv4QKiMWqQVnx84yXfEUu9b4jVolyyB5tQGLS4/6Fw==} - dependencies: - '@storybook/channels': 7.1.0-rc.2 - '@storybook/client-logger': 7.1.0-rc.2 - dev: true - /@storybook/channel-websocket@7.0.0-rc.10: resolution: {integrity: sha512-18xZYdV3CqiGpxIF8os5Vm+T76p+5lx0t8fRTpiPuOfuPF72QYdqmUuXF/tLH4hzj/qwPp56y6Nb7My7pcGPug==} dependencies: @@ -12511,11 +12533,11 @@ packages: resolution: {integrity: sha512-YppvPa1qMyC+oCQJ3tf7Quzpf2NnBlvIRLPJiGAMssUwX5qE0iKe9lTtkNwMaNxEvzz6rDxewSlz+f/MWr4gPw==} dev: true - /@storybook/channels@7.1.0-rc.2: - resolution: {integrity: sha512-P9u0l5T0N2zMo387f0+eRBZ29Jg2+mfalBcsvTs2TYR9Kb/plQlEXhvIRxJm3W/OeEvS2vxixN2YOFeZGWlUYg==} + /@storybook/channels@7.2.0-alpha.0: + resolution: {integrity: sha512-KBlbmk69IiTZ6A5wPWhOsXCD4bXLyxYgO7Qqjl0vEg2swxyekEsRPcW3CBHRyLHnE1y2BmzgodW7tmftV0veFQ==} dependencies: - '@storybook/client-logger': 7.1.0-rc.2 - '@storybook/core-events': 7.1.0-rc.2 + '@storybook/client-logger': 7.2.0-alpha.0 + '@storybook/core-events': 7.2.0-alpha.0 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -12645,8 +12667,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-rc.2: - resolution: {integrity: sha512-O0JLRCFrL7YLMd8sBHdLCqbJBLxW8nCrj7cOwkxt1HY73vy4u/VRujmVZbElaG5QJIoZNUZERyL+oSChthKWlg==} + /@storybook/client-logger@7.2.0-alpha.0: + resolution: {integrity: sha512-rooUZXXmxBDXe1cqHWwRmtqnO20R0dQpQPbY4l18O+9nYqCzlIsu0oUA40mGdFHko7UbHJjuGKnfa0XT9iQM/w==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -12879,8 +12901,8 @@ packages: resolution: {integrity: sha512-sNnqgO5i5DUIqeQfNbr987KWvAciMN9FmMBuYdKjVFMqWFyr44HTgnhfKwZZKl+VMDYkHA9Do7UGSYZIKy0P4g==} dev: true - /@storybook/core-events@7.1.0-rc.2: - resolution: {integrity: sha512-qoYLet2G2vNxpVKPTqLovGNoNSNjID7V2vk9hdUis51osOiVHlgJwXxkz33fUOI18y1JbYoVRM8LZaFaMHGF2g==} + /@storybook/core-events@7.2.0-alpha.0: + resolution: {integrity: sha512-avBltWi+/H0mVZanclZgPyBbbcUTJPyS277jNy9SNRQysYdRgFVk6TNGljqaENha3O6iasvlGPQaNSXQWpW/3w==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -12893,7 +12915,7 @@ packages: '@storybook/core-events': 7.0.0-rc.10 '@storybook/csf': 0.1.1-next.0 '@storybook/csf-tools': 7.0.0-rc.10 - '@storybook/docs-mdx': 0.0.1-next.7 + '@storybook/docs-mdx': 0.1.1-next.0 '@storybook/global': 5.0.0 '@storybook/manager': 7.0.0-rc.10 '@storybook/node-logger': 7.0.0-rc.10 @@ -13060,14 +13082,14 @@ packages: type-fest: 2.19.0 dev: true - /@storybook/docs-mdx@0.0.1-next.7: - resolution: {integrity: sha512-JbgBf/EMBtx65iXtB3pOiX3818UeL9jZ+KAY241OAPqJVXjMQ5KaVOdg/57MSmd508HDIGx7CiImOMEmWwQ9/g==} - dev: true - /@storybook/docs-mdx@0.1.0: resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} dev: true + /@storybook/docs-mdx@0.1.1-next.0: + resolution: {integrity: sha512-t5gehdVj1GxicE2W3mslaqaLGKg6u1wZRySVrWNM4Ue7PmuI0LvJDLcOcaIzizc4Duh+JljMvShK8NTaxhE1PA==} + dev: true + /@storybook/docs-tools@7.0.0-rc.10: resolution: {integrity: sha512-J8DbctJAiGjp4EpKnjyu1hvr99/H2V4KdWpLqHnIozLd4viELBaFQAuJBVE9Vub8B81vpw9s01JJEuCtEFB7rA==} dependencies: @@ -13121,14 +13143,14 @@ packages: '@storybook/preview-api': 7.0.26 dev: true - /@storybook/instrumenter@7.1.0-rc.2: - resolution: {integrity: sha512-xmtSNDfSWRkaMIcAlm3ga6ZjHoZgs0xBR3wEgDBtcygaWewvTtuBK4MxgT5NpJjPxGpjVakzjxGoITLQgrk0Kw==} + /@storybook/instrumenter@7.2.0-alpha.0: + resolution: {integrity: sha512-m1tBvOsmj3AbLjCEco30MQhBCk2dd+9Lw7BecVi/ScxfTwnyM/oA9aGBUolt6UI4BrXFXt7LRpNi0UlkqaMofA==} dependencies: - '@storybook/channels': 7.1.0-rc.2 - '@storybook/client-logger': 7.1.0-rc.2 - '@storybook/core-events': 7.1.0-rc.2 + '@storybook/channels': 7.2.0-alpha.0 + '@storybook/client-logger': 7.2.0-alpha.0 + '@storybook/core-events': 7.2.0-alpha.0 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-rc.2 + '@storybook/preview-api': 7.2.0-alpha.0 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -13317,16 +13339,15 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-rc.2: - resolution: {integrity: sha512-E+X5I1BzFF5aTmclkmoVBYQB+JMx1SUCdkzl+GGX9Wxh5JmyTQDI90ynv0k1aJNvPmC5mS2EMmeqcYoz+AuYZA==} + /@storybook/preview-api@7.2.0-alpha.0: + resolution: {integrity: sha512-4dSKC/hL7jxxRRgDj3uH7YKYN4CI7yA9Swg+uKr2DBfLk+Xzo4uzTi+H7CEOIHVnKlXy2UChV6xRVid5qPpHmQ==} dependencies: - '@storybook/channel-postmessage': 7.1.0-rc.2 - '@storybook/channels': 7.1.0-rc.2 - '@storybook/client-logger': 7.1.0-rc.2 - '@storybook/core-events': 7.1.0-rc.2 + '@storybook/channels': 7.2.0-alpha.0 + '@storybook/client-logger': 7.2.0-alpha.0 + '@storybook/core-events': 7.2.0-alpha.0 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-rc.2 + '@storybook/types': 7.2.0-alpha.0 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -13598,8 +13619,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-rc.2 - '@storybook/instrumenter': 7.1.0-rc.2 + '@storybook/client-logger': 7.2.0-alpha.0 + '@storybook/instrumenter': 7.2.0-alpha.0 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -13698,10 +13719,10 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/types@7.1.0-rc.2: - resolution: {integrity: sha512-pd19JdNEE+yuqBNlvk61423ZWQHrbsVafEmiJLD0wL4oWBZts7dijZPYiyrw+Fhw/EuXWsLg0edizBk2Id+JmA==} + /@storybook/types@7.2.0-alpha.0: + resolution: {integrity: sha512-gLZKnEhIEvV88mqko2XUDMGP8YPZN3EKQamg20V/qXe0EuAkQsIrSmuW/JhGdbbhyEMFVNFnsmPuM7m7yk7x7g==} dependencies: - '@storybook/channels': 7.1.0-rc.2 + '@storybook/channels': 7.2.0-alpha.0 '@types/babel__core': 7.20.1 '@types/express': 4.17.9 file-system-cache: 2.3.0 @@ -18452,6 +18473,10 @@ packages: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false + /diacritics@1.3.0: + resolution: {integrity: sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==} + dev: false + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -21666,6 +21691,13 @@ packages: hasBin: true dev: true + /i18n-iso-countries@7.6.0: + resolution: {integrity: sha512-HPKjOUKS0BkjiY4ayrsuFbu7Ock++pXLs+FAOYl4WfTL5L0ploEH68fiRAP6Zev5g/jvMFt54KcPGJcb942wbg==} + engines: {node: '>= 12'} + dependencies: + diacritics: 1.3.0 + dev: false + /i18next-browser-languagedetector@7.0.1: resolution: {integrity: sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==} dependencies: From 3f56d45a907fccf3060ee5af33e76ff44e9f6963 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 27 Jul 2023 13:36:07 +0300 Subject: [PATCH 116/123] feat(db): add plv8 (#727) * feat(db): add plv8 * feat(local-dev): change dev cors and cookie session to allow local comm with cloud dbs * feat(local-dev): change dev cors and cookie session to allow local comm with cloud dbs * feat(local-dev): update node-sdk * update packages * update packages * update packages --- pnpm-lock.yaml | 71 +- sdks/workflow-node-sdk/package.json | 2 +- services/websocket-service/.env.example | 2 +- .../workflows-service/docker-compose.db.yml | 2 +- services/workflows-service/docker-compose.yml | 2 +- services/workflows-service/package.json | 2 +- .../20230723212353_add_plv8/migration.sql | 1 + .../migration.sql | 101 ++ .../workflows-service/src/test/db-setup.ts | 4 +- ...kflow-runtime-data.repository.intg.test.ts | 866 ++++++++++++++++++ .../workflow-runtime-data.repository.ts | 19 + 11 files changed, 1033 insertions(+), 39 deletions(-) create mode 100644 services/workflows-service/prisma/migrations/20230723212353_add_plv8/migration.sql create mode 100644 services/workflows-service/prisma/migrations/20230723221706_add_jsonb_deep_merge_with_options/migration.sql create mode 100644 services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5003e99f2..c7ddda332f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1222,7 +1222,7 @@ importers: version: link:../../packages/common '@ballerine/workflow-core': specifier: ^0.4.16 - version: link:../../packages/workflow-core + version: 0.4.19 xstate: specifier: ^4.37.0 version: 4.37.1 @@ -1348,8 +1348,8 @@ importers: sdks/workflow-node-sdk: dependencies: '@ballerine/workflow-core': - specifier: ^0.4.9 - version: link:../../packages/workflow-core + specifier: 0.4.9 + version: 0.4.9 json-logic-js: specifier: ^2.0.2 version: 2.0.2 @@ -1569,8 +1569,8 @@ importers: specifier: 0.5.6 version: link:../../packages/common '@ballerine/workflow-node-sdk': - specifier: 0.4.2 - version: 0.4.2 + specifier: 0.4.3 + version: link:../../sdks/workflow-node-sdk '@faker-js/faker': specifier: ^7.6.0 version: 7.6.0 @@ -6710,6 +6710,11 @@ packages: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true + /@ballerine/common@0.4.3: + resolution: {integrity: sha512-MV7i5eYQ4yAg0ZI3p0oel1Erz4W+nZ7mjc8tXyr0XZszckvxkWuTPCnTDggIKOsf7c26I0JMsbHlY9vpBFcSHQ==} + engines: {node: '>=12'} + dev: false + /@ballerine/common@0.5.9: resolution: {integrity: sha512-5tPfpsQ0ibg/H2qSOQ1aeRDDaAig7A+p8nsX6CNTEMUZ/8Pa4Hs02DgRjCWGlQjmczOWblCfwA0+AVj25Ht5qg==} engines: {node: '>=12'} @@ -6730,11 +6735,11 @@ packages: xstate: 4.38.0 dev: false - /@ballerine/workflow-node-sdk@0.4.2: - resolution: {integrity: sha512-3VdcGQVqgOkcohdgbxFB8GFcCMy/eJOyD95E49OPnUEAYECxtxxwyRkJpDMlDiAzYtSznOHG5Is6Z+i0qNQYFA==} + /@ballerine/workflow-core@0.4.9: + resolution: {integrity: sha512-+GKxU0ZK2TtBRUfroivNzxF8avm99oJKriZKq0IWwWNkFndG9ot9CBH43zY5Do55yuFBAzQqgFx6crtyT5c6Qg==} engines: {node: '>=12'} dependencies: - '@ballerine/workflow-core': 0.4.19 + '@ballerine/common': 0.4.3 json-logic-js: 2.0.2 xstate: 4.38.0 dev: false @@ -12533,11 +12538,11 @@ packages: resolution: {integrity: sha512-YppvPa1qMyC+oCQJ3tf7Quzpf2NnBlvIRLPJiGAMssUwX5qE0iKe9lTtkNwMaNxEvzz6rDxewSlz+f/MWr4gPw==} dev: true - /@storybook/channels@7.2.0-alpha.0: - resolution: {integrity: sha512-KBlbmk69IiTZ6A5wPWhOsXCD4bXLyxYgO7Qqjl0vEg2swxyekEsRPcW3CBHRyLHnE1y2BmzgodW7tmftV0veFQ==} + /@storybook/channels@7.2.0-rc.0: + resolution: {integrity: sha512-auUqrrYCTzjExtMCFLFVELZ6cNNRWVOUEiJ0I+JACjQFZn0i6cBZHCRkxz0HhcJw5usCeqWVuo0U3OQbR2scEQ==} dependencies: - '@storybook/client-logger': 7.2.0-alpha.0 - '@storybook/core-events': 7.2.0-alpha.0 + '@storybook/client-logger': 7.2.0-rc.0 + '@storybook/core-events': 7.2.0-rc.0 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -12667,8 +12672,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.2.0-alpha.0: - resolution: {integrity: sha512-rooUZXXmxBDXe1cqHWwRmtqnO20R0dQpQPbY4l18O+9nYqCzlIsu0oUA40mGdFHko7UbHJjuGKnfa0XT9iQM/w==} + /@storybook/client-logger@7.2.0-rc.0: + resolution: {integrity: sha512-OjSqjuyOC8z/55ENBMrFSCmDLNPnuv5eFTahlBhLU7nYvQIPqXlJdgUQNa3+HzXqm47yhrkIDzXPHdiPzj/2pQ==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -12901,8 +12906,8 @@ packages: resolution: {integrity: sha512-sNnqgO5i5DUIqeQfNbr987KWvAciMN9FmMBuYdKjVFMqWFyr44HTgnhfKwZZKl+VMDYkHA9Do7UGSYZIKy0P4g==} dev: true - /@storybook/core-events@7.2.0-alpha.0: - resolution: {integrity: sha512-avBltWi+/H0mVZanclZgPyBbbcUTJPyS277jNy9SNRQysYdRgFVk6TNGljqaENha3O6iasvlGPQaNSXQWpW/3w==} + /@storybook/core-events@7.2.0-rc.0: + resolution: {integrity: sha512-H6OTyP+QTH3nfr5EVkuOsfPMPcyGrRe+TKJsta1D493wh4VSMc8Z3Qz2p6KvisT8zQ0lTY9qzzzzgonNgWOhHQ==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -13143,14 +13148,14 @@ packages: '@storybook/preview-api': 7.0.26 dev: true - /@storybook/instrumenter@7.2.0-alpha.0: - resolution: {integrity: sha512-m1tBvOsmj3AbLjCEco30MQhBCk2dd+9Lw7BecVi/ScxfTwnyM/oA9aGBUolt6UI4BrXFXt7LRpNi0UlkqaMofA==} + /@storybook/instrumenter@7.2.0-rc.0: + resolution: {integrity: sha512-DM2M23EcFEMyMIXzZ6PiKlDknPbqvQX2U/dtDoFwx6OITLTFV3xK4PghB/yjLMxPhl/bcZph15ps17/sb+YsJQ==} dependencies: - '@storybook/channels': 7.2.0-alpha.0 - '@storybook/client-logger': 7.2.0-alpha.0 - '@storybook/core-events': 7.2.0-alpha.0 + '@storybook/channels': 7.2.0-rc.0 + '@storybook/client-logger': 7.2.0-rc.0 + '@storybook/core-events': 7.2.0-rc.0 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.2.0-alpha.0 + '@storybook/preview-api': 7.2.0-rc.0 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -13339,15 +13344,15 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.2.0-alpha.0: - resolution: {integrity: sha512-4dSKC/hL7jxxRRgDj3uH7YKYN4CI7yA9Swg+uKr2DBfLk+Xzo4uzTi+H7CEOIHVnKlXy2UChV6xRVid5qPpHmQ==} + /@storybook/preview-api@7.2.0-rc.0: + resolution: {integrity: sha512-18oEkEps0k6n/RMAmThr/QpCawjrZDsUeFIKbRpZ0MYT2wuszLHYAGAMQceBaKoDSBFsO3rY6ijap+G92AT+TA==} dependencies: - '@storybook/channels': 7.2.0-alpha.0 - '@storybook/client-logger': 7.2.0-alpha.0 - '@storybook/core-events': 7.2.0-alpha.0 + '@storybook/channels': 7.2.0-rc.0 + '@storybook/client-logger': 7.2.0-rc.0 + '@storybook/core-events': 7.2.0-rc.0 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.2.0-alpha.0 + '@storybook/types': 7.2.0-rc.0 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -13619,8 +13624,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.2.0-alpha.0 - '@storybook/instrumenter': 7.2.0-alpha.0 + '@storybook/client-logger': 7.2.0-rc.0 + '@storybook/instrumenter': 7.2.0-rc.0 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -13719,10 +13724,10 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/types@7.2.0-alpha.0: - resolution: {integrity: sha512-gLZKnEhIEvV88mqko2XUDMGP8YPZN3EKQamg20V/qXe0EuAkQsIrSmuW/JhGdbbhyEMFVNFnsmPuM7m7yk7x7g==} + /@storybook/types@7.2.0-rc.0: + resolution: {integrity: sha512-Vklvf0XWZkEZtvHI9+JkrC/nWBeQ06QtKmrAFfzQarxzU1oeR9n1sNOdYTFHlmwhnsDZ8Die//A5rUKVJFrJmQ==} dependencies: - '@storybook/channels': 7.2.0-alpha.0 + '@storybook/channels': 7.2.0-rc.0 '@types/babel__core': 7.20.1 '@types/express': 4.17.9 file-system-cache: 2.3.0 diff --git a/sdks/workflow-node-sdk/package.json b/sdks/workflow-node-sdk/package.json index a3174fb774..41be2e3309 100644 --- a/sdks/workflow-node-sdk/package.json +++ b/sdks/workflow-node-sdk/package.json @@ -23,7 +23,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/workflow-core": "^0.4.9", + "@ballerine/workflow-core": "0.4.9", "json-logic-js": "^2.0.2", "xstate": "^4.36.0" }, diff --git a/services/websocket-service/.env.example b/services/websocket-service/.env.example index 0f26f3b587..6ce0ea705f 100644 --- a/services/websocket-service/.env.example +++ b/services/websocket-service/.env.example @@ -1,3 +1,3 @@ PORT=3500 NODE_ENV=development -COMPOSE_PROJECT_NAME=ballerine-x +COMPOSE_PROJECT_NAME=ballerine-ws diff --git a/services/workflows-service/docker-compose.db.yml b/services/workflows-service/docker-compose.db.yml index 7f95afee36..6f6a2f7a32 100644 --- a/services/workflows-service/docker-compose.db.yml +++ b/services/workflows-service/docker-compose.db.yml @@ -1,7 +1,7 @@ version: '3' services: db: - image: postgres:12 + image: sibedge/postgres-plv8:15.3-3.1.7 ports: - ${DB_PORT}:5432 environment: diff --git a/services/workflows-service/docker-compose.yml b/services/workflows-service/docker-compose.yml index 0947082e67..b75ccd55c1 100644 --- a/services/workflows-service/docker-compose.yml +++ b/services/workflows-service/docker-compose.yml @@ -39,7 +39,7 @@ services: db: condition: service_healthy db: - image: postgres:12 + image: docker pull sibedge/postgres-plv8:15.3-3.1.7 ports: - ${DB_PORT}:5432 environment: diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index c424ce238f..76f1d4e117 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -39,7 +39,7 @@ "@aws-sdk/client-s3": "3.325.0", "@aws-sdk/lib-storage": "3.325.0", "@ballerine/common": "0.5.6", - "@ballerine/workflow-node-sdk": "0.4.2", + "@ballerine/workflow-node-sdk": "0.4.3", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", "@nestjs/common": "^9.3.12", diff --git a/services/workflows-service/prisma/migrations/20230723212353_add_plv8/migration.sql b/services/workflows-service/prisma/migrations/20230723212353_add_plv8/migration.sql new file mode 100644 index 0000000000..ca04ab63ad --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230723212353_add_plv8/migration.sql @@ -0,0 +1 @@ +CREATE EXTENSION IF NOT EXISTS plv8; \ No newline at end of file diff --git a/services/workflows-service/prisma/migrations/20230723221706_add_jsonb_deep_merge_with_options/migration.sql b/services/workflows-service/prisma/migrations/20230723221706_add_jsonb_deep_merge_with_options/migration.sql new file mode 100644 index 0000000000..ca2360aca3 --- /dev/null +++ b/services/workflows-service/prisma/migrations/20230723221706_add_jsonb_deep_merge_with_options/migration.sql @@ -0,0 +1,101 @@ +CREATE OR REPLACE FUNCTION jsonb_deep_merge_with_options(obj1 jsonb, obj2 jsonb, array_merge_option text DEFAULT 'concat') +RETURNS jsonb AS $$ + const mergeObjects = (obj1, obj2) => { + const result = { ...obj1 }; + + for (let key in obj2) { + if (typeof obj2[key] === 'object' && obj2[key] !== null && !Array.isArray(obj2[key]) && key in result) { + result[key] = mergeObjects(result[key], obj2[key]); + } else { + result[key] = obj2[key]; + } + } + + return result; + }; + + const mergeArraysById = (arr1, arr2) => { + const combined = [...arr1, ...arr2]; + const ids = Array.from(new Set(combined.map(item => item.id))); + + return ids.map(id => { + const sameIdItems = combined.filter(item => item.id === id); + return sameIdItems.reduce(mergeObjects, {}); + }); + }; + + const mergeArraysByIndex = (arr1, arr2) => { + const maxLength = Math.max(arr1.length, arr2.length); + const result = new Array(maxLength); + + for (let i = 0; i < maxLength; i++) { + if (i < arr1.length && i < arr2.length) { + // Change here: Check if the elements are basic values or JSON objects + if (typeof arr1[i] !== 'object' && typeof arr2[i] !== 'object') { + result[i] = arr2[i]; + } else { + result[i] = mergeObjects(arr1[i], arr2[i]); + } + } else { + result[i] = arr1[i] || arr2[i]; + } + } + + return result; + }; + + const deepMergeWithOptions = (val1, val2, array_merge_option = 'concat') => { + // Handle array inputs + if (Array.isArray(val1) && Array.isArray(val2)) { + if (array_merge_option === 'replace') { + return val2; + } else { + switch (array_merge_option) { + case 'by_id': + return mergeArraysById(val1, val2); + case 'by_index': + return mergeArraysByIndex(val1, val2); + case 'concat': + default: + return [...val1, ...val2]; + } + } + } + // Handle object inputs + else if (typeof val1 === 'object' && val1 !== null && typeof val2 === 'object' && val2 !== null) { + const result = { ...val1 }; + + for (let key in val2) { + if (Array.isArray(val2[key])) { + if (array_merge_option === 'replace') { + result[key] = val2[key]; + } else { + switch (array_merge_option) { + case 'by_id': + result[key] = mergeArraysById(val1[key] || [], val2[key]); + break; + case 'by_index': + result[key] = mergeArraysByIndex(val1[key] || [], val2[key]); + break; + case 'concat': + default: + result[key] = [...(val1[key] || []), ...(val2[key])]; + } + } + } else if (typeof val2[key] === 'object' && val2[key] !== null && !Array.isArray(val2[key]) && key in result) { + result[key] = deepMergeWithOptions(result[key], val2[key], array_merge_option); + } else { + result[key] = val2[key]; + } + } + + return result; + } + // For all other types of inputs, return the second value + else { + return val2; + } + }; + + return deepMergeWithOptions(obj1, obj2, array_merge_option); +$$ LANGUAGE plv8 IMMUTABLE STRICT; \ No newline at end of file diff --git a/services/workflows-service/src/test/db-setup.ts b/services/workflows-service/src/test/db-setup.ts index 27e202e7ac..59b3c85db8 100644 --- a/services/workflows-service/src/test/db-setup.ts +++ b/services/workflows-service/src/test/db-setup.ts @@ -6,7 +6,9 @@ import { execSync } from 'child_process'; module.exports = async () => { if (process.env.SKIP_DB_SETUP_TEARDOWN) return; - const container = await new PostgreSqlContainer().withDatabase('test').start(); + const container = await new PostgreSqlContainer('sibedge/postgres-plv8:15.3-3.1.7') + .withDatabase('test') + .start(); process.env.TEST_DATABASE_SCHEMA_NAME = container.getDatabase(); process.env.DB_URL = container.getConnectionUri(); console.log('\nStarting database container on: ' + container.getConnectionUri()); diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts new file mode 100644 index 0000000000..3add161a5d --- /dev/null +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts @@ -0,0 +1,866 @@ +import { cleanupDatabase, tearDownDatabase } from '@/test/helpers/database-helper'; +import { fetchServiceFromModule, initiateNestApp } from '@/test/helpers/nest-app-helper'; +import { PrismaModule } from 'nestjs-prisma'; +import { EndUserRepository } from '@/end-user/end-user.repository'; +import { FilterService } from '@/filter/filter.service'; +import { FilterRepository } from '@/filter/filter.repository'; +import { FileRepository } from '@/storage/storage.repository'; +import { FileService } from '@/providers/file/file.service'; +import { StorageService } from '@/storage/storage.service'; +import { WorkflowEventEmitterService } from '@/workflow/workflow-event-emitter.service'; +import { BusinessRepository } from '@/business/business.repository'; +import { WorkflowDefinitionRepository } from '@/workflow/workflow-definition.repository'; +import { + ArrayMergeOption, + WorkflowRuntimeDataRepository, +} from '@/workflow/workflow-runtime-data.repository'; +import { WorkflowService } from '@/workflow/workflow.service'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { PrismaService } from '@/prisma/prisma.service'; + +describe('#Workflow Runtime Repository Integration Tests', () => { + let workflowRuntimeRepository: WorkflowRuntimeDataRepository; + let workflowDefinitionRepository: WorkflowDefinitionRepository; + beforeEach(cleanupDatabase); + afterEach(tearDownDatabase); + + beforeAll(async () => { + const servicesProviders = [ + EndUserRepository, + FilterService, + FilterRepository, + FileRepository, + FileService, + StorageService, + WorkflowEventEmitterService, + BusinessRepository, + WorkflowDefinitionRepository, + WorkflowRuntimeDataRepository, + WorkflowService, + EventEmitter2, + PrismaService, + ]; + + workflowRuntimeRepository = (await fetchServiceFromModule( + WorkflowRuntimeDataRepository, + servicesProviders, + [PrismaModule], + )) as unknown as WorkflowRuntimeDataRepository; + + workflowDefinitionRepository = (await fetchServiceFromModule( + WorkflowDefinitionRepository, + servicesProviders, + [PrismaModule], + )) as unknown as WorkflowDefinitionRepository; + }); + describe('Workflow Runtime Data Repository: Jsonb Merge', () => { + beforeAll(async () => { + await workflowDefinitionRepository.create({ + data: { + id: 'test-definition', + name: 'test', + version: 1, + definitionType: 'statechart-json', + definition: { + id: 'Manual Review', + }, + }, + }); + }); + it('updateById: Merge context with nested entities - will preserve "replacment" behaviour for merging arrays', async () => { + // Set up initial data + + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + entity: { + id: '1', + name: 'TestEntity', + }, + documents: ['file1', 'file2'], + }, + }, + }); + + // Update the context with a new object + const updatedContext = { + entity: { + id: '2', + name: 'UpdatedEntity', + }, + documents: ['file3'], + }; + + const res = await workflowRuntimeRepository.updateById(createRes.id, { + data: { + context: updatedContext, + }, + }); + + // The expected result should be the merged version of initial and updated context + expect(res.context).toMatchObject({ + entity: { + id: '2', + name: 'UpdatedEntity', + }, + documents: ['file3'], + }); + }); + + it('updateById: Merge context with nested entities - will preserve "replacment" behaviour for merging objects', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + entity: { + id: '1', + }, + }, + }, + }); + + const res = await workflowRuntimeRepository.updateById(createRes.id, { + data: { + context: { + entity: { + id: '2', + }, + documents: [], + }, + }, + }); + + expect(res).toMatchObject({ + endUserId: null, + businessId: null, + assigneeId: null, + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { entity: { id: '2' }, documents: [] }, + config: null, + state: null, + status: 'active', + createdBy: 'SYSTEM', + resolvedAt: null, + assignedAt: null, + }); + }); + + it('should merge the existing and new context data when updateContextById is called', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', key2: 'value2', documents: [{ id: '1', name: 'doc1' }] }, + }, + }); + const newContext = { + key2: 'new-value', + key3: 'value3', + documents: [ + { id: '1', name: 'doc2' }, + { id: '2', name: 'doc3' }, + ], + }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: 'new-value', + key3: 'value3', + documents: [ + { id: '1', name: 'doc2' }, + { id: '2', name: 'doc3' }, + ], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should not change existing context when the new context is empty', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', key2: 'value2', documents: [{ id: '1', name: 'doc1' }] }, + }, + }); + const newContext = {}; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: 'value2', + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should add new key from the new context to the existing context', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', key2: 'value2', documents: [{ id: '1', name: 'doc1' }] }, + }, + }); + const newContext = { key3: 'value3' }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: 'value2', + key3: 'value3', + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + + it('should update the value of an existing key when the new context has a different value for that key', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', key2: 'value2', documents: [{ id: '1', name: 'doc1' }] }, + }, + }); + const newContext = { key2: 'new-value2' }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: 'new-value2', + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + }); + it('should merge nested objects in the context', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey1: 'nestedValue1' }, + documents: [{ id: '1', name: 'doc1' }], + }, + }, + }); + const newContext = { key2: { nestedKey2: 'nestedValue2' } }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: { nestedKey1: 'nestedValue1', nestedKey2: 'nestedValue2' }, + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should update values in nested objects in the context', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey1: 'nestedValue1' }, + documents: [{ id: '1', name: 'doc1' }], + }, + }, + }); + const newContext = { key2: { nestedKey1: 'new-nestedValue1' } }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: { nestedKey1: 'new-nestedValue1' }, + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should add a new element to an array in the context', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', key2: ['element1'], documents: [{ id: '1', name: 'doc1' }] }, + }, + }); + const newContext = { key2: ['element2'] }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: ['element1', 'element2'], + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should replace an element from an array in the context when the new context have it on the same index', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: ['element1', 'element2'], + documents: [{ id: '1', name: 'doc1' }], + }, + }, + }); + const newContext = { key2: ['element3'] }; + + const arrayMergeOption: ArrayMergeOption = 'by_index'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: ['element3', 'element2'], + documents: [{ id: '1', name: 'doc1' }], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should throw an error when trying to update context of a non-existing ID', async () => { + const newContext = { key1: 'value1' }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await expect( + workflowRuntimeRepository.updateContextById('non-existing-id', newContext, arrayMergeOption), + ).rejects.toThrow(); + }); + + it('should be able to handle large context objects', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: 'value1', largeKey: new Array(1000).fill('value').join('') }, + }, + }); + const newContext = { key2: 'value2' }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: 'value2', + largeKey: new Array(1000).fill('value').join(''), + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should concatenate array in a nested object when array_merge_option is "concat"', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey: ['value2'] }, + }, + }, + }); + + const newContext = { + key2: { nestedKey: ['value3'] }, + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: { nestedKey: ['value2', 'value3'] }, + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should concatenate array of objects in a nested object when array_merge_option is "concat"', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey: [{ id: '1', value: 'value2' }] }, + }, + }, + }); + + const newContext = { + key2: { nestedKey: [{ id: '2', value: 'value3' }] }, + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: { + nestedKey: [ + { id: '1', value: 'value2' }, + { id: '2', value: 'value3' }, + ], + }, + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should concatenate deeply nested arrays when array_merge_option is "concat"', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey: { anotherNestedKey: ['value2'] } }, + }, + }, + }); + + const newContext = { + key2: { nestedKey: { anotherNestedKey: ['value3'] } }, + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: 'value1', + key2: { nestedKey: { anotherNestedKey: ['value2', 'value3'] } }, + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should correctly merge context data with high nesting level', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: { key2: { key3: { key4: { key5: 'value1' } } } }, + }, + }, + }); + + const newContext = { + key1: { key2: { key3: { key4: { key5: 'value2', key6: 'value3' } } } }, + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: { key2: { key3: { key4: { key5: 'value2', key6: 'value3' } } } }, + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should correctly merge context data with mixed data types', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { + key1: 'value1', + key2: { nestedKey1: 'value2', nestedKey2: ['value3'] }, + }, + }, + }); + + const newContext = { + key1: { nestedKey1: 'new-value1' }, + key2: { nestedKey1: 'new-value2', nestedKey3: 'value4' }, + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: { nestedKey1: 'new-value1' }, + key2: { nestedKey1: 'new-value2', nestedKey2: ['value3'], nestedKey3: 'value4' }, + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should correctly merge deeply nested arrays with the by_id strategy', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: [{ id: '1', data: 'data1' }], key2: [{ id: '1', data: 'data1' }] }, + }, + }); + const newContext = { key1: [{ id: '1', data: 'data2' }], key2: [{ id: '2', data: 'data2' }] }; + + const arrayMergeOption: ArrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: [{ id: '1', data: 'data2' }], + key2: [ + { id: '1', data: 'data1' }, + { id: '2', data: 'data2' }, + ], + }; + expect(updatedContext).toEqual(expectedContext); + }); + + it('should correctly merge deeply nested arrays with the by_index strategy', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: ['element1', 'element2'], key2: ['element1', 'element2'] }, + }, + }); + const newContext = { key1: ['element3'], key2: ['element3', 'element4'] }; + + const arrayMergeOption: ArrayMergeOption = 'by_index'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: ['element3', 'element2'], + key2: ['element3', 'element4'], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should correctly merge deeply nested arrays with the concat strategy', async () => { + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: { key1: ['element1', 'element2'], key2: ['element1', 'element2'] }, + }, + }); + const newContext = { key1: ['element3'], key2: ['element3', 'element4'] }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + + const expectedContext = { + key1: ['element1', 'element2', 'element3'], + key2: ['element1', 'element2', 'element3', 'element4'], + }; + expect(updatedContext).toEqual(expectedContext); + }); + it('should merge the nested entity data when updateContextById is called', async () => { + const initialContext = { + entity: { + type: 'individual', + data: { + name: 'John Doe', + age: 30, + additionalInfo: { + hobbies: ['running', 'reading'], + }, + }, + id: '123', + }, + documents: [], + }; + + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: initialContext, + }, + }); + const newContext = { + entity: { + data: { + age: 35, + additionalInfo: { + hobbies: ['cycling'], + occupation: 'engineer', + }, + }, + }, + }; + + const arrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const expectedContext = { + entity: { + type: 'individual', + data: { + name: 'John Doe', + age: 35, + additionalInfo: { + hobbies: ['running', 'reading', 'cycling'], + occupation: 'engineer', + }, + }, + id: '123', + }, + documents: [], + }; + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + expect(updatedContext).toEqual(expectedContext); + }); + it('should merge the documents array by id when updateContextById is called', async () => { + const initialContext = { + entity: { + type: 'individual', + id: '123', + }, + documents: [ + { + id: 'doc1', + category: 'category1', + // other properties... + }, + ], + }; + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: initialContext, + }, + }); + const newContext = { + documents: [ + { + id: 'doc1', + category: 'category2', + // other properties... + }, + ], + }; + + const arrayMergeOption = 'by_id'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const expectedContext = { + entity: { + type: 'individual', + id: '123', + }, + documents: [ + { + id: 'doc1', + category: 'category2', + // other properties... + }, + ], + }; + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + expect(updatedContext).toEqual(expectedContext); + }); + it('should merge nested arrays in additionalInfo when updateContextById is called', async () => { + const initialContext = { + entity: { + type: 'individual', + data: { + additionalInfo: { + hobbies: ['running', 'reading'], + }, + }, + id: '123', + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['photo', 'signature'], + }, + }, + // other properties... + }, + ], + }; + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: initialContext, + }, + }); + const newContext = { + entity: { + data: { + additionalInfo: { + hobbies: ['cycling'], + }, + }, + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['address'], + }, + }, + // other properties... + }, + ], + }; + + const arrayMergeOption: ArrayMergeOption = 'concat'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const expectedContext = { + entity: { + type: 'individual', + data: { + additionalInfo: { + hobbies: ['running', 'reading', 'cycling'], + }, + }, + id: '123', + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['photo', 'signature'], + }, + }, + }, + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['address'], + }, + }, + }, + ], + }; + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + expect(updatedContext).toEqual(expectedContext); + }); + it('should merge nested arrays in additionalInfo when updateContextById is called', async () => { + const initialContext = { + entity: { + type: 'individual', + data: { + additionalInfo: { + hobbies: ['running', 'reading'], + }, + }, + id: '123', + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['photo', 'signature'], + }, + }, + // other properties... + }, + ], + }; + const createRes = await workflowRuntimeRepository.create({ + data: { + workflowDefinitionId: 'test-definition', + workflowDefinitionVersion: 1, + context: initialContext, + }, + }); + const newContext = { + entity: { + data: { + additionalInfo: { + hobbies: ['cycling'], + }, + }, + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['address'], + }, + }, + // other properties... + }, + ], + }; + + const arrayMergeOption: ArrayMergeOption = 'replace'; + await workflowRuntimeRepository.updateContextById(createRes.id, newContext, arrayMergeOption); + + const expectedContext = { + entity: { + type: 'individual', + data: { + additionalInfo: { + hobbies: ['cycling'], + }, + }, + id: '123', + }, + documents: [ + { + id: 'doc1', + issuer: { + additionalInfo: { + requirements: ['address'], + }, + }, + // other properties... + }, + ], + }; + + const updatedContext = await workflowRuntimeRepository.findContext(createRes.id); + expect(updatedContext).toEqual(expectedContext); + }); +}); diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index f3faab3547..bb165209bf 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -5,6 +5,8 @@ import { TEntityType } from '@/workflow/types'; import { merge } from 'lodash'; import { assignIdToDocuments } from '@/workflow/assign-id-to-documents'; +export type ArrayMergeOption = 'by_id' | 'by_index' | 'concat' | 'replace'; + @Injectable() export class WorkflowRuntimeDataRepository { constructor(protected readonly prisma: PrismaService) {} @@ -53,6 +55,23 @@ export class WorkflowRuntimeDataRepository { }); } + async updateContextById( + id: string, + newContext: any, + arrayMergeOption: ArrayMergeOption = 'by_id', + ): Promise<WorkflowRuntimeData> { + const stringifiedContext = JSON.stringify(newContext); + const affectedRows = await this.prisma + .$executeRaw`UPDATE "WorkflowRuntimeData" SET "context" = jsonb_deep_merge_with_options("context", ${stringifiedContext}::jsonb, ${arrayMergeOption}) WHERE "id" = ${id}`; + + // Retrieve and return the updated record + if (affectedRows === 0) { + throw new Error(`No workflowRuntimeData found with the id "${id}"`); + } + + return this.findById(id); + } + async deleteById<T extends Omit<Prisma.WorkflowRuntimeDataDeleteArgs, 'where'>>( id: string, args: Prisma.SelectSubset<T, Omit<Prisma.WorkflowRuntimeDataDeleteArgs, 'where'>>, From 813c63d05d6693de2763510ba79279fc741d0285 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Thu, 27 Jul 2023 15:20:31 +0300 Subject: [PATCH 117/123] fix(postgres): change volume to avoid conflicts with all setup --- deploy/docker-compose.yml | 6 +++--- services/workflows-service/docker-compose.db.yml | 4 ++-- services/workflows-service/docker-compose.yml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index a295d9e3af..4ac27d69b4 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -22,14 +22,14 @@ services: depends_on: - db db: - image: postgres:12 + image: sibedge/postgres-plv8:15.3-3.1.7 ports: - ${DB_PORT}:5432 environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - - postgres:/var/lib/postgresql/data + - postgres15:/var/lib/postgresql/data healthcheck: test: - CMD @@ -43,4 +43,4 @@ services: interval: 10s retries: 10 volumes: - postgres: ~ + postgres15: ~ diff --git a/services/workflows-service/docker-compose.db.yml b/services/workflows-service/docker-compose.db.yml index 6f6a2f7a32..8ae3428933 100644 --- a/services/workflows-service/docker-compose.db.yml +++ b/services/workflows-service/docker-compose.db.yml @@ -8,6 +8,6 @@ services: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - - postgres:/var/lib/postgresql/data + - postgres15:/var/lib/postgresql/data volumes: - postgres: ~ + postgres15: ~ diff --git a/services/workflows-service/docker-compose.yml b/services/workflows-service/docker-compose.yml index b75ccd55c1..3e39f15884 100644 --- a/services/workflows-service/docker-compose.yml +++ b/services/workflows-service/docker-compose.yml @@ -46,7 +46,7 @@ services: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - - postgres:/var/lib/postgresql/data + - postgres15:/var/lib/postgresql/data healthcheck: test: - CMD @@ -60,4 +60,4 @@ services: interval: 10s retries: 10 volumes: - postgres: ~ + postgres15: ~ From 839df7b1b22b492d6bbfa5a20850230b18834124 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 2 Aug 2023 12:41:08 +0300 Subject: [PATCH 118/123] feat(documents-schema): added now doc schema (#754) * feat(documents-schema): added now doc schema * Update GH.ts --- .../workflow/documents/schemas/GH.ts | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 07d2941145..366f33fb53 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -73,6 +73,12 @@ export const ghanaDocuments: TDocument[] = [ type: 'string', format: 'date', }, + accountHolderName: { + type: 'string', + }, + maxBalanceRecorded: { + type: 'number', + }, }, }, }, @@ -667,4 +673,112 @@ export const ghanaDocuments: TDocument[] = [ }, }, }, + { + category: 'proof_of_regestration', + type: 'certificate_of_registration', + issuer: { + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + required: ['businessName', 'taxIdNumber', 'registrationNumber'], + properties: { + businessName: { + type: 'string', + }, + taxIdNumber: { + type: 'string', + pattern: alphaNumeric, + }, + registrationNumber: { + type: 'string', + pattern: alphaNumeric, + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, + { + category: 'proof_of_regestration', + type: 'district_assembly_certificate', + issuer: { + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + required: ['certificateNo', 'companyName'], + properties: { + certificateNo: { + type: 'string', + pattern: alphaNumeric, + }, + registrationNumber: { + type: 'string', + pattern: alphaNumeric, + }, + companyName: { + type: 'string', + pattern: alphaNumeric, + }, + issuingDate: { + type: 'string', + format: 'date', + }, + }, + }, + }, + { + category: 'proof_of_registration', + type: 'form_a', + issuer: { + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + required: ['registrationNumber', 'taxIdNumber'], + properties: { + registrationNumber: { + type: 'string', + pattern: alphaNumeric, + }, + taxIdNumber: { + type: 'string', + pattern: alphaNumeric, + }, + }, + }, + }, + { + category: 'proof_of_registration', + type: 'shareholder_details', + issuer: { + country: 'GH', + }, + issuingVersion: 1, + version: 1, + propertiesSchema: { + type: 'object', + required: ['firstName', 'lastName'], + properties: { + firstName: { + type: 'string', + }, + middleName: { + type: 'string', + }, + lastName: { + type: 'string', + }, + }, + }, + }, ]; From 34e6e3883f5aa82e0d2ec46962b1c0ea1e4ba8b0 Mon Sep 17 00:00:00 2001 From: Alon Peretz <Alonp99@gmail.com> Date: Wed, 2 Aug 2023 12:51:40 +0300 Subject: [PATCH 119/123] change document type --- .../src/schemas/documents/workflow/documents/schemas/GH.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 366f33fb53..6d4d98f826 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -685,7 +685,7 @@ export const ghanaDocuments: TDocument[] = [ type: 'object', required: ['businessName', 'taxIdNumber', 'registrationNumber'], properties: { - businessName: { + companyName: { type: 'string', }, taxIdNumber: { From bcd20f473b2149469c267f8508a9775ea3e5112d Mon Sep 17 00:00:00 2001 From: Tomer Shvadron <tomer94@gmail.com> Date: Wed, 2 Aug 2023 14:51:15 +0300 Subject: [PATCH 120/123] fix: remove @ballerine/ui from build (#758) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c834af7ff..0457a4a97c 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "playwright:install": "nx run-many --target=playwright:install", "dev": "nx run-many --target=dev --projects=@ballerine/workflows-service,@ballerine/backoffice-v2", "start": "nx run-many --target=start --projects=@ballerine/web-ui-sdk", - "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/websocket-service,@ballerine/ui", + "build": "nx run-many --target=build --projects=@ballerine/workflow-browser-sdk,@ballerine/web-ui-sdk,@ballerine/workflow-core,@ballerine/workflow-node-sdk,@ballerine/rules-engine-lib,@ballerine/common,@ballerine/workflows-service,@ballerine/websocket-service", "web-ui-sdk:dev": "nx run @ballerine/web-ui-sdk:dev", "web-ui-sdk:start": "nx run @ballerine/web-ui-sdk:start", "workflows-service:start": "nx run @ballerine/workflows-service:start", From babb1c918312109535e837bc61352c6294c88018 Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Wed, 2 Aug 2023 17:38:26 +0300 Subject: [PATCH 121/123] fix(document schemas): fixed typo of regestration --- .../src/schemas/documents/workflow/documents/schemas/GH.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index 6d4d98f826..e3995ccaf9 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -674,7 +674,7 @@ export const ghanaDocuments: TDocument[] = [ }, }, { - category: 'proof_of_regestration', + category: 'proof_of_registration', type: 'certificate_of_registration', issuer: { country: 'GH', @@ -704,7 +704,7 @@ export const ghanaDocuments: TDocument[] = [ }, }, { - category: 'proof_of_regestration', + category: 'proof_of_registration', type: 'district_assembly_certificate', issuer: { country: 'GH', From 542c0d65373ee4a8a2df8889a0a42c3586816b65 Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:42:29 +0300 Subject: [PATCH 122/123] fix(gh.ts): renamed businessName to companyName, and removed alphaNumberic constraint (#764) --- .../src/schemas/documents/workflow/documents/schemas/GH.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts index e3995ccaf9..732fb351af 100644 --- a/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts +++ b/packages/common/src/schemas/documents/workflow/documents/schemas/GH.ts @@ -683,7 +683,7 @@ export const ghanaDocuments: TDocument[] = [ version: 1, propertiesSchema: { type: 'object', - required: ['businessName', 'taxIdNumber', 'registrationNumber'], + required: ['companyName', 'taxIdNumber', 'registrationNumber'], properties: { companyName: { type: 'string', @@ -725,7 +725,6 @@ export const ghanaDocuments: TDocument[] = [ }, companyName: { type: 'string', - pattern: alphaNumeric, }, issuingDate: { type: 'string', From a6b2d913c7126de42dd63818c02a33bb80373e2f Mon Sep 17 00:00:00 2001 From: Omri Levy <omri.levy0197@gmail.com> Date: Thu, 3 Aug 2023 19:08:36 +0300 Subject: [PATCH 123/123] fix(backoffice-v2): no longer sharing data between cases (different workflows) --- .../src/common/utils/key-factory/key-factory.ts | 3 +++ apps/backoffice-v2/src/pages/Entity/Entity.page.tsx | 2 +- .../Entity/components/EditableDetails/EditableDetails.tsx | 8 ++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 apps/backoffice-v2/src/common/utils/key-factory/key-factory.ts diff --git a/apps/backoffice-v2/src/common/utils/key-factory/key-factory.ts b/apps/backoffice-v2/src/common/utils/key-factory/key-factory.ts new file mode 100644 index 0000000000..125e0953b8 --- /dev/null +++ b/apps/backoffice-v2/src/common/utils/key-factory/key-factory.ts @@ -0,0 +1,3 @@ +export const keyFactory = (...keys: Array<string>) => { + return keys?.join(':'); +}; diff --git a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx index 657ad8b732..76ddb72e4e 100644 --- a/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx +++ b/apps/backoffice-v2/src/pages/Entity/Entity.page.tsx @@ -9,7 +9,7 @@ export const Entity = () => { // Selected entity return ( - <Case> + <Case key={workflow?.id}> {/* Reject and approve header */} <Case.Actions id={workflow?.id} diff --git a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx index c0d40af6f5..69678b3843 100644 --- a/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx +++ b/apps/backoffice-v2/src/pages/Entity/components/EditableDetails/EditableDetails.tsx @@ -20,6 +20,7 @@ import { SelectTrigger } from '../../../../common/components/atoms/Select/Select import { SelectValue } from '../../../../common/components/atoms/Select/Select.Value'; import { Select } from '../../../../common/components/atoms/Select/Select'; import { useWatchDropdownOptions } from './hooks/useWatchDropdown'; +import { keyFactory } from '../../../../common/utils/key-factory/key-factory'; const useInitialCategorySetValue = ({ form, data }) => { useEffect(() => { @@ -143,9 +144,12 @@ export const EditableDetails: FunctionComponent<IEditableDetails> = ({ </SelectTrigger> </FormControl> <SelectContent> - {dropdownOptions?.map(({ label, value }) => { + {dropdownOptions?.map(({ label, value }, index) => { return ( - <SelectItem key={value} value={value}> + <SelectItem + key={keyFactory(id, valueId, label, index?.toString())} + value={value} + > {label} </SelectItem> );