From 920c3e59f4f43f4875422847b22fae5be07671b5 Mon Sep 17 00:00:00 2001 From: chavda-bhavik Date: Tue, 10 Oct 2023 11:48:40 +0530 Subject: [PATCH 1/3] feat: Added route to download original file --- apps/api/src/app/upload/upload.controller.ts | 3 +-- .../get-original-file-content.usecase.ts | 5 +++-- libs/dal/src/repositories/upload/upload.repository.ts | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/api/src/app/upload/upload.controller.ts b/apps/api/src/app/upload/upload.controller.ts index c72e9a4a1..c5b5df54c 100644 --- a/apps/api/src/app/upload/upload.controller.ts +++ b/apps/api/src/app/upload/upload.controller.ts @@ -105,10 +105,9 @@ export class UploadController { }) async getOriginalFile(@Param('uploadId', ValidateMongoId) uploadId: string, @Res() res: Response) { const { name, content, type } = await this.getOriginalFileContent.execute(uploadId); - res.setHeader('Content-Type', type); res.setHeader('Content-Disposition', 'attachment; filename=' + name); - res.send(content); + content.pipe(res); } @Get(':uploadId/rows/valid') diff --git a/apps/api/src/app/upload/usecases/get-original-file-content/get-original-file-content.usecase.ts b/apps/api/src/app/upload/usecases/get-original-file-content/get-original-file-content.usecase.ts index 2ec3e14b9..b056c5364 100644 --- a/apps/api/src/app/upload/usecases/get-original-file-content/get-original-file-content.usecase.ts +++ b/apps/api/src/app/upload/usecases/get-original-file-content/get-original-file-content.usecase.ts @@ -1,3 +1,4 @@ +import { Readable } from 'stream'; import { Injectable } from '@nestjs/common'; import { UploadRepository } from '@impler/dal'; import { FileNameService } from '@shared/services'; @@ -12,12 +13,12 @@ export class GetOriginalFileContent { private fileNameService: FileNameService ) {} - async execute(_uploadId: string): Promise<{ name: string; content: string; type: string }> { + async execute(_uploadId: string): Promise<{ name: string; content: Readable; type: string }> { const upload = await this.uploadRepository.findById(_uploadId, 'originalFileName originalFileType'); if (!upload) { throw new DocumentNotFoundException('Upload', _uploadId); } - const content = await this.storageService.getFileContent( + const content = await this.storageService.getFileStream( this.fileNameService.getOriginalFilePath(_uploadId, upload.originalFileName) ); diff --git a/libs/dal/src/repositories/upload/upload.repository.ts b/libs/dal/src/repositories/upload/upload.repository.ts index c123d16f5..9714f210c 100644 --- a/libs/dal/src/repositories/upload/upload.repository.ts +++ b/libs/dal/src/repositories/upload/upload.repository.ts @@ -149,6 +149,7 @@ export class UploadRepository extends BaseRepository { uploadedDate: 1, totalRecords: 1, validRecords: 1, + originalFileName: 1, status: 1, _template: { name: 1, From c5f77e4bbbd3d82308519c22a9045df30baf943a Mon Sep 17 00:00:00 2001 From: chavda-bhavik Date: Tue, 10 Oct 2023 11:49:35 +0530 Subject: [PATCH 2/3] feat: Added checck for corrupted file --- apps/api/src/app/shared/constants.ts | 1 + .../shared/exceptions/file-parse-issue.exception.ts | 8 ++++++++ .../api/src/app/shared/services/file/file.service.ts | 12 ++++++++---- .../make-upload-entry/make-upload-entry.usecase.ts | 9 +++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 apps/api/src/app/shared/exceptions/file-parse-issue.exception.ts diff --git a/apps/api/src/app/shared/constants.ts b/apps/api/src/app/shared/constants.ts index c0df0b6c6..93982d285 100644 --- a/apps/api/src/app/shared/constants.ts +++ b/apps/api/src/app/shared/constants.ts @@ -4,6 +4,7 @@ export const APIMessages = { FILE_TYPE_NOT_VALID: 'File type is not supported.', FILE_IS_EMPTY: 'File is empty', FILE_CONTENT_INVALID: 'File content is invalid. Please check the file or upload new file.', + FILE_HAS_ISSUE: 'Uploaded file has some issues. Please check the file or upload new file.', EMPTY_HEADING_PREFIX: 'Empty Heading', INVALID_TEMPLATE_ID_CODE_SUFFIX: 'is not valid TemplateId or CODE.', FILE_MAPPING_REMAINING: 'File mapping is not yet done, please finalize mapping before.', diff --git a/apps/api/src/app/shared/exceptions/file-parse-issue.exception.ts b/apps/api/src/app/shared/exceptions/file-parse-issue.exception.ts new file mode 100644 index 000000000..6af5dabd0 --- /dev/null +++ b/apps/api/src/app/shared/exceptions/file-parse-issue.exception.ts @@ -0,0 +1,8 @@ +import { BadRequestException } from '@nestjs/common'; +import { APIMessages } from '../constants'; + +export class FileParseError extends BadRequestException { + constructor() { + super(APIMessages.FILE_HAS_ISSUE); + } +} diff --git a/apps/api/src/app/shared/services/file/file.service.ts b/apps/api/src/app/shared/services/file/file.service.ts index ef025da91..9962f127e 100644 --- a/apps/api/src/app/shared/services/file/file.service.ts +++ b/apps/api/src/app/shared/services/file/file.service.ts @@ -8,10 +8,14 @@ import { IExcelFileHeading } from '@shared/types/file.types'; export class ExcelFileService { async convertToCsv(file: Express.Multer.File): Promise { - return new Promise(async (resolve) => { - const wb = XLSX.read(file.buffer); - const ws = wb.Sheets[wb.SheetNames[0]]; - resolve(XLSX.utils.sheet_to_csv(ws)); + return new Promise(async (resolve, reject) => { + try { + const wb = XLSX.read(file.buffer); + const ws = wb.Sheets[wb.SheetNames[0]]; + resolve(XLSX.utils.sheet_to_csv(ws)); + } catch (error) { + reject(error); + } }); } formatName(name: string): string { diff --git a/apps/api/src/app/upload/usecases/make-upload-entry/make-upload-entry.usecase.ts b/apps/api/src/app/upload/usecases/make-upload-entry/make-upload-entry.usecase.ts index 65ccf1dd0..e360b9aad 100644 --- a/apps/api/src/app/upload/usecases/make-upload-entry/make-upload-entry.usecase.ts +++ b/apps/api/src/app/upload/usecases/make-upload-entry/make-upload-entry.usecase.ts @@ -19,6 +19,7 @@ import { import { AddUploadEntryCommand } from './add-upload-entry.command'; import { MakeUploadEntryCommand } from './make-upload-entry.command'; import { StorageService } from '@impler/shared/dist/services/storage'; +import { FileParseError } from '@shared/exceptions/file-parse-issue.exception'; import { CSVFileService2, ExcelFileService, FileNameService } from '@shared/services/file'; @Injectable() @@ -37,8 +38,12 @@ export class MakeUploadEntry { const fileOriginalName = file.originalname; let csvFile: string | Express.Multer.File = file; if (file.mimetype === FileMimeTypesEnum.EXCEL || file.mimetype === FileMimeTypesEnum.EXCELX) { - const fileService = new ExcelFileService(); - csvFile = await fileService.convertToCsv(file); + try { + const fileService = new ExcelFileService(); + csvFile = await fileService.convertToCsv(file); + } catch (error) { + throw new FileParseError(); + } } else if (file.mimetype === FileMimeTypesEnum.CSV) { csvFile = file; } else { From 7a1795296ea15256420f4915f9222689da106a05 Mon Sep 17 00:00:00 2001 From: chavda-bhavik Date: Tue, 10 Oct 2023 11:52:11 +0530 Subject: [PATCH 3/3] feat: Added facility to download original file from activity panel --- apps/web/assets/icons/Download.icon.tsx | 19 + apps/web/components/import-feed/History.tsx | 35 +- apps/web/config/constants.config.ts | 3 +- apps/web/hooks/useHistory.tsx | 21 +- apps/web/libs/api.ts | 9 +- apps/widget/src/hooks/Phase1/usePhase1.ts | 3 +- .../widget/src/util/helpers/common.helpers.ts | 13 +- .../entities/Activity/Activity.interface.ts | 1 + libs/shared/src/utils/helpers.ts | 12 + pnpm-lock.yaml | 682 ++++++++++++++---- 10 files changed, 626 insertions(+), 172 deletions(-) create mode 100644 apps/web/assets/icons/Download.icon.tsx diff --git a/apps/web/assets/icons/Download.icon.tsx b/apps/web/assets/icons/Download.icon.tsx new file mode 100644 index 000000000..e2ac64ffd --- /dev/null +++ b/apps/web/assets/icons/Download.icon.tsx @@ -0,0 +1,19 @@ +import { IconType } from '@types'; +import { IconSizes } from 'config'; + +export const DownloadIcon = ({ size = 'sm', color }: IconType) => { + return ( + + + + ); +}; diff --git a/apps/web/components/import-feed/History.tsx b/apps/web/components/import-feed/History.tsx index 7b62bcb6f..eaba36240 100644 --- a/apps/web/components/import-feed/History.tsx +++ b/apps/web/components/import-feed/History.tsx @@ -1,18 +1,28 @@ import { ChangeEvent } from 'react'; -import { Badge, Group, LoadingOverlay, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Group, LoadingOverlay, Stack, Title, Tooltip } from '@mantine/core'; import { Input } from '@ui/input'; import { Table } from '@ui/table'; -import { VARIABLES } from '@config'; +import { VARIABLES, colors } from '@config'; import { Pagination } from '@ui/pagination'; import { DateInput } from '@ui/date-input'; import { useHistory } from '@hooks/useHistory'; import { IHistoryRecord } from '@impler/shared'; import { SearchIcon } from '@assets/icons/Search.icon'; +import { DownloadIcon } from '@assets/icons/Download.icon'; export function History() { - const { historyData, isHistoryDataLoading, onLimitChange, onPageChange, onNameChange, onDateChange, name, date } = - useHistory(); + const { + historyData, + downloadOriginalFile, + isHistoryDataLoading, + onLimitChange, + onPageChange, + onNameChange, + onDateChange, + name, + date, + } = useHistory(); return ( @@ -82,6 +92,23 @@ export function History() { title: 'Records', key: 'totalRecords', }, + { + title: 'Download Original File', + key: 'download', + width: 100, + Cell(item) { + return item.originalFileName ? ( + + downloadOriginalFile([item._id, item.originalFileName])} + > + + + + ) : null; + }, + }, ]} data={historyData?.data || []} /> diff --git a/apps/web/config/constants.config.ts b/apps/web/config/constants.config.ts index 2f19f1499..c6842ab5a 100644 --- a/apps/web/config/constants.config.ts +++ b/apps/web/config/constants.config.ts @@ -49,8 +49,8 @@ export const API_KEYS = { LOGOUT: 'LOGOUT', SIGNIN: 'SIGNIN', SIGNUP: 'SIGNUP', - REQUEST_FORGOT_PASSWORD: 'REQUEST_FORGOT_PASSWORD', RESET_PASSWORD: 'RESET_PASSWORD', + REQUEST_FORGOT_PASSWORD: 'REQUEST_FORGOT_PASSWORD', TEMPLATES_LIST: 'TEMPLATES_LIST', TEMPLATES_CREATE: 'TEMPLATES_CREATE', @@ -74,6 +74,7 @@ export const API_KEYS = { ME: 'ME', REGENERATE: 'REGENERATE', + DONWLOAD_ORIGINAL_FILE: 'DOWNLOAD_ORIGINAL_FILE', }; export const NOTIFICATION_KEYS = { diff --git a/apps/web/hooks/useHistory.tsx b/apps/web/hooks/useHistory.tsx index cf89ebf25..540114df0 100644 --- a/apps/web/hooks/useHistory.tsx +++ b/apps/web/hooks/useHistory.tsx @@ -1,19 +1,32 @@ import { useState } from 'react'; -import { useQuery } from '@tanstack/react-query'; +import { useMutation, useQuery } from '@tanstack/react-query'; import { useDebouncedState } from '@mantine/hooks'; import { commonApi } from '@libs/api'; import { track } from '@libs/amplitude'; import { API_KEYS, VARIABLES } from '@config'; -import { IErrorObject, IHistoryData } from '@impler/shared'; import { useAppState } from 'store/app.context'; +import { IErrorObject, IHistoryData, downloadFile } from '@impler/shared'; export function useHistory() { const { profileInfo } = useAppState(); const [date, setDate] = useState(); - const [limit, setLimit] = useState(VARIABLES.TEN); const [page, setPage] = useState(); + const [limit, setLimit] = useState(VARIABLES.TEN); const [name, setName] = useDebouncedState('', VARIABLES.TWO_HUNDREDS); + const { isLoading: isDownloadOriginalFileLoading, mutate: downloadOriginalFile } = useMutation< + ArrayBuffer, + IErrorObject, + [string, string] + >( + ['downloadOriginal'], + ([uploadId]) => commonApi(API_KEYS.DONWLOAD_ORIGINAL_FILE as any, { parameters: [uploadId] }), + { + onSuccess(excelFileData, variables) { + downloadFile(new Blob([excelFileData]), variables[1]); + }, + } + ); const { isLoading: isHistoryDataLoading, data: historyData } = useQuery< unknown, IErrorObject, @@ -74,7 +87,9 @@ export function useHistory() { onNameChange, onPageChange: setPage, onLimitChange, + downloadOriginalFile, isHistoryDataLoading, + isDownloadOriginalFileLoading, historyData, name, date, diff --git a/apps/web/libs/api.ts b/apps/web/libs/api.ts index 7ded32443..8f3d8a6fa 100644 --- a/apps/web/libs/api.ts +++ b/apps/web/libs/api.ts @@ -108,6 +108,10 @@ const routes: Record = { url: (templateId) => `/v1/template/${templateId}/validations`, method: 'PUT', }, + [API_KEYS.DONWLOAD_ORIGINAL_FILE]: { + url: (uploadId) => `/v1/upload/${uploadId}/files/original`, + method: 'GET', + }, [API_KEYS.ME]: { url: () => `/v1/auth/me`, method: 'GET', @@ -120,7 +124,10 @@ function handleResponseStatusAndContentType(response: Response) { if (contentType === null) return Promise.resolve(null); else if (contentType.startsWith('application/json;')) return response.json(); else if (contentType.startsWith('text/plain;')) return response.text(); - else throw new Error(`Unsupported response content-type: ${contentType}`); + else if (contentType.startsWith('text/csv')) return response.text(); + else if (contentType.startsWith('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')) { + return response.arrayBuffer(); + } else throw new Error(`Unsupported response content-type: ${contentType}`); } function queryObjToString(obj?: Record): string { diff --git a/apps/widget/src/hooks/Phase1/usePhase1.ts b/apps/widget/src/hooks/Phase1/usePhase1.ts index 260aece14..e5e9083e0 100644 --- a/apps/widget/src/hooks/Phase1/usePhase1.ts +++ b/apps/widget/src/hooks/Phase1/usePhase1.ts @@ -4,12 +4,13 @@ import { logAmplitudeEvent } from '@amplitude'; import { useMutation, useQuery } from '@tanstack/react-query'; import { variables } from '@config'; +import { downloadFile } from '@impler/shared'; import { useAPIState } from '@store/api.context'; import { useAppState } from '@store/app.context'; import { IFormvalues, IUploadValues } from '@types'; import { useImplerState } from '@store/impler.context'; import { IErrorObject, IOption, ITemplate, IUpload } from '@impler/shared'; -import { downloadFile, downloadFileFromURL, getFileNameFromUrl, notifier, ParentWindow } from '@util'; +import { downloadFileFromURL, getFileNameFromUrl, notifier, ParentWindow } from '@util'; interface IUsePhase1Props { goNext: () => void; diff --git a/apps/widget/src/util/helpers/common.helpers.ts b/apps/widget/src/util/helpers/common.helpers.ts index 26c4b2285..3d51f96a0 100644 --- a/apps/widget/src/util/helpers/common.helpers.ts +++ b/apps/widget/src/util/helpers/common.helpers.ts @@ -1,5 +1,6 @@ import axios from 'axios'; import { variables } from '@config'; +import { downloadFile } from '@impler/shared'; // eslint-disable-next-line no-magic-numbers export function formatBytes(bytes, decimals = 2) { @@ -26,18 +27,6 @@ function isValidHttpUrl(string: string) { return url.protocol === 'http:' || url.protocol === 'https:'; } -export function downloadFile(blob: Blob, name: string) { - const url = window.URL.createObjectURL(blob); - const link = document.createElement('a'); - link.href = url; - link.setAttribute('download', name); - document.body.appendChild(link); - link.click(); - - // Clean up and remove the link - link.parentNode?.removeChild(link); -} - function fetchFile(urlToFetch: string, name: string) { axios({ url: urlToFetch, diff --git a/libs/shared/src/entities/Activity/Activity.interface.ts b/libs/shared/src/entities/Activity/Activity.interface.ts index 2465142be..067665d7c 100644 --- a/libs/shared/src/entities/Activity/Activity.interface.ts +++ b/libs/shared/src/entities/Activity/Activity.interface.ts @@ -4,6 +4,7 @@ export interface IHistoryRecord { status: string; uploadedDate: string; validRecords: number; + originalFileName: string; name: string; } diff --git a/libs/shared/src/utils/helpers.ts b/libs/shared/src/utils/helpers.ts index 47b30c087..8736d55e8 100644 --- a/libs/shared/src/utils/helpers.ts +++ b/libs/shared/src/utils/helpers.ts @@ -50,3 +50,15 @@ export function replaceVariablesInString(str: string, obj: Record=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.20.12 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.39.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: false + /@babel/eslint-parser/7.19.1_m3jesvlp4ciell4zcpuihbbxc4: resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -7140,7 +7154,7 @@ packages: - '@types/react' dev: false - /@mantine/dates/6.0.6_7cbxwq2i6ifycwljiccut564ni: + /@mantine/dates/6.0.6_mbzdgm67ps3zigekihzr3ollpm: resolution: {integrity: sha512-eIBnvugWZp0ComzAaiIy5tjBXq9G53Q5Fht6SPyFBxXU/NZ/ZQhLq49nlFyLBpuZQOJ2Ex71S8cv/FMwLaAS4A==} peerDependencies: '@mantine/core': 6.0.6 @@ -7151,7 +7165,7 @@ packages: '@mantine/core': 6.0.6_ueioib7soyzozf2zgopdomeqve '@mantine/hooks': 6.0.6_react@18.2.0 '@mantine/utils': 6.0.6_react@18.2.0 - dayjs: 1.11.7 + dayjs: 1.11.10 react: 18.2.0 dev: false @@ -8616,6 +8630,46 @@ packages: tslib: 2.4.1 dev: true + /@pmmmwh/react-refresh-webpack-plugin/0.5.8_ljvsdgzwqvdkhuczdugsunimnq: + resolution: {integrity: sha512-wxXRwf+IQ6zvHSJZ+5T2RQNEsq+kx4jKRXfFvdt3nBIUzJUAvXEFsUeoaohDe/Kr84MTjGwcuIUPNcstNJORsA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.25.2 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.3.3 + loader-utils: 2.0.3 + react-refresh: 0.11.0 + schema-utils: 3.1.1 + source-map: 0.7.4 + webpack: 5.82.1 + webpack-dev-server: 4.11.1_webpack@5.82.1 + dev: false + /@pmmmwh/react-refresh-webpack-plugin/0.5.8_metx475lqcp4j5c75za4zf7xbi: resolution: {integrity: sha512-wxXRwf+IQ6zvHSJZ+5T2RQNEsq+kx4jKRXfFvdt3nBIUzJUAvXEFsUeoaohDe/Kr84MTjGwcuIUPNcstNJORsA==} engines: {node: '>= 10.13'} @@ -12021,7 +12075,7 @@ packages: dependencies: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-scripts: 5.0.1_rollmblchzatnd6ayiciecrhqe + react-scripts: 5.0.1_y23y5nbcj3qq6r5muudke34yhm dev: false /@tootallnate/once/1.1.2: @@ -12446,7 +12500,6 @@ packages: /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: true /@types/serve-index/1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -12568,7 +12621,7 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 - /@typescript-eslint/eslint-plugin/5.38.0_7uidpsvhbz7w7iybqcuk3cmpbm: + /@typescript-eslint/eslint-plugin/5.38.0_paeh2mj5yuvqghq425ghum2ioq: resolution: {integrity: sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12579,23 +12632,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/parser': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm '@typescript-eslint/scope-manager': 5.38.0 - '@typescript-eslint/type-utils': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq - '@typescript-eslint/utils': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/type-utils': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm + '@typescript-eslint/utils': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm debug: 4.3.4 eslint: 8.39.0 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.7 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + tsutils: 3.21.0_typescript@4.8.3 + typescript: 4.8.3 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/eslint-plugin/5.38.0_paeh2mj5yuvqghq425ghum2ioq: - resolution: {integrity: sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==} + /@typescript-eslint/eslint-plugin/5.48.2_azmbqzqvrlvblbdtiwxwvyvjjy: + resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -12605,22 +12658,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm - '@typescript-eslint/scope-manager': 5.38.0 - '@typescript-eslint/type-utils': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm - '@typescript-eslint/utils': 5.38.0_4dirkvzbubjt3dbig7qyeclnqm + '@typescript-eslint/parser': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm + '@typescript-eslint/scope-manager': 5.48.2 + '@typescript-eslint/type-utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm + '@typescript-eslint/utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm debug: 4.3.4 - eslint: 8.39.0 - ignore: 5.2.0 + eslint: 8.32.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.8.3 - typescript: 4.8.3 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color - dev: false + dev: true - /@typescript-eslint/eslint-plugin/5.48.2_azmbqzqvrlvblbdtiwxwvyvjjy: + /@typescript-eslint/eslint-plugin/5.48.2_cdxvesnqojxlozhcjcfbpbt2qu: resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12631,12 +12685,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm + '@typescript-eslint/parser': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/type-utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm - '@typescript-eslint/utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm + '@typescript-eslint/type-utils': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/utils': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.39.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 @@ -12645,7 +12699,7 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - supports-color - dev: true + dev: false /@typescript-eslint/experimental-utils/5.40.1_4dirkvzbubjt3dbig7qyeclnqm: resolution: {integrity: sha512-lynjgnQuoCgxtYgYWjoQqijk0kYQNiztnVhoqha3N0kMYFVPURidzCq2vn9XvUUu2XxP130ZRKVDKyeGa2bhbw==} @@ -12773,6 +12827,26 @@ packages: - supports-color dev: true + /@typescript-eslint/parser/5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq: + resolution: {integrity: sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==} + 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.48.2 + '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.39.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/scope-manager/5.38.0: resolution: {integrity: sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -12803,7 +12877,6 @@ packages: dependencies: '@typescript-eslint/types': 5.48.2 '@typescript-eslint/visitor-keys': 5.48.2 - dev: true /@typescript-eslint/type-utils/5.38.0_4dirkvzbubjt3dbig7qyeclnqm: resolution: {integrity: sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==} @@ -12825,8 +12898,8 @@ packages: - supports-color dev: false - /@typescript-eslint/type-utils/5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq: - resolution: {integrity: sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==} + /@typescript-eslint/type-utils/5.48.2_et5x32uxl7z5ldub3ye5rhlyqm: + resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -12835,17 +12908,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.38.0_typescript@4.9.5 - '@typescript-eslint/utils': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.5 + '@typescript-eslint/utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm debug: 4.3.4 - eslint: 8.39.0 + eslint: 8.32.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: - supports-color - dev: false + dev: true - /@typescript-eslint/type-utils/5.48.2_et5x32uxl7z5ldub3ye5rhlyqm: + /@typescript-eslint/type-utils/5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq: resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -12856,14 +12929,14 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.5 - '@typescript-eslint/utils': 5.48.2_et5x32uxl7z5ldub3ye5rhlyqm + '@typescript-eslint/utils': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.39.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: - supports-color - dev: true + dev: false /@typescript-eslint/types/5.38.0: resolution: {integrity: sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==} @@ -12883,7 +12956,6 @@ packages: /@typescript-eslint/types/5.48.2: resolution: {integrity: sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /@typescript-eslint/typescript-estree/5.38.0_typescript@4.8.3: resolution: {integrity: sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==} @@ -12962,7 +13034,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.7 + semver: 7.3.8 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: @@ -13030,7 +13102,6 @@ packages: typescript: 4.9.5 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/utils/5.38.0_4dirkvzbubjt3dbig7qyeclnqm: resolution: {integrity: sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==} @@ -13050,24 +13121,6 @@ packages: - typescript dev: false - /@typescript-eslint/utils/5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq: - resolution: {integrity: sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==} - 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.11 - '@typescript-eslint/scope-manager': 5.38.0 - '@typescript-eslint/types': 5.38.0 - '@typescript-eslint/typescript-estree': 5.38.0_typescript@4.9.5 - eslint: 8.39.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.39.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - /@typescript-eslint/utils/5.40.1_4dirkvzbubjt3dbig7qyeclnqm: resolution: {integrity: sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13095,14 +13148,14 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@types/semver': 7.3.12 + '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.40.1 '@typescript-eslint/types': 5.40.1 '@typescript-eslint/typescript-estree': 5.40.1_typescript@4.9.5 eslint: 8.39.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.39.0 - semver: 7.3.7 + semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript @@ -13128,6 +13181,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils/5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq: + resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} + 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.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.48.2 + '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.5 + eslint: 8.39.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.39.0 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + /@typescript-eslint/visitor-keys/5.38.0: resolution: {integrity: sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13158,7 +13231,6 @@ packages: dependencies: '@typescript-eslint/types': 5.48.2 eslint-visitor-keys: 3.4.0 - dev: true /@webassemblyjs/ast/1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} @@ -13940,7 +14012,6 @@ packages: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: deep-equal: 2.2.0 - dev: true /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -14030,7 +14101,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.flatmap/1.3.0: resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==} @@ -14049,7 +14119,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.map/1.0.4: resolution: {integrity: sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==} @@ -14079,7 +14148,6 @@ packages: es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.0 - dev: true /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} @@ -14204,7 +14272,6 @@ packages: /axe-core/4.6.2: resolution: {integrity: sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==} engines: {node: '>=4'} - dev: true /axios/0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} @@ -14258,7 +14325,6 @@ packages: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} dependencies: deep-equal: 2.2.0 - dev: true /babel-jest/27.5.1_@babel+core@7.19.6: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} @@ -14288,7 +14354,7 @@ packages: '@babel/core': 7.20.12 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.1.19 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 27.5.1_@babel+core@7.20.12 chalk: 4.1.2 @@ -14470,6 +14536,14 @@ packages: '@babel/core': 7.19.6 dev: false + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.12: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.20.12 + dev: false + /babel-plugin-named-exports-order/0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} dev: true @@ -15154,7 +15228,7 @@ packages: mississippi: 3.0.0 mkdirp: 0.5.6 move-concurrently: 1.0.1 - promise-inflight: 1.0.1 + promise-inflight: 1.0.1_bluebird@3.7.2 rimraf: 2.7.1 ssri: 6.0.2 unique-filename: 1.1.1 @@ -16309,6 +16383,23 @@ packages: webpack: 5.74.0 dev: false + /css-loader/6.7.1_webpack@5.82.1: + resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.18 + postcss: 8.4.18 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.18 + postcss-modules-local-by-default: 4.0.0_postcss@8.4.18 + postcss-modules-scope: 3.0.0_postcss@8.4.18 + postcss-modules-values: 4.0.0_postcss@8.4.18 + postcss-value-parser: 4.2.0 + semver: 7.3.8 + webpack: 5.82.1 + dev: false + /css-minimizer-webpack-plugin/3.4.1_webpack@5.74.0: resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} engines: {node: '>= 12.13.0'} @@ -16337,6 +16428,34 @@ packages: webpack: 5.74.0 dev: false + /css-minimizer-webpack-plugin/3.4.1_webpack@5.82.1: + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.13_postcss@8.4.18 + jest-worker: 27.5.1 + postcss: 8.4.18 + schema-utils: 4.0.0 + serialize-javascript: 6.0.1 + source-map: 0.6.1 + webpack: 5.82.1 + dev: false + /css-prefers-color-scheme/6.0.3_postcss@8.4.18: resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} engines: {node: ^12 || ^14 || >=16} @@ -16538,10 +16657,6 @@ packages: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false - /dayjs/1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} - dev: false - /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -16664,7 +16779,6 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.9 - dev: true /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} @@ -17306,7 +17420,6 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true /es-module-lexer/0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} @@ -17497,7 +17610,7 @@ packages: - supports-color dev: false - /eslint-config-react-app/7.0.1_fmsksbt2kjnhqm6fx7l7fghv3e: + /eslint-config-react-app/7.0.1_nfahc3o6tab7wlpw7hyxggk3ci: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -17507,19 +17620,19 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/eslint-parser': 7.19.1_m3jesvlp4ciell4zcpuihbbxc4 + '@babel/core': 7.20.12 + '@babel/eslint-parser': 7.19.1_f4tnwb7yxqwpyreao4kfvpek4e '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.38.0_7uidpsvhbz7w7iybqcuk3cmpbm - '@typescript-eslint/parser': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/eslint-plugin': 5.48.2_cdxvesnqojxlozhcjcfbpbt2qu + '@typescript-eslint/parser': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.39.0 - eslint-plugin-flowtype: 8.0.3_eslint@8.39.0 - eslint-plugin-import: 2.26.0_de53iy6ltr6wqehfpu3wjr7oj4 - eslint-plugin-jest: 25.7.0_w6muhssfm5yxvuj4inpkgvcnlm - eslint-plugin-jsx-a11y: 6.6.1_eslint@8.39.0 - eslint-plugin-react: 7.31.8_eslint@8.39.0 + eslint-plugin-flowtype: 8.0.3_fxr4ikwizmidzbtaq6atfkjo34 + eslint-plugin-import: 2.27.5_agmurilzyvddd6rhgg2uoch44u + eslint-plugin-jest: 25.7.0_kkls5syd6wp3rm5sfvvojgqthe + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.39.0 + eslint-plugin-react: 7.32.1_eslint@8.39.0 eslint-plugin-react-hooks: 4.6.0_eslint@8.39.0 eslint-plugin-testing-library: 5.9.0_tbtvr3a5zwdiktqy4vlmx63mqq typescript: 4.9.5 @@ -17548,7 +17661,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - supports-color - dev: true /eslint-import-resolver-typescript/3.5.2_cvmheqq3k4smbmctjsjzoy2mvy: resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} @@ -17708,30 +17820,46 @@ packages: - supports-color dev: true - /eslint-plugin-eslint-comments/3.2.0_eslint@8.32.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} + /eslint-module-utils/2.7.4_oiv3hszgv2vg7pxjtpjzerwnne: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} peerDependencies: - eslint: '>=4.19.1' - dependencies: + '@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.48.2_tbtvr3a5zwdiktqy4vlmx63mqq + debug: 3.2.7 + eslint: 8.39.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-eslint-comments/3.2.0_eslint@8.32.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.32.0 ignore: 5.2.4 dev: true - /eslint-plugin-flowtype/8.0.3_eslint@8.39.0: - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - eslint: 8.39.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: false - /eslint-plugin-flowtype/8.0.3_fxr4ikwizmidzbtaq6atfkjo34: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} @@ -17896,7 +18024,40 @@ packages: - supports-color dev: true - /eslint-plugin-jest/25.7.0_pkgkhs2x5vynqik4mqpaovxbom: + /eslint-plugin-import/2.27.5_agmurilzyvddd6rhgg2uoch44u: + 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.48.2_tbtvr3a5zwdiktqy4vlmx63mqq + 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.39.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_oiv3hszgv2vg7pxjtpjzerwnne + 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.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jest/25.7.0_kkls5syd6wp3rm5sfvvojgqthe: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -17909,8 +18070,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.38.0_paeh2mj5yuvqghq425ghum2ioq - '@typescript-eslint/experimental-utils': 5.40.1_4dirkvzbubjt3dbig7qyeclnqm + '@typescript-eslint/eslint-plugin': 5.48.2_cdxvesnqojxlozhcjcfbpbt2qu + '@typescript-eslint/experimental-utils': 5.40.1_tbtvr3a5zwdiktqy4vlmx63mqq eslint: 8.39.0 jest: 27.5.1 transitivePeerDependencies: @@ -17918,7 +18079,7 @@ packages: - typescript dev: false - /eslint-plugin-jest/25.7.0_w6muhssfm5yxvuj4inpkgvcnlm: + /eslint-plugin-jest/25.7.0_pkgkhs2x5vynqik4mqpaovxbom: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -17931,8 +18092,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.38.0_7uidpsvhbz7w7iybqcuk3cmpbm - '@typescript-eslint/experimental-utils': 5.40.1_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/eslint-plugin': 5.38.0_paeh2mj5yuvqghq425ghum2ioq + '@typescript-eslint/experimental-utils': 5.40.1_4dirkvzbubjt3dbig7qyeclnqm eslint: 8.39.0 jest: 27.5.1 transitivePeerDependencies: @@ -18008,6 +18169,31 @@ packages: semver: 6.3.0 dev: true + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.39.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.21.0 + aria-query: 5.1.3 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + ast-types-flow: 0.0.7 + axe-core: 4.6.2 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.39.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.0 + dev: false + /eslint-plugin-prettier/4.2.1_cn4lalcyadplruoxa5mhp7j3dq: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} @@ -18145,6 +18331,30 @@ packages: string.prototype.matchall: 4.0.8 dev: true + /eslint-plugin-react/7.32.1_eslint@8.39.0: + resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} + 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.39.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.8 + dev: false + /eslint-plugin-testing-library/5.9.0_4dirkvzbubjt3dbig7qyeclnqm: resolution: {integrity: sha512-iwPz6KNf/qc4rHMGaxn2vmS5snzuOqtia00D0FC2Wcp1xWM3J9w0/YzzrPv/UFHhLG0CwfQodyKmqL5+c6hGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} @@ -18164,7 +18374,7 @@ packages: peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.38.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/utils': 5.48.2_tbtvr3a5zwdiktqy4vlmx63mqq eslint: 8.39.0 transitivePeerDependencies: - supports-color @@ -18258,6 +18468,22 @@ packages: webpack: 5.74.0 dev: false + /eslint-webpack-plugin/3.2.0_kpibjzjfsuziokn7sddudbadae: + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.4.6 + eslint: 8.39.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.0.0 + webpack: 5.82.1 + dev: false + /eslint/8.23.1: resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -18883,6 +19109,17 @@ packages: webpack: 5.74.0 dev: false + /file-loader/6.2.0_webpack@5.82.1: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.3 + schema-utils: 3.1.1 + webpack: 5.82.1 + dev: false + /file-saver/2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} dev: false @@ -19167,6 +19404,39 @@ packages: tapable: 1.1.3 typescript: 4.9.5 webpack: 5.74.0 + dev: true + + /fork-ts-checker-webpack-plugin/6.5.2_c6dzk6yj2wa7vpk3yotobilkpi: + resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + '@types/json-schema': 7.0.11 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.2.2 + eslint: 8.39.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.4.7 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.3.8 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.82.1 + dev: false /fork-ts-checker-webpack-plugin/6.5.2_idygbqetsqec3btl3ua5qoxwiq: resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} @@ -20123,6 +20393,20 @@ packages: tapable: 2.2.1 webpack: 5.74.0 + /html-webpack-plugin/5.5.0_webpack@5.82.1: + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.82.1 + dev: false + /htmlparser2/6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: @@ -20900,7 +21184,6 @@ packages: /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==} @@ -20912,7 +21195,6 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 - dev: true /is-whitespace-character/1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} @@ -23042,6 +23324,16 @@ packages: webpack: 5.74.0 dev: false + /mini-css-extract-plugin/2.6.1_webpack@5.82.1: + resolution: {integrity: sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.0.0 + webpack: 5.82.1 + dev: false + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -23431,7 +23723,6 @@ packages: /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -24001,7 +24292,6 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - dev: true /object-keys/0.4.0: resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} @@ -24041,7 +24331,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - dev: true /object.fromentries/2.0.5: resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} @@ -24058,7 +24347,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - dev: true /object.getownpropertydescriptors/2.1.4: resolution: {integrity: sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==} @@ -24080,7 +24368,6 @@ packages: dependencies: define-properties: 1.1.4 es-abstract: 1.21.1 - dev: true /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} @@ -25097,6 +25384,20 @@ packages: semver: 7.3.8 webpack: 4.46.0 + /postcss-loader/6.2.1_5gxnmoxclbn2szcft737ycupdq: + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.5 + postcss: 8.4.18 + semver: 7.3.8 + webpack: 5.82.1 + dev: false + /postcss-loader/6.2.1_igyeriywjd4lwzfk4socqbj2qi: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} @@ -25724,6 +26025,16 @@ packages: bluebird: optional: true + /promise-inflight/1.0.1_bluebird@3.7.2: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: + bluebird: 3.7.2 + /promise-retry/2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} @@ -26013,7 +26324,7 @@ packages: react: 18.2.0 dev: false - /react-dev-utils/12.0.1_7cuulgboaz6suilqxjt4pdw23a: + /react-dev-utils/12.0.1_c6dzk6yj2wa7vpk3yotobilkpi: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -26032,7 +26343,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2_7cuulgboaz6suilqxjt4pdw23a + fork-ts-checker-webpack-plugin: 6.5.2_c6dzk6yj2wa7vpk3yotobilkpi global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -26048,7 +26359,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.74.0 + webpack: 5.82.1 transitivePeerDependencies: - eslint - supports-color @@ -26379,7 +26690,7 @@ packages: - webpack-plugin-serve dev: false - /react-scripts/5.0.1_rollmblchzatnd6ayiciecrhqe: + /react-scripts/5.0.1_y23y5nbcj3qq6r5muudke34yhm: resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -26391,55 +26702,55 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.19.6 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.8_prxwy2zxcolvdag5hfkyuqbcze + '@babel/core': 7.20.12 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.8_ljvsdgzwqvdkhuczdugsunimnq '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1_@babel+core@7.19.6 - babel-loader: 8.2.5_6zc4kxld457avlfyhj3lzsljlm - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.19.6 + babel-jest: 27.5.1_@babel+core@7.20.12 + babel-loader: 8.2.5_yarkzznzpwkkvvc37yzraonrky + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.4 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.1_webpack@5.74.0 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.74.0 + css-loader: 6.7.1_webpack@5.82.1 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.82.1 dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.39.0 - eslint-config-react-app: 7.0.1_fmsksbt2kjnhqm6fx7l7fghv3e - eslint-webpack-plugin: 3.2.0_e6d2vg2ivvgmysygmyvtyrab7u - file-loader: 6.2.0_webpack@5.74.0 + eslint-config-react-app: 7.0.1_nfahc3o6tab7wlpw7hyxggk3ci + eslint-webpack-plugin: 3.2.0_kpibjzjfsuziokn7sddudbadae + file-loader: 6.2.0_webpack@5.82.1 fs-extra: 10.1.0 - html-webpack-plugin: 5.5.0_webpack@5.74.0 + html-webpack-plugin: 5.5.0_webpack@5.82.1 identity-obj-proxy: 3.0.0 jest: 27.5.1 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0_jest@27.5.1 - mini-css-extract-plugin: 2.6.1_webpack@5.74.0 + mini-css-extract-plugin: 2.6.1_webpack@5.82.1 postcss: 8.4.18 postcss-flexbugs-fixes: 5.0.2_postcss@8.4.18 - postcss-loader: 6.2.1_igyeriywjd4lwzfk4socqbj2qi + postcss-loader: 6.2.1_5gxnmoxclbn2szcft737ycupdq postcss-normalize: 10.0.1_ou6qvybldzyudiekdtxolschee postcss-preset-env: 7.8.2_postcss@8.4.18 prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_7cuulgboaz6suilqxjt4pdw23a + react-dev-utils: 12.0.1_c6dzk6yj2wa7vpk3yotobilkpi react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0_webpack@5.74.0 - semver: 7.3.7 - source-map-loader: 3.0.1_webpack@5.74.0 - style-loader: 3.3.1_webpack@5.74.0 + sass-loader: 12.6.0_webpack@5.82.1 + semver: 7.3.8 + source-map-loader: 3.0.1_webpack@5.82.1 + style-loader: 3.3.1_webpack@5.82.1 tailwindcss: 3.2.0_postcss@8.4.18 - terser-webpack-plugin: 5.3.6_webpack@5.74.0 + terser-webpack-plugin: 5.3.9_webpack@5.82.1 typescript: 4.9.5 - webpack: 5.74.0 - webpack-dev-server: 4.11.1_webpack@5.74.0 - webpack-manifest-plugin: 4.1.1_webpack@5.74.0 - workbox-webpack-plugin: 6.5.4_webpack@5.74.0 + webpack: 5.82.1 + webpack-dev-server: 4.11.1_webpack@5.82.1 + webpack-manifest-plugin: 4.1.1_webpack@5.82.1 + workbox-webpack-plugin: 6.5.4_webpack@5.82.1 optionalDependencies: fsevents: 2.3.2 transitivePeerDependencies: @@ -27257,6 +27568,30 @@ packages: webpack: 5.74.0 dev: false + /sass-loader/12.6.0_webpack@5.82.1: + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.5 + neo-async: 2.6.2 + webpack: 5.82.1 + dev: false + /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false @@ -27727,6 +28062,18 @@ packages: webpack: 5.74.0 dev: false + /source-map-loader/3.0.1_webpack@5.82.1: + resolution: {integrity: sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.82.1 + dev: false + /source-map-resolve/0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} deprecated: See https://github.com/lydell/source-map-resolve#deprecated @@ -27920,7 +28267,6 @@ packages: engines: {node: '>= 0.4'} dependencies: internal-slot: 1.0.4 - dev: true /store2/2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} @@ -28235,6 +28581,15 @@ packages: webpack: 5.74.0 dev: false + /style-loader/3.3.1_webpack@5.82.1: + resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.82.1 + dev: false + /style-to-js/1.1.0: resolution: {integrity: sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==} dependencies: @@ -30033,6 +30388,17 @@ packages: webpack-sources: 2.3.1 dev: false + /webpack-manifest-plugin/4.1.1_webpack@5.82.1: + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.82.1 + webpack-sources: 2.3.1 + dev: false + /webpack-merge/4.2.2: resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==} dependencies: @@ -30272,7 +30638,6 @@ packages: is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -30506,6 +30871,23 @@ packages: - supports-color dev: false + /workbox-webpack-plugin/6.5.4_webpack@5.82.1: + resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.82.1 + webpack-sources: 1.4.3 + workbox-build: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + /workbox-window/6.5.4: resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} dependencies: