From e6177c292d21e41af144617eeeb178fb6bfa1da2 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 27 Sep 2023 10:46:21 +0200 Subject: [PATCH 01/61] feat(ZipDownloadLimit): refactor to check fileSelection size against files --- .../dataset-files/files-table/FilesTable.tsx | 2 +- .../row-selection/useFileSelection.ts | 4 +- .../ZipDownloadLimitMessage.tsx | 15 ++++--- src/stories/files/FileMockData.ts | 11 +++-- src/stories/files/FileMockRepository.ts | 2 +- .../ZipDownloadLimitMessage.spec.tsx | 42 +++++++++++-------- 6 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx index 3531b0500..1ad983b76 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTable.tsx @@ -31,7 +31,7 @@ export function FilesTable({ files, isLoading, paginationInfo }: FilesTableProps totalFilesCount={paginationInfo.totalFiles} clearRowSelection={clearFileSelection} /> - + diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts index 61bc82b40..803f7f973 100644 --- a/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts +++ b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts @@ -5,7 +5,7 @@ import { Row } from '@tanstack/react-table' import { RowSelection } from '../useFilesTable' export type FileSelection = { - [key: string]: File | undefined + [key: string]: number | undefined } export function useFileSelection( @@ -41,7 +41,7 @@ export function useFileSelection( Object.entries(currentPageSelectedRowModel).forEach(([string, Row]) => { const rowIndex = parseInt(string) - rowSelectionFixed[currentPageIndexes[rowIndex]] = Row.original + rowSelectionFixed[currentPageIndexes[rowIndex]] = Row.original.id }) return rowSelectionFixed } diff --git a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx index 7e1c474ee..fd4ad3094 100644 --- a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx +++ b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx @@ -9,11 +9,12 @@ import { FileSelection } from '../row-selection/useFileSelection' interface ZipDownloadLimitMessageProps { fileSelection: FileSelection + files: File[] } const MINIMUM_FILES_TO_SHOW_MESSAGE = 1 -export function ZipDownloadLimitMessage({ fileSelection }: ZipDownloadLimitMessageProps) { +export function ZipDownloadLimitMessage({ fileSelection, files }: ZipDownloadLimitMessageProps) { const { t } = useTranslation('files') const { getSettingByName } = useSettings() const [zipDownloadLimitInBytes, setZipDownloadLimitInBytes] = useState() @@ -27,8 +28,9 @@ export function ZipDownloadLimitMessage({ fileSelection }: ZipDownloadLimitMessa }) }, [getSettingByName]) + console.log('fileSelection', fileSelection) // TODO - When selecting all files, the size should come from a call to a use case that returns the total size of the dataset files. Check issue https://github.com/IQSS/dataverse-frontend/issues/170 - const selectionTotalSizeInBytes = getFilesTotalSizeInBytes(Object.values(fileSelection)) + const selectionTotalSizeInBytes = getFileSelectionTotalSizeInBytes(fileSelection, files) const showMessage = zipDownloadLimitInBytes && Object.values(fileSelection).length > MINIMUM_FILES_TO_SHOW_MESSAGE && @@ -49,10 +51,11 @@ export function ZipDownloadLimitMessage({ fileSelection }: ZipDownloadLimitMessa ) } -function getFilesTotalSizeInBytes(files: (File | undefined)[]) { - return files - .map((file) => file?.size) - .reduce((bytes, size) => bytes + (size ? size.toBytes() : 0), 0) +function getFileSelectionTotalSizeInBytes(fileSelection: FileSelection, files: File[]) { + return Object.values(fileSelection) + .map((fileId) => files.find((file) => file.id == fileId)) + .filter((file) => file != undefined) + .reduce((totalSize, file) => totalSize + file!.size.toBytes(), 0) } function bytesToHumanReadable(bytes: number) { diff --git a/src/stories/files/FileMockData.ts b/src/stories/files/FileMockData.ts index 3854a8b36..7cae04f66 100644 --- a/src/stories/files/FileMockData.ts +++ b/src/stories/files/FileMockData.ts @@ -1,5 +1,6 @@ import { File } from '../../files/domain/models/File' import { FileMother } from '../../../tests/component/files/domain/models/FileMother' +import { FilePaginationInfo } from '../../files/domain/models/FilePaginationInfo' const range = (len: number) => { const arr = [] @@ -9,10 +10,12 @@ const range = (len: number) => { return arr } -export function makeFiles(len: number): File[] { - return range(len).map(() => { - return FileMother.create() +export function makeFiles(paginationInfo: FilePaginationInfo): File[] { + return range(paginationInfo.pageSize).map((value, index) => { + return FileMother.create({ id: (paginationInfo.page - 1) * paginationInfo.pageSize + index }) }) } -export const FilesMockData = (amount = 200): File[] => makeFiles(amount) +export const FilesMockData = ( + paginationInfo: FilePaginationInfo = new FilePaginationInfo() +): File[] => makeFiles(paginationInfo) diff --git a/src/stories/files/FileMockRepository.ts b/src/stories/files/FileMockRepository.ts index f9209ecb9..850375f2e 100644 --- a/src/stories/files/FileMockRepository.ts +++ b/src/stories/files/FileMockRepository.ts @@ -17,7 +17,7 @@ export class FileMockRepository implements FileRepository { ): Promise { return new Promise((resolve) => { setTimeout(() => { - resolve(FilesMockData(paginationInfo?.pageSize || 10)) + resolve(FilesMockData(paginationInfo)) }, 1000) }) } diff --git a/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx index bc4fe4f08..60e23f1e9 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx @@ -5,10 +5,17 @@ import { SettingMother } from '../../../../../settings/domain/models/SettingMoth import { ZipDownloadLimit } from '../../../../../../../src/settings/domain/models/ZipDownloadLimit' import { SettingsContext } from '../../../../../../../src/sections/settings/SettingsContext' +const file1Id = 123 +const file2Id = 323 const fileSelection = { - '1': FileMother.create({ size: new FileSize(1024, FileSizeUnit.BYTES) }), - '2': FileMother.create({ size: new FileSize(2048, FileSizeUnit.BYTES) }) + 0: file1Id, + 1: file2Id } +const files = [ + FileMother.create({ id: file1Id, size: new FileSize(1024, FileSizeUnit.BYTES) }), + FileMother.create({ id: file2Id, size: new FileSize(2048, FileSizeUnit.BYTES) }), + ...FileMother.createMany(8) +] const zipDownloadLimit = new ZipDownloadLimit(500, FileSizeUnit.BYTES) describe('ZipDownloadLimitMessage', () => { it('should not render if there is less than 1 file selected', () => { @@ -18,11 +25,7 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( - + ) @@ -37,10 +40,12 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( ) @@ -54,7 +59,7 @@ describe('ZipDownloadLimitMessage', () => { .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) cy.customMount( - + ) @@ -67,13 +72,16 @@ describe('ZipDownloadLimitMessage', () => { const getSettingByName = cy .stub() .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) - const fileSelection = { - '1': FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }), - '2': FileMother.create({ size: new FileSize(1000000, FileSizeUnit.PETABYTES) }) - } cy.customMount( - + ) From 6d8671f5dd8bcfe39b8fbb6d1abd68abaaf292a1 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Fri, 29 Sep 2023 15:45:33 +0100 Subject: [PATCH 02/61] feat(ZipDownloadLimitMessage): add use case to get the total files download size --- .../domain/repositories/FileRepository.ts | 4 + .../useCases/getFilesTotalDownloadSize.ts | 14 ++ .../FileJSDataverseRepository.ts | 9 ++ .../dataset/dataset-files/DatasetFiles.tsx | 9 +- .../dataset-files/files-table/FilesTable.tsx | 25 +++- .../row-selection/useFileSelection.ts | 11 +- .../ZipDownloadLimitMessage.tsx | 53 +++++-- .../dataset/dataset-files/useFiles.tsx | 15 +- src/stories/WithSettings.tsx | 2 +- src/stories/files/FileMockData.ts | 10 +- src/stories/files/FileMockNoDataRepository.ts | 14 ++ src/stories/files/FileMockRepository.ts | 14 ++ .../dataset-files/DatasetFiles.spec.tsx | 58 +++++++- .../files-table/FilesTable.spec.tsx | 73 ++++++++-- .../ZipDownloadLimitMessage.spec.tsx | 135 +++++++++++++++--- .../dataset/dataset-files/useFiles.spec.tsx | 24 +++- 16 files changed, 406 insertions(+), 64 deletions(-) create mode 100644 src/files/domain/useCases/getFilesTotalDownloadSize.ts diff --git a/src/files/domain/repositories/FileRepository.ts b/src/files/domain/repositories/FileRepository.ts index 158806a33..41d802c8a 100644 --- a/src/files/domain/repositories/FileRepository.ts +++ b/src/files/domain/repositories/FileRepository.ts @@ -16,5 +16,9 @@ export interface FileRepository { datasetPersistentId: string, datasetVersion: DatasetVersion ) => Promise + getFilesTotalDownloadSizeByDatasetPersistentId: ( + datasetPersistentId: string, + datasetVersion: DatasetVersion + ) => Promise getUserPermissionsById: (id: number) => Promise } diff --git a/src/files/domain/useCases/getFilesTotalDownloadSize.ts b/src/files/domain/useCases/getFilesTotalDownloadSize.ts new file mode 100644 index 000000000..81c930559 --- /dev/null +++ b/src/files/domain/useCases/getFilesTotalDownloadSize.ts @@ -0,0 +1,14 @@ +import { FileRepository } from '../repositories/FileRepository' +import { DatasetVersion } from '../../../dataset/domain/models/Dataset' + +export async function getFilesTotalDownloadSize( + fileRepository: FileRepository, + datasetPersistentId: string, + datasetVersion: DatasetVersion +): Promise { + return fileRepository + .getFilesTotalDownloadSizeByDatasetPersistentId(datasetPersistentId, datasetVersion) + .catch((error: Error) => { + throw new Error(error.message) + }) +} diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index 6b5006692..e0cd8baef 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -77,6 +77,15 @@ export class FileJSDataverseRepository implements FileRepository { }) } + getFilesTotalDownloadSizeByDatasetPersistentId( + // eslint-disable-next-line unused-imports/no-unused-vars + datasetPersistentId: string, + // eslint-disable-next-line unused-imports/no-unused-vars + datasetVersion: DatasetVersion + ): Promise { + return Promise.resolve(0) + } + getUserPermissionsById(id: number): Promise { return getFileUserPermissions .execute(id) diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index 33d75a2a7..5b009d762 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -21,7 +21,7 @@ export function DatasetFiles({ }: DatasetFilesProps) { const [paginationInfo, setPaginationInfo] = useState(new FilePaginationInfo()) const [criteria, setCriteria] = useState(new FileCriteria()) - const { files, isLoading, filesCountInfo } = useFiles( + const { files, isLoading, filesCountInfo, filesTotalDownloadSize } = useFiles( filesRepository, datasetPersistentId, datasetVersion, @@ -37,7 +37,12 @@ export function DatasetFiles({ onCriteriaChange={setCriteria} filesCountInfo={filesCountInfo} /> - + (paginationInfo) + const [visitedFiles, setVisitedFiles] = useState({}) + + useEffect(() => { + if (visitedPagination.page == paginationInfo.page) { + setVisitedFiles((visitedFiles) => ({ ...visitedFiles, ...fileSelection })) + } + setVisitedPagination(paginationInfo) + }, [fileSelection]) if (isLoading) { return @@ -31,7 +48,11 @@ export function FilesTable({ files, isLoading, paginationInfo }: FilesTableProps totalFilesCount={paginationInfo.totalFiles} clearRowSelection={clearFileSelection} /> - +
diff --git a/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts index 803f7f973..ede451ad0 100644 --- a/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts +++ b/src/sections/dataset/dataset-files/files-table/row-selection/useFileSelection.ts @@ -5,7 +5,7 @@ import { Row } from '@tanstack/react-table' import { RowSelection } from '../useFilesTable' export type FileSelection = { - [key: string]: number | undefined + [key: string]: File | undefined } export function useFileSelection( @@ -41,7 +41,7 @@ export function useFileSelection( Object.entries(currentPageSelectedRowModel).forEach(([string, Row]) => { const rowIndex = parseInt(string) - rowSelectionFixed[currentPageIndexes[rowIndex]] = Row.original.id + rowSelectionFixed[currentPageIndexes[rowIndex]] = Row.original }) return rowSelectionFixed } @@ -60,7 +60,10 @@ export function useFileSelection( } const selectAllFiles = () => { setCurrentPageRowSelection(createRowSelection(paginationInfo.pageSize)) - setFileSelection(createFileSelection(paginationInfo.totalFiles)) + + const totalFilesFileSelection = createFileSelection(paginationInfo.totalFiles) + const newFileSelection = { ...totalFilesFileSelection, ...fileSelection } + setFileSelection(newFileSelection) } const clearFileSelection = () => { setCurrentPageRowSelection({}) @@ -92,7 +95,7 @@ export function createRowSelection(numberOfRows: number) { return rowSelection } -export function createFileSelection(numberOfRows: number) { +export function createFileSelection(numberOfRows: number): FileSelection { const fileSelection: FileSelection = {} for (let i = 0; i < numberOfRows; i++) { diff --git a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx index fd4ad3094..8181e34b5 100644 --- a/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx +++ b/src/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.tsx @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next' import styles from './ZipLimitMessage.module.scss' -import { File, FileSizeUnit } from '../../../../../files/domain/models/File' +import { FileSizeUnit } from '../../../../../files/domain/models/File' import { useSettings } from '../../../../settings/SettingsContext' import { SettingName } from '../../../../../settings/domain/models/Setting' import { ZipDownloadLimit } from '../../../../../settings/domain/models/ZipDownloadLimit' @@ -9,12 +9,17 @@ import { FileSelection } from '../row-selection/useFileSelection' interface ZipDownloadLimitMessageProps { fileSelection: FileSelection - files: File[] + visitedFiles: FileSelection + filesTotalDownloadSize: number } const MINIMUM_FILES_TO_SHOW_MESSAGE = 1 -export function ZipDownloadLimitMessage({ fileSelection, files }: ZipDownloadLimitMessageProps) { +export function ZipDownloadLimitMessage({ + fileSelection, + visitedFiles, + filesTotalDownloadSize +}: ZipDownloadLimitMessageProps) { const { t } = useTranslation('files') const { getSettingByName } = useSettings() const [zipDownloadLimitInBytes, setZipDownloadLimitInBytes] = useState() @@ -28,13 +33,20 @@ export function ZipDownloadLimitMessage({ fileSelection, files }: ZipDownloadLim }) }, [getSettingByName]) - console.log('fileSelection', fileSelection) - // TODO - When selecting all files, the size should come from a call to a use case that returns the total size of the dataset files. Check issue https://github.com/IQSS/dataverse-frontend/issues/170 - const selectionTotalSizeInBytes = getFileSelectionTotalSizeInBytes(fileSelection, files) + const [fileSelectionTotalSizeInInBytes, setFileSelectionTotalSizeInInBytes] = useState(0) + useEffect(() => { + const totalSize = computeFileSelectionTotalSizeInBytes( + visitedFiles, + fileSelection, + filesTotalDownloadSize + ) + setFileSelectionTotalSizeInInBytes(totalSize) + }, [fileSelection]) + const showMessage = zipDownloadLimitInBytes && Object.values(fileSelection).length > MINIMUM_FILES_TO_SHOW_MESSAGE && - selectionTotalSizeInBytes > zipDownloadLimitInBytes + fileSelectionTotalSizeInInBytes > zipDownloadLimitInBytes if (!showMessage) { return <> @@ -43,7 +55,7 @@ export function ZipDownloadLimitMessage({ fileSelection, files }: ZipDownloadLim
{t('table.zipDownloadExceedsLimit', { - selectionTotalSize: bytesToHumanReadable(selectionTotalSizeInBytes), + selectionTotalSize: bytesToHumanReadable(fileSelectionTotalSizeInInBytes), zipDownloadSizeLimit: bytesToHumanReadable(zipDownloadLimitInBytes) })} @@ -51,11 +63,30 @@ export function ZipDownloadLimitMessage({ fileSelection, files }: ZipDownloadLim ) } -function getFileSelectionTotalSizeInBytes(fileSelection: FileSelection, files: File[]) { +function computeFileSelectionTotalSizeInBytes( + visitedFiles: FileSelection, + fileSelection: FileSelection, + filesTotalDownloadSize: number +) { + const selectAllHasBeenClicked = Object.values(fileSelection).some((file) => file == undefined) + if (selectAllHasBeenClicked) { + const differenceBetweenPreviousAndCurrentSelection = + getFilesTotalSize(visitedFiles) - getFilesTotalSize(fileSelection) + + if (differenceBetweenPreviousAndCurrentSelection < 0) { + return filesTotalDownloadSize + } + + return filesTotalDownloadSize - differenceBetweenPreviousAndCurrentSelection + } + + return getFilesTotalSize(fileSelection) +} + +function getFilesTotalSize(fileSelection: FileSelection) { return Object.values(fileSelection) - .map((fileId) => files.find((file) => file.id == fileId)) .filter((file) => file != undefined) - .reduce((totalSize, file) => totalSize + file!.size.toBytes(), 0) + .reduce((totalSize, file) => totalSize + (file ? file.size.toBytes() : 0), 0) } function bytesToHumanReadable(bytes: number) { diff --git a/src/sections/dataset/dataset-files/useFiles.tsx b/src/sections/dataset/dataset-files/useFiles.tsx index 27bedeaac..7babb384d 100644 --- a/src/sections/dataset/dataset-files/useFiles.tsx +++ b/src/sections/dataset/dataset-files/useFiles.tsx @@ -9,6 +9,7 @@ import { FilePaginationInfo } from '../../../files/domain/models/FilePaginationI import { useFilePermissions } from '../../file/file-permissions/FilePermissionsContext' import { FilePermission } from '../../../files/domain/models/FileUserPermissions' import { DatasetVersion } from '../../../dataset/domain/models/Dataset' +import { getFilesTotalDownloadSize } from '../../../files/domain/useCases/getFilesTotalDownloadSize' export function useFiles( filesRepository: FileRepository, @@ -22,6 +23,7 @@ export function useFiles( const [files, setFiles] = useState([]) const [isLoading, setIsLoading] = useState(true) const [filesCountInfo, setFilesCountInfo] = useState() + const [filesTotalDownloadSize, setFilesTotalDownloadSize] = useState(0) useEffect(() => { getFilesCountInfoByDatasetPersistentId(filesRepository, datasetPersistentId, datasetVersion) @@ -65,9 +67,20 @@ export function useFiles( } }, [filesRepository, datasetPersistentId, datasetVersion, paginationInfo, criteria]) + useEffect(() => { + getFilesTotalDownloadSize(filesRepository, datasetPersistentId, datasetVersion) + .then((filesTotalDownloadSize: number) => { + setFilesTotalDownloadSize(filesTotalDownloadSize) + }) + .catch((error) => { + console.error('There was an error getting the files total download size', error) + }) + }, [filesRepository, datasetPersistentId, datasetVersion]) + return { files, isLoading, - filesCountInfo + filesCountInfo, + filesTotalDownloadSize } } diff --git a/src/stories/WithSettings.tsx b/src/stories/WithSettings.tsx index 1a19cd96c..24764ef45 100644 --- a/src/stories/WithSettings.tsx +++ b/src/stories/WithSettings.tsx @@ -5,7 +5,7 @@ import { SettingMother } from '../../tests/component/settings/domain/models/Sett import { ZipDownloadLimit } from '../settings/domain/models/ZipDownloadLimit' import { FileSizeUnit } from '../files/domain/models/File' -const zipDownloadLimitMock = new ZipDownloadLimit(500, FileSizeUnit.BYTES) +const zipDownloadLimitMock = new ZipDownloadLimit(1, FileSizeUnit.BYTES) export const WithSettings = (Story: StoryFn) => { // eslint-disable-next-line unused-imports/no-unused-vars function getSettingByName(name: SettingName): Promise> { diff --git a/src/stories/files/FileMockData.ts b/src/stories/files/FileMockData.ts index 7cae04f66..183b5b2e9 100644 --- a/src/stories/files/FileMockData.ts +++ b/src/stories/files/FileMockData.ts @@ -1,4 +1,4 @@ -import { File } from '../../files/domain/models/File' +import { File, FileSize, FileSizeUnit } from '../../files/domain/models/File' import { FileMother } from '../../../tests/component/files/domain/models/FileMother' import { FilePaginationInfo } from '../../files/domain/models/FilePaginationInfo' @@ -12,7 +12,13 @@ const range = (len: number) => { export function makeFiles(paginationInfo: FilePaginationInfo): File[] { return range(paginationInfo.pageSize).map((value, index) => { - return FileMother.create({ id: (paginationInfo.page - 1) * paginationInfo.pageSize + index }) + return FileMother.create({ + id: (paginationInfo.page - 1) * paginationInfo.pageSize + index, + size: new FileSize( + (paginationInfo.page - 1) * paginationInfo.pageSize + index, + FileSizeUnit.BYTES + ) + }) }) } diff --git a/src/stories/files/FileMockNoDataRepository.ts b/src/stories/files/FileMockNoDataRepository.ts index 9f8b77f50..46fd0332a 100644 --- a/src/stories/files/FileMockNoDataRepository.ts +++ b/src/stories/files/FileMockNoDataRepository.ts @@ -32,6 +32,20 @@ export class FileMockNoDataRepository implements FileRepository { }, 1000) }) } + + getFilesTotalDownloadSizeByDatasetPersistentId( + // eslint-disable-next-line unused-imports/no-unused-vars + datasetPersistentId: string, + // eslint-disable-next-line unused-imports/no-unused-vars + datasetVersion: DatasetVersion + ): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(0) + }, 1000) + }) + } + // eslint-disable-next-line unused-imports/no-unused-vars getUserPermissionsById(id: number): Promise { return new Promise((resolve) => { diff --git a/src/stories/files/FileMockRepository.ts b/src/stories/files/FileMockRepository.ts index 850375f2e..85ceafe96 100644 --- a/src/stories/files/FileMockRepository.ts +++ b/src/stories/files/FileMockRepository.ts @@ -34,6 +34,20 @@ export class FileMockRepository implements FileRepository { }, 1000) }) } + + getFilesTotalDownloadSizeByDatasetPersistentId( + // eslint-disable-next-line unused-imports/no-unused-vars + datasetPersistentId: string, + // eslint-disable-next-line unused-imports/no-unused-vars + datasetVersion: DatasetVersion + ): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(19900) + }, 1000) + }) + } + // eslint-disable-next-line unused-imports/no-unused-vars getUserPermissionsById(id: number): Promise { return new Promise((resolve) => { diff --git a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx index 867ee4b89..4844f6b91 100644 --- a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx @@ -9,7 +9,7 @@ import { } from '../../../../../src/files/domain/models/FileCriteria' import { FilesCountInfoMother } from '../../../files/domain/models/FilesCountInfoMother' import { FilePaginationInfo } from '../../../../../src/files/domain/models/FilePaginationInfo' -import { FileSizeUnit, FileType } from '../../../../../src/files/domain/models/File' +import { FileSize, FileSizeUnit, FileType } from '../../../../../src/files/domain/models/File' import styles from '../../../../../src/sections/dataset/dataset-files/files-table/FilesTable.module.scss' import { DatasetMother } from '../../../dataset/domain/models/DatasetMother' import { SettingMother } from '../../../settings/domain/models/SettingMother' @@ -43,10 +43,16 @@ const testFilesCountInfo = FilesCountInfoMother.create({ ] }) const filePaginationInfo = new FilePaginationInfo(1, 10, 200) +const settingsRepository = {} as SettingRepository describe('DatasetFiles', () => { beforeEach(() => { fileRepository.getAllByDatasetPersistentId = cy.stub().resolves(testFiles) fileRepository.getFilesCountInfoByDatasetPersistentId = cy.stub().resolves(testFilesCountInfo) + fileRepository.getFilesTotalDownloadSizeByDatasetPersistentId = cy.stub().resolves(19900) + + settingsRepository.getByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(new ZipDownloadLimit(1, FileSizeUnit.BYTES))) }) it('renders the files table', () => { @@ -168,10 +174,13 @@ describe('DatasetFiles', () => { }) it('renders the zip download limit message when selecting rows from different pages', () => { - const settingsRepository = {} as SettingRepository - settingsRepository.getByName = cy - .stub() - .resolves(SettingMother.createZipDownloadLimit(new ZipDownloadLimit(1, FileSizeUnit.BYTES))) + testFiles[1] = FileMother.create({ + size: new FileSize(1, FileSizeUnit.BYTES) + }) + + testFiles[2] = FileMother.create({ + size: new FileSize(2, FileSizeUnit.BYTES) + }) cy.customMount( @@ -188,7 +197,7 @@ describe('DatasetFiles', () => { cy.get('table > tbody > tr:nth-child(3) > td:nth-child(1) > input[type=checkbox]').click() cy.findByText( - /exceeds the zip limit of 1.0 B. Please unselect some files to continue./ + 'The overall size of the files selected (3.0 B) for download exceeds the zip limit of 1.0 B. Please unselect some files to continue.' ).should('exist') cy.get('table > tbody > tr:nth-child(3) > td:nth-child(1) > input[type=checkbox]').click() @@ -197,6 +206,43 @@ describe('DatasetFiles', () => { /exceeds the zip limit of 1.0 B. Please unselect some files to continue./ ).should('not.exist') }) + + it('renders the zip download limit message when selecting all rows', () => { + cy.customMount( + + + + ) + + cy.get('table > thead > tr > th > input[type=checkbox]').click() + cy.findByRole('button', { name: 'Select all 200 files in this dataset.' }).click() + cy.findByText( + 'The overall size of the files selected (19.4 KB) for download exceeds the zip limit of 1.0 B. Please unselect some files to continue.' + ).should('exist') + }) + + it('renders the zip download limit message when selecting all rows and then navigating to other page', () => { + cy.customMount( + + + + ) + + cy.get('table > thead > tr > th > input[type=checkbox]').click() + cy.findByRole('button', { name: 'Select all 200 files in this dataset.' }).click() + cy.findByRole('button', { name: 'Last' }).click() + cy.findByText( + 'The overall size of the files selected (19.4 KB) for download exceeds the zip limit of 1.0 B. Please unselect some files to continue.' + ).should('exist') + }) }) describe('Calling use cases', () => { diff --git a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx index 620b3c887..441dcaafe 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx @@ -12,10 +12,16 @@ import { FilePaginationInfo } from '../../../../../../src/files/domain/models/Fi const testFiles = FileMother.createMany(10) const paginationInfo = new FilePaginationInfo(1, 10, 200) +const testFilesTotalDownloadSize = 19900 describe('FilesTable', () => { it('renders the files table', () => { cy.customMount( - + ) cy.findByRole('table').should('exist') @@ -29,14 +35,26 @@ describe('FilesTable', () => { it('renders the spinner when the data isLoading', () => { cy.customMount( - + ) cy.findByLabelText('Files loading spinner symbol').should('exist') }) it('renders the no files message when there are no files', () => { - cy.customMount() + cy.customMount( + + ) cy.findByText('There are no files in this dataset.').should('exist') }) @@ -44,7 +62,12 @@ describe('FilesTable', () => { describe('Row selection', () => { it('selects all rows in the current page when the header checkbox is clicked', () => { cy.customMount( - + ) cy.wait(1000) // wait for the table to load @@ -58,7 +81,12 @@ describe('FilesTable', () => { it('clears row selection for the current page when the header checkbox is clicked', () => { cy.customMount( - + ) cy.wait(1000) // wait for the table to load @@ -76,7 +104,12 @@ describe('FilesTable', () => { it("selects all rows when the 'Select all' button is clicked", () => { cy.customMount( - + ) cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() @@ -90,7 +123,12 @@ describe('FilesTable', () => { it('clears the selection when the clear selection button is clicked', () => { cy.customMount( - + ) cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() @@ -106,7 +144,12 @@ describe('FilesTable', () => { it('highlights the selected rows', () => { cy.customMount( - + ) cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() @@ -125,7 +168,12 @@ describe('FilesTable', () => { cy.customMount( - + ) @@ -142,7 +190,12 @@ describe('FilesTable', () => { it('renders the file actions column', () => { cy.customMount( - + ) cy.findByRole('columnheader', { name: 'File Actions' }).should('exist') diff --git a/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx index 60e23f1e9..619b5560b 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/zip-download-limit-message/ZipDownloadLimitMessage.spec.tsx @@ -5,18 +5,12 @@ import { SettingMother } from '../../../../../settings/domain/models/SettingMoth import { ZipDownloadLimit } from '../../../../../../../src/settings/domain/models/ZipDownloadLimit' import { SettingsContext } from '../../../../../../../src/sections/settings/SettingsContext' -const file1Id = 123 -const file2Id = 323 const fileSelection = { - 0: file1Id, - 1: file2Id + 0: FileMother.create({ size: new FileSize(1024, FileSizeUnit.BYTES) }), + 1: FileMother.create({ size: new FileSize(2048, FileSizeUnit.BYTES) }) } -const files = [ - FileMother.create({ id: file1Id, size: new FileSize(1024, FileSizeUnit.BYTES) }), - FileMother.create({ id: file2Id, size: new FileSize(2048, FileSizeUnit.BYTES) }), - ...FileMother.createMany(8) -] const zipDownloadLimit = new ZipDownloadLimit(500, FileSizeUnit.BYTES) +const filesTotalDownloadSize = 3072 // 3.0 KB describe('ZipDownloadLimitMessage', () => { it('should not render if there is less than 1 file selected', () => { const getSettingByName = cy @@ -25,7 +19,11 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( - + ) @@ -40,12 +38,12 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( ) @@ -59,7 +57,11 @@ describe('ZipDownloadLimitMessage', () => { .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) cy.customMount( - + ) @@ -75,12 +77,12 @@ describe('ZipDownloadLimitMessage', () => { cy.customMount( ) @@ -89,4 +91,91 @@ describe('ZipDownloadLimitMessage', () => { 'The overall size of the files selected (more than 1024.0 PB) for download exceeds the zip limit of 500.0 B. Please unselect some files to continue.' ).should('exist') }) + + it('should show the total size of the files selected when there is a unknown File in the fileSelection', () => { + const getSettingByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) + cy.customMount( + + + + ) + + cy.findByText( + 'The overall size of the files selected (3.0 KB) for download exceeds the zip limit of 500.0 B. Please unselect some files to continue.' + ).should('exist') + }) + + it('should subtract the size of the files that are not in the fileSelection but they are in the visitedFiles when there is an unknown file', () => { + const zipDownloadLimit = new ZipDownloadLimit(1, FileSizeUnit.BYTES) + const getSettingByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) + + const filesTotalDownloadSize = 4 + cy.customMount( + + + + ) + + cy.findByText( + 'The overall size of the files selected (3.0 B) for download exceeds the zip limit of 1.0 B. Please unselect some files to continue.' + ).should('exist') + }) + + it('should show the total size of files when there are more files in the fileSelection than in the visitedFiles', () => { + const zipDownloadLimit = new ZipDownloadLimit(1, FileSizeUnit.BYTES) + const getSettingByName = cy + .stub() + .resolves(SettingMother.createZipDownloadLimit(zipDownloadLimit)) + + const filesTotalDownloadSize = 4 + cy.customMount( + + + + ) + + cy.findByText( + 'The overall size of the files selected (4.0 B) for download exceeds the zip limit of 1.0 B. Please unselect some files to continue.' + ).should('exist') + }) }) diff --git a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx index 4b072adb8..75de6ab84 100644 --- a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx @@ -14,11 +14,19 @@ import { const files = FileMother.createMany(100) const filesCountInfo = FilesCountInfoMother.create({ total: 100 }) const fileRepository: FileRepository = {} as FileRepository -const datasetVersion = new DatasetVersion(1, DatasetPublishingStatus.RELEASED, 1, 0) +const datasetVersion = new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.RELEASED, + 1, + 0 +) const FilesTableTestComponent = ({ datasetPersistentId }: { datasetPersistentId: string }) => { const [paginationInfo, setPaginationInfo] = useState(new FilePaginationInfo()) - const { isLoading, files } = useFiles( + const { isLoading, files, filesTotalDownloadSize } = useFiles( fileRepository, datasetPersistentId, datasetVersion, @@ -32,6 +40,7 @@ const FilesTableTestComponent = ({ datasetPersistentId }: { datasetPersistentId: return ( <>
Files count: {paginationInfo.totalFiles}
+
Files total download size: {filesTotalDownloadSize}
{files.map((file) => ( @@ -52,6 +61,7 @@ describe('useFiles', () => { fileRepository.getUserPermissionsById = cy .stub() .resolves(FileUserPermissionsMother.create({ fileId: files[0].id })) + fileRepository.getFilesTotalDownloadSizeByDatasetPersistentId = cy.stub().resolves(100) }) it('returns the files', () => { @@ -129,4 +139,14 @@ describe('useFiles', () => { cy.findByText('Loading...').should('exist') cy.wrap(fileRepository.getAllByDatasetPersistentId).should('not.be.called') }) + + it('calls the file repository to get the files total download size', () => { + cy.customMount() + + cy.findByText('Files total download size: 100').should('exist') + cy.wrap(fileRepository.getFilesTotalDownloadSizeByDatasetPersistentId).should( + 'be.calledOnceWith', + 'persistentId' + ) + }) }) From 48e1529a94136fdf93a967d03a4ae1ece638ab98 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 2 Oct 2023 11:00:05 +0200 Subject: [PATCH 03/61] feat(getFilesTotalDownloadSizeByDatasetPersistentId): add integration test --- .../files/FileJSDataverseRepository.spec.ts | 78 ++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index 18f6c842f..2ba35377a 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -523,7 +523,83 @@ describe('File JSDataverse Repository', () => { await fileRepository .getFilesCountInfoByDatasetPersistentId(dataset.persistentId, dataset.version) .then((filesCountInfo) => { - expect(filesCountInfo).to.deep.equal(expectedFilesCountInfo) + expect(filesCountInfo.total).to.deep.equal(expectedFilesCountInfo.total) + + const filesCountInfoPerAccessSorted = filesCountInfo.perAccess.sort((a, b) => + a.access.localeCompare(b.access) + ) + const expectedFilesCountInfoPerAccessSorted = expectedFilesCountInfo.perAccess.sort( + (a, b) => a.access.localeCompare(b.access) + ) + expect(filesCountInfoPerAccessSorted).to.deep.equal(expectedFilesCountInfoPerAccessSorted) + + const filesCountInfoPerFileTypeSorted = filesCountInfo.perFileType.sort((a, b) => + a.type.value.localeCompare(b.type.value) + ) + const expectedFilesCountInfoPerFileTypeSorted = expectedFilesCountInfo.perFileType.sort( + (a, b) => a.type.value.localeCompare(b.type.value) + ) + expect(filesCountInfoPerFileTypeSorted).to.deep.equal( + expectedFilesCountInfoPerFileTypeSorted + ) + + const filesCountInfoPerFileTagSorted = filesCountInfo.perFileTag.sort((a, b) => + a.tag.value.localeCompare(b.tag.value) + ) + const expectedFilesCountInfoPerFileTagSorted = expectedFilesCountInfo.perFileTag.sort( + (a, b) => a.tag.value.localeCompare(b.tag.value) + ) + expect(filesCountInfoPerFileTagSorted).to.deep.equal( + expectedFilesCountInfoPerFileTagSorted + ) + }) + }) + }) + + describe('getFilesTotalDownloadSizeByDatasetPersistentId', () => { + it('gets the total download size of all files in a dataset', async () => { + const files = [ + FileHelper.create('csv', { + description: 'Some description', + categories: ['category'], + restrict: 'true', + tabIngest: 'false' + }), + FileHelper.create('txt', { + description: 'Some description', + tabIngest: 'false' + }), + FileHelper.create('csv', { + description: 'Some description', + categories: ['category'], + tabIngest: 'false' + }), + FileHelper.create('txt', { + description: 'Some description', + categories: ['category_1'] + }), + FileHelper.create('csv', { + description: 'Some description', + categories: ['category_1'], + restrict: 'true', + tabIngest: 'false' + }), + FileHelper.create('txt', { + description: 'Some description', + categories: ['category'], + restrict: 'true', + tabIngest: 'false' + }) + ] + const dataset = await DatasetHelper.createWithFiles(files).then((datasetResponse) => + datasetRepository.getByPersistentId(datasetResponse.persistentId) + ) + if (!dataset) throw new Error('Dataset not found') + + await fileRepository + .getFilesTotalDownloadSizeByDatasetPersistentId(dataset.persistentId, dataset.version) + .then((totalDownloadSize) => { + expect(totalDownloadSize).to.deep.equal(3037) }) }) }) From 15e1ffbc80b8f018b67a6785680b5f0c08cb25f8 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 4 Oct 2023 11:46:22 +0200 Subject: [PATCH 04/61] feat(FilesTotalDownloadSize): implement using js-dataverse --- package-lock.json | 8 +++--- package.json | 2 +- .../FileJSDataverseRepository.ts | 15 +++++++--- .../files/FileJSDataverseRepository.spec.ts | 28 +++++++------------ 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1284be569..f6231d9f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr88.9d7ced6", + "@iqss/dataverse-client-javascript": "2.0.0-pr92.3fbf381", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -3588,9 +3588,9 @@ }, "node_modules/@iqss/dataverse-client-javascript": { "name": "@IQSS/dataverse-client-javascript", - "version": "2.0.0-pr88.9d7ced6", - "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr88.9d7ced6/829cd0eefdf14c3911cc5b02a7fca9eed303587c", - "integrity": "sha512-Wjut9iCGif6cKGPZkMAyFgvR3L8ssdRHab0owXw4IJQZU8Cm4+nNvQaCFlO2cxC95zbJh0GUEUc07oqb7AOlpA==", + "version": "2.0.0-pr92.3fbf381", + "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr92.3fbf381/c65e21a842363935d5ca632de9077063382f8800", + "integrity": "sha512-eexOP5sAKyaJc3Lj1xw8qFpYAh7R0de85VPRKoG8pPkON0LjMAql7heVGMP/MO1gvy159XSSdl2WCrtl/qLuJQ==", "license": "MIT", "dependencies": { "@types/node": "^18.15.11", diff --git a/package.json b/package.json index bde8dd17e..454d1ddd1 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr88.9d7ced6", + "@iqss/dataverse-client-javascript": "2.0.0-pr92.3fbf381", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index e0cd8baef..d98b5d241 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -4,8 +4,10 @@ import { FilesCountInfo } from '../domain/models/FilesCountInfo' import { FilePaginationInfo } from '../domain/models/FilePaginationInfo' import { FileUserPermissions } from '../domain/models/FileUserPermissions' import { + FileDownloadSizeMode, getDatasetFileCounts, getDatasetFiles, + getDatasetFilesTotalDownloadSize, getFileDownloadCount, getFileUserPermissions, WriteError @@ -15,6 +17,8 @@ import { DomainFileMapper } from './mappers/DomainFileMapper' import { JSFileMapper } from './mappers/JSFileMapper' import { DatasetVersion } from '../../dataset/domain/models/Dataset' +const includeDeaccessioned = true + export class FileJSDataverseRepository implements FileRepository { getAllByDatasetPersistentId( datasetPersistentId: string, @@ -28,6 +32,7 @@ export class FileJSDataverseRepository implements FileRepository { .execute( datasetPersistentId, datasetVersion.toString(), + includeDeaccessioned, jsPagination.limit, jsPagination.offset, DomainFileMapper.toJSFileCriteria(criteria) @@ -68,7 +73,7 @@ export class FileJSDataverseRepository implements FileRepository { ): Promise { // TODO - Take into account the FileCriteria https://github.com/IQSS/dataverse-frontend/issues/172 return getDatasetFileCounts - .execute(datasetPersistentId, datasetVersion.toString()) + .execute(datasetPersistentId, datasetVersion.toString(), includeDeaccessioned) .then((jsFilesCountInfo) => { return JSFileMapper.toFilesCountInfo(jsFilesCountInfo) }) @@ -78,12 +83,14 @@ export class FileJSDataverseRepository implements FileRepository { } getFilesTotalDownloadSizeByDatasetPersistentId( - // eslint-disable-next-line unused-imports/no-unused-vars datasetPersistentId: string, - // eslint-disable-next-line unused-imports/no-unused-vars datasetVersion: DatasetVersion ): Promise { - return Promise.resolve(0) + return getDatasetFilesTotalDownloadSize + .execute(datasetPersistentId, datasetVersion.toString(), FileDownloadSizeMode.ARCHIVAL) + .catch((error: WriteError) => { + throw new Error(error.message) + }) } getUserPermissionsById(id: number): Promise { diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index 2ba35377a..16f569f9b 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -569,26 +569,9 @@ describe('File JSDataverse Repository', () => { description: 'Some description', tabIngest: 'false' }), - FileHelper.create('csv', { - description: 'Some description', - categories: ['category'], - tabIngest: 'false' - }), FileHelper.create('txt', { description: 'Some description', categories: ['category_1'] - }), - FileHelper.create('csv', { - description: 'Some description', - categories: ['category_1'], - restrict: 'true', - tabIngest: 'false' - }), - FileHelper.create('txt', { - description: 'Some description', - categories: ['category'], - restrict: 'true', - tabIngest: 'false' }) ] const dataset = await DatasetHelper.createWithFiles(files).then((datasetResponse) => @@ -596,10 +579,19 @@ describe('File JSDataverse Repository', () => { ) if (!dataset) throw new Error('Dataset not found') + await TestsUtils.wait(2500) // wait for the files to be ingested + + const expectedTotalDownloadSize = await fileRepository + .getAllByDatasetPersistentId(dataset.persistentId, dataset.version) + .then((files) => { + return files.reduce((totalDownloadSize, file) => { + return totalDownloadSize + file.size.toBytes() + }, 0) + }) await fileRepository .getFilesTotalDownloadSizeByDatasetPersistentId(dataset.persistentId, dataset.version) .then((totalDownloadSize) => { - expect(totalDownloadSize).to.deep.equal(3037) + expect(totalDownloadSize).to.deep.equal(expectedTotalDownloadSize) }) }) }) From 35ac5c402a9b24d9908e159624ee45ec565ee5e9 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 4 Oct 2023 12:25:10 +0200 Subject: [PATCH 05/61] feat(DeaccessionedFiles): implement integration test --- src/files/infrastructure/mappers/JSFileMapper.ts | 8 ++++---- .../integration/files/FileJSDataverseRepository.spec.ts | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/files/infrastructure/mappers/JSFileMapper.ts b/src/files/infrastructure/mappers/JSFileMapper.ts index 201606a27..316c5019c 100644 --- a/src/files/infrastructure/mappers/JSFileMapper.ts +++ b/src/files/infrastructure/mappers/JSFileMapper.ts @@ -82,14 +82,14 @@ export class JSFileMapper { ): FileVersion { const fileVersion = { number: jsVersion, publishingStatus: FilePublishingStatus.DRAFT } - if (datasetVersion.publishingStatus === DatasetPublishingStatus.DEACCESSIONED) { - fileVersion.publishingStatus = FilePublishingStatus.DEACCESSIONED - } - if (jsPublicationDate) { fileVersion.publishingStatus = FilePublishingStatus.RELEASED } + if (datasetVersion.publishingStatus === DatasetPublishingStatus.DEACCESSIONED) { + fileVersion.publishingStatus = FilePublishingStatus.DEACCESSIONED + } + return fileVersion } diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index 16f569f9b..da0ec217c 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -156,7 +156,7 @@ describe('File JSDataverse Repository', () => { }) }) - it.skip('gets all the files by dataset persistentId after dataset deaccession', async () => { + it.only('gets all the files by dataset persistentId after dataset deaccession', async () => { const dataset = await DatasetHelper.createWithFiles(FileHelper.createMany(3)).then( (datasetResponse) => datasetRepository.getByPersistentId(datasetResponse.persistentId) ) @@ -170,7 +170,6 @@ describe('File JSDataverse Repository', () => { await TestsUtils.wait(1500) // Wait for the dataset to be deaccessioned await TestsUtils.wait(1500) // Wait for the dataset to be deaccessioned - // TODO - It always returns 404 when the dataset is deaccessioned, update the test when the issue is fixed await fileRepository .getAllByDatasetPersistentId( dataset.persistentId, From cbe26c900534f3c81f830e35c639dc5e3fd73583 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Wed, 4 Oct 2023 13:33:47 +0200 Subject: [PATCH 06/61] feat(RowSelection): remove row selection if the files criteria changes --- .../dataset/dataset-files/DatasetFiles.tsx | 1 + .../dataset-files/files-table/FilesTable.tsx | 13 +++- .../SettingJSDataverseRepository.ts | 2 +- .../dataset-files/DatasetFiles.spec.tsx | 59 +++++++++++++++++++ .../files-table/FilesTable.spec.tsx | 12 ++++ 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/src/sections/dataset/dataset-files/DatasetFiles.tsx b/src/sections/dataset/dataset-files/DatasetFiles.tsx index 5b009d762..cccd061a5 100644 --- a/src/sections/dataset/dataset-files/DatasetFiles.tsx +++ b/src/sections/dataset/dataset-files/DatasetFiles.tsx @@ -42,6 +42,7 @@ export function DatasetFiles({ isLoading={isLoading} paginationInfo={paginationInfo} filesTotalDownloadSize={filesTotalDownloadSize} + criteria={criteria} /> (criteria) + useEffect(() => { + if (previousCriteria != criteria) { + clearFileSelection() + } + setPreviousCriteria(criteria) + }) + if (isLoading) { return } diff --git a/src/settings/infrastructure/SettingJSDataverseRepository.ts b/src/settings/infrastructure/SettingJSDataverseRepository.ts index 03deebe37..eb5801de7 100644 --- a/src/settings/infrastructure/SettingJSDataverseRepository.ts +++ b/src/settings/infrastructure/SettingJSDataverseRepository.ts @@ -11,7 +11,7 @@ export class SettingJSDataverseRepository implements SettingRepository { setTimeout(() => { resolve({ name: SettingName.ZIP_DOWNLOAD_LIMIT, - value: new ZipDownloadLimit(500, FileSizeUnit.BYTES) + value: new ZipDownloadLimit(1, FileSizeUnit.BYTES) } as Setting) }, 1000) }) diff --git a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx index 4844f6b91..1e394acc6 100644 --- a/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/DatasetFiles.spec.tsx @@ -173,6 +173,65 @@ describe('DatasetFiles', () => { cy.findByText('1 file is currently selected.').should('exist') }) + it('removes the selection when the filters change', () => { + cy.customMount( + + ) + cy.findByRole('columnheader', { name: '1 to 10 of 200 Files' }).should('exist') + + cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() + + cy.findByText('1 file is currently selected.').should('exist') + + cy.findByRole('button', { name: 'File Type: All' }).click() + cy.findByText('Image (485)').should('exist').click() + + cy.findByText('1 file is currently selected.').should('not.exist') + }) + + it('removes the selection when the Sort by changes', () => { + cy.customMount( + + ) + cy.findByRole('columnheader', { name: '1 to 10 of 200 Files' }).should('exist') + + cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() + + cy.findByText('1 file is currently selected.').should('exist') + + cy.findByRole('button', { name: /Sort/ }).click() + cy.findByText('Name (Z-A)').should('exist').click() + + cy.findByText('1 file is currently selected.').should('not.exist') + }) + + it('removes the selection when the Search bar is used', () => { + cy.customMount( + + ) + cy.findByRole('columnheader', { name: '1 to 10 of 200 Files' }).should('exist') + + cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() + + cy.findByText('1 file is currently selected.').should('exist') + + cy.findByLabelText('Search').type('test{enter}') + + cy.findByText('1 file is currently selected.').should('not.exist') + }) + it('renders the zip download limit message when selecting rows from different pages', () => { testFiles[1] = FileMother.create({ size: new FileSize(1, FileSizeUnit.BYTES) diff --git a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx index 441dcaafe..b56ea78d6 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx @@ -9,10 +9,12 @@ import { ZipDownloadLimit } from '../../../../../../src/settings/domain/models/Z import { SettingsContext } from '../../../../../../src/sections/settings/SettingsContext' import styles from '../../../../../../src/sections/dataset/dataset-files/files-table/FilesTable.module.scss' import { FilePaginationInfo } from '../../../../../../src/files/domain/models/FilePaginationInfo' +import { FileCriteria } from '../../../../../../src/files/domain/models/FileCriteria' const testFiles = FileMother.createMany(10) const paginationInfo = new FilePaginationInfo(1, 10, 200) const testFilesTotalDownloadSize = 19900 +const defaultCriteria = new FileCriteria() describe('FilesTable', () => { it('renders the files table', () => { cy.customMount( @@ -21,6 +23,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -40,6 +43,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={true} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -53,6 +57,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -67,6 +72,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -86,6 +92,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -109,6 +116,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -128,6 +136,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -149,6 +158,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) cy.get('table > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=checkbox]').click() @@ -173,6 +183,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) @@ -195,6 +206,7 @@ describe('FilesTable', () => { paginationInfo={paginationInfo} isLoading={false} filesTotalDownloadSize={testFilesTotalDownloadSize} + criteria={defaultCriteria} /> ) From 5c00ae0bd291a107c57ff17107764eebf4fcf8b5 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 6 Oct 2023 14:06:27 -0400 Subject: [PATCH 07/61] feature: DatasetAlert component and first story --- .../dataset/dataset-alerts/DatasetAlerts.tsx | 26 +++++++++++++++++ .../dataset-alerts/DatasetAlert.stories.tsx | 28 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/sections/dataset/dataset-alerts/DatasetAlerts.tsx create mode 100644 src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx new file mode 100644 index 000000000..b9ea3f84c --- /dev/null +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx @@ -0,0 +1,26 @@ +import { Alert } from '@iqss/dataverse-design-system' +import { DatasetAlert, DatasetAlertMessageKey } from '../../../dataset/domain/models/Dataset' +import { useTranslation } from 'react-i18next' +import styles from './DatasetAlerts.module.scss' +import parse from 'html-react-parser' + +interface DatasetAlertsProps { + alerts: DatasetAlert[] +} + +export function DatasetAlerts({ alerts }: DatasetAlertsProps) { + const { t } = useTranslation('dataset') + + return ( +
+ {alerts.map((alert: DatasetAlert, index) => { + const translatedHTML = t(`alerts.${alert.message}`) + return ( + + {parse(translatedHTML)} + + ) + })} +
+ ) +} diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx new file mode 100644 index 000000000..a7a56e8a4 --- /dev/null +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -0,0 +1,28 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { DatasetMockData } from '../DatasetMockData' +import { DatasetPublishingStatus, DatasetVersion } from '../../../dataset/domain/models/Dataset' +import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' +import { WithI18next } from '../../WithI18next' +import { AlertVariant } from '@iqss/dataverse-design-system/dist/components/alert/AlertVariant' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetAlerts', + component: DatasetAlerts, + decorators: [WithI18next] +} + +export default meta +type Story = StoryObj + +export const DraftVersion: Story = { + render: () => { + const dataset = DatasetMockData({ + version: new DatasetVersion(1, DatasetPublishingStatus.DRAFT, 1, 0) + }) + return ( +
+ +
+ ) + } +} From da02bc40039eabefa1d8368c6abf30e292b9db87 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 6 Oct 2023 16:50:03 -0400 Subject: [PATCH 08/61] add VersionNotFound and PrivateUrl stories --- public/locales/en/dataset.json | 4 +- src/dataset/domain/models/Dataset.ts | 9 +++-- .../dataset/dataset-alerts/DatasetAlerts.tsx | 5 ++- .../dataset-alerts/DatasetAlert.stories.tsx | 40 ++++++++++++++++++- 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/public/locales/en/dataset.json b/public/locales/en/dataset.json index 09d4687b8..614c6135e 100644 --- a/public/locales/en/dataset.json +++ b/public/locales/en/dataset.json @@ -23,7 +23,7 @@ }, "alerts": { "draftVersion": "This draft version needs to be published. When ready for sharing, please publish it so that others can see these changes", - "requestedVersionNotFound": "Info – Version {0} was not found. This is version {1}", - "unpublishedDataset": "Privately share this dataset before it is published: {0}" + "requestedVersionNotFound": "Version {{requestedVersion}} was not found. This is version {{returnedVersion}}.", + "unpublishedDataset": "Privately share this dataset before it is published: {{privateUrl}}" } } diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index 901bf5aa5..172f95a93 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -34,7 +34,7 @@ export class DatasetAlert { constructor( public readonly variant: AlertVariant, public readonly message: DatasetAlertMessageKey, - public readonly dynamicFields?: string[], + public readonly dynamicFields?: {}, public readonly customHeading?: string ) {} } @@ -331,7 +331,10 @@ export class Dataset { ) } if (this.version.requestedVersion) { - const dynamicFields = [this.version.requestedVersion, `${this.version.toString()}`] + const dynamicFields = { + requestedVersion: this.version.requestedVersion, + returnedVersion: `${this.version.toString()}` + } this.alerts.push( new DatasetAlert( @@ -342,7 +345,7 @@ export class Dataset { ) } if (this.privateUrl) { - const dynamicFields = [this.privateUrl] + const dynamicFields = { privateUrl: this.privateUrl } this.alerts.push( new DatasetAlert( 'info', diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx index b9ea3f84c..3c16da424 100644 --- a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx @@ -14,7 +14,10 @@ export function DatasetAlerts({ alerts }: DatasetAlertsProps) { return (
{alerts.map((alert: DatasetAlert, index) => { - const translatedHTML = t(`alerts.${alert.message}`) + const translatedHTML = alert.dynamicFields + ? t(`alerts.${alert.message}`, alert.dynamicFields) + : t(`alerts.${alert.message}`) + return ( {parse(translatedHTML)} diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index a7a56e8a4..c0008df1c 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -1,6 +1,11 @@ import type { Meta, StoryObj } from '@storybook/react' import { DatasetMockData } from '../DatasetMockData' -import { DatasetPublishingStatus, DatasetVersion } from '../../../dataset/domain/models/Dataset' +import { + DatasetAlert, + DatasetAlertMessageKey, + DatasetPublishingStatus, + DatasetVersion +} from '../../../dataset/domain/models/Dataset' import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' import { WithI18next } from '../../WithI18next' import { AlertVariant } from '@iqss/dataverse-design-system/dist/components/alert/AlertVariant' @@ -26,3 +31,36 @@ export const DraftVersion: Story = { ) } } +export const VersionNotFound: Story = { + render: () => { + const dataset = DatasetMockData({ + version: new DatasetVersion(1, DatasetPublishingStatus.RELEASED, 1, 0, '3.0') + }) + return ( +
+ +
+ ) + } +} +export const PrivateUrl: Story = { + render: () => { + const alerts = [ + new DatasetAlert( + 'info', + DatasetAlertMessageKey.UNPUBLISHED_DATASET, + { + privateUrl: + 'http://localhost:8080/privateurl.xhtml?token=f6815782-1227-4d80-a46d-91621c2d9386' + }, + 'Unpublished Dataset Private URL' + ) + ] + + return ( +
+ +
+ ) + } +} From e40738bc4a397ec8665c39e8f5940e4b10f9eb54 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 6 Oct 2023 16:53:28 -0400 Subject: [PATCH 09/61] remove unused code --- src/sections/dataset/dataset-alerts/DatasetAlerts.tsx | 4 ++-- src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx index 3c16da424..a050fc4fd 100644 --- a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx @@ -1,5 +1,5 @@ import { Alert } from '@iqss/dataverse-design-system' -import { DatasetAlert, DatasetAlertMessageKey } from '../../../dataset/domain/models/Dataset' +import { DatasetAlert } from '../../../dataset/domain/models/Dataset' import { useTranslation } from 'react-i18next' import styles from './DatasetAlerts.module.scss' import parse from 'html-react-parser' @@ -13,7 +13,7 @@ export function DatasetAlerts({ alerts }: DatasetAlertsProps) { return (
- {alerts.map((alert: DatasetAlert, index) => { + {alerts.map((alert: DatasetAlert) => { const translatedHTML = alert.dynamicFields ? t(`alerts.${alert.message}`, alert.dynamicFields) : t(`alerts.${alert.message}`) diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index c0008df1c..c9e9a6832 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -8,7 +8,6 @@ import { } from '../../../dataset/domain/models/Dataset' import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' import { WithI18next } from '../../WithI18next' -import { AlertVariant } from '@iqss/dataverse-design-system/dist/components/alert/AlertVariant' const meta: Meta = { title: 'Sections/Dataset Page/DatasetAlerts', From 731997a7804ee14f26c8b19383d0b95a278fddcc Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 6 Oct 2023 18:18:23 -0400 Subject: [PATCH 10/61] Add Dataset story; move alert customHeading to translation text --- public/locales/en/dataset.json | 15 ++- src/dataset/domain/models/Dataset.ts | 14 +-- src/sections/dataset/Dataset.tsx | 2 + .../dataset/dataset-alerts/DatasetAlerts.tsx | 19 +-- src/stories/dataset/Dataset.stories.tsx | 3 +- .../dataset/DatasetMockDataDraftVersion.ts | 111 ++++++++++++++++++ .../DatasetMockDraftVersionRepository.ts | 22 ++++ .../mappers/JSDatasetMapper.spec.ts | 10 +- 8 files changed, 167 insertions(+), 29 deletions(-) create mode 100644 src/stories/dataset/DatasetMockDataDraftVersion.ts create mode 100644 src/stories/dataset/DatasetMockDraftVersionRepository.ts diff --git a/public/locales/en/dataset.json b/public/locales/en/dataset.json index 614c6135e..2f470bd6a 100644 --- a/public/locales/en/dataset.json +++ b/public/locales/en/dataset.json @@ -22,8 +22,17 @@ "uploadFiles": "Upload Files" }, "alerts": { - "draftVersion": "This draft version needs to be published. When ready for sharing, please publish it so that others can see these changes", - "requestedVersionNotFound": "Version {{requestedVersion}} was not found. This is version {{returnedVersion}}.", - "unpublishedDataset": "Privately share this dataset before it is published: {{privateUrl}}" + "draftVersion": { + "heading": "This draft version needs to be published", + "alertText": "When ready for sharing, please publish it so that others can see these changes" + }, + "requestedVersionNotFound": { + "heading": "Information", + "alertText": "Version {{requestedVersion}} was not found. This is version {{returnedVersion}}." + }, + "unpublishedDataset": { + "heading": "Unpublished Dataset Private URL", + "alertText": "Privately share this dataset before it is published: {{privateUrl}}" + } } } diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index 172f95a93..9c3d4d99b 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -34,8 +34,7 @@ export class DatasetAlert { constructor( public readonly variant: AlertVariant, public readonly message: DatasetAlertMessageKey, - public readonly dynamicFields?: {}, - public readonly customHeading?: string + public readonly dynamicFields?: object ) {} } @@ -326,9 +325,7 @@ export class Dataset { private withAlerts(): void { if (this.version.publishingStatus === DatasetPublishingStatus.DRAFT) { - this.alerts.push( - new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION, undefined, 'Info') - ) + this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION)) } if (this.version.requestedVersion) { const dynamicFields = { @@ -347,12 +344,7 @@ export class Dataset { if (this.privateUrl) { const dynamicFields = { privateUrl: this.privateUrl } this.alerts.push( - new DatasetAlert( - 'info', - DatasetAlertMessageKey.UNPUBLISHED_DATASET, - dynamicFields, - 'Unpublished Dataset Private URL' - ) + new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, dynamicFields) ) } } diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index b03d76a55..e506ea54e 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -12,6 +12,7 @@ import { DatasetSummary } from './dataset-summary/DatasetSummary' import { DatasetCitation } from './dataset-citation/DatasetCitation' import { DatasetFiles } from './dataset-files/DatasetFiles' import { FileRepository } from '../../files/domain/repositories/FileRepository' +import { DatasetAlerts } from './dataset-alerts/DatasetAlerts' interface DatasetProps { datasetRepository: DatasetRepository @@ -38,6 +39,7 @@ export function Dataset({ datasetRepository, fileRepository, searchParams }: Dat ) : (
+

{dataset.getTitle()}

diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx index a050fc4fd..7d41990c0 100644 --- a/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.tsx @@ -13,14 +13,19 @@ export function DatasetAlerts({ alerts }: DatasetAlertsProps) { return (
- {alerts.map((alert: DatasetAlert) => { - const translatedHTML = alert.dynamicFields - ? t(`alerts.${alert.message}`, alert.dynamicFields) - : t(`alerts.${alert.message}`) - + {alerts.map((alert: DatasetAlert, index) => { + const translatedMsg = alert.dynamicFields + ? t(`alerts.${alert.message}.alertText`, alert.dynamicFields) + : t(`alerts.${alert.message}.alertText`) + const translatedHeading = t(`alerts.${alert.message}.heading`) + const alertKey = `alert-${index}` return ( - - {parse(translatedHTML)} + + {parse(translatedMsg)} ) })} diff --git a/src/stories/dataset/Dataset.stories.tsx b/src/stories/dataset/Dataset.stories.tsx index d0da00035..e332943cb 100644 --- a/src/stories/dataset/Dataset.stories.tsx +++ b/src/stories/dataset/Dataset.stories.tsx @@ -13,6 +13,7 @@ import { WithSettings } from '../WithSettings' import { WithLoggedInUser } from '../WithLoggedInUser' import { WithFilePermissionsDenied } from '../files/file-permission/WithFilePermissionsDenied' import { WithFilePermissionsGranted } from '../files/file-permission/WithFilePermissionsGranted' +import { DatasetMockDraftVersionRepository } from './DatasetMockDraftVersionRepository' const meta: Meta = { title: 'Pages/Dataset', @@ -41,7 +42,7 @@ export const LoggedInAsOwner: Story = { decorators: [WithLayout, WithLoggedInUser, WithFilePermissionsGranted], render: () => ( diff --git a/src/stories/dataset/DatasetMockDataDraftVersion.ts b/src/stories/dataset/DatasetMockDataDraftVersion.ts new file mode 100644 index 000000000..a3f7dbbd3 --- /dev/null +++ b/src/stories/dataset/DatasetMockDataDraftVersion.ts @@ -0,0 +1,111 @@ +import { + ANONYMIZED_FIELD_VALUE, + DatasetPublishingStatus, + DatasetVersion, + DatasetLabelSemanticMeaning, + DatasetLabelValue, + DatasetMetadataBlocks +} from '../../dataset/domain/models/Dataset' +import { MetadataBlockName } from '../../dataset/domain/models/Dataset' +import { Dataset } from '../../dataset/domain/models/Dataset' + +export const DatasetMockDataDraftVersion = ( + props?: Partial, + anonymized = false +): Dataset => { + const dataset = { + persistentId: 'doi:10.5072/FK2/ABC123', + citation: `${ + anonymized ? 'Author name(s) withheld' : 'Bennet, Elizabeth; Darcy, Fitzwilliam' + }, 2023, "Dataset Title", https://doi.org/10.5072/FK2/BUDNRV, Root, V1`, + version: new DatasetVersion(1, DatasetPublishingStatus.DRAFT, 1, 0), + labels: [ + { value: 'Version 1.0', semanticMeaning: DatasetLabelSemanticMeaning.FILE }, + { value: DatasetLabelValue.DRAFT, semanticMeaning: DatasetLabelSemanticMeaning.DATASET } + ], + license: { + name: 'CC0 1.0', + uri: 'https://creativecommons.org/publicdomain/zero/1.0/', + iconUri: 'https://licensebuttons.net/p/zero/1.0/88x31.png' + }, + summaryFields: [ + { + name: MetadataBlockName.CITATION, + fields: { + dsDescription: [ + { + dsDescriptionValue: + 'This text is *italic* and this is **bold**. Here is an image ![Alt text](https://picsum.photos/id/10/20/20) ' + } + ], + keyword: 'Malaria, Tuberculosis, Drug Resistant', + subject: 'Medicine, Health and Life Sciences, Social Sciences', + publication: 'CNN Journal [CNN.com](https://cnn.com)', + notesText: 'Here is an image ![Alt text](https://picsum.photos/id/10/40/40)' + } + } + ], + metadataBlocks: [ + { + name: MetadataBlockName.CITATION, + fields: { + alternativePersistentId: 'doi:10.5072/FK2/ABC123', + publicationDate: anonymized ? ANONYMIZED_FIELD_VALUE : '2021-01-01', + citationDate: '2023-01-01', + title: 'Dataset Title', + subject: ['Subject1', 'Subject2'], + author: anonymized + ? ANONYMIZED_FIELD_VALUE + : [ + { + authorName: 'Admin, Dataverse', + authorAffiliation: 'Dataverse.org', + authorIdentifierScheme: 'ORCID', + authorIdentifier: '0000-0002-1825-1097' + }, + { + authorName: 'Owner, Dataverse', + authorAffiliation: 'Dataverse.org', + authorIdentifierScheme: 'ORCID', + authorIdentifier: '0000-0032-1825-0098' + } + ], + datasetContact: anonymized + ? ANONYMIZED_FIELD_VALUE + : [ + { + datasetContactName: 'Admin, Dataverse' + } + ], + dsDescription: [ + { + dsDescriptionValue: + 'This text is *italic* and this is **bold**. Here is an image ![Alt text](https://picsum.photos/id/10/20/20) ' + } + ] + } + }, + { + name: MetadataBlockName.GEOSPATIAL, + fields: { + geographicUnit: 'km', + geographicCoverage: anonymized + ? ANONYMIZED_FIELD_VALUE + : { + geographicCoverageCountry: 'United States', + geographicCoverageCity: 'Cambridge' + } + } + } + ] as DatasetMetadataBlocks, + ...props + } + return new Dataset.Builder( + dataset.persistentId, + dataset.version, + dataset.citation, + dataset.summaryFields, + dataset.license, + dataset.metadataBlocks + ).build() +} diff --git a/src/stories/dataset/DatasetMockDraftVersionRepository.ts b/src/stories/dataset/DatasetMockDraftVersionRepository.ts new file mode 100644 index 000000000..bff2952d6 --- /dev/null +++ b/src/stories/dataset/DatasetMockDraftVersionRepository.ts @@ -0,0 +1,22 @@ +import { DatasetRepository } from '../../dataset/domain/repositories/DatasetRepository' +import { Dataset as DatasetModel } from '../../dataset/domain/models/Dataset' +import { DatasetMockDataDraftVersion } from './DatasetMockDataDraftVersion' + +export class DatasetMockDraftVersionRepository implements DatasetRepository { + getByPersistentId(persistentId: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(DatasetMockDataDraftVersion({ persistentId: persistentId })) + }, 1000) + }) + } + + // eslint-disable-next-line unused-imports/no-unused-vars + getByPrivateUrlToken(privateUrlToken: string): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(DatasetMockDataDraftVersion({}, true)) + }, 1000) + }) + } +} diff --git a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts index 5abd258f7..5a1c7a768 100644 --- a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts +++ b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts @@ -65,9 +65,7 @@ const expectedDataset = { { semanticMeaning: 'dataset', value: 'Draft' }, { semanticMeaning: 'warning', value: 'Unpublished' } ], - alerts: [ - { variant: 'warning', message: 'draftVersion', dynamicFields: undefined, customHeading: 'Info' } - ], + alerts: [{ variant: 'warning', message: 'draftVersion', dynamicFields: undefined }], summaryFields: [ { name: 'citation', @@ -126,14 +124,12 @@ const expectedDatasetAlternateVersion = { { variant: 'warning', message: 'draftVersion', - dynamicFields: undefined, - customHeading: 'Info' + dynamicFields: undefined }, { message: 'requestedVersionNotFound', variant: 'info', - dynamicFields: ['4.0', '0.0'], - customHeading: undefined + dynamicFields: { requestedVersion: '4.0', returnedVersion: '0.0' } } ], summaryFields: [ From 117a7459578db80c113fb3349979be1a72fa4aaa Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Sat, 7 Oct 2023 09:48:04 -0400 Subject: [PATCH 11/61] add DatasetAlerts.module.scss --- src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss new file mode 100644 index 000000000..ec77535e7 --- /dev/null +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss @@ -0,0 +1,3 @@ +.container > * { + margin-right: 0.5em; +} \ No newline at end of file From 2308ffb2d25a12cb98bf45d80b8b09d15b987565 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 9 Oct 2023 11:05:29 +0200 Subject: [PATCH 12/61] feat(FilesTable): add FileCriteria to getFilesCountInfo use case --- package-lock.json | 1399 +++++++++++------ .../domain/repositories/FileRepository.ts | 3 +- .../getFilesCountInfoByDatasetPersistentId.ts | 6 +- .../FileJSDataverseRepository.ts | 3 +- .../dataset/dataset-files/useFiles.tsx | 86 +- .../files/FileMockLoadingRepository.ts | 5 +- .../files/FileMockNoFiltersRepository.ts | 5 +- .../dataset/dataset-files/useFiles.spec.tsx | 35 +- 8 files changed, 1040 insertions(+), 502 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6231d9f5..7a0671542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4697,26 +4697,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jest/reporters/node_modules/jest-haste-map": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", @@ -5048,26 +5028,6 @@ } } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -5097,6 +5057,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -12703,6 +12674,52 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/core-common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@storybook/core-events": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.1.0.tgz", @@ -16029,6 +16046,28 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, + "node_modules/@types/eslint": { + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -16712,6 +16751,181 @@ "vite": "^4.1.0-beta.0" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "node_modules/@yarnpkg/core": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@yarnpkg/core/-/core-2.4.0.tgz", @@ -17205,7 +17419,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -17230,6 +17443,58 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/all-contributors-cli": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.19.0.tgz", @@ -17349,7 +17614,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -17386,8 +17650,7 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -18051,6 +18314,145 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "peer": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "peer": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -18623,7 +19025,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "devOptional": true }, "node_modules/builtins": { "version": "5.0.1", @@ -18759,6 +19161,37 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -18768,6 +19201,21 @@ "node": ">=12" } }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -18840,7 +19288,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -18855,7 +19302,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19168,6 +19614,16 @@ "chromatic-cli": "bin/main.cjs" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -19301,7 +19757,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -19892,6 +20347,13 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "peer": true + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -19904,8 +20366,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compare-func": { "version": "2.0.0", @@ -20417,7 +20878,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -20766,7 +21226,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -20940,7 +21399,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, @@ -21549,8 +22007,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -21565,7 +22022,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -21575,7 +22031,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21604,6 +22059,20 @@ "objectorarray": "^1.0.5" } }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -21843,8 +22312,7 @@ "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, "node_modules/esbuild": { "version": "0.18.20", @@ -22524,6 +22992,16 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -23180,7 +23658,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -23197,7 +23674,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -23210,7 +23686,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -23222,7 +23697,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -23237,7 +23711,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -23249,7 +23722,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -23543,7 +24015,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, "funding": [ { "type": "github", @@ -23693,7 +24164,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -23755,26 +24225,6 @@ "node": ">=4" } }, - "node_modules/get-monorepo-packages/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/get-monorepo-packages/node_modules/globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -24158,22 +24608,19 @@ "dev": true }, "node_modules/glob": { - "version": "10.3.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.7.tgz", - "integrity": "sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ==", - "dev": true, + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -24230,26 +24677,6 @@ "node": ">= 0.10" } }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -24314,30 +24741,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -24710,7 +25113,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -24726,7 +25128,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, "engines": { "node": ">=8" } @@ -24819,8 +25220,7 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "node_modules/html-parse-stringify": { "version": "3.0.1", @@ -25242,7 +25642,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -25644,7 +26043,6 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -25768,7 +26166,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -26044,7 +26441,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -26118,8 +26514,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unc-path": { "version": "1.0.0", @@ -26241,8 +26636,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -26273,7 +26667,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, "engines": { "node": ">=8" } @@ -26282,7 +26675,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, "dependencies": { "append-transform": "^2.0.0" }, @@ -26325,7 +26717,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -26342,7 +26733,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -26351,7 +26741,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -26363,7 +26752,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -26372,7 +26760,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -26386,7 +26773,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, "dependencies": { "semver": "^7.5.3" }, @@ -26401,7 +26787,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -26415,7 +26800,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -26425,9 +26809,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -26980,26 +27364,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-config/node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -28143,26 +28507,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-runtime/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -30475,6 +30819,16 @@ "node": ">=4" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -30546,8 +30900,7 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "node_modules/lodash.foreach": { "version": "4.5.0", @@ -30812,7 +31165,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -30827,7 +31179,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -32084,7 +32435,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, "funding": [ { "type": "github", @@ -32315,26 +32665,6 @@ "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -32351,7 +32681,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -33018,7 +33347,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -33058,14 +33386,12 @@ "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -33078,7 +33404,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -33087,31 +33412,10 @@ "node": ">=8.0.0" } }, - "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -33126,7 +33430,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -33138,7 +33441,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -33153,7 +33455,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -33165,7 +33466,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -33177,7 +33477,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -33756,7 +34055,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -34107,7 +34405,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -34115,8 +34412,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.10.1", @@ -34415,7 +34711,6 @@ "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -35030,7 +35325,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, "dependencies": { "fromentries": "^1.2.0" }, @@ -35317,26 +35611,6 @@ "ms": "2.0.0" } }, - "node_modules/puppeteer-core/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/puppeteer-core/node_modules/https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -35497,6 +35771,16 @@ "url": "https://opencollective.com/ramda" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -35555,7 +35839,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -35656,7 +35939,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -35939,6 +36221,37 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-package-json/node_modules/hosted-git-info": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", @@ -35969,6 +36282,21 @@ "node": ">=12" } }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -36406,7 +36734,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, "dependencies": { "es6-error": "^4.0.1" }, @@ -36786,7 +37113,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -36803,8 +37129,7 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "node_modules/requireg": { "version": "0.2.2", @@ -36848,7 +37173,6 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -36991,7 +37315,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -37002,31 +37325,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "3.29.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -37155,7 +37457,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "node_modules/sass": { "version": "1.58.1", @@ -37189,16 +37491,71 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -37213,7 +37570,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -37224,8 +37580,7 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { "version": "0.18.0", @@ -37272,6 +37627,16 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -37318,8 +37683,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-name": { "version": "2.0.1", @@ -37409,7 +37773,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -37421,7 +37784,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -37452,26 +37814,6 @@ "node": ">=4" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -37488,8 +37830,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/signale": { "version": "1.4.0", @@ -38012,7 +38353,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -38137,7 +38477,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -38154,7 +38493,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -38167,7 +38505,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -38580,7 +38917,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -38686,7 +39022,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -38711,7 +39046,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, "engines": { "node": ">=8" } @@ -39193,26 +39527,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "node_modules/stylelint-config-rational-order/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/stylelint-config-rational-order/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -40253,7 +40567,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", - "dev": true, + "devOptional": true, "dependencies": { "postcss": "^7.0.2" } @@ -40262,13 +40576,13 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "devOptional": true }, "node_modules/sugarss/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, + "devOptional": true, "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -40309,7 +40623,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -40543,26 +40856,6 @@ "node": ">=4" } }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/temp/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -40644,6 +40937,141 @@ "node": ">=8" } }, + "node_modules/terser": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", + "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "peer": true + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -40657,25 +41085,6 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -41312,7 +41721,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -42231,7 +42639,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.5.tgz", "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==", - "dev": true, "dependencies": { "esbuild": "^0.16.14", "postcss": "^8.4.21", @@ -42365,7 +42772,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -42381,7 +42787,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -42397,7 +42802,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -42413,7 +42817,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -42429,7 +42832,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -42445,7 +42847,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -42461,7 +42862,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -42477,7 +42877,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42493,7 +42892,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42509,7 +42907,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42525,7 +42922,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42541,7 +42937,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42557,7 +42952,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42573,7 +42967,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42589,7 +42982,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42605,7 +42997,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42621,7 +43012,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -42637,7 +43027,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -42653,7 +43042,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -42669,7 +43057,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42685,7 +43072,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42701,7 +43087,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42714,7 +43099,6 @@ "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -42960,6 +43344,54 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -42975,6 +43407,62 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", + "dev": true, + "peer": true + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/webpack/node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true, + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -43025,7 +43513,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -43068,8 +43555,7 @@ "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { "version": "1.1.11", @@ -43428,8 +43914,7 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/yallist": { "version": "3.1.1", @@ -43449,7 +43934,6 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -43480,7 +43964,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -43491,7 +43974,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -43504,7 +43986,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -43516,7 +43997,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -43531,7 +44011,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -43543,7 +44022,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -43557,7 +44035,6 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/src/files/domain/repositories/FileRepository.ts b/src/files/domain/repositories/FileRepository.ts index 41d802c8a..4ce01579a 100644 --- a/src/files/domain/repositories/FileRepository.ts +++ b/src/files/domain/repositories/FileRepository.ts @@ -14,7 +14,8 @@ export interface FileRepository { ) => Promise getFilesCountInfoByDatasetPersistentId: ( datasetPersistentId: string, - datasetVersion: DatasetVersion + datasetVersion: DatasetVersion, + criteria: FileCriteria ) => Promise getFilesTotalDownloadSizeByDatasetPersistentId: ( datasetPersistentId: string, diff --git a/src/files/domain/useCases/getFilesCountInfoByDatasetPersistentId.ts b/src/files/domain/useCases/getFilesCountInfoByDatasetPersistentId.ts index 518897809..13b5dfda7 100644 --- a/src/files/domain/useCases/getFilesCountInfoByDatasetPersistentId.ts +++ b/src/files/domain/useCases/getFilesCountInfoByDatasetPersistentId.ts @@ -1,14 +1,16 @@ import { FileRepository } from '../repositories/FileRepository' import { FilesCountInfo } from '../models/FilesCountInfo' import { DatasetVersion } from '../../../dataset/domain/models/Dataset' +import { FileCriteria } from '../models/FileCriteria' export async function getFilesCountInfoByDatasetPersistentId( fileRepository: FileRepository, datasetPersistentId: string, - datasetVersion: DatasetVersion + datasetVersion: DatasetVersion, + criteria: FileCriteria = new FileCriteria() ): Promise { return fileRepository - .getFilesCountInfoByDatasetPersistentId(datasetPersistentId, datasetVersion) + .getFilesCountInfoByDatasetPersistentId(datasetPersistentId, datasetVersion, criteria) .catch((error: Error) => { throw new Error(error.message) }) diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index d98b5d241..adc2b0380 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -69,7 +69,8 @@ export class FileJSDataverseRepository implements FileRepository { getFilesCountInfoByDatasetPersistentId( datasetPersistentId: string, - datasetVersion: DatasetVersion + datasetVersion: DatasetVersion, + criteria: FileCriteria ): Promise { // TODO - Take into account the FileCriteria https://github.com/IQSS/dataverse-frontend/issues/172 return getDatasetFileCounts diff --git a/src/sections/dataset/dataset-files/useFiles.tsx b/src/sections/dataset/dataset-files/useFiles.tsx index 7babb384d..476d9cd20 100644 --- a/src/sections/dataset/dataset-files/useFiles.tsx +++ b/src/sections/dataset/dataset-files/useFiles.tsx @@ -24,48 +24,68 @@ export function useFiles( const [isLoading, setIsLoading] = useState(true) const [filesCountInfo, setFilesCountInfo] = useState() const [filesTotalDownloadSize, setFilesTotalDownloadSize] = useState(0) - - useEffect(() => { - getFilesCountInfoByDatasetPersistentId(filesRepository, datasetPersistentId, datasetVersion) + const getFilesCountInfo = () => { + return getFilesCountInfoByDatasetPersistentId( + filesRepository, + datasetPersistentId, + datasetVersion, + criteria + ) .then((filesCountInfo: FilesCountInfo) => { setFilesCountInfo(filesCountInfo) - onPaginationInfoChange(paginationInfo.withTotal(filesCountInfo.total)) + if (filesCountInfo.total !== paginationInfo.totalFiles) { + onPaginationInfoChange(paginationInfo.withTotal(filesCountInfo.total)) + } + return filesCountInfo }) - .catch((error) => { - console.error('There was an error getting the files count info', error) + .catch(() => { + throw new Error('There was an error getting the files count info') }) - }, [filesRepository, datasetPersistentId, datasetVersion]) + } + + const getFiles = (filesCount: FilesCountInfo) => { + if (filesCount) { + if (filesCount.total === 0) { + setIsLoading(false) + return + } + return getFilesByDatasetPersistentId( + filesRepository, + datasetPersistentId, + datasetVersion, + paginationInfo.withTotal(filesCount.total), + criteria + ) + .then((files: File[]) => { + setFiles(files) + return files + }) + .then((files: File[]) => + fetchFilesPermission(FilePermission.DOWNLOAD_FILE, files).then(() => setIsLoading(false)) + ) + .catch(() => { + throw new Error('There was an error getting the files') + }) + } + } useEffect(() => { setIsLoading(true) - if (filesCountInfo) { - if (filesCountInfo.total === 0) { + getFilesCountInfo() + .then((filesCount) => getFiles(filesCount)) + .catch(() => { + console.error('There was an error getting the files') setIsLoading(false) - } else { - getFilesByDatasetPersistentId( - filesRepository, - datasetPersistentId, - datasetVersion, - paginationInfo, - criteria - ) - .then((files: File[]) => { - setFiles(files) - return files - }) - .then((files: File[]) => - fetchFilesPermission(FilePermission.DOWNLOAD_FILE, files).then(() => - setIsLoading(false) - ) - ) - .catch((error) => { - console.error('There was an error getting the files', error) - setIsLoading(false) - }) - } - } - }, [filesRepository, datasetPersistentId, datasetVersion, paginationInfo, criteria]) + }) + }, [ + filesRepository, + datasetPersistentId, + datasetVersion, + paginationInfo.page, + paginationInfo.pageSize, + criteria + ]) useEffect(() => { getFilesTotalDownloadSize(filesRepository, datasetPersistentId, datasetVersion) diff --git a/src/stories/files/FileMockLoadingRepository.ts b/src/stories/files/FileMockLoadingRepository.ts index 6c36865db..5e17811e5 100644 --- a/src/stories/files/FileMockLoadingRepository.ts +++ b/src/stories/files/FileMockLoadingRepository.ts @@ -4,6 +4,7 @@ import { FilesCountInfo } from '../../files/domain/models/FilesCountInfo' import { FileUserPermissions } from '../../files/domain/models/FileUserPermissions' import { FileUserPermissionsMother } from '../../../tests/component/files/domain/models/FileUserPermissionsMother' import { DatasetVersion } from '../../dataset/domain/models/Dataset' +import { FileCriteria } from '../../files/domain/models/FileCriteria' export class FileMockLoadingRepository implements FileRepository { getAllByDatasetPersistentId( @@ -23,7 +24,9 @@ export class FileMockLoadingRepository implements FileRepository { // eslint-disable-next-line unused-imports/no-unused-vars datasetPersistentId: string, // eslint-disable-next-line unused-imports/no-unused-vars - datasetVersion: DatasetVersion + datasetVersion: DatasetVersion, + // eslint-disable-next-line unused-imports/no-unused-vars + criteria: FileCriteria ): Promise { return new Promise(() => { setTimeout(() => { diff --git a/src/stories/files/FileMockNoFiltersRepository.ts b/src/stories/files/FileMockNoFiltersRepository.ts index 203366df9..10d968289 100644 --- a/src/stories/files/FileMockNoFiltersRepository.ts +++ b/src/stories/files/FileMockNoFiltersRepository.ts @@ -6,6 +6,7 @@ import { FilesMockData } from './FileMockData' import { FileUserPermissions } from '../../files/domain/models/FileUserPermissions' import { FileUserPermissionsMother } from '../../../tests/component/files/domain/models/FileUserPermissionsMother' import { DatasetVersion } from '../../dataset/domain/models/Dataset' +import { FileCriteria } from '../../files/domain/models/FileCriteria' export class FileMockNoFiltersRepository implements FileRepository { getAllByDatasetPersistentId( @@ -25,7 +26,9 @@ export class FileMockNoFiltersRepository implements FileRepository { // eslint-disable-next-line unused-imports/no-unused-vars datasetPersistentId: string, // eslint-disable-next-line unused-imports/no-unused-vars - datasetVersion: DatasetVersion + datasetVersion: DatasetVersion, + // eslint-disable-next-line unused-imports/no-unused-vars + criteria: FileCriteria ): Promise { return new Promise((resolve) => { setTimeout(() => { diff --git a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx index 75de6ab84..1e6355f6e 100644 --- a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx @@ -10,6 +10,7 @@ import { DatasetPublishingStatus, DatasetVersion } from '../../../../../src/dataset/domain/models/Dataset' +import { FileCriteria, FileSortByOption } from '../../../../../src/files/domain/models/FileCriteria' const files = FileMother.createMany(100) const filesCountInfo = FilesCountInfoMother.create({ total: 100 }) @@ -26,12 +27,14 @@ const datasetVersion = new DatasetVersion( const FilesTableTestComponent = ({ datasetPersistentId }: { datasetPersistentId: string }) => { const [paginationInfo, setPaginationInfo] = useState(new FilePaginationInfo()) + const [criteria, setCriteria] = useState(new FileCriteria()) const { isLoading, files, filesTotalDownloadSize } = useFiles( fileRepository, datasetPersistentId, datasetVersion, setPaginationInfo, - paginationInfo + paginationInfo, + criteria ) if (isLoading) { @@ -39,6 +42,12 @@ const FilesTableTestComponent = ({ datasetPersistentId }: { datasetPersistentId: } return ( <> +
Files count: {paginationInfo.totalFiles}
Files total download size: {filesTotalDownloadSize}
@@ -96,7 +105,7 @@ describe('useFiles', () => { 'persistentId', datasetVersion, new FilePaginationInfo(1, 10, 100), - undefined + new FileCriteria() ) cy.findByText('Files count: 100').should('exist') @@ -149,4 +158,26 @@ describe('useFiles', () => { 'persistentId' ) }) + + it('calls the file repository to get the files total count on file criteria change', () => { + cy.customMount() + + cy.findByText('Files count: 100').should('exist') + cy.wrap(fileRepository.getFilesCountInfoByDatasetPersistentId).should( + 'be.calledOnceWith', + 'persistentId', + datasetVersion, + new FileCriteria() + ) + + cy.findByText('Sort by name Z-A').click() + + cy.findByText('Files count: 100').should('exist') + cy.wrap(fileRepository.getFilesCountInfoByDatasetPersistentId).should( + 'be.calledWith', + 'persistentId', + datasetVersion, + new FileCriteria().withSortBy(FileSortByOption.NAME_ZA) + ) + }) }) From 3d9f148f1081e5521478363736b6a461fc72cf83 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 9 Oct 2023 11:10:03 +0200 Subject: [PATCH 13/61] fix: stories file mock repositories --- src/stories/files/FileMockLoadingRepository.ts | 13 +++++++++++++ src/stories/files/FileMockNoFiltersRepository.ts | 13 +++++++++++++ .../files/FileJSDataverseRepository.spec.ts | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/stories/files/FileMockLoadingRepository.ts b/src/stories/files/FileMockLoadingRepository.ts index 6c36865db..76543f5b2 100644 --- a/src/stories/files/FileMockLoadingRepository.ts +++ b/src/stories/files/FileMockLoadingRepository.ts @@ -39,4 +39,17 @@ export class FileMockLoadingRepository implements FileRepository { }, 1000) }) } + + getFilesTotalDownloadSizeByDatasetPersistentId( + // eslint-disable-next-line unused-imports/no-unused-vars + datasetPersistentId: string, + // eslint-disable-next-line unused-imports/no-unused-vars + datasetVersion: DatasetVersion + ): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(19900) + }, 1000) + }) + } } diff --git a/src/stories/files/FileMockNoFiltersRepository.ts b/src/stories/files/FileMockNoFiltersRepository.ts index 203366df9..227af8de4 100644 --- a/src/stories/files/FileMockNoFiltersRepository.ts +++ b/src/stories/files/FileMockNoFiltersRepository.ts @@ -41,4 +41,17 @@ export class FileMockNoFiltersRepository implements FileRepository { }, 1000) }) } + + getFilesTotalDownloadSizeByDatasetPersistentId( + // eslint-disable-next-line unused-imports/no-unused-vars + datasetPersistentId: string, + // eslint-disable-next-line unused-imports/no-unused-vars + datasetVersion: DatasetVersion + ): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(19900) + }, 1000) + }) + } } diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index da0ec217c..48836c6cb 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -156,7 +156,7 @@ describe('File JSDataverse Repository', () => { }) }) - it.only('gets all the files by dataset persistentId after dataset deaccession', async () => { + it('gets all the files by dataset persistentId after dataset deaccession', async () => { const dataset = await DatasetHelper.createWithFiles(FileHelper.createMany(3)).then( (datasetResponse) => datasetRepository.getByPersistentId(datasetResponse.persistentId) ) From e29041015b55871f60eccb1c4681126e68b27a13 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 9 Oct 2023 11:35:50 +0200 Subject: [PATCH 14/61] fix: increase timeout some e2e test --- package-lock.json | 1399 +++++++++++------ .../e2e/sections/dataset/Dataset.spec.tsx | 2 +- 2 files changed, 939 insertions(+), 462 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6231d9f5..7a0671542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4697,26 +4697,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jest/reporters/node_modules/jest-haste-map": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", @@ -5048,26 +5028,6 @@ } } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -5097,6 +5057,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -12703,6 +12674,52 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/core-common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@storybook/core-events": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.1.0.tgz", @@ -16029,6 +16046,28 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, + "node_modules/@types/eslint": { + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -16712,6 +16751,181 @@ "vite": "^4.1.0-beta.0" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "node_modules/@yarnpkg/core": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@yarnpkg/core/-/core-2.4.0.tgz", @@ -17205,7 +17419,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -17230,6 +17443,58 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/all-contributors-cli": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.19.0.tgz", @@ -17349,7 +17614,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -17386,8 +17650,7 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -18051,6 +18314,145 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "peer": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "peer": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -18623,7 +19025,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "devOptional": true }, "node_modules/builtins": { "version": "5.0.1", @@ -18759,6 +19161,37 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -18768,6 +19201,21 @@ "node": ">=12" } }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -18840,7 +19288,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -18855,7 +19302,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19168,6 +19614,16 @@ "chromatic-cli": "bin/main.cjs" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -19301,7 +19757,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -19892,6 +20347,13 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "peer": true + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -19904,8 +20366,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compare-func": { "version": "2.0.0", @@ -20417,7 +20878,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -20766,7 +21226,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -20940,7 +21399,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, @@ -21549,8 +22007,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -21565,7 +22022,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -21575,7 +22031,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21604,6 +22059,20 @@ "objectorarray": "^1.0.5" } }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -21843,8 +22312,7 @@ "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, "node_modules/esbuild": { "version": "0.18.20", @@ -22524,6 +22992,16 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -23180,7 +23658,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -23197,7 +23674,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -23210,7 +23686,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -23222,7 +23697,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -23237,7 +23711,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -23249,7 +23722,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -23543,7 +24015,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, "funding": [ { "type": "github", @@ -23693,7 +24164,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -23755,26 +24225,6 @@ "node": ">=4" } }, - "node_modules/get-monorepo-packages/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/get-monorepo-packages/node_modules/globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -24158,22 +24608,19 @@ "dev": true }, "node_modules/glob": { - "version": "10.3.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.7.tgz", - "integrity": "sha512-wCMbE1m9Nx5yD9LYtgsVWq5VhHlk5WzJirw594qZR6AIvQYuHrdDtIktUVjQItalD53y7dqoedu9xP0u0WaxIQ==", - "dev": true, + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -24230,26 +24677,6 @@ "node": ">= 0.10" } }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -24314,30 +24741,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -24710,7 +25113,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -24726,7 +25128,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, "engines": { "node": ">=8" } @@ -24819,8 +25220,7 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "node_modules/html-parse-stringify": { "version": "3.0.1", @@ -25242,7 +25642,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -25644,7 +26043,6 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -25768,7 +26166,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -26044,7 +26441,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -26118,8 +26514,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unc-path": { "version": "1.0.0", @@ -26241,8 +26636,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -26273,7 +26667,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, "engines": { "node": ">=8" } @@ -26282,7 +26675,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, "dependencies": { "append-transform": "^2.0.0" }, @@ -26325,7 +26717,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -26342,7 +26733,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -26351,7 +26741,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -26363,7 +26752,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -26372,7 +26760,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -26386,7 +26773,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, "dependencies": { "semver": "^7.5.3" }, @@ -26401,7 +26787,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -26415,7 +26800,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -26425,9 +26809,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -26980,26 +27364,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-config/node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -28143,26 +28507,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-runtime/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -30475,6 +30819,16 @@ "node": ">=4" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -30546,8 +30900,7 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" }, "node_modules/lodash.foreach": { "version": "4.5.0", @@ -30812,7 +31165,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -30827,7 +31179,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -32084,7 +32435,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, "funding": [ { "type": "github", @@ -32315,26 +32665,6 @@ "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -32351,7 +32681,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -33018,7 +33347,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -33058,14 +33386,12 @@ "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -33078,7 +33404,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -33087,31 +33412,10 @@ "node": ">=8.0.0" } }, - "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -33126,7 +33430,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -33138,7 +33441,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -33153,7 +33455,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -33165,7 +33466,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -33177,7 +33477,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -33756,7 +34055,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -34107,7 +34405,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -34115,8 +34412,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.10.1", @@ -34415,7 +34711,6 @@ "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -35030,7 +35325,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, "dependencies": { "fromentries": "^1.2.0" }, @@ -35317,26 +35611,6 @@ "ms": "2.0.0" } }, - "node_modules/puppeteer-core/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/puppeteer-core/node_modules/https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -35497,6 +35771,16 @@ "url": "https://opencollective.com/ramda" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -35555,7 +35839,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -35656,7 +35939,6 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -35939,6 +36221,37 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-package-json/node_modules/hosted-git-info": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", @@ -35969,6 +36282,21 @@ "node": ">=12" } }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", @@ -36406,7 +36734,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, "dependencies": { "es6-error": "^4.0.1" }, @@ -36786,7 +37113,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -36803,8 +37129,7 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "node_modules/requireg": { "version": "0.2.2", @@ -36848,7 +37173,6 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -36991,7 +37315,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -37002,31 +37325,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "3.29.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -37155,7 +37457,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "node_modules/sass": { "version": "1.58.1", @@ -37189,16 +37491,71 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -37213,7 +37570,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -37224,8 +37580,7 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { "version": "0.18.0", @@ -37272,6 +37627,16 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -37318,8 +37683,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-name": { "version": "2.0.1", @@ -37409,7 +37773,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -37421,7 +37784,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -37452,26 +37814,6 @@ "node": ">=4" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -37488,8 +37830,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/signale": { "version": "1.4.0", @@ -38012,7 +38353,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -38137,7 +38477,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -38154,7 +38493,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -38167,7 +38505,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -38580,7 +38917,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -38686,7 +39022,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -38711,7 +39046,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, "engines": { "node": ">=8" } @@ -39193,26 +39527,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "node_modules/stylelint-config-rational-order/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/stylelint-config-rational-order/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -40253,7 +40567,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", - "dev": true, + "devOptional": true, "dependencies": { "postcss": "^7.0.2" } @@ -40262,13 +40576,13 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true + "devOptional": true }, "node_modules/sugarss/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, + "devOptional": true, "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -40309,7 +40623,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -40543,26 +40856,6 @@ "node": ">=4" } }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/temp/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -40644,6 +40937,141 @@ "node": ">=8" } }, + "node_modules/terser": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", + "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "peer": true + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -40657,25 +41085,6 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -41312,7 +41721,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -42231,7 +42639,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.5.tgz", "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==", - "dev": true, "dependencies": { "esbuild": "^0.16.14", "postcss": "^8.4.21", @@ -42365,7 +42772,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -42381,7 +42787,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -42397,7 +42802,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -42413,7 +42817,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -42429,7 +42832,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -42445,7 +42847,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -42461,7 +42862,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -42477,7 +42877,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42493,7 +42892,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42509,7 +42907,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42525,7 +42922,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42541,7 +42937,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42557,7 +42952,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42573,7 +42967,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42589,7 +42982,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42605,7 +42997,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -42621,7 +43012,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -42637,7 +43027,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -42653,7 +43042,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -42669,7 +43057,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42685,7 +43072,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42701,7 +43087,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -42714,7 +43099,6 @@ "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -42960,6 +43344,54 @@ "node": ">=12" } }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -42975,6 +43407,62 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", + "dev": true, + "peer": true + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/webpack/node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true, + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -43025,7 +43513,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -43068,8 +43555,7 @@ "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { "version": "1.1.11", @@ -43428,8 +43914,7 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/yallist": { "version": "3.1.1", @@ -43449,7 +43934,6 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -43480,7 +43964,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -43491,7 +43974,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -43504,7 +43986,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -43516,7 +43997,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -43531,7 +44011,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -43543,7 +44022,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -43557,7 +44035,6 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx index 30d80621a..ece00e398 100644 --- a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx +++ b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx @@ -145,7 +145,7 @@ describe('Dataset', () => { }) it('successfully loads the files tab with files', () => { - cy.wrap(DatasetHelper.createWithFiles(FileHelper.createMany(3))) + cy.wrap(DatasetHelper.createWithFiles(FileHelper.createMany(3)), { timeout: 5000 }) .its('persistentId') .then((persistentId: string) => { cy.visit(`/spa/datasets?persistentId=${persistentId}`) From 859486f9e4e2d2f65ca7e75713ca445814ae0c52 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 9 Oct 2023 12:28:51 +0200 Subject: [PATCH 15/61] feat(FilesCountInfo): add integrationt test when adding FileCriteria --- .../files/FileJSDataverseRepository.spec.ts | 94 +++++++++++++++++-- 1 file changed, 88 insertions(+), 6 deletions(-) diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index da0ec217c..d0019758d 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -156,7 +156,7 @@ describe('File JSDataverse Repository', () => { }) }) - it.only('gets all the files by dataset persistentId after dataset deaccession', async () => { + it('gets all the files by dataset persistentId after dataset deaccession', async () => { const dataset = await DatasetHelper.createWithFiles(FileHelper.createMany(3)).then( (datasetResponse) => datasetRepository.getByPersistentId(datasetResponse.persistentId) ) @@ -446,7 +446,8 @@ describe('File JSDataverse Repository', () => { }) describe('Get FilesCountInfo by dataset persistentId', () => { - it('gets FilesCountInfo by dataset persistentId', async () => { + let datasetPersistentId = '' + before(async () => { const files = [ FileHelper.create('csv', { description: 'Some description', @@ -480,9 +481,13 @@ describe('File JSDataverse Repository', () => { tabIngest: 'false' }) ] - const dataset = await DatasetHelper.createWithFiles(files).then((datasetResponse) => - datasetRepository.getByPersistentId(datasetResponse.persistentId) - ) + await DatasetHelper.createWithFiles(files).then((datasetResponse) => { + datasetPersistentId = datasetResponse.persistentId + }) + }) + + it('gets FilesCountInfo by dataset persistentId', async () => { + const dataset = await datasetRepository.getByPersistentId(datasetPersistentId) if (!dataset) throw new Error('Dataset not found') const expectedFilesCountInfo: FilesCountInfo = { @@ -520,7 +525,84 @@ describe('File JSDataverse Repository', () => { } await fileRepository - .getFilesCountInfoByDatasetPersistentId(dataset.persistentId, dataset.version) + .getFilesCountInfoByDatasetPersistentId( + dataset.persistentId, + dataset.version, + new FileCriteria() + ) + .then((filesCountInfo) => { + expect(filesCountInfo.total).to.deep.equal(expectedFilesCountInfo.total) + + const filesCountInfoPerAccessSorted = filesCountInfo.perAccess.sort((a, b) => + a.access.localeCompare(b.access) + ) + const expectedFilesCountInfoPerAccessSorted = expectedFilesCountInfo.perAccess.sort( + (a, b) => a.access.localeCompare(b.access) + ) + expect(filesCountInfoPerAccessSorted).to.deep.equal(expectedFilesCountInfoPerAccessSorted) + + const filesCountInfoPerFileTypeSorted = filesCountInfo.perFileType.sort((a, b) => + a.type.value.localeCompare(b.type.value) + ) + const expectedFilesCountInfoPerFileTypeSorted = expectedFilesCountInfo.perFileType.sort( + (a, b) => a.type.value.localeCompare(b.type.value) + ) + expect(filesCountInfoPerFileTypeSorted).to.deep.equal( + expectedFilesCountInfoPerFileTypeSorted + ) + + const filesCountInfoPerFileTagSorted = filesCountInfo.perFileTag.sort((a, b) => + a.tag.value.localeCompare(b.tag.value) + ) + const expectedFilesCountInfoPerFileTagSorted = expectedFilesCountInfo.perFileTag.sort( + (a, b) => a.tag.value.localeCompare(b.tag.value) + ) + expect(filesCountInfoPerFileTagSorted).to.deep.equal( + expectedFilesCountInfoPerFileTagSorted + ) + }) + }) + + it('gets FilesCountInfo by dataset persistentId when passing filterByType criteria', async () => { + const dataset = await datasetRepository.getByPersistentId(datasetPersistentId) + if (!dataset) throw new Error('Dataset not found') + + const expectedFilesCountInfo: FilesCountInfo = { + total: 3, + perAccess: [ + { + access: FileAccessOption.RESTRICTED, + count: 2 + }, + { + access: FileAccessOption.PUBLIC, + count: 1 + } + ], + perFileType: [ + { + type: new FileType('text/csv'), + count: 3 + } + ], + perFileTag: [ + { + tag: new FileTag('category_1'), + count: 2 + }, + { + tag: new FileTag('category'), + count: 1 + } + ] + } + + await fileRepository + .getFilesCountInfoByDatasetPersistentId( + dataset.persistentId, + dataset.version, + new FileCriteria().withFilterByType('text/csv') + ) .then((filesCountInfo) => { expect(filesCountInfo.total).to.deep.equal(expectedFilesCountInfo.total) From 548119f34475710415b9726bb2911b42e4eca231 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 9 Oct 2023 15:37:07 -0400 Subject: [PATCH 16/61] add DatasetAlerts unit test --- .../dataset-alerts/DatasetAlerts.spec.tsx | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx new file mode 100644 index 000000000..4bc468499 --- /dev/null +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -0,0 +1,75 @@ +import { DatasetAlerts } from '../../../../../src/sections/dataset/dataset-alerts/DatasetAlerts' +import { faker } from '@faker-js/faker' + +import { + DatasetAlert, + DatasetAlertMessageKey +} from '../../../../../src/dataset/domain/models/Dataset' + +describe('DatasetAlerts', () => { + function removeMarkup(htmlString: string): string { + // Use a regular expression to match HTML tags and replace them with an empty string + return htmlString.replace(/<\/?[^>]+(>|$)/g, '') + } + + const alerts = [ + new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION), + new DatasetAlert('warning', DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, { + requestedVersion: 4.0, + returnedVersion: 2.0 + }), + new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, { + privateUrl: faker.internet.url() + }) + ] + + it('renders the correct number of alerts', () => { + cy.mount() + cy.findByText('Unpublished Dataset Private URL').should('exist') + const alertElements = cy.findAllByRole('alert').should('have.length', alerts.length) + }) + + it('renders alerts with correct content', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { + cy.mount() + + cy.findAllByRole('alert').should('exist') + cy.findAllByRole('alert').should( + 'contain.text', + removeMarkup(dataset.alerts.draftVersion.alertText) + ) + cy.findByText('Information').should('exist') + }) + }) + + it('renders alerts with correct headings', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { + cy.mount() + + alerts.forEach((alert) => { + const alertHeading = removeMarkup(dataset.alerts[alert.message].heading) + console.log(JSON.stringify(alertHeading)) + cy.findAllByRole('alert').should('contain.text', alertHeading) + }) + }) + }) + it('renders dynamic text', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { + const dynamicFields = { + requestedVersion: 4.0, + returnedVersion: 2.0 + } + const notFoundAlert = new DatasetAlert( + 'warning', + DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, + dynamicFields + ) + cy.mount() + + alerts.forEach((alert) => { + cy.findAllByRole('alert').should('contain.text', dynamicFields.requestedVersion) + cy.findAllByRole('alert').should('contain.text', dynamicFields.returnedVersion) + }) + }) + }) +}) From 5685673cd02f2170546d6e66334400907c57457c Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 9 Oct 2023 15:38:19 -0400 Subject: [PATCH 17/61] add DatasetAlerts unit test --- .../dataset-alerts/DatasetAlerts.spec.tsx | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 4bc468499..4dc43c559 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -26,7 +26,6 @@ describe('DatasetAlerts', () => { it('renders the correct number of alerts', () => { cy.mount() cy.findByText('Unpublished Dataset Private URL').should('exist') - const alertElements = cy.findAllByRole('alert').should('have.length', alerts.length) }) it('renders alerts with correct content', () => { @@ -45,7 +44,6 @@ describe('DatasetAlerts', () => { it('renders alerts with correct headings', () => { cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { cy.mount() - alerts.forEach((alert) => { const alertHeading = removeMarkup(dataset.alerts[alert.message].heading) console.log(JSON.stringify(alertHeading)) @@ -54,22 +52,20 @@ describe('DatasetAlerts', () => { }) }) it('renders dynamic text', () => { - cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { - const dynamicFields = { - requestedVersion: 4.0, - returnedVersion: 2.0 - } - const notFoundAlert = new DatasetAlert( - 'warning', - DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, - dynamicFields - ) - cy.mount() + const dynamicFields = { + requestedVersion: 4.0, + returnedVersion: 2.0 + } + const notFoundAlert = new DatasetAlert( + 'warning', + DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, + dynamicFields + ) + cy.mount() - alerts.forEach((alert) => { - cy.findAllByRole('alert').should('contain.text', dynamicFields.requestedVersion) - cy.findAllByRole('alert').should('contain.text', dynamicFields.returnedVersion) - }) + alerts.forEach((alert) => { + cy.findAllByRole('alert').should('contain.text', dynamicFields.requestedVersion) + cy.findAllByRole('alert').should('contain.text', dynamicFields.returnedVersion) }) }) }) From 13e0c254c5318702cc8758eba776fe003a0993d6 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 10 Oct 2023 10:09:18 +0200 Subject: [PATCH 18/61] feat(FileThumbnail): get thumbnail from Data Access API --- src/files/domain/models/File.ts | 2 +- .../FileJSDataverseRepository.ts | 31 +++++++++++++++++++ .../files-table/FilesTable.spec.tsx | 2 +- .../e2e/sections/dataset/Dataset.spec.tsx | 14 ++++++++- .../files/FileJSDataverseRepository.spec.ts | 18 +++++++++-- .../shared/files/FileHelper.ts | 28 +++++++++++++++-- 6 files changed, 88 insertions(+), 7 deletions(-) diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index 41810f079..cb455b7ce 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -162,7 +162,7 @@ export class File { public readonly isDeleted: boolean, public readonly ingest: FileIngest, readonly checksum?: FileChecksum, - readonly thumbnail?: string, + public thumbnail?: string, readonly directory?: string, readonly embargo?: FileEmbargo, readonly tabularData?: FileTabularData, diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index 6b5006692..57869c55a 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -16,6 +16,9 @@ import { JSFileMapper } from './mappers/JSFileMapper' import { DatasetVersion } from '../../dataset/domain/models/Dataset' export class FileJSDataverseRepository implements FileRepository { + static readonly DATAVERSE_BACKEND_URL = + (import.meta.env.VITE_DATAVERSE_BACKEND_URL as string) ?? '' + getAllByDatasetPersistentId( datasetPersistentId: string, datasetVersion: DatasetVersion, @@ -34,6 +37,7 @@ export class FileJSDataverseRepository implements FileRepository { ) .then((jsFiles) => jsFiles.map((jsFile) => JSFileMapper.toFile(jsFile, datasetVersion))) .then((files) => FileJSDataverseRepository.getAllWithDownloadCount(files)) + .then((files) => FileJSDataverseRepository.getAllWithThumbnail(files)) .catch((error: WriteError) => { throw new Error(error.message) }) @@ -62,6 +66,33 @@ export class FileJSDataverseRepository implements FileRepository { return Promise.resolve(0) } + private static getAllWithThumbnail(files: File[]): Promise { + return Promise.all( + files.map((file) => + FileJSDataverseRepository.getThumbnailById(file.id).then((thumbnail) => { + file.thumbnail = thumbnail + return file + }) + ) + ) + } + + private static getThumbnailById(id: number): Promise { + return fetch(`${this.DATAVERSE_BACKEND_URL}/api/access/datafile/${id}?imageThumb=400`) + .then((response) => { + if (!response.ok) { + throw new Error('Network response was not ok') + } + return response.blob() + }) + .then((blob) => { + return URL.createObjectURL(blob) + }) + .catch(() => { + return undefined + }) + } + getFilesCountInfoByDatasetPersistentId( datasetPersistentId: string, datasetVersion: DatasetVersion diff --git a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx index 41ef01068..620b3c887 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/FilesTable.spec.tsx @@ -56,7 +56,7 @@ describe('FilesTable', () => { cy.findByRole('button', { name: 'Select all 200 files in this dataset.' }).should('exist') }) - it.only('clears row selection for the current page when the header checkbox is clicked', () => { + it('clears row selection for the current page when the header checkbox is clicked', () => { cy.customMount( ) diff --git a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx index 1dadda464..023a9dc7d 100644 --- a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx +++ b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx @@ -132,7 +132,7 @@ describe('Dataset', () => { }) describe('Visualizing the Files Tab', () => { - it.only('successfully loads the files tab', () => { + it('successfully loads the files tab', () => { cy.wrap(DatasetHelper.create()) .its('persistentId') .then((persistentId: string) => { @@ -400,5 +400,17 @@ describe('Dataset', () => { cy.get('table > tbody > tr').eq(1).should('contain', 'blob-4') }) }) + + it('shows the thumbnail for a file', () => { + cy.wrap(FileHelper.createImage().then((file) => DatasetHelper.createWithFiles([file]))) + .its('persistentId') + .then((persistentId: string) => { + cy.visit(`/spa/datasets?persistentId=${persistentId}`) + + cy.findByText('Files').should('exist') + + cy.findByAltText('blob').should('exist') + }) + }) }) }) diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index 844b61ed1..5e23af2fb 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -28,6 +28,7 @@ import { import { DatasetHelper } from '../../shared/datasets/DatasetHelper' import { FileData, FileHelper } from '../../shared/files/FileHelper' import { FilesCountInfo } from '../../../../src/files/domain/models/FilesCountInfo' +import { faker } from '@faker-js/faker' chai.use(chaiAsPromised) const expect = chai.expect @@ -237,8 +238,21 @@ describe('File JSDataverse Repository', () => { }) }) - it.skip('gets all the files by dataset persistentId after adding a thumbnail to the files', async () => { - // TODO - Do this in thumbnails issue https://github.com/IQSS/dataverse-frontend/issues/160 + it('gets all the files by dataset persistentId after adding a thumbnail to the files', async () => { + const datasetResponse = await FileHelper.createImage().then((file) => + DatasetHelper.createWithFiles([file]) + ) + if (!datasetResponse.files) throw new Error('Files not found') + + const dataset = await datasetRepository.getByPersistentId(datasetResponse.persistentId) + if (!dataset) throw new Error('Dataset not found') + + await fileRepository + .getAllByDatasetPersistentId(dataset.persistentId, dataset.version) + .then((files) => { + console.log(files) + expect(files[0].thumbnail).to.not.be.undefined + }) }) it('gets all the files by dataset persistentId after embargo', async () => { diff --git a/tests/e2e-integration/shared/files/FileHelper.ts b/tests/e2e-integration/shared/files/FileHelper.ts index 368af1762..8c29b7fb7 100644 --- a/tests/e2e-integration/shared/files/FileHelper.ts +++ b/tests/e2e-integration/shared/files/FileHelper.ts @@ -33,7 +33,7 @@ export class FileHelper extends DataverseApiHelper { static createMany( count: number, - type: 'csv' | 'txt' = 'txt', + type: 'csv' | 'txt' | 'img' = 'txt', fileMetadata: FileMetadata = { description: 'This is an example file' } ): FileData[] { const files = [] @@ -44,7 +44,7 @@ export class FileHelper extends DataverseApiHelper { } static create( - type: 'csv' | 'txt' = 'txt', + type: 'csv' | 'txt' | 'img' = 'txt', fileMetadata: FileMetadata = { description: 'This is an example file' } ): FileData { let fileBinary = new Blob([this.generateTxtData()], { type: 'text/plain' }) @@ -59,6 +59,17 @@ export class FileHelper extends DataverseApiHelper { } } + static async createImage(): Promise { + const fileBinary = await this.generateImgData() + if (!fileBinary) { + throw new Error('File could not be fetched') + } + return { + file: fileBinary, + jsonData: JSON.stringify({ description: 'This is an example file' }) + } + } + static generateCsvData(): string { const headers = 'Name,Email,Phone,Address,City,State,Zip' const numRows = 10 @@ -83,6 +94,19 @@ export class FileHelper extends DataverseApiHelper { return faker.lorem.sentence() } + static async generateImgData(): Promise { + return await fetch(faker.image.imageUrl()) + .then((response) => { + if (!response.ok) { + throw new Error('Network response was not ok') + } + return response.blob() + }) + .catch(() => { + throw new Error('Files could not be fetched') + }) + } + static async download(id: number) { cy.visit(`/file.xhtml?fileId=${id}`) .get('#actionButtonBlock > div:nth-child(1) > div > button') From a08f82cbb06e7f8d9049f917778b5f94be3e9901 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 10 Oct 2023 11:56:06 +0200 Subject: [PATCH 19/61] fix(FileThumbnailIcon): map file type to file icon --- .../file-thumbnail/FileThumbnail.tsx | 7 +- .../file-thumbnail/FileThumbnailIcon.tsx | 22 +- .../file-thumbnail/FileTypeToFileIconMap.ts | 214 ++++++++++++++++++ .../file-thumbnail/FileThumbnail.spec.tsx | 2 +- .../files/FileJSDataverseRepository.spec.ts | 1 - 5 files changed, 221 insertions(+), 25 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileTypeToFileIconMap.ts diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.tsx index 403de00e1..c4176dabb 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.tsx @@ -11,14 +11,15 @@ interface FileThumbnailProps { export function FileThumbnail({ file }: FileThumbnailProps) { const { sessionUserHasFileDownloadPermission } = useFileDownloadPermission(file) - const showPreviewImage = file.thumbnail && sessionUserHasFileDownloadPermission return (
- {showPreviewImage ? ( + {file.thumbnail && sessionUserHasFileDownloadPermission ? ( ) : ( diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx index 3868c56c7..c8111a425 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx @@ -1,27 +1,9 @@ import styles from './FileThumbnail.module.scss' -import { IconName } from '@iqss/dataverse-design-system' import { FileType } from '../../../../../../../../files/domain/models/File' - -const TYPE_TO_ICON: Record = { - archive: IconName.PACKAGE, - video: IconName.VIDEO, - audio: IconName.AUDIO, - code: IconName.CODE, - data: IconName.TABULAR, - network: IconName.NETWORK, - astro: IconName.ASTRO, - image: IconName.IMAGE, - document: IconName.DOCUMENT, - geospatial: IconName.GEODATA, - tabular: IconName.TABULAR, - text: IconName.DOCUMENT, - unknown: IconName.FILE, - default: IconName.FILE, - other: IconName.OTHER -} +import { FileTypeToFileIconMap } from './FileTypeToFileIconMap' export function FileThumbnailIcon({ type }: { type: FileType }) { - const icon = TYPE_TO_ICON[type.value] || TYPE_TO_ICON.default + const icon = FileTypeToFileIconMap[type.value] || FileTypeToFileIconMap.default return ( diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileTypeToFileIconMap.ts b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileTypeToFileIconMap.ts new file mode 100644 index 000000000..7bed26eeb --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileTypeToFileIconMap.ts @@ -0,0 +1,214 @@ +import { IconName } from '@iqss/dataverse-design-system' + +export const FileTypeToFileIconMap: Record = { + 'application/pdf': IconName.DOCUMENT, + 'image/pdf': IconName.DOCUMENT, + 'text/pdf': IconName.DOCUMENT, + 'application/x-pdf': IconName.DOCUMENT, + 'application/cnt': IconName.DOCUMENT, + 'application/msword': IconName.DOCUMENT, + 'application/vnd.ms-excel': IconName.DOCUMENT, + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': IconName.DOCUMENT, + 'application/vnd.ms-powerpoint': IconName.DOCUMENT, + 'application/vnd.openxmlformats-officedocument.presentationml.presentation': IconName.DOCUMENT, + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': IconName.DOCUMENT, + 'application/vnd.oasis.opendocument.spreadsheet': IconName.DOCUMENT, + 'application/vnd.ms-excel.sheet.macroenabled.12': IconName.DOCUMENT, + 'text/plain': IconName.DOCUMENT, + 'text/x-log': IconName.DOCUMENT, + 'text/html': IconName.DOCUMENT, + 'application/x-tex': IconName.DOCUMENT, + 'text/x-tex': IconName.DOCUMENT, + 'text/markdown': IconName.DOCUMENT, + 'text/x-markdown': IconName.DOCUMENT, + 'text/x-r-markdown': IconName.DOCUMENT, + 'text/x-rst': IconName.DOCUMENT, + 'application/rtf': IconName.DOCUMENT, + 'text/rtf': IconName.DOCUMENT, + 'text/richtext': IconName.DOCUMENT, + 'text/turtle': IconName.DOCUMENT, + 'application/xml': IconName.DOCUMENT, + 'text/xml': IconName.DOCUMENT, + 'text/x-c': IconName.CODE, + 'text/x-c++src': IconName.CODE, + 'text/css': IconName.CODE, + 'text/x-objcsrc': IconName.CODE, + 'application/java-vm': IconName.CODE, + 'text/x-java-source': IconName.CODE, + 'text/javascript': IconName.CODE, + 'application/javascript': IconName.CODE, + 'application/x-javascript': IconName.CODE, + 'text/x-perl-script': IconName.CODE, + 'text/x-matlab': IconName.CODE, + 'text/x-mathematica': IconName.CODE, + 'text/php': IconName.CODE, + 'text/x-fortran': IconName.CODE, + 'text/x-pascal': IconName.CODE, + 'text/x-python': IconName.CODE, + 'text/x-python-script': IconName.CODE, + 'text/x-r-source': IconName.CODE, + 'text/x-sh': IconName.CODE, + 'application/x-sh': IconName.CODE, + 'application/x-shellscript': IconName.CODE, + 'application/x-sql': IconName.CODE, + 'text/x-sql': IconName.CODE, + 'application/x-swc': IconName.CODE, + 'application/x-msdownload': IconName.CODE, + 'application/x-ipynb+json': IconName.CODE, + 'application/x-stata-do': IconName.CODE, + 'text/x-stata-syntax': IconName.CODE, + 'application/x-stata-syntax': IconName.CODE, + 'text/x-spss-syntax': IconName.CODE, + 'application/x-spss-syntax': IconName.CODE, + 'text/x-sas-syntax': IconName.CODE, + 'application/x-sas-syntax': IconName.CODE, + 'type/x-r-syntax': IconName.CODE, + 'application/postscript': IconName.CODE, + 'application/vnd.wolfram.mathematica.package': IconName.CODE, + 'application/vnd.wolfram.mathematica': IconName.CODE, + 'text/x-workflow-description-language': IconName.CODE, + 'text/x-computational-workflow-language': IconName.CODE, + 'text/x-nextflow': IconName.CODE, + 'text/x-r-notebook': IconName.CODE, + 'text/x-ruby-script': IconName.CODE, + 'text/x-dagman': IconName.CODE, + 'text/x-makefile': IconName.CODE, + 'text/x-snakemake': IconName.CODE, + 'application/x-docker-file': IconName.CODE, + 'application/x-vagrant-file': IconName.CODE, + 'text/tab-separated-values': IconName.TABULAR, + 'text/tsv': IconName.TABULAR, + 'text/comma-separated-values': IconName.TABULAR, + 'text/x-comma-separated-values': IconName.TABULAR, + 'text/csv': IconName.TABULAR, + 'text/x-vcard': IconName.TABULAR, + 'text/x-fixed-field': IconName.TABULAR, + 'application/x-rlang-transport': IconName.TABULAR, + 'application/x-R-2': IconName.TABULAR, + 'application/x-stata': IconName.TABULAR, + 'application/x-stata-6': IconName.TABULAR, + 'application/x-stata-13': IconName.TABULAR, + 'application/x-stata-14': IconName.TABULAR, + 'application/x-stata-15': IconName.TABULAR, + 'application/x-stata-ado': IconName.TABULAR, + 'application/x-stata-dta': IconName.TABULAR, + 'application/x-stata-smcl': IconName.TABULAR, + 'application/x-spss-por': IconName.TABULAR, + 'application/x-spss-portable': IconName.TABULAR, + 'application/x-spss-sav': IconName.TABULAR, + 'application/x-spss-sps': IconName.TABULAR, + 'application/x-sas': IconName.TABULAR, + 'application/x-sas-transport': IconName.TABULAR, + 'application/x-sas-system': IconName.TABULAR, + 'application/x-sas-data': IconName.TABULAR, + 'application/x-sas-catalog': IconName.TABULAR, + 'application/x-sas-log': IconName.TABULAR, + 'application/x-sas-output': IconName.TABULAR, + 'application/x-r-data': IconName.TABULAR, + 'application/softgrid-do': IconName.TABULAR, + 'application/x-dvn-csvspss-zip': IconName.TABULAR, + 'application/x-dvn-tabddi-zip': IconName.TABULAR, + 'application/x-emf': IconName.TABULAR, + 'application/x-h5': IconName.TABULAR, + 'application/x-hdf': IconName.TABULAR, + 'application/x-hdf5': IconName.TABULAR, + 'application/geo+json': IconName.TABULAR, + 'application/json': IconName.TABULAR, + 'application/mathematica': IconName.TABULAR, + 'application/matlab-mat': IconName.TABULAR, + 'application/x-matlab-data': IconName.TABULAR, + 'application/x-matlab-figure': IconName.TABULAR, + 'application/x-matlab-workspace': IconName.TABULAR, + 'application/x-xfig': IconName.TABULAR, + 'application/x-msaccess': IconName.TABULAR, + 'application/netcdf': IconName.TABULAR, + 'application/x-netcdf': IconName.TABULAR, + 'application/vnd.lotus-notes': IconName.TABULAR, + 'application/x-nsdstat': IconName.TABULAR, + 'application/vnd.flographit': IconName.TABULAR, + 'application/vnd.realvnc.bed': IconName.TABULAR, + 'application/vnd.ms-pki.stl': IconName.TABULAR, + 'application/vnd.isac.fcs': IconName.TABULAR, + 'application/java-serialized-object': IconName.TABULAR, + 'chemical/x-xyz': IconName.TABULAR, + 'image/fits': IconName.FILE, + 'application/fits': IconName.FILE, + 'application/dbf': IconName.FILE, + 'application/dbase': IconName.FILE, + 'application/prj': IconName.FILE, + 'application/sbn': IconName.FILE, + 'application/sbx': IconName.FILE, + 'application/shp': IconName.FILE, + 'application/shx': IconName.FILE, + 'application/x-esri-shape': IconName.FILE, + 'application/vnd.google-earth.kml+xml': IconName.FILE, + 'application/zipped-shapefile': IconName.FILE, + 'application/zip': IconName.PACKAGE, + 'application/x-zip-compressed': IconName.PACKAGE, + 'application/vnd.antix.game-component': IconName.PACKAGE, + 'application/x-bzip': IconName.PACKAGE, + 'application/x-bzip2': IconName.PACKAGE, + 'application/vnd.google-earth.kmz': IconName.PACKAGE, + 'application/gzip': IconName.PACKAGE, + 'application/x-gzip': IconName.PACKAGE, + 'application/x-gzip-compressed': IconName.PACKAGE, + 'application/rar': IconName.PACKAGE, + 'application/x-rar': IconName.PACKAGE, + 'application/x-rar-compressed': IconName.PACKAGE, + 'application/tar': IconName.PACKAGE, + 'application/x-tar': IconName.PACKAGE, + 'application/x-compressed': IconName.PACKAGE, + 'application/x-compressed-tar': IconName.PACKAGE, + 'application/x-7z-compressed': IconName.PACKAGE, + 'application/x-xz': IconName.PACKAGE, + 'application/warc': IconName.PACKAGE, + 'application/x-iso9660-image': IconName.PACKAGE, + 'application/vnd.eln+zip': IconName.PACKAGE, + 'image/gif': IconName.IMAGE, + 'image/jpeg': IconName.IMAGE, + 'image/jp2': IconName.IMAGE, + 'image/x-portable-bitmap': IconName.IMAGE, + 'image/x-portable-graymap': IconName.IMAGE, + 'image/png': IconName.IMAGE, + 'image/x-portable-anymap': IconName.IMAGE, + 'image/x-portable-pixmap': IconName.IMAGE, + 'application/x-msmetafile': IconName.IMAGE, + 'application/dicom': IconName.IMAGE, + 'image/dicom-rle': IconName.IMAGE, + 'image/nii': IconName.IMAGE, + 'image/cmu-raster': IconName.IMAGE, + 'image/x-rgb': IconName.IMAGE, + 'image/svg+xml': IconName.IMAGE, + 'image/tiff': IconName.IMAGE, + 'image/bmp': IconName.IMAGE, + 'image/x-xbitmap': IconName.IMAGE, + 'image/RAW': IconName.IMAGE, + 'image/raw': IconName.IMAGE, + 'application/x-tgif': IconName.IMAGE, + 'image/x-xpixmap': IconName.IMAGE, + 'image/x-xwindowdump': IconName.IMAGE, + 'application/photoshop': IconName.IMAGE, + 'image/vnd.adobe.photoshop': IconName.IMAGE, + 'application/x-photoshop': IconName.IMAGE, + 'audio/x-aiff': IconName.AUDIO, + 'audio/mp3': IconName.AUDIO, + 'audio/mpeg': IconName.AUDIO, + 'audio/mp4': IconName.AUDIO, + 'audio/x-m4a': IconName.AUDIO, + 'audio/ogg': IconName.AUDIO, + 'audio/wav': IconName.AUDIO, + 'audio/x-wav': IconName.AUDIO, + 'audio/x-wave': IconName.AUDIO, + 'video/avi': IconName.VIDEO, + 'video/x-msvideo': IconName.VIDEO, + 'video/mpeg': IconName.VIDEO, + 'video/mp4': IconName.VIDEO, + 'video/x-m4v': IconName.VIDEO, + 'video/ogg': IconName.VIDEO, + 'video/quicktime': IconName.VIDEO, + 'video/webm': IconName.VIDEO, + 'text/xml-graphml': IconName.NETWORK, + 'application/octet-stream': IconName.FILE, + 'application/vnd.dataverse.file-package': IconName.TABULAR, + default: IconName.FILE +} diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx index 29a269c67..625700ea3 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx @@ -68,7 +68,7 @@ describe('FileThumbnail', () => { cy.customMount() cy.findByAltText(file.name).should('not.exist') - cy.findByText('icon-image').should('exist') + cy.findByText('icon-file').should('exist') cy.findByText('Restricted File Icon').should('exist').parent().trigger('mouseover') cy.findByText('File Access: Restricted').should('exist') diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index 5e23af2fb..b2826dc6d 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -28,7 +28,6 @@ import { import { DatasetHelper } from '../../shared/datasets/DatasetHelper' import { FileData, FileHelper } from '../../shared/files/FileHelper' import { FilesCountInfo } from '../../../../src/files/domain/models/FilesCountInfo' -import { faker } from '@faker-js/faker' chai.use(chaiAsPromised) const expect = chai.expect From a52c3dc972642f6b4e39ef1ed795300a8c5e6528 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 10 Oct 2023 11:56:38 +0200 Subject: [PATCH 20/61] fix(DesignSystem): tooltip fixed to avoid layout shift on hover --- packages/design-system/src/lib/components/tooltip/Tooltip.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/design-system/src/lib/components/tooltip/Tooltip.tsx b/packages/design-system/src/lib/components/tooltip/Tooltip.tsx index 03da3e981..5c5d6e021 100644 --- a/packages/design-system/src/lib/components/tooltip/Tooltip.tsx +++ b/packages/design-system/src/lib/components/tooltip/Tooltip.tsx @@ -14,7 +14,7 @@ export function Tooltip({ placement, overlay, children, maxWidth = 200 }: Overla {overlay}}> + overlay={{overlay}}>
{children}
) From 35c157339c8dbea6d675763cd7c6980b8b943d48 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 26 Sep 2023 16:23:01 +0200 Subject: [PATCH 21/61] fix(actions): install playwright before running the tests --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f6a07776f..d962cc4f4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -133,6 +133,9 @@ jobs: working-directory: packages/design-system run: npm run build + - name: Install Playwright + run: npx playwright install + - name: Build Storybook Design System working-directory: packages/design-system run: npm run build-storybook --quiet From 3ea654558947c08f27b05e7c10353d252d828926 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 10 Oct 2023 17:41:43 +0200 Subject: [PATCH 22/61] feat: update js-dataverse to latest version --- package-lock.json | 937 +++--------------- package.json | 2 +- .../FileJSDataverseRepository.ts | 3 +- .../mappers/DomainFileMapper.ts | 10 +- 4 files changed, 154 insertions(+), 798 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a0671542..aef2e8157 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr92.3fbf381", + "@iqss/dataverse-client-javascript": "2.0.0-pr93.8996380", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", @@ -3588,9 +3588,9 @@ }, "node_modules/@iqss/dataverse-client-javascript": { "name": "@IQSS/dataverse-client-javascript", - "version": "2.0.0-pr92.3fbf381", - "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr92.3fbf381/c65e21a842363935d5ca632de9077063382f8800", - "integrity": "sha512-eexOP5sAKyaJc3Lj1xw8qFpYAh7R0de85VPRKoG8pPkON0LjMAql7heVGMP/MO1gvy159XSSdl2WCrtl/qLuJQ==", + "version": "2.0.0-pr93.8996380", + "resolved": "https://npm.pkg.github.com/download/@IQSS/dataverse-client-javascript/2.0.0-pr93.8996380/e2b872620f16a08f5cb3e94dbf7afd0afc55e1d2", + "integrity": "sha512-hlSKtjPhpASVZD5RQsk2sRTrLWPbucY7G7uDcjWIWpg0NiHxhvz3Tny5q8yIAzQ44v+8K/n5K0fr8gv9PUBeiQ==", "license": "MIT", "dependencies": { "@types/node": "^18.15.11", @@ -5057,17 +5057,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "devOptional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -16046,28 +16035,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@types/eslint": { - "version": "8.44.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", - "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -16751,181 +16718,6 @@ "vite": "^4.1.0-beta.0" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, "node_modules/@yarnpkg/core": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@yarnpkg/core/-/core-2.4.0.tgz", @@ -17419,6 +17211,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -17443,58 +17236,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/all-contributors-cli": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.19.0.tgz", @@ -17614,6 +17355,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -17650,7 +17392,8 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -18314,145 +18057,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "peer": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "peer": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "peer": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "peer": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -19025,7 +18629,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true + "dev": true }, "node_modules/builtins": { "version": "5.0.1", @@ -19288,6 +18892,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -19302,6 +18907,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19614,16 +19220,6 @@ "chromatic-cli": "bin/main.cjs" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -19757,6 +19353,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -20347,13 +19944,6 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "peer": true - }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -20366,7 +19956,8 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true }, "node_modules/compare-func": { "version": "2.0.0", @@ -20878,6 +20469,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -21226,6 +20818,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -21399,6 +20992,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, @@ -22007,7 +21601,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -22022,6 +21617,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -22031,6 +21627,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -22059,20 +21656,6 @@ "objectorarray": "^1.0.5" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -22312,7 +21895,8 @@ "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, "node_modules/esbuild": { "version": "0.18.20", @@ -22992,16 +22576,6 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -23658,6 +23232,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -23674,6 +23249,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -23686,6 +23262,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -23697,6 +23274,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -23711,6 +23289,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -23722,6 +23301,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -24015,6 +23595,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, "funding": [ { "type": "github", @@ -24164,6 +23745,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -25113,6 +24695,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -25128,6 +24711,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { "node": ">=8" } @@ -25220,7 +24804,8 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/html-parse-stringify": { "version": "3.0.1", @@ -25642,6 +25227,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -26043,6 +25629,7 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -26166,6 +25753,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -26441,6 +26029,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" }, @@ -26514,7 +26103,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unc-path": { "version": "1.0.0", @@ -26636,7 +26226,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", @@ -26667,6 +26258,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, "engines": { "node": ">=8" } @@ -26675,6 +26267,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, "dependencies": { "append-transform": "^2.0.0" }, @@ -26717,6 +26310,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -26733,6 +26327,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { "node": ">=8" } @@ -26741,6 +26336,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -26752,6 +26348,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -26760,6 +26357,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -26773,6 +26371,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "dependencies": { "semver": "^7.5.3" }, @@ -26787,6 +26386,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -26800,6 +26400,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -30819,16 +30420,6 @@ "node": ">=4" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -30900,7 +30491,8 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true }, "node_modules/lodash.foreach": { "version": "4.5.0", @@ -31165,6 +30757,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -31179,6 +30772,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -32435,6 +32029,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, "funding": [ { "type": "github", @@ -32681,6 +32276,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -33347,6 +32943,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -33386,12 +32983,14 @@ "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -33404,6 +33003,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -33416,6 +33016,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -33430,6 +33031,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -33441,6 +33043,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -33455,6 +33058,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -33466,6 +33070,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -33477,6 +33082,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -34055,6 +33661,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -34405,6 +34012,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -34412,7 +34020,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.1", @@ -34711,6 +34320,7 @@ "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -35325,6 +34935,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, "dependencies": { "fromentries": "^1.2.0" }, @@ -35771,16 +35382,6 @@ "url": "https://opencollective.com/ramda" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -35839,6 +35440,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -35939,6 +35541,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -36734,6 +36337,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, "dependencies": { "es6-error": "^4.0.1" }, @@ -37113,6 +36717,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -37129,7 +36734,8 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requireg": { "version": "0.2.2", @@ -37173,6 +36779,7 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -37315,6 +36922,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -37329,6 +36937,7 @@ "version": "3.29.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", + "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -37457,7 +37066,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "dev": true }, "node_modules/sass": { "version": "1.58.1", @@ -37491,71 +37100,16 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "peer": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "loose-envify": "^1.1.0" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -37570,6 +37124,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -37580,7 +37135,8 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/send": { "version": "0.18.0", @@ -37627,16 +37183,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -37683,7 +37229,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-function-name": { "version": "2.0.1", @@ -37773,6 +37320,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -37784,6 +37332,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -37830,7 +37379,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/signale": { "version": "1.4.0", @@ -38353,6 +37903,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -38477,6 +38028,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -38493,6 +38045,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -38505,6 +38058,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -38917,6 +38471,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -39022,6 +38577,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -39046,6 +38602,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "engines": { "node": ">=8" } @@ -40567,7 +40124,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", - "devOptional": true, + "dev": true, "dependencies": { "postcss": "^7.0.2" } @@ -40576,13 +40133,13 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "devOptional": true + "dev": true }, "node_modules/sugarss/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "devOptional": true, + "dev": true, "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -40623,6 +40180,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -40937,141 +40495,6 @@ "node": ">=8" } }, - "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", - "devOptional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "devOptional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "peer": true - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -41721,6 +41144,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -42639,6 +42063,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.5.tgz", "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==", + "dev": true, "dependencies": { "esbuild": "^0.16.14", "postcss": "^8.4.21", @@ -42772,6 +42197,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -42787,6 +42213,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -42802,6 +42229,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -42817,6 +42245,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -42832,6 +42261,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -42847,6 +42277,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -42862,6 +42293,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -42877,6 +42309,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42892,6 +42325,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42907,6 +42341,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42922,6 +42357,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42937,6 +42373,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42952,6 +42389,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42967,6 +42405,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42982,6 +42421,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42997,6 +42437,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -43012,6 +42453,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -43027,6 +42469,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -43042,6 +42485,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -43057,6 +42501,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43072,6 +42517,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43087,6 +42533,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43099,6 +42546,7 @@ "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -43344,54 +42792,6 @@ "node": ">=12" } }, - "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -43407,62 +42807,6 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", - "dev": true, - "peer": true - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true, - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -43513,6 +42857,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -43555,7 +42900,8 @@ "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.11", @@ -43914,7 +43260,8 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/yallist": { "version": "3.1.1", @@ -43934,6 +43281,7 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -43964,6 +43312,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -43974,6 +43323,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -43986,6 +43336,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -43997,6 +43348,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -44011,6 +43363,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -44022,6 +43375,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -44035,6 +43389,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 454d1ddd1..ca0daa72c 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@faker-js/faker": "7.6.0", - "@iqss/dataverse-client-javascript": "2.0.0-pr92.3fbf381", + "@iqss/dataverse-client-javascript": "2.0.0-pr93.8996380", "@iqss/dataverse-design-system": "*", "@istanbuljs/nyc-config-typescript": "1.0.2", "@tanstack/react-table": "8.9.2", diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index adc2b0380..cec70dea0 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -35,7 +35,8 @@ export class FileJSDataverseRepository implements FileRepository { includeDeaccessioned, jsPagination.limit, jsPagination.offset, - DomainFileMapper.toJSFileCriteria(criteria) + DomainFileMapper.toJSFileSearchCriteria(criteria), + DomainFileMapper.toJSFileOrderCriteria(criteria.sortBy) ) .then((jsFiles) => jsFiles.map((jsFile) => JSFileMapper.toFile(jsFile, datasetVersion))) .then((files) => FileJSDataverseRepository.getAllWithDownloadCount(files)) diff --git a/src/files/infrastructure/mappers/DomainFileMapper.ts b/src/files/infrastructure/mappers/DomainFileMapper.ts index 45d93715b..cda15bf92 100644 --- a/src/files/infrastructure/mappers/DomainFileMapper.ts +++ b/src/files/infrastructure/mappers/DomainFileMapper.ts @@ -7,7 +7,7 @@ import { } from '../../domain/models/FileCriteria' import { FileAccessStatus as JSFileAccessStatus, - FileCriteria as JSFileCriteria, + FileSearchCriteria as JSFileSearchCriteria, FileOrderCriteria as JSFileOrderCriteria } from '@iqss/dataverse-client-javascript' import { FileType } from '../../domain/models/File' @@ -20,17 +20,17 @@ export class DomainFileMapper { } } - static toJSFileCriteria(criteria: FileCriteria): JSFileCriteria { - return new JSFileCriteria( - this.toJSOrderCriteria(criteria.sortBy), + static toJSFileSearchCriteria(criteria: FileCriteria): JSFileSearchCriteria { + return new JSFileSearchCriteria( this.toJSContentType(criteria.filterByType), this.toJSAccessStatus(criteria.filterByAccess), this.toJSCategoryName(criteria.filterByTag), + undefined, // This filter is not used in the UI this.toJSSearchText(criteria.searchText) ) } - static toJSOrderCriteria(sortBy: FileSortByOption): JSFileOrderCriteria { + static toJSFileOrderCriteria(sortBy: FileSortByOption): JSFileOrderCriteria { switch (sortBy) { case FileSortByOption.NAME_AZ: return JSFileOrderCriteria.NAME_AZ From a3bb0bad88624cc0ea239baad48657a8c11ac850 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 10 Oct 2023 17:52:54 +0200 Subject: [PATCH 23/61] feat(FilesCountInfo): pass FileSearchCriteria to js-dataverse use case --- src/files/infrastructure/FileJSDataverseRepository.ts | 8 ++++++-- .../e2e-integration/e2e/sections/dataset/Dataset.spec.tsx | 7 +++---- .../integration/files/FileJSDataverseRepository.spec.ts | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index cec70dea0..c2bfae269 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -73,9 +73,13 @@ export class FileJSDataverseRepository implements FileRepository { datasetVersion: DatasetVersion, criteria: FileCriteria ): Promise { - // TODO - Take into account the FileCriteria https://github.com/IQSS/dataverse-frontend/issues/172 return getDatasetFileCounts - .execute(datasetPersistentId, datasetVersion.toString(), includeDeaccessioned) + .execute( + datasetPersistentId, + datasetVersion.toString(), + includeDeaccessioned, + DomainFileMapper.toJSFileSearchCriteria(criteria) + ) .then((jsFilesCountInfo) => { return JSFileMapper.toFilesCountInfo(jsFilesCountInfo) }) diff --git a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx index 30d80621a..4973b2165 100644 --- a/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx +++ b/tests/e2e-integration/e2e/sections/dataset/Dataset.spec.tsx @@ -300,8 +300,7 @@ describe('Dataset', () => { }) }) - it.skip('applies filters to the Files Table in the correct order', () => { - // TODO - Restore this test once fileCountsInfo use case takes into account the filtered results https://github.com/IQSS/dataverse-frontend/issues/172 + it('applies filters to the Files Table in the correct order', () => { const files = [ FileHelper.create('csv', { description: 'Some description', @@ -362,7 +361,7 @@ describe('Dataset', () => { cy.findByText('blob-4').should('exist') cy.findByText('blob-5').should('exist') - cy.findByRole('button', { name: 'Filter Tag: All' }).click({ force: true }) + cy.findByRole('button', { name: 'File Tags: All' }).click({ force: true }) cy.findByText('Category (4)').should('exist').click({ force: true }) cy.findByText('1 to 4 of 4 Files').should('exist') @@ -384,7 +383,7 @@ describe('Dataset', () => { cy.findByText('blob-4').should('exist') cy.findByText('blob-5').should('exist') - cy.findByRole('button', { name: 'Filter Type: All' }).click({ force: true }) + cy.findByRole('button', { name: 'File Type: All' }).click({ force: true }) cy.findByText('Text/csv (2)').should('exist').click({ force: true }) cy.findByText('1 to 2 of 2 Files').should('exist') diff --git a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts index d0019758d..9a0614e91 100644 --- a/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts +++ b/tests/e2e-integration/integration/files/FileJSDataverseRepository.spec.ts @@ -588,11 +588,11 @@ describe('File JSDataverse Repository', () => { perFileTag: [ { tag: new FileTag('category_1'), - count: 2 + count: 1 }, { tag: new FileTag('category'), - count: 1 + count: 2 } ] } From df229db21232c8577a7d0ebff825b34db5c143a2 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Tue, 10 Oct 2023 18:21:12 -0400 Subject: [PATCH 24/61] fix: DatasetAlerts unit test --- .../dataset-alerts/DatasetAlerts.spec.tsx | 101 ++++++++++-------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 4dc43c559..800c0d3e1 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -6,12 +6,29 @@ import { DatasetAlertMessageKey } from '../../../../../src/dataset/domain/models/Dataset' -describe('DatasetAlerts', () => { - function removeMarkup(htmlString: string): string { - // Use a regular expression to match HTML tags and replace them with an empty string - return htmlString.replace(/<\/?[^>]+(>|$)/g, '') +function removeMarkup(htmlString: string): string { + // Use a regular expression to match HTML tags and replace them with an empty string + return htmlString.replace(/<\/?[^>]+(>|$)/g, '') +} + +interface DatasetTranslation { + alerts: { + draftVersion: { + heading: string + alertText: string + } + requestedVersionNotFound: { + heading: string + alertText: string + } + unpublishedDataset: { + heading: string + alertText: string + } } +} +it('renders the correct number of alerts', () => { const alerts = [ new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION), new DatasetAlert('warning', DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, { @@ -22,50 +39,48 @@ describe('DatasetAlerts', () => { privateUrl: faker.internet.url() }) ] - - it('renders the correct number of alerts', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((dataset: DatasetTranslation) => { cy.mount() - cy.findByText('Unpublished Dataset Private URL').should('exist') - }) - - it('renders alerts with correct content', () => { - cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { - cy.mount() - - cy.findAllByRole('alert').should('exist') - cy.findAllByRole('alert').should( - 'contain.text', - removeMarkup(dataset.alerts.draftVersion.alertText) - ) - cy.findByText('Information').should('exist') + const headingProps = [ + dataset.alerts.draftVersion.heading, + dataset.alerts.requestedVersionNotFound.heading, + dataset.alerts.unpublishedDataset.heading + ] + cy.findAllByRole('alert').should('have.length', 3) + cy.findAllByRole('alert').each(($alert, index) => { + cy.wrap($alert).findByText(headingProps[index]).should('exist') }) }) +}) - it('renders alerts with correct headings', () => { - cy.fixture('../../../public/locales/en/dataset.json').then((dataset) => { - cy.mount() - alerts.forEach((alert) => { - const alertHeading = removeMarkup(dataset.alerts[alert.message].heading) - console.log(JSON.stringify(alertHeading)) - cy.findAllByRole('alert').should('contain.text', alertHeading) - }) - }) - }) - it('renders dynamic text', () => { - const dynamicFields = { - requestedVersion: 4.0, - returnedVersion: 2.0 - } - const notFoundAlert = new DatasetAlert( - 'warning', - DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, - dynamicFields - ) - cy.mount() +it('renders alerts with correct text', () => { + const draftAlert = new DatasetAlert('info', DatasetAlertMessageKey.DRAFT_VERSION) + const alerts = [draftAlert] - alerts.forEach((alert) => { - cy.findAllByRole('alert').should('contain.text', dynamicFields.requestedVersion) - cy.findAllByRole('alert').should('contain.text', dynamicFields.returnedVersion) + cy.fixture('../../../public/locales/en/dataset.json').then((dataset: DatasetTranslation) => { + cy.mount() + + const alertHeading = dataset.alerts[draftAlert.message].heading + const alertText = removeMarkup(dataset.alerts[draftAlert.message].alertText) + cy.findByText(alertHeading).should('exist') + cy.findByRole('alert').should(($element) => { + // text() removes markup, so we can compare to the expected text + const text = $element.text() + expect(text).to.include(alertText) }) }) }) +it('renders dynamic text', () => { + const dynamicFields = { + requestedVersion: '4.0', + returnedVersion: '2.0' + } + const notFoundAlert = new DatasetAlert( + 'warning', + DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, + dynamicFields + ) + cy.mount() + cy.findByRole('alert').should('contain.text', dynamicFields.requestedVersion) + cy.findByRole('alert').should('contain.text', dynamicFields.returnedVersion) +}) From f4f21cc3fa73f5aecf09095346558eb3af8766ec Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Wed, 11 Oct 2023 11:35:46 -0400 Subject: [PATCH 25/61] fix: add spacing around DatasetAlerts component --- src/sections/dataset/Dataset.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index e506ea54e..2929358dd 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -39,7 +39,14 @@ export function Dataset({ datasetRepository, fileRepository, searchParams }: Dat ) : (
- +
+ +
+ + + + +

{dataset.getTitle()}

From 98bbe41e19db6e5c95bb2ca8d9b4d18ca76bcdeb Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Wed, 18 Oct 2023 11:48:41 -0400 Subject: [PATCH 26/61] fix: remove unneeded heading text --- .../dataset/dataset-alerts/DatasetAlert.stories.tsx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index c9e9a6832..5733afcd1 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -45,15 +45,10 @@ export const VersionNotFound: Story = { export const PrivateUrl: Story = { render: () => { const alerts = [ - new DatasetAlert( - 'info', - DatasetAlertMessageKey.UNPUBLISHED_DATASET, - { - privateUrl: - 'http://localhost:8080/privateurl.xhtml?token=f6815782-1227-4d80-a46d-91621c2d9386' - }, - 'Unpublished Dataset Private URL' - ) + new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, { + privateUrl: + 'http://localhost:8080/privateurl.xhtml?token=f6815782-1227-4d80-a46d-91621c2d9386' + }) ] return ( From 8033dccea2e98d4a8423432f25ad02a35d4efe8c Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 19 Oct 2023 07:59:30 -0400 Subject: [PATCH 27/61] fix: Dataset object in stories --- src/stories/dataset/Dataset.stories.tsx | 10 ++---- .../dataset-alerts/DatasetAlert.stories.tsx | 32 ++++++++++++++++--- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/stories/dataset/Dataset.stories.tsx b/src/stories/dataset/Dataset.stories.tsx index f553dfdb8..255e5a768 100644 --- a/src/stories/dataset/Dataset.stories.tsx +++ b/src/stories/dataset/Dataset.stories.tsx @@ -13,7 +13,6 @@ import { WithDataset } from './WithDataset' import { WithDatasetDraftAsOwner } from './WithDatasetDraftAsOwner' import { WithDatasetNotFound } from './WithDatasetNotFound' import { WithDatasetLoading } from './WithDatasetLoading' -import { DatasetMockDraftVersionRepository } from './DatasetMockDraftVersionRepository' import { WithLoggedInUser } from '../WithLoggedInUser' const meta: Meta = { @@ -36,16 +35,11 @@ export const Default: Story = { export const DraftWithAllDatasetPermissions: Story = { decorators: [WithLayout, WithDatasetDraftAsOwner, WithLoggedInUser, WithFilePermissionsGranted], - render: () => + render: () => } export const LoggedInAsOwner: Story = { decorators: [WithDataset, WithLayout, WithLoggedInUser, WithFilePermissionsGranted], - render: () => ( - - ) + render: () => } export const Loading: Story = { diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index 5733afcd1..098d0ad74 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react' -import { DatasetMockData } from '../DatasetMockData' + import { DatasetAlert, DatasetAlertMessageKey, @@ -9,6 +9,10 @@ import { import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' import { WithI18next } from '../../WithI18next' +import { WithDatasetDraftAsOwner } from '../WithDatasetDraftAsOwner' +import { useDataset } from '../../../sections/dataset/DatasetContext' +import { DatasetMother } from '../../../../tests/component/dataset/domain/models/DatasetMother' + const meta: Meta = { title: 'Sections/Dataset Page/DatasetAlerts', component: DatasetAlerts, @@ -19,9 +23,16 @@ export default meta type Story = StoryObj export const DraftVersion: Story = { + decorators: [WithDatasetDraftAsOwner], render: () => { - const dataset = DatasetMockData({ - version: new DatasetVersion(1, DatasetPublishingStatus.DRAFT, 1, 0) + const dataset = DatasetMother.createRealistic({ + version: new DatasetVersion( + 1, + DatasetPublishingStatus.DRAFT, + true, + false, + DatasetPublishingStatus.DRAFT + ) }) return (
@@ -30,11 +41,22 @@ export const DraftVersion: Story = { ) } } + export const VersionNotFound: Story = { render: () => { - const dataset = DatasetMockData({ - version: new DatasetVersion(1, DatasetPublishingStatus.RELEASED, 1, 0, '3.0') + const dataset = DatasetMother.createRealistic({ + version: new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.RELEASED, + 1, + 0, + '3.0' + ) }) + return (
From 87cefb7d76294bd04b7bf7c31bfca6b19c8fca14 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 19 Oct 2023 08:49:28 -0400 Subject: [PATCH 28/61] fix: lint error --- src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index 098d0ad74..d73a7a856 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -10,7 +10,6 @@ import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetA import { WithI18next } from '../../WithI18next' import { WithDatasetDraftAsOwner } from '../WithDatasetDraftAsOwner' -import { useDataset } from '../../../sections/dataset/DatasetContext' import { DatasetMother } from '../../../../tests/component/dataset/domain/models/DatasetMother' const meta: Meta = { From 2062a4efd75ad276acc82494c78c9a79244e8bf9 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 19 Oct 2023 16:49:24 -0400 Subject: [PATCH 29/61] fix: Add privateUrl Alert, fix logic for Draft Alert --- public/locales/en/dataset.json | 6 +++++- src/dataset/domain/models/Dataset.ts | 23 +++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/public/locales/en/dataset.json b/public/locales/en/dataset.json index 559396afc..736884a79 100644 --- a/public/locales/en/dataset.json +++ b/public/locales/en/dataset.json @@ -66,9 +66,13 @@ "heading": "Information", "alertText": "Version {{requestedVersion}} was not found. This is version {{returnedVersion}}." }, - "unpublishedDataset": { + "shareUnpublishedDataset": { "heading": "Unpublished Dataset Private URL", "alertText": "Privately share this dataset before it is published: {{privateUrl}}" + }, + "unpublishedDataset": { + "heading": "Unpublished Dataset Private URL", + "alertText": "This unpublished dataset is being privately shared." } } } diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index f2d982fde..e456627b0 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -27,6 +27,7 @@ export class DatasetLabel { export enum DatasetAlertMessageKey { DRAFT_VERSION = 'draftVersion', REQUESTED_VERSION_NOT_FOUND = 'requestedVersionNotFound', + SHARE_UNPUBLISHED_DATASET = 'shareUnpublishedDataset', UNPUBLISHED_DATASET = 'unpublishedDataset' } @@ -384,7 +385,10 @@ export class Dataset { } private withAlerts(): void { - if (this.version.publishingStatus === DatasetPublishingStatus.DRAFT) { + if ( + this.version.publishingStatus === DatasetPublishingStatus.DRAFT && + this.permissions.canPublishDataset + ) { this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION)) } if (this.version.requestedVersion) { @@ -392,7 +396,6 @@ export class Dataset { requestedVersion: this.version.requestedVersion, returnedVersion: `${this.version.toString()}` } - this.alerts.push( new DatasetAlert( 'info', @@ -402,10 +405,18 @@ export class Dataset { ) } if (this.privateUrl) { - const dynamicFields = { privateUrl: this.privateUrl } - this.alerts.push( - new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, dynamicFields) - ) + if (this.permissions.canUpdateDataset) { + const dynamicFields = { privateUrl: this.privateUrl } + this.alerts.push( + new DatasetAlert( + 'info', + DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, + dynamicFields + ) + ) + } else { + new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET) + } } } From 04ce3afba7c79fd3b85ff7a31cd5fffc05e5c266 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 19 Oct 2023 16:49:58 -0400 Subject: [PATCH 30/61] fix: Add privateUrlToken to JSDatasetMapper --- .../repositories/DatasetJSDataverseRepository.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index a1409b317..1464847ea 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -44,7 +44,13 @@ export class DatasetJSDataverseRepository implements DatasetRepository { getPrivateUrlDatasetCitation.execute(privateUrlToken) ]) .then(([jsDataset, summaryFieldsNames, citation]: [JSDataset, string[], string]) => - JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames) + JSDatasetMapper.toDataset( + jsDataset, + citation, + summaryFieldsNames, + undefined, + privateUrlToken + ) ) .catch((error: WriteError) => { throw new Error(error.message) From 02f6c1b3b36ba787609d1316d74202cfff1ef9d2 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 11:51:18 -0400 Subject: [PATCH 31/61] refactor: rename privateUrl -> privateUrlToken --- src/dataset/domain/models/Dataset.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index e456627b0..9fdb67ceb 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -333,7 +333,7 @@ export class Dataset { public readonly hasValidTermsOfAccess: boolean, public readonly isValid: boolean, public readonly isReleased: boolean, - public readonly privateUrl?: string + public readonly privateUrlToken?: string ) { this.withLabels() this.withAlerts() @@ -404,9 +404,10 @@ export class Dataset { ) ) } - if (this.privateUrl) { + if (this.privateUrlToken) { if (this.permissions.canUpdateDataset) { - const dynamicFields = { privateUrl: this.privateUrl } + // TODO: set the whole Url, not just the token + const dynamicFields = { privateUrl: this.privateUrlToken } this.alerts.push( new DatasetAlert( 'info', From a4f3694bb1312409aa20e3284ea94e13bc5e07ef Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 11:54:21 -0400 Subject: [PATCH 32/61] fix: add privateUrlToken to DatasetMother. --- tests/component/dataset/domain/models/DatasetMother.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/component/dataset/domain/models/DatasetMother.ts b/tests/component/dataset/domain/models/DatasetMother.ts index 428711053..87fa1cb8e 100644 --- a/tests/component/dataset/domain/models/DatasetMother.ts +++ b/tests/component/dataset/domain/models/DatasetMother.ts @@ -190,7 +190,11 @@ export class DatasetMother { return undefined } - static create(props?: Partial): Dataset { + static createWithPrivateUrlToken(privateUrlToken: string, props?: Partial) { + return this.create(props, privateUrlToken) + } + + static create(props?: Partial, privateUrlToken?: string): Dataset { const dataset = { persistentId: faker.datatype.uuid(), title: faker.lorem.sentence(), @@ -301,7 +305,8 @@ export class DatasetMother { dataset.locks, dataset.hasValidTermsOfAccess, dataset.isValid, - dataset.isReleased + dataset.isReleased, + privateUrlToken ).build() } From fe40b96c821298d776a5a872066af0bc4378b974 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 11:55:29 -0400 Subject: [PATCH 33/61] fix: use new mock data in DatasetAlert.stories.tsx --- .../dataset-alerts/DatasetAlert.stories.tsx | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index d73a7a856..f288c737e 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -9,8 +9,10 @@ import { import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' import { WithI18next } from '../../WithI18next' -import { WithDatasetDraftAsOwner } from '../WithDatasetDraftAsOwner' -import { DatasetMother } from '../../../../tests/component/dataset/domain/models/DatasetMother' +import { + DatasetMother, + DatasetPermissionsMother +} from '../../../../tests/component/dataset/domain/models/DatasetMother' const meta: Meta = { title: 'Sections/Dataset Page/DatasetAlerts', @@ -22,7 +24,6 @@ export default meta type Story = StoryObj export const DraftVersion: Story = { - decorators: [WithDatasetDraftAsOwner], render: () => { const dataset = DatasetMother.createRealistic({ version: new DatasetVersion( @@ -31,7 +32,8 @@ export const DraftVersion: Story = { true, false, DatasetPublishingStatus.DRAFT - ) + ), + permissions: DatasetPermissionsMother.createWithPublishingDatasetAllowed() }) return (
@@ -63,18 +65,51 @@ export const VersionNotFound: Story = { ) } } -export const PrivateUrl: Story = { +export const SharePrivateUrl: Story = { + render: () => { + const dataset = DatasetMother.createWithPrivateUrlToken( + 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb', + { + version: new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.DRAFT, + 1, + 0 + ), + permissions: DatasetPermissionsMother.createWithUpdateDatasetAllowed() + } + ) + + return ( +
+ +
+ ) + } +} +export const UsePrivateUrl: Story = { render: () => { - const alerts = [ - new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, { - privateUrl: - 'http://localhost:8080/privateurl.xhtml?token=f6815782-1227-4d80-a46d-91621c2d9386' - }) - ] + const dataset = DatasetMother.createWithPrivateUrlToken( + 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb', + { + version: new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.DRAFT, + 1, + 0 + ) + } + ) return (
- +
) } From 9fb19915321c44c57c1ba2f5075990d9c331711d Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 13:48:03 -0400 Subject: [PATCH 34/61] fix: add tests to DatasetAlerts.spec.tsx --- .../dataset-alerts/DatasetAlerts.spec.tsx | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 800c0d3e1..e91ccadfc 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -5,6 +5,11 @@ import { DatasetAlert, DatasetAlertMessageKey } from '../../../../../src/dataset/domain/models/Dataset' +import { + DatasetMother, + DatasetPermissionsMother, + DatasetVersionMother +} from '../../../dataset/domain/models/DatasetMother' function removeMarkup(htmlString: string): string { // Use a regular expression to match HTML tags and replace them with an empty string @@ -25,6 +30,10 @@ interface DatasetTranslation { heading: string alertText: string } + shareUnpublishedDataset: { + heading: string + alertText: string + } } } @@ -35,7 +44,7 @@ it('renders the correct number of alerts', () => { requestedVersion: 4.0, returnedVersion: 2.0 }), - new DatasetAlert('info', DatasetAlertMessageKey.UNPUBLISHED_DATASET, { + new DatasetAlert('info', DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, { privateUrl: faker.internet.url() }) ] @@ -84,3 +93,43 @@ it('renders dynamic text', () => { cy.findByRole('alert').should('contain.text', dynamicFields.requestedVersion) cy.findByRole('alert').should('contain.text', dynamicFields.returnedVersion) }) +it('shows draft alert if version is DRAFT', () => { + const dataset = DatasetMother.create({ + version: DatasetVersionMother.createDraftAsLatestVersion(), + permissions: DatasetPermissionsMother.createWithPublishingDatasetAllowed() + }) + + cy.customMount() + + cy.findByRole('alert').should('contain.text', 'draft') +}) +it('does not show draft alert if version is RELEASED', () => { + const dataset = DatasetMother.create({ + version: DatasetVersionMother.createReleased(), + permissions: DatasetPermissionsMother.createWithPublishingDatasetAllowed() + }) + + cy.customMount() + cy.findByRole('alert').should('not.exist') +}) + +it('shows draft & share private url message if privateUrlToken exists', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((datasetText: DatasetTranslation) => { + const privateUrlToken = '12345' + const dataset = DatasetMother.createWithPrivateUrlToken(privateUrlToken, { + version: DatasetVersionMother.createDraftAsLatestVersion(), + permissions: DatasetPermissionsMother.createWithAllAllowed() + }) + cy.customMount() + const expectedMessageKeys = [ + DatasetAlertMessageKey.DRAFT_VERSION, + DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET + ] + cy.findAllByRole('alert').should('have.length', 2) + cy.findAllByRole('alert').each(($alert, index) => { + const messageKey = expectedMessageKeys[index] + const itemText = datasetText.alerts[messageKey] + cy.wrap($alert).findByText(itemText.heading).should('exist') + }) + }) +}) From 671704d2053d457892cca959f323fd7a267b9b36 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 14:58:09 -0400 Subject: [PATCH 35/61] fix: alerts.push() Unpublished Dataset --- src/dataset/domain/models/Dataset.ts | 2 +- .../dataset-alerts/DatasetAlert.stories.tsx | 7 +------ .../dataset-alerts/DatasetAlerts.spec.tsx | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index 9fdb67ceb..7e7385b91 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -416,7 +416,7 @@ export class Dataset { ) ) } else { - new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET) + this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET)) } } } diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index f288c737e..ddc9a77b5 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -1,11 +1,6 @@ import type { Meta, StoryObj } from '@storybook/react' -import { - DatasetAlert, - DatasetAlertMessageKey, - DatasetPublishingStatus, - DatasetVersion -} from '../../../dataset/domain/models/Dataset' +import { DatasetPublishingStatus, DatasetVersion } from '../../../dataset/domain/models/Dataset' import { DatasetAlerts } from '../../../sections/dataset/dataset-alerts/DatasetAlerts' import { WithI18next } from '../../WithI18next' diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index e91ccadfc..103fb63b0 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -133,3 +133,22 @@ it('shows draft & share private url message if privateUrlToken exists', () => { }) }) }) +it('shows private url message only if privateUrlToken exists and user cannot edit', () => { + cy.fixture('../../../public/locales/en/dataset.json').then((datasetText: DatasetTranslation) => { + const privateUrlToken = '12345' + const dataset = DatasetMother.createWithPrivateUrlToken(privateUrlToken, { + version: DatasetVersionMother.createDraftAsLatestVersion(), + permissions: DatasetPermissionsMother.createWithNoneAllowed() + }) + cy.customMount() + const expectedMessageKeys = [DatasetAlertMessageKey.UNPUBLISHED_DATASET] + + cy.findAllByRole('alert').should('have.length', 1) + cy.findAllByRole('alert').each(($alert, index) => { + const messageKey = expectedMessageKeys[index] + const itemText = datasetText.alerts[messageKey] + cy.wrap($alert).findByText(itemText.heading).should('exist') + expect($alert.text()).to.include(itemText.alertText) + }) + }) +}) From b8bf04dd1f476ee1edb1c521e0d0705406791bf7 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 15:06:27 -0400 Subject: [PATCH 36/61] fix: remove unneeded loop --- .../sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 103fb63b0..54236941d 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -141,12 +141,11 @@ it('shows private url message only if privateUrlToken exists and user cannot e permissions: DatasetPermissionsMother.createWithNoneAllowed() }) cy.customMount() - const expectedMessageKeys = [DatasetAlertMessageKey.UNPUBLISHED_DATASET] + const expectedMessageKey = DatasetAlertMessageKey.UNPUBLISHED_DATASET cy.findAllByRole('alert').should('have.length', 1) - cy.findAllByRole('alert').each(($alert, index) => { - const messageKey = expectedMessageKeys[index] - const itemText = datasetText.alerts[messageKey] + cy.findByRole('alert').then(($alert) => { + const itemText = datasetText.alerts[expectedMessageKey] cy.wrap($alert).findByText(itemText.heading).should('exist') expect($alert.text()).to.include(itemText.alertText) }) From 844c6de6718ef3fb4a2a6ec5719e2f2880326dc9 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 20 Oct 2023 15:28:43 -0400 Subject: [PATCH 37/61] fix: add DatasetAlert for VersionNotFoundShowDraft --- public/locales/en/dataset.json | 6 +++- src/dataset/domain/models/Dataset.ts | 34 +++++++++++++------ .../dataset-alerts/DatasetAlert.stories.tsx | 25 +++++++++++++- 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/public/locales/en/dataset.json b/public/locales/en/dataset.json index 736884a79..916ab30b4 100644 --- a/public/locales/en/dataset.json +++ b/public/locales/en/dataset.json @@ -63,9 +63,13 @@ "alertText": "When ready for sharing, please publish it so that others can see these changes" }, "requestedVersionNotFound": { - "heading": "Information", + "heading": "Info", "alertText": "Version {{requestedVersion}} was not found. This is version {{returnedVersion}}." }, + "requestedVersionNotFoundShowDraft": { + "heading": "Info", + "alertText": "Version {{requestedVersion}} was not found. This is the DRAFT version." + }, "shareUnpublishedDataset": { "heading": "Unpublished Dataset Private URL", "alertText": "Privately share this dataset before it is published: {{privateUrl}}" diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index 7e7385b91..cb93a313b 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -27,6 +27,7 @@ export class DatasetLabel { export enum DatasetAlertMessageKey { DRAFT_VERSION = 'draftVersion', REQUESTED_VERSION_NOT_FOUND = 'requestedVersionNotFound', + REQUESTED_VERSION_NOT_FOUND_SHOW_DRAFT = 'requestedVersionNotFoundShowDraft', SHARE_UNPUBLISHED_DATASET = 'shareUnpublishedDataset', UNPUBLISHED_DATASET = 'unpublishedDataset' } @@ -392,17 +393,30 @@ export class Dataset { this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.DRAFT_VERSION)) } if (this.version.requestedVersion) { - const dynamicFields = { - requestedVersion: this.version.requestedVersion, - returnedVersion: `${this.version.toString()}` - } - this.alerts.push( - new DatasetAlert( - 'info', - DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, - dynamicFields + if (this.version.latestVersionStatus == DatasetPublishingStatus.RELEASED) { + const dynamicFields = { + requestedVersion: this.version.requestedVersion, + returnedVersion: `${this.version.toString()}` + } + this.alerts.push( + new DatasetAlert( + 'warning', + DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND, + dynamicFields + ) ) - ) + } else { + const dynamicFields = { + requestedVersion: this.version.requestedVersion + } + this.alerts.push( + new DatasetAlert( + 'warning', + DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND_SHOW_DRAFT, + dynamicFields + ) + ) + } } if (this.privateUrlToken) { if (this.permissions.canUpdateDataset) { diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index ddc9a77b5..5d27cce60 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -60,6 +60,28 @@ export const VersionNotFound: Story = { ) } } +export const VersionNotFoundShowDraft: Story = { + render: () => { + const dataset = DatasetMother.createRealistic({ + version: new DatasetVersion( + 1, + DatasetPublishingStatus.DRAFT, + true, + false, + DatasetPublishingStatus.DRAFT, + 1, + 0, + '3.0' + ) + }) + + return ( +
+ +
+ ) + } +} export const SharePrivateUrl: Story = { render: () => { const dataset = DatasetMother.createWithPrivateUrlToken( @@ -98,7 +120,8 @@ export const UsePrivateUrl: Story = { DatasetPublishingStatus.DRAFT, 1, 0 - ) + ), + permissions: DatasetPermissionsMother.createWithNoneAllowed() } ) From e340b0657626db01c6d0bd27e914548d257351a3 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Sat, 21 Oct 2023 08:27:19 -0400 Subject: [PATCH 38/61] fix: add PrivateUrl alert to DatasetAnonymizedView story --- src/stories/dataset/Dataset.stories.tsx | 3 ++- src/stories/dataset/WithDatasetPrivateUrl.tsx | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/stories/dataset/WithDatasetPrivateUrl.tsx diff --git a/src/stories/dataset/Dataset.stories.tsx b/src/stories/dataset/Dataset.stories.tsx index 255e5a768..ab3c7e26e 100644 --- a/src/stories/dataset/Dataset.stories.tsx +++ b/src/stories/dataset/Dataset.stories.tsx @@ -3,6 +3,7 @@ import { WithI18next } from '../WithI18next' import { WithLayout } from '../WithLayout' import { Dataset } from '../../sections/dataset/Dataset' import { WithAnonymizedView } from './WithAnonymizedView' +import { WithDatasetPrivateUrl } from './WithDatasetPrivateUrl' import { FileMockRepository } from '../files/FileMockRepository' import { WithCitationMetadataBlockInfo } from './WithCitationMetadataBlockInfo' import { FileMockNoDataRepository } from '../files/FileMockNoDataRepository' @@ -53,7 +54,7 @@ export const DatasetNotFound: Story = { } export const DatasetAnonymizedView: Story = { - decorators: [WithLayout, WithAnonymizedView, WithDataset, WithFilePermissionsGranted], + decorators: [WithLayout, WithAnonymizedView, WithDatasetPrivateUrl, WithFilePermissionsGranted], render: () => } diff --git a/src/stories/dataset/WithDatasetPrivateUrl.tsx b/src/stories/dataset/WithDatasetPrivateUrl.tsx new file mode 100644 index 000000000..5aa2e6dec --- /dev/null +++ b/src/stories/dataset/WithDatasetPrivateUrl.tsx @@ -0,0 +1,26 @@ +import { StoryFn } from '@storybook/react' +import { DatasetProvider } from '../../sections/dataset/DatasetProvider' +import { DatasetRepository } from '../../dataset/domain/repositories/DatasetRepository' +import { Dataset } from '../../dataset/domain/models/Dataset' +import { DatasetMother } from '../../../tests/component/dataset/domain/models/DatasetMother' + +export const WithDatasetPrivateUrl = (Story: StoryFn) => { + const datasetRepository = {} as DatasetRepository + datasetRepository.getByPrivateUrlToken = ( + // eslint-disable-next-line unused-imports/no-unused-vars + privateUrlToken: string + ): Promise => { + return new Promise((resolve) => { + setTimeout(() => { + resolve(DatasetMother.createWithPrivateUrlToken(privateUrlToken)) + }, 1000) + }) + } + return ( + + + + ) +} From 619bdf08b24e7b1b3adfef7092d4ff94a9c90062 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Sat, 21 Oct 2023 09:00:33 -0400 Subject: [PATCH 39/61] fix: type safety errors, JSDatasetMapper.spec.ts --- .../mappers/JSDatasetMapper.spec.ts | 6 ++--- .../dataset-alerts/DatasetAlerts.spec.tsx | 26 +++++++------------ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts index e4a857bc1..15df89047 100644 --- a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts +++ b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts @@ -148,9 +148,9 @@ const expectedDatasetAlternateVersion = { dynamicFields: undefined }, { - message: 'requestedVersionNotFound', - variant: 'info', - dynamicFields: { requestedVersion: '4.0', returnedVersion: '0.0' } + message: 'requestedVersionNotFoundShowDraft', + variant: 'warning', + dynamicFields: { requestedVersion: '4.0' } } ], summaryFields: [ diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 54236941d..698b94b1c 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -16,24 +16,18 @@ function removeMarkup(htmlString: string): string { return htmlString.replace(/<\/?[^>]+(>|$)/g, '') } +interface AlertTranslation { + heading: string + alertText: string +} + interface DatasetTranslation { alerts: { - draftVersion: { - heading: string - alertText: string - } - requestedVersionNotFound: { - heading: string - alertText: string - } - unpublishedDataset: { - heading: string - alertText: string - } - shareUnpublishedDataset: { - heading: string - alertText: string - } + [DatasetAlertMessageKey.DRAFT_VERSION]: AlertTranslation + [DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND]: AlertTranslation + [DatasetAlertMessageKey.REQUESTED_VERSION_NOT_FOUND_SHOW_DRAFT]: AlertTranslation + [DatasetAlertMessageKey.UNPUBLISHED_DATASET]: AlertTranslation + [DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET]: AlertTranslation } } From 8b0d7fef109c635f26872587c376a87b4d2b19db Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Sat, 21 Oct 2023 11:25:35 -0400 Subject: [PATCH 40/61] fix: top margin for DatasetAlerts.module.scss --- src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss index ec77535e7..7413b02e8 100644 --- a/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss @@ -1,3 +1,4 @@ .container > * { margin-right: 0.5em; + margin-top: 1em; } \ No newline at end of file From 0e9deeb9f3cd5c56b8ce8fbe5b14655494e22142 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Sat, 21 Oct 2023 11:30:36 -0400 Subject: [PATCH 41/61] fix: lint error DatasetAlerts.module.scss --- src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss index 7413b02e8..3a63a82e6 100644 --- a/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss +++ b/src/sections/dataset/dataset-alerts/DatasetAlerts.module.scss @@ -1,4 +1,4 @@ .container > * { - margin-right: 0.5em; margin-top: 1em; + margin-right: 0.5em; } \ No newline at end of file From a8873b941730ca1763922639c069af1e5a80558d Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 23 Oct 2023 17:11:58 +0200 Subject: [PATCH 42/61] fix: dev-env add package-lock.json before building the design system --- dev.Dockerfile | 1 + package-lock.json | 929 +++++++--------------------------------------- 2 files changed, 143 insertions(+), 787 deletions(-) diff --git a/dev.Dockerfile b/dev.Dockerfile index 8cea85333..5e474faf8 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -4,6 +4,7 @@ RUN apk --no-cache add python3 make g++ WORKDIR /usr/src/app/packages/design-system COPY ./packages/design-system ./ +COPY package-lock.json ./ RUN npm install RUN npm run build diff --git a/package-lock.json b/package-lock.json index 7a0671542..4615b6b43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5057,17 +5057,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "devOptional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -16046,28 +16035,6 @@ "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, - "node_modules/@types/eslint": { - "version": "8.44.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", - "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", @@ -16751,181 +16718,6 @@ "vite": "^4.1.0-beta.0" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, "node_modules/@yarnpkg/core": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@yarnpkg/core/-/core-2.4.0.tgz", @@ -17419,6 +17211,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -17443,58 +17236,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/all-contributors-cli": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.19.0.tgz", @@ -17614,6 +17355,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -17650,7 +17392,8 @@ "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, "node_modules/are-we-there-yet": { "version": "3.0.1", @@ -18314,145 +18057,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "dev": true, - "peer": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "peer": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "peer": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "peer": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -19025,7 +18629,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true + "dev": true }, "node_modules/builtins": { "version": "5.0.1", @@ -19288,6 +18892,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -19302,6 +18907,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -19614,16 +19220,6 @@ "chromatic-cli": "bin/main.cjs" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -19757,6 +19353,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -20347,13 +19944,6 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "peer": true - }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -20366,7 +19956,8 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true }, "node_modules/compare-func": { "version": "2.0.0", @@ -20878,6 +20469,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -21226,6 +20818,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -21399,6 +20992,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, @@ -22007,7 +21601,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -22022,6 +21617,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -22031,6 +21627,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -22059,20 +21656,6 @@ "objectorarray": "^1.0.5" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -22312,7 +21895,8 @@ "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, "node_modules/esbuild": { "version": "0.18.20", @@ -22992,16 +22576,6 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -23658,6 +23232,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -23674,6 +23249,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -23686,6 +23262,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -23697,6 +23274,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -23711,6 +23289,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -23722,6 +23301,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -24015,6 +23595,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, "funding": [ { "type": "github", @@ -24164,6 +23745,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -25113,6 +24695,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -25128,6 +24711,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { "node": ">=8" } @@ -25220,7 +24804,8 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/html-parse-stringify": { "version": "3.0.1", @@ -25642,6 +25227,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -26043,6 +25629,7 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -26166,6 +25753,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -26441,6 +26029,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" }, @@ -26514,7 +26103,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unc-path": { "version": "1.0.0", @@ -26636,7 +26226,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", @@ -26667,6 +26258,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, "engines": { "node": ">=8" } @@ -26675,6 +26267,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, "dependencies": { "append-transform": "^2.0.0" }, @@ -26717,6 +26310,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -26733,6 +26327,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { "node": ">=8" } @@ -26741,6 +26336,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -26752,6 +26348,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -26760,6 +26357,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -26773,6 +26371,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, "dependencies": { "semver": "^7.5.3" }, @@ -26787,6 +26386,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -26800,6 +26400,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -30819,16 +30420,6 @@ "node": ">=4" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -30900,7 +30491,8 @@ "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true }, "node_modules/lodash.foreach": { "version": "4.5.0", @@ -31165,6 +30757,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -31179,6 +30772,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -32435,6 +32029,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, "funding": [ { "type": "github", @@ -32681,6 +32276,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -33347,6 +32943,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -33386,12 +32983,14 @@ "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -33404,6 +33003,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -33416,6 +33016,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -33430,6 +33031,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -33441,6 +33043,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -33455,6 +33058,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -33466,6 +33070,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -33477,6 +33082,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -34055,6 +33661,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -34405,6 +34012,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -34412,7 +34020,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.1", @@ -34711,6 +34320,7 @@ "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -35325,6 +34935,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, "dependencies": { "fromentries": "^1.2.0" }, @@ -35771,16 +35382,6 @@ "url": "https://opencollective.com/ramda" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -35839,6 +35440,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -35939,6 +35541,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -36734,6 +36337,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, "dependencies": { "es6-error": "^4.0.1" }, @@ -37113,6 +36717,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -37129,7 +36734,8 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requireg": { "version": "0.2.2", @@ -37173,6 +36779,7 @@ "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -37315,6 +36922,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -37329,6 +36937,7 @@ "version": "3.29.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", + "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -37457,7 +37066,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "dev": true }, "node_modules/sass": { "version": "1.58.1", @@ -37491,71 +37100,16 @@ "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "peer": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "loose-envify": "^1.1.0" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -37570,6 +37124,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -37580,7 +37135,8 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/send": { "version": "0.18.0", @@ -37627,16 +37183,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -37683,7 +37229,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-function-name": { "version": "2.0.1", @@ -37773,6 +37320,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -37784,6 +37332,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -37830,7 +37379,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/signale": { "version": "1.4.0", @@ -38353,6 +37903,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -38477,6 +38028,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -38493,6 +38045,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -38505,6 +38058,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -38917,6 +38471,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -39022,6 +38577,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -39046,6 +38602,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "engines": { "node": ">=8" } @@ -40567,7 +40124,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", - "devOptional": true, + "dev": true, "dependencies": { "postcss": "^7.0.2" } @@ -40576,13 +40133,13 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "devOptional": true + "dev": true }, "node_modules/sugarss/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "devOptional": true, + "dev": true, "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -40623,6 +40180,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -40937,141 +40495,6 @@ "node": ">=8" } }, - "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", - "devOptional": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "devOptional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "peer": true - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -41721,6 +41144,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -42639,6 +42063,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.5.tgz", "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==", + "dev": true, "dependencies": { "esbuild": "^0.16.14", "postcss": "^8.4.21", @@ -42772,6 +42197,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -42787,6 +42213,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -42802,6 +42229,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -42817,6 +42245,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -42832,6 +42261,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -42847,6 +42277,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -42862,6 +42293,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -42877,6 +42309,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42892,6 +42325,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42907,6 +42341,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42922,6 +42357,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42937,6 +42373,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42952,6 +42389,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42967,6 +42405,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42982,6 +42421,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -42997,6 +42437,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -43012,6 +42453,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -43027,6 +42469,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -43042,6 +42485,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -43057,6 +42501,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43072,6 +42517,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43087,6 +42533,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -43099,6 +42546,7 @@ "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -43344,54 +42792,6 @@ "node": ">=12" } }, - "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -43407,62 +42807,6 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", - "dev": true, - "peer": true - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true, - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -43513,6 +42857,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -43555,7 +42900,8 @@ "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.11", @@ -43914,7 +43260,8 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/yallist": { "version": "3.1.1", @@ -43934,6 +43281,7 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -43964,6 +43312,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -43974,6 +43323,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -43986,6 +43336,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -43997,6 +43348,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -44011,6 +43363,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -44022,6 +43375,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -44035,6 +43389,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" From 22ca6af358670584a7816aea64edbc7b6651ebba Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 23 Oct 2023 17:29:38 +0200 Subject: [PATCH 43/61] fix: js-dataverse error types --- .../repositories/DatasetJSDataverseRepository.ts | 8 ++++---- src/files/infrastructure/FileJSDataverseRepository.ts | 10 +++++----- .../repositories/DataverseInfoJSDataverseRepository.ts | 4 ++-- .../MetadataBlockInfoJSDataverseRepository.ts | 6 +++++- .../repositories/UserJSDataverseRepository.ts | 3 +-- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index ea25c0aa2..78201a14c 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -4,10 +4,10 @@ import { getDataset, getDatasetCitation, getDatasetSummaryFieldNames, - WriteError, Dataset as JSDataset, getPrivateUrlDataset, - getPrivateUrlDatasetCitation + getPrivateUrlDatasetCitation, + ReadError } from '@iqss/dataverse-client-javascript' import { JSDatasetMapper } from '../mappers/JSDatasetMapper' @@ -25,7 +25,7 @@ export class DatasetJSDataverseRepository implements DatasetRepository { .then(([jsDataset, summaryFieldsNames, citation]: [JSDataset, string[], string]) => JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames) ) - .catch((error: WriteError) => { + .catch((error: ReadError) => { if (!version) { throw new Error(error.message) } @@ -42,7 +42,7 @@ export class DatasetJSDataverseRepository implements DatasetRepository { .then(([jsDataset, summaryFieldsNames, citation]: [JSDataset, string[], string]) => JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames) ) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } diff --git a/src/files/infrastructure/FileJSDataverseRepository.ts b/src/files/infrastructure/FileJSDataverseRepository.ts index d98b5d241..752518ac4 100644 --- a/src/files/infrastructure/FileJSDataverseRepository.ts +++ b/src/files/infrastructure/FileJSDataverseRepository.ts @@ -10,7 +10,7 @@ import { getDatasetFilesTotalDownloadSize, getFileDownloadCount, getFileUserPermissions, - WriteError + ReadError } from '@iqss/dataverse-client-javascript' import { FileCriteria } from '../domain/models/FileCriteria' import { DomainFileMapper } from './mappers/DomainFileMapper' @@ -39,7 +39,7 @@ export class FileJSDataverseRepository implements FileRepository { ) .then((jsFiles) => jsFiles.map((jsFile) => JSFileMapper.toFile(jsFile, datasetVersion))) .then((files) => FileJSDataverseRepository.getAllWithDownloadCount(files)) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } @@ -77,7 +77,7 @@ export class FileJSDataverseRepository implements FileRepository { .then((jsFilesCountInfo) => { return JSFileMapper.toFilesCountInfo(jsFilesCountInfo) }) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } @@ -88,7 +88,7 @@ export class FileJSDataverseRepository implements FileRepository { ): Promise { return getDatasetFilesTotalDownloadSize .execute(datasetPersistentId, datasetVersion.toString(), FileDownloadSizeMode.ARCHIVAL) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } @@ -99,7 +99,7 @@ export class FileJSDataverseRepository implements FileRepository { .then((jsFileUserPermissions) => JSFileMapper.toFileUserPermissions(id, jsFileUserPermissions) ) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } diff --git a/src/info/infrastructure/repositories/DataverseInfoJSDataverseRepository.ts b/src/info/infrastructure/repositories/DataverseInfoJSDataverseRepository.ts index 25024c165..f02dde979 100644 --- a/src/info/infrastructure/repositories/DataverseInfoJSDataverseRepository.ts +++ b/src/info/infrastructure/repositories/DataverseInfoJSDataverseRepository.ts @@ -1,4 +1,4 @@ -import { getDataverseVersion, WriteError } from '@iqss/dataverse-client-javascript' +import { getDataverseVersion, ReadError } from '@iqss/dataverse-client-javascript' import { DataverseInfoRepository } from '../../domain/repositories/DataverseInfoRepository' import { DataverseVersion } from '../../domain/models/DataverseVersion' @@ -22,7 +22,7 @@ export class DataverseInfoJSDataverseRepository implements DataverseInfoReposito .then((jsDataverseDataverseVersion: JSDataverseDataverseVersion) => DataverseInfoJSDataverseRepository.formatVersion(jsDataverseDataverseVersion) ) - .catch((error: WriteError) => { + .catch((error: ReadError) => { throw new Error(error.message) }) } diff --git a/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts b/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts index 38e5bb4d4..2071898c9 100644 --- a/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts +++ b/src/metadata-block-info/infrastructure/repositories/MetadataBlockInfoJSDataverseRepository.ts @@ -2,7 +2,8 @@ import { MetadataBlockInfoRepository } from '../../domain/repositories/MetadataB import { MetadataBlockInfo } from '../../domain/models/MetadataBlockInfo' import { getMetadataBlockByName, - MetadataBlock as JSMetadataBlockInfo + MetadataBlock as JSMetadataBlockInfo, + ReadError } from '@iqss/dataverse-client-javascript' import { JSMetadataBlockInfoMapper } from '../mappers/JSMetadataBlockInfoMapper' @@ -13,5 +14,8 @@ export class MetadataBlockInfoJSDataverseRepository implements MetadataBlockInfo .then((jsMetadataBlockInfo: JSMetadataBlockInfo) => JSMetadataBlockInfoMapper.toMetadataBlockInfo(jsMetadataBlockInfo) ) + .catch((error: ReadError) => { + throw new Error(error.message) + }) } } diff --git a/src/users/infrastructure/repositories/UserJSDataverseRepository.ts b/src/users/infrastructure/repositories/UserJSDataverseRepository.ts index 5e788f614..69ea18d64 100644 --- a/src/users/infrastructure/repositories/UserJSDataverseRepository.ts +++ b/src/users/infrastructure/repositories/UserJSDataverseRepository.ts @@ -3,8 +3,7 @@ import { AuthenticatedUser, getCurrentAuthenticatedUser } from '@iqss/dataverse-client-javascript/dist/users' -import { ReadError } from '@iqss/dataverse-client-javascript/dist/core' -import { logout, WriteError } from '@iqss/dataverse-client-javascript' +import { logout, ReadError, WriteError } from '@iqss/dataverse-client-javascript' import { UserRepository } from '../../domain/repositories/UserRepository' export class UserJSDataverseRepository implements UserRepository { From 20f0ecf33a8332736f53dfaaba7872d6dfb32389 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 23 Oct 2023 13:47:18 -0400 Subject: [PATCH 44/61] fix: make alert box wider --- src/sections/dataset/Dataset.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index 686aeabf5..ac02c8e04 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -40,7 +40,7 @@ export function Dataset({ fileRepository }: DatasetProps) {
-
+ From 57b57a3fe5636ff1ce44a008b912b9ab4129b0f0 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 23 Oct 2023 16:47:54 -0400 Subject: [PATCH 45/61] fix: add 'privateUrl' to Dataset domain model --- src/dataset/domain/models/Dataset.ts | 28 ++++++++--------- .../dataset-alerts/DatasetAlert.stories.tsx | 31 +++++++++---------- .../dataset/domain/models/DatasetMother.ts | 1 + .../mappers/JSDatasetMapper.spec.ts | 4 ++- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index cb93a313b..cf1e7f8dc 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -289,7 +289,8 @@ export class Dataset { public readonly locks: DatasetLock[], public readonly hasValidTermsOfAccess: boolean, public readonly isValid: boolean, - public readonly isReleased: boolean + public readonly isReleased: boolean, + public readonly privateUrl?: string ) {} public getTitle(): string { @@ -334,6 +335,7 @@ export class Dataset { public readonly hasValidTermsOfAccess: boolean, public readonly isValid: boolean, public readonly isReleased: boolean, + public readonly privateUrl?: string, public readonly privateUrlToken?: string ) { this.withLabels() @@ -386,6 +388,9 @@ export class Dataset { } private withAlerts(): void { + console.log( + 'withAlerts, privateUrl ' + this.privateUrl + ' privateUrlToken: ' + this.privateUrlToken + ) if ( this.version.publishingStatus === DatasetPublishingStatus.DRAFT && this.permissions.canPublishDataset @@ -418,20 +423,15 @@ export class Dataset { ) } } + if (this.privateUrl && !this.privateUrlToken) { + const dynamicFields = { privateUrl: this.privateUrl } + this.alerts.push( + new DatasetAlert('info', DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, dynamicFields) + ) + } + if (this.privateUrlToken) { - if (this.permissions.canUpdateDataset) { - // TODO: set the whole Url, not just the token - const dynamicFields = { privateUrl: this.privateUrlToken } - this.alerts.push( - new DatasetAlert( - 'info', - DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, - dynamicFields - ) - ) - } else { - this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET)) - } + this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET)) } } diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index 5d27cce60..56aacf802 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -84,21 +84,20 @@ export const VersionNotFoundShowDraft: Story = { } export const SharePrivateUrl: Story = { render: () => { - const dataset = DatasetMother.createWithPrivateUrlToken( - 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb', - { - version: new DatasetVersion( - 1, - DatasetPublishingStatus.RELEASED, - true, - false, - DatasetPublishingStatus.DRAFT, - 1, - 0 - ), - permissions: DatasetPermissionsMother.createWithUpdateDatasetAllowed() - } - ) + const dataset = DatasetMother.createRealistic({ + version: new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.DRAFT, + 1, + 0 + ), + permissions: DatasetPermissionsMother.createWithUpdateDatasetAllowed(), + privateUrl: + 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb' + }) return (
@@ -110,7 +109,7 @@ export const SharePrivateUrl: Story = { export const UsePrivateUrl: Story = { render: () => { const dataset = DatasetMother.createWithPrivateUrlToken( - 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb', + 'cd943c75-1cc7-4c1d-9717-98141d65d5cb', { version: new DatasetVersion( 1, diff --git a/tests/component/dataset/domain/models/DatasetMother.ts b/tests/component/dataset/domain/models/DatasetMother.ts index 87fa1cb8e..9a1fc483a 100644 --- a/tests/component/dataset/domain/models/DatasetMother.ts +++ b/tests/component/dataset/domain/models/DatasetMother.ts @@ -306,6 +306,7 @@ export class DatasetMother { dataset.hasValidTermsOfAccess, dataset.isValid, dataset.isReleased, + dataset.privateUrl, privateUrlToken ).build() } diff --git a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts index 15df89047..b5ffb6aa6 100644 --- a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts +++ b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts @@ -118,7 +118,8 @@ const expectedDataset = { locks: [], hasValidTermsOfAccess: true, isValid: true, - isReleased: false + isReleased: false, + privateUrl: undefined } const expectedDatasetAlternateVersion = { persistentId: 'doi:10.5072/FK2/B4B2MJ', @@ -137,6 +138,7 @@ const expectedDatasetAlternateVersion = { hasValidTermsOfAccess: true, isReleased: false, isValid: true, + privateUrl: undefined, labels: [ { semanticMeaning: 'dataset', value: 'Draft' }, { semanticMeaning: 'warning', value: 'Unpublished' } From fccce0e684f303d73d3bf6bcc2ea49901c3b6196 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 23 Oct 2023 16:52:49 -0400 Subject: [PATCH 46/61] fix: remove console.log() --- src/dataset/domain/models/Dataset.ts | 3 --- .../dataset/infrastructure/mappers/JSDatasetMapper.spec.ts | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index cf1e7f8dc..a8c5384ec 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -388,9 +388,6 @@ export class Dataset { } private withAlerts(): void { - console.log( - 'withAlerts, privateUrl ' + this.privateUrl + ' privateUrlToken: ' + this.privateUrlToken - ) if ( this.version.publishingStatus === DatasetPublishingStatus.DRAFT && this.permissions.canPublishDataset diff --git a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts index b5ffb6aa6..cf04a2edc 100644 --- a/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts +++ b/tests/component/dataset/infrastructure/mappers/JSDatasetMapper.spec.ts @@ -215,8 +215,6 @@ describe('JS Dataset Mapper', () => { datasetSummaryFields, '4.0' ) - console.log('mapped: ' + JSON.stringify(mappedWithAlternate)) - console.log('expected: ' + JSON.stringify(expectedDatasetAlternateVersion)) expect(expectedDatasetAlternateVersion).to.deep.equal(mappedWithAlternate) }) From 52e4f07da0307ba8576287e0ef6ab047fc75c560 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 26 Oct 2023 10:25:05 +0200 Subject: [PATCH 47/61] feat(DownloadFiles): add button component --- src/files/domain/models/File.ts | 4 + .../download-files/DownloadFilesButton.tsx | 63 ++++++++++++ .../DownloadFilesButton.stories.tsx | 21 ++++ .../files/domain/models/FileMother.ts | 4 +- .../DownloadFilesButton.spec.tsx | 96 +++++++++++++++++++ 5 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx create mode 100644 src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx create mode 100644 tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx diff --git a/src/files/domain/models/File.ts b/src/files/domain/models/File.ts index 41810f079..624903b07 100644 --- a/src/files/domain/models/File.ts +++ b/src/files/domain/models/File.ts @@ -179,4 +179,8 @@ export class File { } return false } + + get isTabularData(): boolean { + return this.tabularData !== undefined + } } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx new file mode 100644 index 000000000..09374b79c --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx @@ -0,0 +1,63 @@ +import { File } from '../../../../../../files/domain/models/File' +import { useDataset } from '../../../../DatasetContext' +import { Button, DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' + +interface DownloadFilesButtonProps { + files: File[] +} + +const MINIMUM_FILES_COUNT_TO_SHOW_DOWNLOAD_FILES_BUTTON = 1 +export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { + const { dataset } = useDataset() + + if ( + files.length < MINIMUM_FILES_COUNT_TO_SHOW_DOWNLOAD_FILES_BUTTON || + !dataset?.permissions.canDownloadFiles + ) { + return <> + } + + if (files.some((file) => file.isTabularData)) { + return ( + + Original Format + Archival Format (.tab) + + ) + } + + return +} + +// Original: +// < div +// jsf:id = "downloadButtonBlockNormal" +// className = "btn-group" +// jsf:rendered = "#{(!(empty DatasetPage.workingVersion.fileMetadatas) +// and +// DatasetPage.workingVersion.fileMetadatas.size() > 1 +// ) +// and +// DatasetPage.downloadButtonAvailable +// and ! +// DatasetPage.isVersionHasTabular() +// } +// "> +// < p +// : +// commandLink +// styleClass = "btn btn-default btn-download" +// disabled = "#{false and DatasetPage.lockedFromDownload}" +// onclick = "if (!testFilesSelected()) return false;" +// action = "#{DatasetPage.startDownloadSelectedOriginal()}" +// update = "@form" +// oncomplete = "showPopup();" > +// < f +// : +// setPropertyActionListener +// target = "#{DatasetPage.fileMetadataForAction}" +// value = "#{null}" / > +// < span +// className = "glyphicon glyphicon-download-alt" / > #{bundle.download} +// < /p:commandLink> +//
diff --git a/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx new file mode 100644 index 000000000..e7649f520 --- /dev/null +++ b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx @@ -0,0 +1,21 @@ +import { Meta, StoryObj } from '@storybook/react' +import { EditFilesMenu } from '../../../../../../sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu' +import { WithI18next } from '../../../../../WithI18next' +import { WithSettings } from '../../../../../WithSettings' +import { WithLoggedInUser } from '../../../../../WithLoggedInUser' +import { WithDatasetAllPermissionsGranted } from '../../../../WithDatasetAllPermissionsGranted' +import { FileMother } from '../../../../../../../tests/component/files/domain/models/FileMother' +import { DownloadFilesButton } from '../../../../../../sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton' + +const meta: Meta = { + title: 'Sections/Dataset Page/DatasetFiles/FilesTable/DownloadFilesButton', + component: EditFilesMenu, + decorators: [WithI18next, WithSettings, WithLoggedInUser, WithDatasetAllPermissionsGranted] +} + +export default meta +type Story = StoryObj + +export const NonTabularFiles: Story = { + render: () => +} diff --git a/tests/component/files/domain/models/FileMother.ts b/tests/component/files/domain/models/FileMother.ts index 8952971f6..7b238d98d 100644 --- a/tests/component/files/domain/models/FileMother.ts +++ b/tests/component/files/domain/models/FileMother.ts @@ -144,8 +144,8 @@ export class FileMother { ) } - static createMany(quantity: number): File[] { - return Array.from({ length: quantity }).map(() => this.create()) + static createMany(quantity: number, props?: Partial): File[] { + return Array.from({ length: quantity }).map(() => this.create(props)) } static createDefault(props?: Partial): File { diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx new file mode 100644 index 000000000..c3d8ab9fe --- /dev/null +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx @@ -0,0 +1,96 @@ +import { ReactNode } from 'react' +import { Dataset as DatasetModel } from '../../../../../../../../src/dataset/domain/models/Dataset' +import { DatasetProvider } from '../../../../../../../../src/sections/dataset/DatasetProvider' +import { DatasetRepository } from '../../../../../../../../src/dataset/domain/repositories/DatasetRepository' +import { + DatasetMother, + DatasetPermissionsMother +} from '../../../../../../dataset/domain/models/DatasetMother' +import { DownloadFilesButton } from '../../../../../../../../src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton' +import { FileMother } from '../../../../../../files/domain/models/FileMother' + +const datasetRepository: DatasetRepository = {} as DatasetRepository +describe('DownloadFilesButton', () => { + const withDataset = (component: ReactNode, dataset: DatasetModel | undefined) => { + datasetRepository.getByPersistentId = cy.stub().resolves(dataset) + datasetRepository.getByPrivateUrlToken = cy.stub().resolves(dataset) + + return ( + + {component} + + ) + } + + it('renders the Download Files button if there is more than 1 file in the dataset and the user has download files permission', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(2) + cy.mountAuthenticated( + withDataset(, datasetWithDownloadFilesPermission) + ) + + cy.findByRole('button', { name: 'Download' }).should('exist') + }) + + it('does not render the Download Files button if there is only 1 file in the dataset', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(1) + cy.mountAuthenticated( + withDataset(, datasetWithDownloadFilesPermission) + ) + + cy.findByRole('button', { name: 'Download' }).should('not.exist') + }) + + it('does not render the Download Files button if the user does not have download files permission', () => { + const datasetWithoutDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadNotAllowed() + }) + const files = FileMother.createMany(2) + cy.mountAuthenticated( + withDataset(, datasetWithoutDownloadFilesPermission) + ) + + cy.findByRole('button', { name: 'Download' }).should('not.exist') + }) + + it('renders the Download Files button as a dropdown if there are tabular files in the dataset', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(2, { + tabularData: { + variablesCount: 2, + observationsCount: 3, + unf: 'some-unf' + } + }) + cy.mountAuthenticated( + withDataset(, datasetWithDownloadFilesPermission) + ) + + cy.findByRole('button', { name: 'Download' }).click() + cy.findByRole('button', { name: 'Original Format' }).should('exist') + cy.findByRole('button', { name: 'Archival Format (.tab)' }).should('exist') + }) + + it('does not render the Download Files button as a dropdown if there are no tabular files in the dataset', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(2, { tabularData: undefined }) + cy.mountAuthenticated( + withDataset(, datasetWithDownloadFilesPermission) + ) + + cy.findByRole('button', { name: 'Download' }).click() + cy.findByRole('button', { name: 'Original Format' }).should('not.exist') + cy.findByRole('button', { name: 'Archival Format (.tab)' }).should('not.exist') + }) +}) From dc952a6c4234c3144268c0036b317a8f90751f40 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 26 Oct 2023 10:33:24 +0200 Subject: [PATCH 48/61] feat(DownloadFiles): add icon to the button --- .../DownloadFilesButton.module.scss | 4 ++ .../download-files/DownloadFilesButton.tsx | 47 +++++-------------- .../DownloadFilesButton.stories.tsx | 16 ++++++- 3 files changed, 31 insertions(+), 36 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.module.scss diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.module.scss b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.module.scss new file mode 100644 index 000000000..0c9c49a03 --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.module.scss @@ -0,0 +1,4 @@ +.icon { + margin-right: 0.3rem; + margin-bottom: 0.2rem; +} \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx index 09374b79c..2f743dd4c 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx @@ -1,6 +1,8 @@ import { File } from '../../../../../../files/domain/models/File' import { useDataset } from '../../../../DatasetContext' import { Button, DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' +import { Download } from 'react-bootstrap-icons' +import styles from './DownloadFilesButton.module.scss' interface DownloadFilesButtonProps { files: File[] @@ -19,45 +21,20 @@ export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { if (files.some((file) => file.isTabularData)) { return ( - + } + title="Download" + variant="secondary"> Original Format Archival Format (.tab) ) } - return + return ( + + ) } - -// Original: -// < div -// jsf:id = "downloadButtonBlockNormal" -// className = "btn-group" -// jsf:rendered = "#{(!(empty DatasetPage.workingVersion.fileMetadatas) -// and -// DatasetPage.workingVersion.fileMetadatas.size() > 1 -// ) -// and -// DatasetPage.downloadButtonAvailable -// and ! -// DatasetPage.isVersionHasTabular() -// } -// "> -// < p -// : -// commandLink -// styleClass = "btn btn-default btn-download" -// disabled = "#{false and DatasetPage.lockedFromDownload}" -// onclick = "if (!testFilesSelected()) return false;" -// action = "#{DatasetPage.startDownloadSelectedOriginal()}" -// update = "@form" -// oncomplete = "showPopup();" > -// < f -// : -// setPropertyActionListener -// target = "#{DatasetPage.fileMetadataForAction}" -// value = "#{null}" / > -// < span -// className = "glyphicon glyphicon-download-alt" / > #{bundle.download} -// < /p:commandLink> -// diff --git a/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx index e7649f520..61e22d129 100644 --- a/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx +++ b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx @@ -17,5 +17,19 @@ export default meta type Story = StoryObj export const NonTabularFiles: Story = { - render: () => + render: () => +} + +export const TabularFiles: Story = { + render: () => ( + + ) } From a5b6b1ff1f68f663255bc61af786032fb8210154 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 26 Oct 2023 10:42:27 +0200 Subject: [PATCH 49/61] feat(DownloadFiles): add to the FileActionsHeader --- .../files-table/file-actions/FileActionsHeader.module.scss | 2 ++ .../files-table/file-actions/FileActionsHeader.tsx | 2 ++ .../file-actions/download-files/DownloadFilesButton.tsx | 5 +++-- .../files-table/file-actions/FileActionsHeader.spec.tsx | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss index 743868960..3b4481b8a 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss @@ -1,3 +1,5 @@ .container { text-align: right; + display: flex; + justify-content: end; } \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx index c71e6a119..c762d8196 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx @@ -2,6 +2,7 @@ import { EditFilesMenu } from './edit-files-menu/EditFilesMenu' import { File } from '../../../../../files/domain/models/File' import styles from './FileActionsHeader.module.scss' import { useTranslation } from 'react-i18next' +import { DownloadFilesButton } from './download-files/DownloadFilesButton' interface FileActionsHeaderProps { files: File[] } @@ -10,6 +11,7 @@ export function FileActionsHeader({ files }: FileActionsHeaderProps) { return (
+
) } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx index 2f743dd4c..68ae0dccd 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx @@ -25,7 +25,8 @@ export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { id="download-files" icon={} title="Download" - variant="secondary"> + variant="secondary" + withSpacing> Original Format Archival Format (.tab)
@@ -33,7 +34,7 @@ export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { } return ( - ) diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx index acb8f6f79..3b8cbc009 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx @@ -11,7 +11,7 @@ describe('FileActionsHeader', () => { it('renders the file actions header', () => { const datasetRepository: DatasetRepository = {} as DatasetRepository const datasetWithUpdatePermissions = DatasetMother.create({ - permissions: DatasetPermissionsMother.createWithUpdateDatasetAllowed(), + permissions: DatasetPermissionsMother.createWithAllAllowed(), hasValidTermsOfAccess: true }) datasetRepository.getByPersistentId = cy.stub().resolves(datasetWithUpdatePermissions) @@ -25,5 +25,6 @@ describe('FileActionsHeader', () => { ) cy.findByRole('button', { name: 'Edit Files' }).should('exist') + cy.findByRole('button', { name: 'Download' }).should('exist') }) }) From ecae5f76f7f7fc895eff28f1363695858c6ff873 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 26 Oct 2023 12:18:26 +0200 Subject: [PATCH 50/61] feat(DownloadFiles): add translations --- public/locales/en/files.json | 7 +++++++ .../download-files/DownloadFilesButton.tsx | 10 ++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/public/locales/en/files.json b/public/locales/en/files.json index 6c7e8dfa1..662cbbfb6 100644 --- a/public/locales/en/files.json +++ b/public/locales/en/files.json @@ -120,6 +120,13 @@ "provenance": "Provenance", "delete": "Delete" } + }, + "downloadFiles": { + "title": "Download", + "options": { + "original": "Original Format", + "archival": "Archival Format (.tab)" + } } }, "requestAccess": { diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx index 68ae0dccd..e6595a578 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx @@ -3,6 +3,7 @@ import { useDataset } from '../../../../DatasetContext' import { Button, DropdownButton, DropdownButtonItem } from '@iqss/dataverse-design-system' import { Download } from 'react-bootstrap-icons' import styles from './DownloadFilesButton.module.scss' +import { useTranslation } from 'react-i18next' interface DownloadFilesButtonProps { files: File[] @@ -10,6 +11,7 @@ interface DownloadFilesButtonProps { const MINIMUM_FILES_COUNT_TO_SHOW_DOWNLOAD_FILES_BUTTON = 1 export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { + const { t } = useTranslation('files') const { dataset } = useDataset() if ( @@ -24,18 +26,18 @@ export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { } - title="Download" + title={t('actions.downloadFiles.title')} variant="secondary" withSpacing> - Original Format - Archival Format (.tab) + {t('actions.downloadFiles.options.original')} + {t('actions.downloadFiles.options.archival')} ) } return ( ) } From a441c832aa7dbed4d650030b91c5229d9b91bf92 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Thu, 26 Oct 2023 09:14:19 -0400 Subject: [PATCH 51/61] fix: use PrivateUrl object in Dataset domain object --- src/dataset/domain/models/Dataset.ts | 32 ++++++++++------ .../infrastructure/mappers/JSDatasetMapper.ts | 29 ++------------- .../DatasetJSDataverseRepository.ts | 8 +--- src/stories/dataset/WithDatasetPrivateUrl.tsx | 9 ++++- .../dataset-alerts/DatasetAlert.stories.tsx | 37 ++++++++++--------- .../dataset/domain/models/DatasetMother.ts | 9 +---- .../dataset-alerts/DatasetAlerts.spec.tsx | 22 +++++++---- 7 files changed, 68 insertions(+), 78 deletions(-) diff --git a/src/dataset/domain/models/Dataset.ts b/src/dataset/domain/models/Dataset.ts index a8c5384ec..a0d96e6c7 100644 --- a/src/dataset/domain/models/Dataset.ts +++ b/src/dataset/domain/models/Dataset.ts @@ -275,6 +275,11 @@ export enum DatasetLockReason { FILE_VALIDATION_FAILED = 'fileValidationFailed' } +export interface PrivateUrl { + token: string + urlSnippet: string +} + export class Dataset { constructor( public readonly persistentId: string, @@ -290,7 +295,7 @@ export class Dataset { public readonly hasValidTermsOfAccess: boolean, public readonly isValid: boolean, public readonly isReleased: boolean, - public readonly privateUrl?: string + public readonly privateUrl?: PrivateUrl ) {} public getTitle(): string { @@ -335,8 +340,7 @@ export class Dataset { public readonly hasValidTermsOfAccess: boolean, public readonly isValid: boolean, public readonly isReleased: boolean, - public readonly privateUrl?: string, - public readonly privateUrlToken?: string + public readonly privateUrl?: PrivateUrl ) { this.withLabels() this.withAlerts() @@ -420,15 +424,19 @@ export class Dataset { ) } } - if (this.privateUrl && !this.privateUrlToken) { - const dynamicFields = { privateUrl: this.privateUrl } - this.alerts.push( - new DatasetAlert('info', DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, dynamicFields) - ) - } - - if (this.privateUrlToken) { - this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET)) + if (this.privateUrl) { + if (this.permissions.canPublishDataset) { + const dynamicFields = { privateUrl: this.privateUrl.urlSnippet + this.privateUrl.token } + this.alerts.push( + new DatasetAlert( + 'info', + DatasetAlertMessageKey.SHARE_UNPUBLISHED_DATASET, + dynamicFields + ) + ) + } else { + this.alerts.push(new DatasetAlert('warning', DatasetAlertMessageKey.UNPUBLISHED_DATASET)) + } } } diff --git a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts index 7b7bc47f8..fdf543694 100644 --- a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts +++ b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts @@ -13,40 +13,17 @@ import { DatasetMetadataBlocks, DatasetMetadataFields, DatasetVersion, - MetadataBlockName + MetadataBlockName, + PrivateUrl } from '../../domain/models/Dataset' -/* - - static Builder = class { - public readonly labels: DatasetLabel[] = [] - public readonly alerts: DatasetAlert[] = [] - - constructor( - public readonly persistentId: string, - public readonly version: DatasetVersion, - public readonly citation: string, - public readonly summaryFields: DatasetMetadataBlock[], - public readonly license: DatasetLicense = defaultLicense, - public readonly metadataBlocks: DatasetMetadataBlocks, - public readonly permissions: DatasetPermissions, - public readonly locks: DatasetLock[], - public readonly hasValidTermsOfAccess: boolean, - public readonly isValid: boolean, - public readonly isReleased: boolean, - public readonly privateUrl?: string - ) { - this.withLabels() - this.withAlerts() - } - */ export class JSDatasetMapper { static toDataset( jsDataset: JSDataset, citation: string, summaryFieldsNames: string[], requestedVersion?: string, - privateUrl?: string + privateUrl?: PrivateUrl ): Dataset { return new Dataset.Builder( jsDataset.persistentId, diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index 1464847ea..317254b9b 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -44,13 +44,7 @@ export class DatasetJSDataverseRepository implements DatasetRepository { getPrivateUrlDatasetCitation.execute(privateUrlToken) ]) .then(([jsDataset, summaryFieldsNames, citation]: [JSDataset, string[], string]) => - JSDatasetMapper.toDataset( - jsDataset, - citation, - summaryFieldsNames, - undefined, - privateUrlToken - ) + JSDatasetMapper.toDataset(jsDataset, citation, summaryFieldsNames, undefined) ) .catch((error: WriteError) => { throw new Error(error.message) diff --git a/src/stories/dataset/WithDatasetPrivateUrl.tsx b/src/stories/dataset/WithDatasetPrivateUrl.tsx index 5aa2e6dec..1cc892f75 100644 --- a/src/stories/dataset/WithDatasetPrivateUrl.tsx +++ b/src/stories/dataset/WithDatasetPrivateUrl.tsx @@ -12,7 +12,14 @@ export const WithDatasetPrivateUrl = (Story: StoryFn) => { ): Promise => { return new Promise((resolve) => { setTimeout(() => { - resolve(DatasetMother.createWithPrivateUrlToken(privateUrlToken)) + resolve( + DatasetMother.createRealistic({ + privateUrl: { + urlSnippet: 'http://localhost:8080/privateurl.xhtml?token=', + token: 'cd943c75-1cc7-4c1d-9717-98141d65d5cb' + } + }) + ) }, 1000) }) } diff --git a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx index 56aacf802..072994ad5 100644 --- a/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx +++ b/src/stories/dataset/dataset-alerts/DatasetAlert.stories.tsx @@ -94,9 +94,11 @@ export const SharePrivateUrl: Story = { 1, 0 ), - permissions: DatasetPermissionsMother.createWithUpdateDatasetAllowed(), - privateUrl: - 'http://localhost:8080/privateurl.xhtml?token=cd943c75-1cc7-4c1d-9717-98141d65d5cb' + permissions: DatasetPermissionsMother.createWithAllAllowed(), + privateUrl: { + urlSnippet: 'http://localhost:8080/privateurl.xhtml?token=', + token: 'cd943c75-1cc7-4c1d-9717-98141d65d5cb' + } }) return ( @@ -108,21 +110,22 @@ export const SharePrivateUrl: Story = { } export const UsePrivateUrl: Story = { render: () => { - const dataset = DatasetMother.createWithPrivateUrlToken( - 'cd943c75-1cc7-4c1d-9717-98141d65d5cb', - { - version: new DatasetVersion( - 1, - DatasetPublishingStatus.RELEASED, - true, - false, - DatasetPublishingStatus.DRAFT, - 1, - 0 - ), - permissions: DatasetPermissionsMother.createWithNoneAllowed() + const dataset = DatasetMother.createRealistic({ + version: new DatasetVersion( + 1, + DatasetPublishingStatus.RELEASED, + true, + false, + DatasetPublishingStatus.DRAFT, + 1, + 0 + ), + permissions: DatasetPermissionsMother.createWithNoneAllowed(), + privateUrl: { + urlSnippet: 'http://localhost:8080/privateurl.xhtml?token=', + token: 'cd943c75-1cc7-4c1d-9717-98141d65d5cb' } - ) + }) return (
diff --git a/tests/component/dataset/domain/models/DatasetMother.ts b/tests/component/dataset/domain/models/DatasetMother.ts index 9a1fc483a..c96e0a5f8 100644 --- a/tests/component/dataset/domain/models/DatasetMother.ts +++ b/tests/component/dataset/domain/models/DatasetMother.ts @@ -190,11 +190,7 @@ export class DatasetMother { return undefined } - static createWithPrivateUrlToken(privateUrlToken: string, props?: Partial) { - return this.create(props, privateUrlToken) - } - - static create(props?: Partial, privateUrlToken?: string): Dataset { + static create(props?: Partial): Dataset { const dataset = { persistentId: faker.datatype.uuid(), title: faker.lorem.sentence(), @@ -306,8 +302,7 @@ export class DatasetMother { dataset.hasValidTermsOfAccess, dataset.isValid, dataset.isReleased, - dataset.privateUrl, - privateUrlToken + dataset.privateUrl ).build() } diff --git a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx index 698b94b1c..d70fd4977 100644 --- a/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx +++ b/tests/component/sections/dataset/dataset-alerts/DatasetAlerts.spec.tsx @@ -107,12 +107,15 @@ it('does not show draft alert if version is RELEASED', () => { cy.findByRole('alert').should('not.exist') }) -it('shows draft & share private url message if privateUrlToken exists', () => { +it('shows draft & share private url message if privateUrl exists and user can edit', () => { cy.fixture('../../../public/locales/en/dataset.json').then((datasetText: DatasetTranslation) => { - const privateUrlToken = '12345' - const dataset = DatasetMother.createWithPrivateUrlToken(privateUrlToken, { + const dataset = DatasetMother.createRealistic({ version: DatasetVersionMother.createDraftAsLatestVersion(), - permissions: DatasetPermissionsMother.createWithAllAllowed() + permissions: DatasetPermissionsMother.createWithAllAllowed(), + privateUrl: { + urlSnippet: 'http://localhost:8080/privateurl.xhtml?token=', + token: 'cd943c75-1cc7-4c1d-9717-98141d65d5cb' + } }) cy.customMount() const expectedMessageKeys = [ @@ -127,12 +130,15 @@ it('shows draft & share private url message if privateUrlToken exists', () => { }) }) }) -it('shows private url message only if privateUrlToken exists and user cannot edit', () => { +it('shows private url message only if privateUrl exists and user cannot edit', () => { cy.fixture('../../../public/locales/en/dataset.json').then((datasetText: DatasetTranslation) => { - const privateUrlToken = '12345' - const dataset = DatasetMother.createWithPrivateUrlToken(privateUrlToken, { + const dataset = DatasetMother.createRealistic({ version: DatasetVersionMother.createDraftAsLatestVersion(), - permissions: DatasetPermissionsMother.createWithNoneAllowed() + permissions: DatasetPermissionsMother.createWithNoneAllowed(), + privateUrl: { + urlSnippet: 'http://localhost:8080/privateurl.xhtml?token=', + token: 'cd943c75-1cc7-4c1d-9717-98141d65d5cb' + } }) cy.customMount() const expectedMessageKey = DatasetAlertMessageKey.UNPUBLISHED_DATASET From 2fe5ea9901bc7e0fa270e9f80eaa84f6fbc28784 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 26 Oct 2023 16:38:50 +0200 Subject: [PATCH 52/61] feat(DownloadFiles): add the No Selected Files modal --- public/locales/en/files.json | 15 +++-- .../FilesTableColumnsDefinition.tsx | 11 +++- .../FileActionsHeader.module.scss | 2 +- .../file-actions/FileActionsHeader.tsx | 8 ++- .../download-files/DownloadFilesButton.tsx | 58 ++++++++++++++---- .../edit-files-menu/EditFilesMenu.tsx | 6 +- .../edit-files-menu/EditFilesOptions.tsx | 46 +++++++++++--- .../NoSelectedFilesModal.tsx | 30 ++++++++++ .../files-table/useFilesTable.tsx | 2 +- .../DownloadFilesButton.stories.tsx | 8 ++- .../edit-files-menu/EditFilesMenu.stories.tsx | 2 +- .../file-actions/FileActionsHeader.spec.tsx | 2 +- .../DownloadFilesButton.spec.tsx | 60 +++++++++++++++++-- .../edit-files-menu/EditFilesMenu.spec.tsx | 21 ++++--- .../edit-files-menu/EditFilesOptions.spec.tsx | 57 +++++++++++++++--- 15 files changed, 269 insertions(+), 59 deletions(-) create mode 100644 src/sections/dataset/dataset-files/files-table/file-actions/no-selected-files-modal/NoSelectedFilesModal.tsx diff --git a/public/locales/en/files.json b/public/locales/en/files.json index 662cbbfb6..3e8938625 100644 --- a/public/locales/en/files.json +++ b/public/locales/en/files.json @@ -103,6 +103,11 @@ "message": "This file has already been deleted (or replaced) in the current version. It may not be edited.", "close": "Close" }, + "noSelectedFilesAlert": { + "title": "Select File(s)", + "message": "Please select one or more files.", + "close": "Close" + }, "accessFileMenu": { "title": "Access File", "headers": { @@ -122,11 +127,11 @@ } }, "downloadFiles": { - "title": "Download", - "options": { - "original": "Original Format", - "archival": "Archival Format (.tab)" - } + "title": "Download", + "options": { + "original": "Original Format", + "archival": "Archival Format (.tab)" + } } }, "requestAccess": { diff --git a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx index 53f985f51..bdf534f62 100644 --- a/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx +++ b/src/sections/dataset/dataset-files/files-table/FilesTableColumnsDefinition.tsx @@ -6,8 +6,12 @@ import { FileInfoHeader } from './file-info/FileInfoHeader' import { FileActionsHeader } from './file-actions/FileActionsHeader' import { FileActionsCell } from './file-actions/file-actions-cell/FileActionsCell' import { FilePaginationInfo } from '../../../../files/domain/models/FilePaginationInfo' +import { FileSelection } from './row-selection/useFileSelection' -export const createColumnsDefinition = (paginationInfo: FilePaginationInfo): ColumnDef[] => [ +export const createColumnsDefinition = ( + paginationInfo: FilePaginationInfo, + fileSelection: FileSelection +): ColumnDef[] => [ { id: 'select', header: ({ table }) => ( @@ -38,7 +42,10 @@ export const createColumnsDefinition = (paginationInfo: FilePaginationInfo): Col }, { header: ({ table }) => ( - row.original)} /> + row.original)} + fileSelection={fileSelection} + /> ), accessorKey: 'status', cell: (props) => diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss index 3b4481b8a..7154c087e 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss +++ b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.module.scss @@ -1,5 +1,5 @@ .container { - text-align: right; display: flex; justify-content: end; + text-align: right; } \ No newline at end of file diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx index c762d8196..204ad474e 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.tsx @@ -3,15 +3,17 @@ import { File } from '../../../../../files/domain/models/File' import styles from './FileActionsHeader.module.scss' import { useTranslation } from 'react-i18next' import { DownloadFilesButton } from './download-files/DownloadFilesButton' +import { FileSelection } from '../row-selection/useFileSelection' interface FileActionsHeaderProps { files: File[] + fileSelection: FileSelection } -export function FileActionsHeader({ files }: FileActionsHeaderProps) { +export function FileActionsHeader({ files, fileSelection }: FileActionsHeaderProps) { const { t } = useTranslation('files') return (
- - + +
) } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx index e6595a578..4bf4bbbed 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.tsx @@ -4,15 +4,21 @@ import { Button, DropdownButton, DropdownButtonItem } from '@iqss/dataverse-desi import { Download } from 'react-bootstrap-icons' import styles from './DownloadFilesButton.module.scss' import { useTranslation } from 'react-i18next' +import { FileSelection } from '../../row-selection/useFileSelection' +import { NoSelectedFilesModal } from '../no-selected-files-modal/NoSelectedFilesModal' +import { useState } from 'react' interface DownloadFilesButtonProps { files: File[] + fileSelection: FileSelection } const MINIMUM_FILES_COUNT_TO_SHOW_DOWNLOAD_FILES_BUTTON = 1 -export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { +const SELECTED_FILES_EMPTY = 0 +export function DownloadFilesButton({ files, fileSelection }: DownloadFilesButtonProps) { const { t } = useTranslation('files') const { dataset } = useDataset() + const [showNoFilesSelectedModal, setShowNoFilesSelectedModal] = useState(false) if ( files.length < MINIMUM_FILES_COUNT_TO_SHOW_DOWNLOAD_FILES_BUTTON || @@ -21,23 +27,49 @@ export function DownloadFilesButton({ files }: DownloadFilesButtonProps) { return <> } + const onClick = () => { + if (Object.keys(fileSelection).length === SELECTED_FILES_EMPTY) { + setShowNoFilesSelectedModal(true) + } + } + if (files.some((file) => file.isTabularData)) { return ( - } - title={t('actions.downloadFiles.title')} - variant="secondary" - withSpacing> - {t('actions.downloadFiles.options.original')} - {t('actions.downloadFiles.options.archival')} - + <> + } + title={t('actions.downloadFiles.title')} + variant="secondary" + withSpacing> + + {t('actions.downloadFiles.options.original')} + + + {t('actions.downloadFiles.options.archival')} + + + setShowNoFilesSelectedModal(false)} + /> + ) } return ( - + <> + + setShowNoFilesSelectedModal(false)} + /> + ) } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.tsx index c255662df..052d5957e 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.tsx @@ -6,12 +6,14 @@ import { EditFilesOptions } from './EditFilesOptions' import { File } from '../../../../../../files/domain/models/File' import { useTranslation } from 'react-i18next' import { useDataset } from '../../../../DatasetContext' +import { FileSelection } from '../../row-selection/useFileSelection' interface EditFilesMenuProps { files: File[] + fileSelection: FileSelection } const MINIMUM_FILES_COUNT_TO_SHOW_EDIT_FILES_BUTTON = 1 -export function EditFilesMenu({ files }: EditFilesMenuProps) { +export function EditFilesMenu({ files, fileSelection }: EditFilesMenuProps) { const { t } = useTranslation('files') const { user } = useSession() const { dataset } = useDataset() @@ -30,7 +32,7 @@ export function EditFilesMenu({ files }: EditFilesMenuProps) { title={t('actions.editFilesMenu.title')} disabled={dataset.isLockedFromEdits || !dataset.hasValidTermsOfAccess} icon={}> - + ) } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.tsx index 8bab46607..1377303f5 100644 --- a/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.tsx @@ -1,32 +1,62 @@ import { DropdownButtonItem } from '@iqss/dataverse-design-system' import { File } from '../../../../../../files/domain/models/File' import { useTranslation } from 'react-i18next' +import { useState } from 'react' +import { FileSelection } from '../../row-selection/useFileSelection' +import { NoSelectedFilesModal } from '../no-selected-files-modal/NoSelectedFilesModal' interface EditFileOptionsProps { files: File[] + fileSelection: FileSelection } -export function EditFilesOptions({ files }: EditFileOptionsProps) { +const SELECTED_FILES_EMPTY = 0 +export function EditFilesOptions({ files, fileSelection }: EditFileOptionsProps) { const { t } = useTranslation('files') + const [showNoFilesSelectedModal, setShowNoFilesSelectedModal] = useState(false) const settingsEmbargoAllowed = false // TODO - Ask Guillermo if this is included in the settings endpoint const provenanceEnabledByConfig = false // TODO - Ask Guillermo if this is included in the MVP and from which endpoint is coming from + const onClick = () => { + if (Object.keys(fileSelection).length === SELECTED_FILES_EMPTY) { + setShowNoFilesSelectedModal(true) + } + } + return ( <> - {t('actions.editFilesMenu.options.metadata')} + + {t('actions.editFilesMenu.options.metadata')} + {files.some((file) => file.access.restricted) && ( - {t('actions.editFilesMenu.options.unrestrict')} + + {t('actions.editFilesMenu.options.unrestrict')} + )} {files.some((file) => !file.access.restricted) && ( - {t('actions.editFilesMenu.options.restrict')} + + {t('actions.editFilesMenu.options.restrict')} + )} - {t('actions.editFilesMenu.options.replace')} + + {t('actions.editFilesMenu.options.replace')} + {settingsEmbargoAllowed && ( - {t('actions.editFilesMenu.options.embargo')} + + {t('actions.editFilesMenu.options.embargo')} + )} {provenanceEnabledByConfig && ( - {t('actions.editFilesMenu.options.provenance')} + + {t('actions.editFilesMenu.options.provenance')} + )} - {t('actions.editFilesMenu.options.delete')} + + {t('actions.editFilesMenu.options.delete')} + + setShowNoFilesSelectedModal(false)} + /> ) } diff --git a/src/sections/dataset/dataset-files/files-table/file-actions/no-selected-files-modal/NoSelectedFilesModal.tsx b/src/sections/dataset/dataset-files/files-table/file-actions/no-selected-files-modal/NoSelectedFilesModal.tsx new file mode 100644 index 000000000..d580b4b8c --- /dev/null +++ b/src/sections/dataset/dataset-files/files-table/file-actions/no-selected-files-modal/NoSelectedFilesModal.tsx @@ -0,0 +1,30 @@ +import { useTranslation } from 'react-i18next' +import { Button, Modal } from '@iqss/dataverse-design-system' +import styles from '../file-actions-cell/file-action-buttons/file-options-menu/FileAlreadyDeletedModal.module.scss' +import { ExclamationCircleFill } from 'react-bootstrap-icons' + +interface NoSelectedFilesModalProps { + show: boolean + handleClose: () => void +} + +export function NoSelectedFilesModal({ show, handleClose }: NoSelectedFilesModalProps) { + const { t } = useTranslation('files') + return ( + + + {t('actions.noSelectedFilesAlert.title')} + + +

+ {t('actions.noSelectedFilesAlert.message')} +

+
+ + + +
+ ) +} diff --git a/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx index a3e0d6d46..b403e9782 100644 --- a/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx +++ b/src/sections/dataset/dataset-files/files-table/useFilesTable.tsx @@ -21,7 +21,7 @@ export function useFilesTable(files: File[], paginationInfo: FilePaginationInfo) ) const table = useReactTable({ data: files, - columns: createColumnsDefinition(paginationInfo), + columns: createColumnsDefinition(paginationInfo, fileSelection), state: { rowSelection: currentPageRowSelection }, diff --git a/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx index 61e22d129..87836ad96 100644 --- a/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx +++ b/src/stories/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.stories.tsx @@ -17,7 +17,12 @@ export default meta type Story = StoryObj export const NonTabularFiles: Story = { - render: () => + render: () => ( + + ) } export const TabularFiles: Story = { @@ -30,6 +35,7 @@ export const TabularFiles: Story = { unf: 'some-unf' } })} + fileSelection={{}} /> ) } diff --git a/src/stories/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.stories.tsx b/src/stories/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.stories.tsx index a50a9cff0..692bc1980 100644 --- a/src/stories/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.stories.tsx +++ b/src/stories/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.stories.tsx @@ -16,5 +16,5 @@ export default meta type Story = StoryObj export const Default: Story = { - render: () => + render: () => } diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx index 3b8cbc009..1baf2e865 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/FileActionsHeader.spec.tsx @@ -20,7 +20,7 @@ describe('FileActionsHeader', () => { - + ) diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx index c3d8ab9fe..e380f0786 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/download-files/DownloadFilesButton.spec.tsx @@ -30,7 +30,10 @@ describe('DownloadFilesButton', () => { }) const files = FileMother.createMany(2) cy.mountAuthenticated( - withDataset(, datasetWithDownloadFilesPermission) + withDataset( + , + datasetWithDownloadFilesPermission + ) ) cy.findByRole('button', { name: 'Download' }).should('exist') @@ -42,7 +45,10 @@ describe('DownloadFilesButton', () => { }) const files = FileMother.createMany(1) cy.mountAuthenticated( - withDataset(, datasetWithDownloadFilesPermission) + withDataset( + , + datasetWithDownloadFilesPermission + ) ) cy.findByRole('button', { name: 'Download' }).should('not.exist') @@ -54,7 +60,10 @@ describe('DownloadFilesButton', () => { }) const files = FileMother.createMany(2) cy.mountAuthenticated( - withDataset(, datasetWithoutDownloadFilesPermission) + withDataset( + , + datasetWithoutDownloadFilesPermission + ) ) cy.findByRole('button', { name: 'Download' }).should('not.exist') @@ -72,7 +81,10 @@ describe('DownloadFilesButton', () => { } }) cy.mountAuthenticated( - withDataset(, datasetWithDownloadFilesPermission) + withDataset( + , + datasetWithDownloadFilesPermission + ) ) cy.findByRole('button', { name: 'Download' }).click() @@ -86,11 +98,49 @@ describe('DownloadFilesButton', () => { }) const files = FileMother.createMany(2, { tabularData: undefined }) cy.mountAuthenticated( - withDataset(, datasetWithDownloadFilesPermission) + withDataset( + , + datasetWithDownloadFilesPermission + ) ) cy.findByRole('button', { name: 'Download' }).click() cy.findByRole('button', { name: 'Original Format' }).should('not.exist') cy.findByRole('button', { name: 'Archival Format (.tab)' }).should('not.exist') }) + + it('shows the No Selected Files modal if no files are selected', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(2) + cy.mountAuthenticated( + withDataset( + , + datasetWithDownloadFilesPermission + ) + ) + + cy.findByRole('button', { name: 'Download' }).click() + cy.findByText('Select File(s)').should('exist') + }) + + it('does not show the No Selected Files modal if files are selected', () => { + const datasetWithDownloadFilesPermission = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithFilesDownloadAllowed() + }) + const files = FileMother.createMany(2) + cy.mountAuthenticated( + withDataset( + , + datasetWithDownloadFilesPermission + ) + ) + + cy.findByRole('button', { name: 'Download' }).click() + cy.findByText('Select File(s)').should('not.exist') + }) }) diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.spec.tsx index eaa400bd2..0cc9ac5b9 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.spec.tsx @@ -32,27 +32,31 @@ describe('EditFilesMenu', () => { it('renders the Edit Files menu', () => { cy.mountAuthenticated( - withDataset(, datasetWithUpdatePermissions) + withDataset(, datasetWithUpdatePermissions) ) cy.findByRole('button', { name: 'Edit Files' }).should('exist') }) it('does not render the Edit Files menu when the user is not authenticated', () => { - cy.customMount(withDataset(, datasetWithUpdatePermissions)) + cy.customMount( + withDataset(, datasetWithUpdatePermissions) + ) cy.findByRole('button', { name: 'Edit Files' }).should('not.exist') }) it('does not render the Edit Files menu when there are no files in the dataset', () => { - cy.mountAuthenticated(withDataset(, datasetWithUpdatePermissions)) + cy.mountAuthenticated( + withDataset(, datasetWithUpdatePermissions) + ) cy.findByRole('button', { name: 'Edit Files' }).should('not.exist') }) it('renders the Edit Files options', () => { cy.mountAuthenticated( - withDataset(, datasetWithUpdatePermissions) + withDataset(, datasetWithUpdatePermissions) ) cy.findByRole('button', { name: 'Edit Files' }).click() @@ -65,7 +69,10 @@ describe('EditFilesMenu', () => { }) cy.mountAuthenticated( - withDataset(, datasetWithNoUpdatePermissions) + withDataset( + , + datasetWithNoUpdatePermissions + ) ) cy.findByRole('button', { name: 'Edit Files' }).should('not.exist') @@ -78,7 +85,7 @@ describe('EditFilesMenu', () => { }) cy.mountAuthenticated( - withDataset(, datasetWithUpdatePermissions) + withDataset(, datasetWithUpdatePermissions) ) cy.findByRole('button', { name: 'Edit Files' }).should('be.disabled') @@ -91,7 +98,7 @@ describe('EditFilesMenu', () => { }) cy.mountAuthenticated( - withDataset(, datasetWithUpdatePermissions) + withDataset(, datasetWithUpdatePermissions) ) cy.findByRole('button', { name: 'Edit Files' }).should('be.disabled') diff --git a/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.spec.tsx index 8006fe0aa..2571bfcf9 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.spec.tsx @@ -4,7 +4,7 @@ import { FileMother } from '../../../../../../files/domain/models/FileMother' const files = FileMother.createMany(2) describe('EditFilesOptions', () => { it('renders the EditFilesOptions', () => { - cy.customMount() + cy.customMount() cy.findByRole('button', { name: 'Metadata' }).should('exist') cy.findByRole('button', { name: 'Replace' }).should('exist') @@ -15,27 +15,66 @@ describe('EditFilesOptions', () => { it('renders the restrict option if some file is unrestricted', () => { const fileUnrestricted = FileMother.createDefault() - cy.customMount() + cy.customMount() - cy.findByRole('button', { name: 'Restrict' }).should('exist') + cy.findByRole('button', { name: 'Restrict' }).should('exist').click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() }) it('renders the unrestrict option if some file is restricted', () => { const fileRestricted = FileMother.createWithRestrictedAccess() - cy.customMount() + cy.customMount() - cy.findByRole('button', { name: 'Unrestrict' }).should('exist') + cy.findByRole('button', { name: 'Unrestrict' }).should('exist').click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() }) it.skip('renders the embargo option if the embargo is allowed by settings', () => { - cy.customMount() + cy.customMount() - cy.findByRole('button', { name: 'Embargo' }).should('exist') + cy.findByRole('button', { name: 'Embargo' }).should('exist').click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() }) it.skip('renders provenance option if provenance is enabled in config', () => { - cy.customMount() + cy.customMount() - cy.findByRole('button', { name: 'Provenance' }).should('exist') + cy.findByRole('button', { name: 'Provenance' }).should('exist').click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() + }) + + it('shows the No Selected Files message when no files are selected and one option is clicked', () => { + cy.customMount() + + cy.findByRole('button', { name: 'Metadata' }).click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() + + cy.findByRole('button', { name: 'Replace' }).click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() + + cy.findByRole('button', { name: 'Delete' }).click() + cy.findByText('Select File(s)').should('exist') + cy.findByText('Close').click() + }) + + it('does not show the No Selected Files message when files are selected and one option is clicked', () => { + cy.customMount( + + ) + + cy.findByRole('button', { name: 'Metadata' }).click() + cy.findByText('Select File(s)').should('not.exist') + + cy.findByRole('button', { name: 'Replace' }).click() + cy.findByText('Select File(s)').should('not.exist') + + cy.findByRole('button', { name: 'Delete' }).click() + cy.findByText('Select File(s)').should('not.exist') }) }) From b224e761713711e7dc2e3ed772027c4900c974c7 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Mon, 23 Oct 2023 17:11:58 +0200 Subject: [PATCH 53/61] fix: dev-env add package-lock.json before building the design system --- dev.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/dev.Dockerfile b/dev.Dockerfile index 8cea85333..5e474faf8 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -4,6 +4,7 @@ RUN apk --no-cache add python3 make g++ WORKDIR /usr/src/app/packages/design-system COPY ./packages/design-system ./ +COPY package-lock.json ./ RUN npm install RUN npm run build From ecf87c4ab19d1b6a3ac88e5a18f49b2779f4f667 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Fri, 27 Oct 2023 10:43:37 -0400 Subject: [PATCH 54/61] fix: isReleased (will be replaced with dataset isReleased when integration is completed) --- src/dataset/infrastructure/mappers/JSDatasetMapper.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts index fdf543694..065f95212 100644 --- a/src/dataset/infrastructure/mappers/JSDatasetMapper.ts +++ b/src/dataset/infrastructure/mappers/JSDatasetMapper.ts @@ -48,7 +48,8 @@ export class JSDatasetMapper { [], // TODO Connect with dataset locks true, // TODO Connect with dataset hasValidTermsOfAccess true, // TODO Connect with dataset isValid - !!jsDataset.versionInfo.releaseTime, // TODO Connect with dataset isReleased, + jsDataset.versionInfo.releaseTime !== undefined && + !isNaN(jsDataset.versionInfo.releaseTime.getTime()), // TODO Connect with dataset isReleased, privateUrl ).build() } From f4bb1017c4c3d9f741a5054a7b35237d3ab75a52 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 31 Oct 2023 12:54:13 +0100 Subject: [PATCH 55/61] fix: set the other icon type as the default file thumbnail --- .../file-thumbnail/FileThumbnailIcon.tsx | 3 ++- .../file-thumbnail/FileThumbnail.spec.tsx | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx index c8111a425..7d406f9c9 100644 --- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx +++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnailIcon.tsx @@ -1,9 +1,10 @@ import styles from './FileThumbnail.module.scss' import { FileType } from '../../../../../../../../files/domain/models/File' import { FileTypeToFileIconMap } from './FileTypeToFileIconMap' +import { IconName } from '@iqss/dataverse-design-system' export function FileThumbnailIcon({ type }: { type: FileType }) { - const icon = FileTypeToFileIconMap[type.value] || FileTypeToFileIconMap.default + const icon = FileTypeToFileIconMap[type.value] || IconName.OTHER return ( diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx index 625700ea3..9689efb80 100644 --- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/file-thumbnail/FileThumbnail.spec.tsx @@ -3,6 +3,7 @@ import { FileMother } from '../../../../../../../../files/domain/models/FileMoth import { FileRepository } from '../../../../../../../../../../src/files/domain/repositories/FileRepository' import { FileUserPermissionsMother } from '../../../../../../../../files/domain/models/FileUserPermissionsMother' import { FilePermissionsProvider } from '../../../../../../../../../../src/sections/file/file-permissions/FilePermissionsProvider' +import { FileType } from '../../../../../../../../../../src/files/domain/models/File' const fileRepository: FileRepository = {} as FileRepository describe('FileThumbnail', () => { @@ -68,7 +69,7 @@ describe('FileThumbnail', () => { cy.customMount() cy.findByAltText(file.name).should('not.exist') - cy.findByText('icon-file').should('exist') + cy.findByText('icon-other').should('exist') cy.findByText('Restricted File Icon').should('exist').parent().trigger('mouseover') cy.findByText('File Access: Restricted').should('exist') @@ -76,11 +77,11 @@ describe('FileThumbnail', () => { }) it('renders FileThumbnailIcon when thumbnail is not provided', () => { - const file = FileMother.createDefault() + const file = FileMother.createDefault({ type: new FileType('application/pdf') }) cy.customMount() - cy.findByText('icon-file').should('exist') + cy.findByText('icon-document').should('exist') cy.findByText('Restricted File Icon').should('not.exist') cy.findByText('Restricted with access Icon').should('not.exist') @@ -91,7 +92,7 @@ describe('FileThumbnail', () => { cy.customMount() - cy.findByText('icon-file').should('exist') + cy.findByText('icon-other').should('exist') cy.findByText('Restricted File Icon').should('exist') cy.findByText('Restricted File Icon').should('exist').parent().trigger('mouseover') @@ -114,7 +115,7 @@ describe('FileThumbnail', () => { ) - cy.findByText('icon-file').should('exist') + cy.findByText('icon-other').should('exist') cy.findByText('Restricted File Icon').should('not.exist') cy.findByText('Restricted with access Icon').should('exist').parent().trigger('mouseover') From a45afdc69c6447fba2f745a36e2c5fb9bf6f63d9 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 31 Oct 2023 15:48:32 +0100 Subject: [PATCH 56/61] fix: useFiles failing test --- .../component/sections/dataset/dataset-files/useFiles.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx index 1e6355f6e..9f9d9a5d0 100644 --- a/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx +++ b/tests/component/sections/dataset/dataset-files/useFiles.spec.tsx @@ -132,7 +132,7 @@ describe('useFiles', () => { cy.wrap(fileRepository.getAllByDatasetPersistentId).should('be.calledOnceWith', 'persistentId') cy.findByText('Loading...').should('exist') - cy.wrap(fileRepository.getUserPermissionsById).should('be.calledWith', files[0].id) + cy.wrap(fileRepository.getUserPermissionsById).should('be.called') cy.findByText('Loading...').should('exist') cy.findByText('Files count: 100').should('exist') From 9675c50c155c92b532594201874db2332223b87c Mon Sep 17 00:00:00 2001 From: MellyGray Date: Tue, 31 Oct 2023 17:17:37 +0100 Subject: [PATCH 57/61] fix: enable can download files in dataset realistic mock --- tests/component/dataset/domain/models/DatasetMother.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/component/dataset/domain/models/DatasetMother.ts b/tests/component/dataset/domain/models/DatasetMother.ts index 2c6cf0e48..d5df54ddd 100644 --- a/tests/component/dataset/domain/models/DatasetMother.ts +++ b/tests/component/dataset/domain/models/DatasetMother.ts @@ -423,7 +423,7 @@ export class DatasetMother { } ] as DatasetMetadataBlocks, permissions: { - canDownloadFiles: false, + canDownloadFiles: true, canUpdateDataset: false, canPublishDataset: false, canManageDatasetPermissions: false, From 9bd516c06fdc563df3a740c161ade910e8f4f42b Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 1 Nov 2023 13:36:23 -0400 Subject: [PATCH 58/61] Dump Docker logs on failure #213 For troubleshooting this issue: - #213 --- .github/workflows/test.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d962cc4f4..98394cf2d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -54,6 +54,23 @@ jobs: - name: Run e2e tests run: npm run test:e2e + - name: Dump docker logs on failure + if: failure() + uses: jwalton/gh-docker-logs@v2 + with: + dest: './logs' + + - name: Tar logs + if: failure() + run: tar cvzf ./logs.tgz ./logs + + - name: Upload logs to GitHub + if: failure() + uses: actions/upload-artifact@master + with: + name: logs.tgz + path: ./logs.tgz + component: runs-on: ubuntu-latest From 29032726eb85cd3c882369f5a242b779c8f28495 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 1 Nov 2023 15:46:49 -0400 Subject: [PATCH 59/61] run fix-fs-perms.sh dv #213 --- dev-env/docker-compose-dev.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dev-env/docker-compose-dev.yml b/dev-env/docker-compose-dev.yml index 08b2c4c9c..58f346d48 100644 --- a/dev-env/docker-compose-dev.yml +++ b/dev-env/docker-compose-dev.yml @@ -65,6 +65,17 @@ services: mem_reservation: 1024m privileged: false + dv_initializer: + container_name: 'dv_initializer' + image: gdcc/configbaker:unstable + restart: 'no' + command: + - sh + - -c + - 'fix-fs-perms.sh dv' + volumes: + - ${RUNNER_TEMP}/dv/data:/dv + dev_dataverse_bootstrap: container_name: 'dev_dataverse_bootstrap' image: gdcc/configbaker:unstable From ff111777f1511fb34e630c419d2e5896263b02f0 Mon Sep 17 00:00:00 2001 From: MellyGray Date: Thu, 2 Nov 2023 12:22:57 +0100 Subject: [PATCH 60/61] fix: remove unused mock repository --- .../dataset/DatasetMockDataDraftVersion.ts | 111 ------------------ .../DatasetMockDraftVersionRepository.ts | 22 ---- 2 files changed, 133 deletions(-) delete mode 100644 src/stories/dataset/DatasetMockDataDraftVersion.ts delete mode 100644 src/stories/dataset/DatasetMockDraftVersionRepository.ts diff --git a/src/stories/dataset/DatasetMockDataDraftVersion.ts b/src/stories/dataset/DatasetMockDataDraftVersion.ts deleted file mode 100644 index a3f7dbbd3..000000000 --- a/src/stories/dataset/DatasetMockDataDraftVersion.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { - ANONYMIZED_FIELD_VALUE, - DatasetPublishingStatus, - DatasetVersion, - DatasetLabelSemanticMeaning, - DatasetLabelValue, - DatasetMetadataBlocks -} from '../../dataset/domain/models/Dataset' -import { MetadataBlockName } from '../../dataset/domain/models/Dataset' -import { Dataset } from '../../dataset/domain/models/Dataset' - -export const DatasetMockDataDraftVersion = ( - props?: Partial, - anonymized = false -): Dataset => { - const dataset = { - persistentId: 'doi:10.5072/FK2/ABC123', - citation: `${ - anonymized ? 'Author name(s) withheld' : 'Bennet, Elizabeth; Darcy, Fitzwilliam' - }, 2023, "Dataset Title", https://doi.org/10.5072/FK2/BUDNRV, Root, V1`, - version: new DatasetVersion(1, DatasetPublishingStatus.DRAFT, 1, 0), - labels: [ - { value: 'Version 1.0', semanticMeaning: DatasetLabelSemanticMeaning.FILE }, - { value: DatasetLabelValue.DRAFT, semanticMeaning: DatasetLabelSemanticMeaning.DATASET } - ], - license: { - name: 'CC0 1.0', - uri: 'https://creativecommons.org/publicdomain/zero/1.0/', - iconUri: 'https://licensebuttons.net/p/zero/1.0/88x31.png' - }, - summaryFields: [ - { - name: MetadataBlockName.CITATION, - fields: { - dsDescription: [ - { - dsDescriptionValue: - 'This text is *italic* and this is **bold**. Here is an image ![Alt text](https://picsum.photos/id/10/20/20) ' - } - ], - keyword: 'Malaria, Tuberculosis, Drug Resistant', - subject: 'Medicine, Health and Life Sciences, Social Sciences', - publication: 'CNN Journal [CNN.com](https://cnn.com)', - notesText: 'Here is an image ![Alt text](https://picsum.photos/id/10/40/40)' - } - } - ], - metadataBlocks: [ - { - name: MetadataBlockName.CITATION, - fields: { - alternativePersistentId: 'doi:10.5072/FK2/ABC123', - publicationDate: anonymized ? ANONYMIZED_FIELD_VALUE : '2021-01-01', - citationDate: '2023-01-01', - title: 'Dataset Title', - subject: ['Subject1', 'Subject2'], - author: anonymized - ? ANONYMIZED_FIELD_VALUE - : [ - { - authorName: 'Admin, Dataverse', - authorAffiliation: 'Dataverse.org', - authorIdentifierScheme: 'ORCID', - authorIdentifier: '0000-0002-1825-1097' - }, - { - authorName: 'Owner, Dataverse', - authorAffiliation: 'Dataverse.org', - authorIdentifierScheme: 'ORCID', - authorIdentifier: '0000-0032-1825-0098' - } - ], - datasetContact: anonymized - ? ANONYMIZED_FIELD_VALUE - : [ - { - datasetContactName: 'Admin, Dataverse' - } - ], - dsDescription: [ - { - dsDescriptionValue: - 'This text is *italic* and this is **bold**. Here is an image ![Alt text](https://picsum.photos/id/10/20/20) ' - } - ] - } - }, - { - name: MetadataBlockName.GEOSPATIAL, - fields: { - geographicUnit: 'km', - geographicCoverage: anonymized - ? ANONYMIZED_FIELD_VALUE - : { - geographicCoverageCountry: 'United States', - geographicCoverageCity: 'Cambridge' - } - } - } - ] as DatasetMetadataBlocks, - ...props - } - return new Dataset.Builder( - dataset.persistentId, - dataset.version, - dataset.citation, - dataset.summaryFields, - dataset.license, - dataset.metadataBlocks - ).build() -} diff --git a/src/stories/dataset/DatasetMockDraftVersionRepository.ts b/src/stories/dataset/DatasetMockDraftVersionRepository.ts deleted file mode 100644 index bff2952d6..000000000 --- a/src/stories/dataset/DatasetMockDraftVersionRepository.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { DatasetRepository } from '../../dataset/domain/repositories/DatasetRepository' -import { Dataset as DatasetModel } from '../../dataset/domain/models/Dataset' -import { DatasetMockDataDraftVersion } from './DatasetMockDataDraftVersion' - -export class DatasetMockDraftVersionRepository implements DatasetRepository { - getByPersistentId(persistentId: string): Promise { - return new Promise((resolve) => { - setTimeout(() => { - resolve(DatasetMockDataDraftVersion({ persistentId: persistentId })) - }, 1000) - }) - } - - // eslint-disable-next-line unused-imports/no-unused-vars - getByPrivateUrlToken(privateUrlToken: string): Promise { - return new Promise((resolve) => { - setTimeout(() => { - resolve(DatasetMockDataDraftVersion({}, true)) - }, 1000) - }) - } -} From 6b1214fd7c5642a6439b652bb3ce86e1ef6e2d0b Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 2 Nov 2023 09:40:26 -0400 Subject: [PATCH 61/61] update volumes to match --- dev-env/docker-compose-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-env/docker-compose-dev.yml b/dev-env/docker-compose-dev.yml index 58f346d48..2fe4492bc 100644 --- a/dev-env/docker-compose-dev.yml +++ b/dev-env/docker-compose-dev.yml @@ -74,7 +74,7 @@ services: - -c - 'fix-fs-perms.sh dv' volumes: - - ${RUNNER_TEMP}/dv/data:/dv + - ./docker-dev-volumes/app/data:/dv dev_dataverse_bootstrap: container_name: 'dev_dataverse_bootstrap'